From 2786a280b7b1ec63c2eeb6d2c4aa7c8b08b8f7c6 Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Tue, 5 Jul 2022 14:55:06 +0200 Subject: [PATCH 001/116] chore: delete example-zitadel-config.yaml symlink (#3897) Delete example-zitadel-config.yaml --- example-zitadel-config.yaml | 1 - 1 file changed, 1 deletion(-) delete mode 120000 example-zitadel-config.yaml diff --git a/example-zitadel-config.yaml b/example-zitadel-config.yaml deleted file mode 120000 index bc31063777..0000000000 --- a/example-zitadel-config.yaml +++ /dev/null @@ -1 +0,0 @@ -/tmp/example-zitadel-config.yaml \ No newline at end of file From 8434eaa9c09b48ee57c1035893b1da04d231bed8 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 6 Jul 2022 08:32:05 +0200 Subject: [PATCH 002/116] fix: require user verification for passwordless authentication (#3896) --- .../eventsourcing/eventstore/auth_request.go | 24 +++++----- internal/command/user_human_webauthn.go | 45 ++++++++++--------- internal/webauthn/webauthn.go | 4 +- 3 files changed, 38 insertions(+), 35 deletions(-) diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go index c4a8ecf0b0..f0d78b13b7 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go @@ -142,11 +142,11 @@ func (repo *AuthRequestRepo) CreateAuthRequest(ctx context.Context, request *dom } if request.LoginHint != "" { err = repo.checkLoginName(ctx, request, request.LoginHint) - logging.LogWithFields("EVENT-aG311", "login name", request.LoginHint, "id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Debug("login hint invalid") + logging.WithFields("login name", request.LoginHint, "id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Debug("login hint invalid") } if request.UserID == "" && request.LoginHint == "" && domain.IsPrompt(request.Prompt, domain.PromptNone) { err = repo.tryUsingOnlyUserSession(request) - logging.LogWithFields("EVENT-SDf3g", "id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Debug("unable to select only user session") + logging.WithFields("id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Debug("unable to select only user session") } err = repo.AuthRequests.SaveAuthRequest(ctx, request) @@ -361,7 +361,7 @@ func (repo *AuthRequestRepo) BeginMFAU2FLogin(ctx context.Context, userID, resou if err != nil { return nil, err } - return repo.Command.HumanBeginU2FLogin(ctx, userID, resourceOwner, request, true) + return repo.Command.HumanBeginU2FLogin(ctx, userID, resourceOwner, request) } func (repo *AuthRequestRepo) VerifyMFAU2F(ctx context.Context, userID, resourceOwner, authRequestID, userAgentID string, credentialData []byte, info *domain.BrowserInfo) (err error) { @@ -371,7 +371,7 @@ func (repo *AuthRequestRepo) VerifyMFAU2F(ctx context.Context, userID, resourceO if err != nil { return err } - return repo.Command.HumanFinishU2FLogin(ctx, userID, resourceOwner, credentialData, request, true) + return repo.Command.HumanFinishU2FLogin(ctx, userID, resourceOwner, credentialData, request) } func (repo *AuthRequestRepo) BeginPasswordlessSetup(ctx context.Context, userID, resourceOwner string, authenticatorPlatform domain.AuthenticatorAttachment) (login *domain.WebAuthNToken, err error) { @@ -415,7 +415,7 @@ func (repo *AuthRequestRepo) BeginPasswordlessLogin(ctx context.Context, userID, if err != nil { return nil, err } - return repo.Command.HumanBeginPasswordlessLogin(ctx, userID, resourceOwner, request, true) + return repo.Command.HumanBeginPasswordlessLogin(ctx, userID, resourceOwner, request) } func (repo *AuthRequestRepo) VerifyPasswordless(ctx context.Context, userID, resourceOwner, authRequestID, userAgentID string, credentialData []byte, info *domain.BrowserInfo) (err error) { @@ -425,7 +425,7 @@ func (repo *AuthRequestRepo) VerifyPasswordless(ctx context.Context, userID, res if err != nil { return err } - return repo.Command.HumanFinishPasswordlessLogin(ctx, userID, resourceOwner, credentialData, request, true) + return repo.Command.HumanFinishPasswordlessLogin(ctx, userID, resourceOwner, credentialData, request) } func (repo *AuthRequestRepo) LinkExternalUsers(ctx context.Context, authReqID, userAgentID string, info *domain.BrowserInfo) (err error) { @@ -627,7 +627,7 @@ func (repo *AuthRequestRepo) tryUsingOnlyUserSession(request *domain.AuthRequest } func (repo *AuthRequestRepo) checkLoginName(ctx context.Context, request *domain.AuthRequest, loginName string) (err error) { - user := new(user_view_model.UserView) + var user *user_view_model.UserView preferredLoginName := loginName if request.RequestedOrgID != "" { if request.RequestedOrgID != "" { @@ -719,7 +719,7 @@ func (repo *AuthRequestRepo) checkSelectedExternalIDP(request *domain.AuthReques } func (repo *AuthRequestRepo) checkExternalUserLogin(ctx context.Context, request *domain.AuthRequest, idpConfigID, externalUserID string) (err error) { - externalIDP := new(user_view_model.ExternalIDPView) + var externalIDP *user_view_model.ExternalIDPView if request.RequestedOrgID != "" { externalIDP, err = repo.View.ExternalIDPByExternalUserIDAndIDPConfigIDAndResourceOwner(externalUserID, idpConfigID, request.RequestedOrgID, request.InstanceID) } else { @@ -1116,7 +1116,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve } events, err := eventProvider.UserEventsByID(ctx, user.ID, session.Sequence) if err != nil { - logging.Log("EVENT-Hse6s").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") + logging.WithFields("traceID", tracing.TraceIDFromCtx(ctx)).WithError(err).Debug("error retrieving new events") return user_view_model.UserSessionToModel(session), nil } sessionCopy := *session @@ -1141,7 +1141,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve user_repo.HumanU2FTokenCheckFailedType: eventData, err := user_view_model.UserSessionFromEvent(event) if err != nil { - logging.Log("EVENT-sdgT3").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error getting event data") + logging.WithFields("traceID", tracing.TraceIDFromCtx(ctx)).WithError(err).Debug("error getting event data") return user_view_model.UserSessionToModel(session), nil } if eventData.UserAgentID != agentID { @@ -1151,7 +1151,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dG2fe", "Errors.User.NotActive") } err := sessionCopy.AppendEvent(event) - logging.Log("EVENT-qbhj3").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("error appending event") + logging.WithFields("traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Warn("error appending event") } return user_view_model.UserSessionToModel(&sessionCopy), nil } @@ -1197,7 +1197,7 @@ func userByID(ctx context.Context, viewProvider userViewProvider, eventProvider } events, err := eventProvider.UserEventsByID(ctx, userID, user.Sequence) if err != nil { - logging.Log("EVENT-dfg42").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") + logging.WithFields("traceID", tracing.TraceIDFromCtx(ctx)).WithError(err).Debug("error retrieving new events") return user_view_model.UserToModel(user), nil } if len(events) == 0 { diff --git a/internal/command/user_human_webauthn.go b/internal/command/user_human_webauthn.go index 8b2e6c97c5..e6d7b52eb3 100644 --- a/internal/command/user_human_webauthn.go +++ b/internal/command/user_human_webauthn.go @@ -82,7 +82,7 @@ func (c *Commands) HumanAddU2FSetup(ctx context.Context, userID, resourceowner s if err != nil { return nil, err } - addWebAuthN, userAgg, webAuthN, err := c.addHumanWebAuthN(ctx, userID, resourceowner, isLoginUI, u2fTokens, domain.AuthenticatorAttachmentUnspecified) + addWebAuthN, userAgg, webAuthN, err := c.addHumanWebAuthN(ctx, userID, resourceowner, isLoginUI, u2fTokens, domain.AuthenticatorAttachmentUnspecified, domain.UserVerificationRequirementDiscouraged) if err != nil { return nil, err } @@ -108,7 +108,7 @@ func (c *Commands) HumanAddPasswordlessSetup(ctx context.Context, userID, resour if err != nil { return nil, err } - addWebAuthN, userAgg, webAuthN, err := c.addHumanWebAuthN(ctx, userID, resourceowner, isLoginUI, passwordlessTokens, authenticatorPlatform) + addWebAuthN, userAgg, webAuthN, err := c.addHumanWebAuthN(ctx, userID, resourceowner, isLoginUI, passwordlessTokens, authenticatorPlatform, domain.UserVerificationRequirementRequired) if err != nil { return nil, err } @@ -137,7 +137,7 @@ func (c *Commands) HumanAddPasswordlessSetupInitCode(ctx context.Context, userID return c.HumanAddPasswordlessSetup(ctx, userID, resourceowner, true, preferredPlatformType) } -func (c *Commands) addHumanWebAuthN(ctx context.Context, userID, resourceowner string, isLoginUI bool, tokens []*domain.WebAuthNToken, authenticatorPlatform domain.AuthenticatorAttachment) (*HumanWebAuthNWriteModel, *eventstore.Aggregate, *domain.WebAuthNToken, error) { +func (c *Commands) addHumanWebAuthN(ctx context.Context, userID, resourceowner string, isLoginUI bool, tokens []*domain.WebAuthNToken, authenticatorPlatform domain.AuthenticatorAttachment, userVerification domain.UserVerificationRequirement) (*HumanWebAuthNWriteModel, *eventstore.Aggregate, *domain.WebAuthNToken, error) { if userID == "" { return nil, nil, nil, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-3M0od", "Errors.IDMissing") } @@ -157,7 +157,7 @@ func (c *Commands) addHumanWebAuthN(ctx context.Context, userID, resourceowner s if accountName == "" { accountName = user.EmailAddress } - webAuthN, err := c.webauthnConfig.BeginRegistration(ctx, user, accountName, authenticatorPlatform, domain.UserVerificationRequirementDiscouraged, isLoginUI, tokens...) + webAuthN, err := c.webauthnConfig.BeginRegistration(ctx, user, accountName, authenticatorPlatform, userVerification, isLoginUI, tokens...) if err != nil { return nil, nil, nil, err } @@ -286,13 +286,13 @@ func (c *Commands) verifyHumanWebAuthN(ctx context.Context, userID, resourceowne return userAgg, webAuthN, verifyWebAuthN, nil } -func (c *Commands) HumanBeginU2FLogin(ctx context.Context, userID, resourceOwner string, authRequest *domain.AuthRequest, isLoginUI bool) (*domain.WebAuthNLogin, error) { +func (c *Commands) HumanBeginU2FLogin(ctx context.Context, userID, resourceOwner string, authRequest *domain.AuthRequest) (*domain.WebAuthNLogin, error) { u2fTokens, err := c.getHumanU2FTokens(ctx, userID, resourceOwner) if err != nil { return nil, err } - userAgg, webAuthNLogin, err := c.beginWebAuthNLogin(ctx, userID, resourceOwner, u2fTokens, isLoginUI) + userAgg, webAuthNLogin, err := c.beginWebAuthNLogin(ctx, userID, resourceOwner, u2fTokens, domain.UserVerificationRequirementDiscouraged) if err != nil { return nil, err } @@ -311,13 +311,13 @@ func (c *Commands) HumanBeginU2FLogin(ctx context.Context, userID, resourceOwner return webAuthNLogin, err } -func (c *Commands) HumanBeginPasswordlessLogin(ctx context.Context, userID, resourceOwner string, authRequest *domain.AuthRequest, isLoginUI bool) (*domain.WebAuthNLogin, error) { +func (c *Commands) HumanBeginPasswordlessLogin(ctx context.Context, userID, resourceOwner string, authRequest *domain.AuthRequest) (*domain.WebAuthNLogin, error) { u2fTokens, err := c.getHumanPasswordlessTokens(ctx, userID, resourceOwner) if err != nil { return nil, err } - userAgg, webAuthNLogin, err := c.beginWebAuthNLogin(ctx, userID, resourceOwner, u2fTokens, isLoginUI) + userAgg, webAuthNLogin, err := c.beginWebAuthNLogin(ctx, userID, resourceOwner, u2fTokens, domain.UserVerificationRequirementRequired) if err != nil { return nil, err } @@ -334,7 +334,7 @@ func (c *Commands) HumanBeginPasswordlessLogin(ctx context.Context, userID, reso return webAuthNLogin, err } -func (c *Commands) beginWebAuthNLogin(ctx context.Context, userID, resourceOwner string, tokens []*domain.WebAuthNToken, isLoginUI bool) (*eventstore.Aggregate, *domain.WebAuthNLogin, error) { +func (c *Commands) beginWebAuthNLogin(ctx context.Context, userID, resourceOwner string, tokens []*domain.WebAuthNToken, userVerification domain.UserVerificationRequirement) (*eventstore.Aggregate, *domain.WebAuthNLogin, error) { if userID == "" { return nil, nil, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-hh8K9", "Errors.IDMissing") } @@ -343,7 +343,7 @@ func (c *Commands) beginWebAuthNLogin(ctx context.Context, userID, resourceOwner if err != nil { return nil, nil, err } - webAuthNLogin, err := c.webauthnConfig.BeginLogin(ctx, human, domain.UserVerificationRequirementDiscouraged, isLoginUI, tokens...) + webAuthNLogin, err := c.webauthnConfig.BeginLogin(ctx, human, userVerification, tokens...) if err != nil { return nil, nil, err } @@ -357,7 +357,7 @@ func (c *Commands) beginWebAuthNLogin(ctx context.Context, userID, resourceOwner return userAgg, webAuthNLogin, nil } -func (c *Commands) HumanFinishU2FLogin(ctx context.Context, userID, resourceOwner string, credentialData []byte, authRequest *domain.AuthRequest, isLoginUI bool) error { +func (c *Commands) HumanFinishU2FLogin(ctx context.Context, userID, resourceOwner string, credentialData []byte, authRequest *domain.AuthRequest) error { webAuthNLogin, err := c.getHumanU2FLogin(ctx, userID, authRequest.ID, resourceOwner) if err != nil { return err @@ -367,10 +367,10 @@ func (c *Commands) HumanFinishU2FLogin(ctx context.Context, userID, resourceOwne return err } - userAgg, token, signCount, err := c.finishWebAuthNLogin(ctx, userID, resourceOwner, credentialData, webAuthNLogin, u2fTokens, isLoginUI) + userAgg, token, signCount, err := c.finishWebAuthNLogin(ctx, userID, resourceOwner, credentialData, webAuthNLogin, u2fTokens) if err != nil { if userAgg == nil { - logging.LogWithFields("EVENT-Addqd", "userID", userID, "resourceOwner", resourceOwner).WithError(err).Warn("missing userAggregate for pushing failed u2f check event") + logging.WithFields("userID", userID, "resourceOwner", resourceOwner).WithError(err).Warn("missing userAggregate for pushing failed u2f check event") return err } _, pushErr := c.eventstore.Push(ctx, @@ -380,7 +380,7 @@ func (c *Commands) HumanFinishU2FLogin(ctx context.Context, userID, resourceOwne authRequestDomainToAuthRequestInfo(authRequest), ), ) - logging.LogWithFields("EVENT-Bdgd2", "userID", userID, "resourceOwner", resourceOwner).OnError(pushErr).Warn("could not push failed u2f check event") + logging.WithFields("userID", userID, "resourceOwner", resourceOwner).OnError(pushErr).Warn("could not push failed u2f check event") return err } @@ -401,7 +401,7 @@ func (c *Commands) HumanFinishU2FLogin(ctx context.Context, userID, resourceOwne return err } -func (c *Commands) HumanFinishPasswordlessLogin(ctx context.Context, userID, resourceOwner string, credentialData []byte, authRequest *domain.AuthRequest, isLoginUI bool) error { +func (c *Commands) HumanFinishPasswordlessLogin(ctx context.Context, userID, resourceOwner string, credentialData []byte, authRequest *domain.AuthRequest) error { webAuthNLogin, err := c.getHumanPasswordlessLogin(ctx, userID, authRequest.ID, resourceOwner) if err != nil { return err @@ -412,10 +412,10 @@ func (c *Commands) HumanFinishPasswordlessLogin(ctx context.Context, userID, res return err } - userAgg, token, signCount, err := c.finishWebAuthNLogin(ctx, userID, resourceOwner, credentialData, webAuthNLogin, passwordlessTokens, isLoginUI) + userAgg, token, signCount, err := c.finishWebAuthNLogin(ctx, userID, resourceOwner, credentialData, webAuthNLogin, passwordlessTokens) if err != nil { if userAgg == nil { - logging.LogWithFields("EVENT-Dbbbw", "userID", userID, "resourceOwner", resourceOwner).WithError(err).Warn("missing userAggregate for pushing failed passwordless check event") + logging.WithFields("userID", userID, "resourceOwner", resourceOwner).WithError(err).Warn("missing userAggregate for pushing failed passwordless check event") return err } _, pushErr := c.eventstore.Push(ctx, @@ -425,7 +425,7 @@ func (c *Commands) HumanFinishPasswordlessLogin(ctx context.Context, userID, res authRequestDomainToAuthRequestInfo(authRequest), ), ) - logging.LogWithFields("EVENT-33M9f", "userID", userID, "resourceOwner", resourceOwner).OnError(pushErr).Warn("could not push failed passwordless check event") + logging.WithFields("userID", userID, "resourceOwner", resourceOwner).OnError(pushErr).Warn("could not push failed passwordless check event") return err } @@ -445,7 +445,7 @@ func (c *Commands) HumanFinishPasswordlessLogin(ctx context.Context, userID, res return err } -func (c *Commands) finishWebAuthNLogin(ctx context.Context, userID, resourceOwner string, credentialData []byte, webAuthN *domain.WebAuthNLogin, tokens []*domain.WebAuthNToken, isLoginUI bool) (*eventstore.Aggregate, *domain.WebAuthNToken, uint32, error) { +func (c *Commands) finishWebAuthNLogin(ctx context.Context, userID, resourceOwner string, credentialData []byte, webAuthN *domain.WebAuthNLogin, tokens []*domain.WebAuthNToken) (*eventstore.Aggregate, *domain.WebAuthNToken, uint32, error) { if userID == "" { return nil, nil, 0, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-hh8K9", "Errors.IDMissing") } @@ -454,7 +454,7 @@ func (c *Commands) finishWebAuthNLogin(ctx context.Context, userID, resourceOwne if err != nil { return nil, nil, 0, err } - keyID, signCount, err := c.webauthnConfig.FinishLogin(ctx, human, webAuthN, credentialData, isLoginUI, tokens...) + keyID, signCount, err := c.webauthnConfig.FinishLogin(ctx, human, webAuthN, credentialData, tokens...) if err != nil && keyID == nil { return nil, nil, 0, err } @@ -485,6 +485,9 @@ func (c *Commands) HumanRemovePasswordless(ctx context.Context, userID, webAuthN func (c *Commands) HumanAddPasswordlessInitCode(ctx context.Context, userID, resourceOwner string, passwordlessCodeGenerator crypto.Generator) (*domain.PasswordlessInitCode, error) { codeEvent, initCode, code, err := c.humanAddPasswordlessInitCode(ctx, userID, resourceOwner, true, passwordlessCodeGenerator) + if err != nil { + return nil, err + } pushedEvents, err := c.eventstore.Push(ctx, codeEvent) if err != nil { return nil, err @@ -576,7 +579,7 @@ func (c *Commands) humanVerifyPasswordlessInitCode(ctx context.Context, userID, if err != nil || initCode.State != domain.PasswordlessInitCodeStateActive { userAgg := UserAggregateFromWriteModel(&initCode.WriteModel) _, err = c.eventstore.Push(ctx, usr_repo.NewHumanPasswordlessInitCodeCheckFailedEvent(ctx, userAgg, codeID)) - logging.LogWithFields("COMMAND-Gkuud", "userID", userAgg.ID).OnError(err).Error("NewHumanPasswordlessInitCodeCheckFailedEvent push failed") + logging.WithFields("userID", userAgg.ID).OnError(err).Error("NewHumanPasswordlessInitCodeCheckFailedEvent push failed") return caos_errs.ThrowInvalidArgument(err, "COMMAND-Dhz8i", "Errors.User.Code.Invalid") } return nil diff --git a/internal/webauthn/webauthn.go b/internal/webauthn/webauthn.go index eb1d521282..a06f909434 100644 --- a/internal/webauthn/webauthn.go +++ b/internal/webauthn/webauthn.go @@ -127,7 +127,7 @@ func (w *Config) FinishRegistration(ctx context.Context, user *domain.Human, web return webAuthN, nil } -func (w *Config) BeginLogin(ctx context.Context, user *domain.Human, userVerification domain.UserVerificationRequirement, isLoginUI bool, webAuthNs ...*domain.WebAuthNToken) (*domain.WebAuthNLogin, error) { +func (w *Config) BeginLogin(ctx context.Context, user *domain.Human, userVerification domain.UserVerificationRequirement, webAuthNs ...*domain.WebAuthNToken) (*domain.WebAuthNLogin, error) { webAuthNServer, err := w.serverFromContext(ctx) if err != nil { return nil, err @@ -151,7 +151,7 @@ func (w *Config) BeginLogin(ctx context.Context, user *domain.Human, userVerific }, nil } -func (w *Config) FinishLogin(ctx context.Context, user *domain.Human, webAuthN *domain.WebAuthNLogin, credData []byte, isLoginUI bool, webAuthNs ...*domain.WebAuthNToken) ([]byte, uint32, error) { +func (w *Config) FinishLogin(ctx context.Context, user *domain.Human, webAuthN *domain.WebAuthNLogin, credData []byte, webAuthNs ...*domain.WebAuthNToken) ([]byte, uint32, error) { assertionData, err := protocol.ParseCredentialRequestResponseBody(bytes.NewReader(credData)) if err != nil { return nil, 0, caos_errs.ThrowInternal(err, "WEBAU-ADgv4", "Errors.User.WebAuthN.ValidateLoginFailed") From d15a15c80954f8acd59f1cc31d9fb8e5a6c1f6e0 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Wed, 6 Jul 2022 11:29:59 +0200 Subject: [PATCH 003/116] docs: Eventstore architecture (#3904) * docs: add zitadel eventstore architecture * docs: add zitadel eventstore architecture * docs: add zitadel eventstore architecture * docs: add zitadel eventstore architecture * docs: add zitadel eventstore architecture * docs: fix broken link * Update docs/docs/concepts/eventstore/overview.md Co-authored-by: Elio Bischof * Update docs/docs/concepts/eventstore/overview.md Co-authored-by: Elio Bischof * Update docs/docs/concepts/eventstore/overview.md Co-authored-by: Elio Bischof * Update docs/docs/concepts/eventstore/zitadel.md Co-authored-by: Elio Bischof * Update docs/docs/concepts/eventstore/zitadel.md Co-authored-by: Elio Bischof Co-authored-by: Elio Bischof --- docs/docs/concepts/eventstore.md | 20 ----- docs/docs/concepts/eventstore/overview.md | 50 ++++++++++++ docs/docs/concepts/eventstore/zitadel.md | 97 +++++++++++++++++++++++ docs/sidebars.js | 10 ++- 4 files changed, 156 insertions(+), 21 deletions(-) delete mode 100644 docs/docs/concepts/eventstore.md create mode 100644 docs/docs/concepts/eventstore/overview.md create mode 100644 docs/docs/concepts/eventstore/zitadel.md diff --git a/docs/docs/concepts/eventstore.md b/docs/docs/concepts/eventstore.md deleted file mode 100644 index 00e9462565..0000000000 --- a/docs/docs/concepts/eventstore.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Eventstore ---- - -ZITADEL is built on the [event sourcing pattern](./architecture), where changes are stored as events in an eventstore. - -## What is an eventstore? - -Traditionally, data is stored in relations as a state - -- A request needs to know the relations to select valid data -- If a relation changes, the requests need to change as well -- That is valid for actual, as well as for historical data - -An Eventstore on the other hand stores events, meaning every change that happens to any piece of data relates to an event - -- Think of it as a ledger that gets new entries over time, accumulative -- To request data, all you have to do is to sum the events as the summary reflects the actual state -- To investigate past changes to your system, you just select the events from your time range of interest -- That makes audit/analytics very powerful, due to the historical data available to build queries diff --git a/docs/docs/concepts/eventstore/overview.md b/docs/docs/concepts/eventstore/overview.md new file mode 100644 index 0000000000..a11e288b06 --- /dev/null +++ b/docs/docs/concepts/eventstore/overview.md @@ -0,0 +1,50 @@ +--- +title: Overview +--- + +ZITADEL is built on the [event sourcing pattern](../architecture), where changes are stored as events in an eventstore. + +## What is an eventstore? + +Traditionally, data is stored in relations as a state + +- A request needs to know the relations to select valid data +- If a relation changes, the requests need to change as well +- That is valid for actual, as well as for historical data + +An Eventstore on the other hand stores events, meaning every change that happens to any piece of data relates to an event. +The data is stored as events in an append-only log. + +- Think of it as a ledger that gets new entries over time, accumulative +- To request data, all you have to do is to sum the events as the summary reflects the actual state +- To investigate past changes to your system, you just select the events from your time range of interest +- That makes audit/analytics very powerful, due to the historical data available to build queries + +## Benefits + +Audit: You have a built-in audit trail that tracks all changes over an unlimited period of time. +Travel back in time: With our way of storing data we can show you all of your resources at a given point in time. + +## Definitions + +Eventsourcing has some specific terms that are often used in our documentation. To understand how ZITADEL works it is important to understand this key definitions. + +### Events + +An event is something that happens in the system and gets written to the database. This is the single source of truth. +Events are immutable and the current state of your system is derived from the events. + +Possible Events: +- user.added +- user.changed +- product.added +- user.password.checked + +### Aggregate + +An aggregate consist of multiple events. All events together in will lead to the current state of the aggregate. +The aggregate can be compared with an object or a resources. + +### Projections + +Projections contain the computed objects, that will be used on the query side for all the requests. diff --git a/docs/docs/concepts/eventstore/zitadel.md b/docs/docs/concepts/eventstore/zitadel.md new file mode 100644 index 0000000000..c89e7a7e03 --- /dev/null +++ b/docs/docs/concepts/eventstore/zitadel.md @@ -0,0 +1,97 @@ +--- +title: Implementation in ZITADEL +--- + +This documentation gives you an insight into the structure of the ZITADEL database. +The goal is to give you a rough overview, so you know where which data is stored and which database schemas and tables are used. + +## Event + +The single source of truth of ZITADEL are the events that are stored in the eventstore. +From these events all different kind of resources e.g Users, Projects, Applications, etc. can be computed. + +An event has the following data: + +| Attribute | Description | Example | +| --- | --- | --- | +| id | unique identifier of the event, this is generated by the database | b6402a60-e4655-4cc0-904b-f5c6760c4406 | +| aggregate_type | the type of the aggregate, an aggregate can be compared to a resource or an object. One aggregate contains multiple event types | user | +| aggregate_id | The unique identifier of an aggregate, this is generated by ZITADEL and is a sonyflake id | 168096909691353697 | +| aggregate_version | The aggregate version shows in which version of the aggregate the event was created. This is needed to be able to compute correct objects | v1 | +| event_type | The type of the event | user.human.added | +| event_sequence | The event sequence is a sequence number that is incremented by one for each event on the instance. For technical reasons, a number can be omitted in some cases. This is needed so that the sequence of the events can be ensured. | 1234 | +| previous_aggregate_sequence| This number is the sequence of the event last created on this specific aggregate. E.g. Last user with specific aggregate_id | 1233| +| previous_aggregate_type_sequence | This number is the sequence of the event last created on this aggregate. E.g Last User | 1230 | +| creation_date| timestamp when the event was created | 2022-07-05 13:57:56.358774+00 | +| editor_user| The editor user contains mostly an unique identifier of a user. And tells who did the request that led to this event. Sometimes this can also be a name of a system within ZITADEL. | 165460784409638965, NOTIFICATION, LOGIN | +| editor_service | The service defines which API was called when the event got created. If the event was created from the system itself this is empty. | Admin-API | +| resource_owner | The resource owner defines to which organization/resource_owner the event belongs. This is an id generated by ZITADEL as sonyflake id | 168051083313153168 | +| instance_id | ZITADEL is capable of containing multiple ZITADEL instances withing the system. This id is the unique identifier of the Instance and is generated by ZITADEL as sonyflake id. | 165460784409737865 | + + +## Schemas + +| Schema | Description | Examples | +| --- | --- | --- | +| System | The system contains everything that is needed outside the ZITADEL instances. | assets, encryption_key | +| Eventstore | Eventstore is the base of ZITADEL and is the single source of truth. All the events stored in the eventstore can be used to generate different projections. | events, instance sequences, system wide unique constraints +| Projections| The projections contain all the computed objects which are used for reading requests. | users, projects, etc| +| Auth | This contains projections which are used for the auth api. All projections in this schema should be moved to Projections soon | users, auth_request, etc. | +| Adminapi | This contains projections which are used for the admin api. All projections in this schema should be moved to Projections soon | styling| +| Notification | This contains projections which are used for sending notification. All projections in this schema should be moved to Projections soon | styling| + +## Projections + +The projections in ZITADEL contain all the computed objects, that are used for the reading requests. +It is possible that the projections are slightly behind the actual event and not all objects are up-to-date. + +### Pub-Sub +To keep the projections as up-to-date as possible, an internal pub-sub system is used. +As soon as an event is written to the event store, it is sent to the projections that have subscribed to this aggregate. + +### Spooler +It is sometimes possible for technical reasons that not all events were sent to the projections. +For this reason, a spooler runs in parallel, which checks every n minutes whether there are new events that have not yet been processed. + +### Current Sequence + +To ensure that no events get missed when creating the Projections, ZITADEL stores the current sequence, that was processed. +You can find the current sequence in the following tables: +- projections.current_sequences +- notification.current_sequences +- auth.current_Sequences +- adminapi.current_sequences + +The current sequence is stored for each ZITADEL instance and table. + +| Attribute | Description | Examples | +| --- | --- | --- | +| projection_name | The name of the projection for which the sequence is valid. | projection.users | +| aggregate_type | The aggregate type where the sequence was from | user | +| current_sequence | The sequence that was last processed | 1234 | +| instance_id | The instance to which the event belongs | 165460784409737834 | +| timestamp | Timestamp when the table was updated | 2022-07-05 13:57:59.454798+00 | + +### Failed Events + +Sometimes an event cannot be processed correctly for some reason and an error occurs. +The event is then tried to be processed n times. +When a defined number of attempts have failed, the event is stored in the Failed Events Table and the next event is processed. +This must be done so that the projection is not blocked and no further events are processed. + +You can find the failed_events in the following tables: +- projections.failed_events +- notification.failed_events +- auth.failed_events +- adminapi.failed_events + +| Attribute | Description | Examples | +| --- | --- | --- | +| projection_name | The name of the projection for which the failed event should have been processed. | projection.users | +| failed_sequence | The sequence of the event that failed | 1234 | +| failure_count | The number of times the event was attempted to be processed. If the number is lower than the max. attempts the event could be processed, but not on the first attempt | 5 | +| error | The error message that occurred when the event could not be processed | User not found | +| instance_id | The instance to which the event belongs | 165460784409737834 | + + + diff --git a/docs/sidebars.js b/docs/sidebars.js index 59df0fac83..271d14a54f 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -193,7 +193,15 @@ module.exports = { concepts: [ "concepts/introduction", "concepts/principles", - "concepts/eventstore", + { + type: "category", + label: "Eventstore", + collapsed: false, + items: [ + "concepts/eventstore/overview", + "concepts/eventstore/zitadel", + ], + }, "concepts/architecture", { type: "category", From a1d404291d365eb9ef71c15f2b8cc77abe295367 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 6 Jul 2022 14:09:49 +0200 Subject: [PATCH 004/116] fix(notify): notify user in projection (#3889) * start implement notify user in projection * fix(stmt): add copy to multi stmt * use projections for notify users * feat: notifications from projections * feat: notifications from projections * cleanup * pre-release * fix tests * fix types * fix command * fix queryNotifyUser * fix: build version * fix: HumanPasswordlessInitCodeSent Co-authored-by: adlerhurst --- .releaserc.js | 2 +- cmd/start/config.go | 2 - cmd/start/start.go | 2 +- internal/api/grpc/auth/user.go | 43 +- internal/api/grpc/management/user.go | 58 +- internal/command/user.go | 3 +- internal/command/user_membership.go | 30 +- internal/command/user_test.go | 13 +- internal/eventstore/handler/crdb/statement.go | 24 +- .../eventstore/handler/crdb/statement_test.go | 138 +++- internal/notification/notification.go | 38 - internal/notification/projection.go | 663 ++++++++++++++++++ .../eventsourcing/handler/handler.go | 89 --- .../eventsourcing/handler/notification.go | 637 ----------------- .../eventsourcing/handler/notify_user.go | 278 -------- .../repository/eventsourcing/repository.go | 56 -- .../repository/eventsourcing/spooler/lock.go | 20 - .../eventsourcing/spooler/spooler.go | 47 -- .../eventsourcing/view/error_event.go | 17 - .../eventsourcing/view/notification.go | 34 - .../eventsourcing/view/notify_user.go | 61 -- .../repository/eventsourcing/view/sequence.go | 38 - .../repository/eventsourcing/view/view.go | 25 - .../notification/repository/repository.go | 5 - .../notification/templates/templateData.go | 2 +- internal/notification/types/domain_claimed.go | 27 +- .../types/email_verification_code.go | 39 +- internal/notification/types/init_code.go | 45 +- internal/notification/types/notification.go | 73 ++ internal/notification/types/password_code.go | 47 +- .../types/passwordless_registration_link.go | 36 +- .../types/phone_verification_code.go | 36 +- internal/notification/types/templateData.go | 2 +- internal/notification/types/user_email.go | 37 +- internal/notification/types/user_phone.go | 13 +- internal/query/iam_member_test.go | 20 +- internal/query/org_member_test.go | 20 +- internal/query/project_grant_member_test.go | 20 +- internal/query/project_member_test.go | 20 +- internal/query/projection/label_policy.go | 26 + internal/query/projection/projection.go | 9 +- internal/query/projection/user.go | 134 +++- internal/query/projection/user_test.go | 258 +++++-- internal/query/user.go | 218 +++++- internal/query/user_grant_test.go | 40 +- internal/query/user_test.go | 412 ++++++++--- 46 files changed, 2018 insertions(+), 1839 deletions(-) delete mode 100644 internal/notification/notification.go create mode 100644 internal/notification/projection.go delete mode 100644 internal/notification/repository/eventsourcing/handler/handler.go delete mode 100644 internal/notification/repository/eventsourcing/handler/notification.go delete mode 100644 internal/notification/repository/eventsourcing/handler/notify_user.go delete mode 100644 internal/notification/repository/eventsourcing/repository.go delete mode 100644 internal/notification/repository/eventsourcing/spooler/lock.go delete mode 100644 internal/notification/repository/eventsourcing/spooler/spooler.go delete mode 100644 internal/notification/repository/eventsourcing/view/error_event.go delete mode 100644 internal/notification/repository/eventsourcing/view/notification.go delete mode 100644 internal/notification/repository/eventsourcing/view/notify_user.go delete mode 100644 internal/notification/repository/eventsourcing/view/sequence.go delete mode 100644 internal/notification/repository/eventsourcing/view/view.go delete mode 100644 internal/notification/repository/repository.go create mode 100644 internal/notification/types/notification.go diff --git a/.releaserc.js b/.releaserc.js index 309ca9e3a5..5c4725f1cc 100644 --- a/.releaserc.js +++ b/.releaserc.js @@ -3,7 +3,7 @@ module.exports = { {name: 'main'}, {name: '1.x.x', range: '1.x.x', channel: '1.x.x'}, {name: 'v2-alpha', prerelease: true}, - {name: 'update-projection-on-query', prerelease: true}, + {name: 'notify-users', prerelease: true}, ], plugins: [ "@semantic-release/commit-analyzer" diff --git a/cmd/start/config.go b/cmd/start/config.go index 179ab3ed4a..ad7d161704 100644 --- a/cmd/start/config.go +++ b/cmd/start/config.go @@ -20,7 +20,6 @@ import ( "github.com/zitadel/zitadel/internal/config/systemdefaults" "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/database" - "github.com/zitadel/zitadel/internal/notification" "github.com/zitadel/zitadel/internal/query/projection" static_config "github.com/zitadel/zitadel/internal/static/config" tracing "github.com/zitadel/zitadel/internal/telemetry/tracing/config" @@ -45,7 +44,6 @@ type Config struct { OIDC oidc.Config Login login.Config Console console.Config - Notification notification.Config AssetStorage static_config.AssetStorageConfig InternalAuthZ internal_authz.Config SystemDefaults systemdefaults.SystemDefaults diff --git a/cmd/start/start.go b/cmd/start/start.go index 1c2e2fdb4f..313ef460e3 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -139,7 +139,7 @@ func startZitadel(config *Config, masterKey string) error { return fmt.Errorf("cannot start commands: %w", err) } - notification.Start(config.Notification, config.ExternalPort, config.ExternalSecure, commands, queries, dbClient, assets.HandlerPrefix, config.SystemDefaults.Notifications.FileSystemPath, keys.User, keys.SMTP, keys.SMS) + notification.Start(ctx, config.Projections.Customizations["notifications"], config.ExternalPort, config.ExternalSecure, commands, queries, eventstoreClient, assets.AssetAPI(config.ExternalSecure), config.SystemDefaults.Notifications.FileSystemPath, keys.User, keys.SMTP, keys.SMS) router := mux.NewRouter() tlsConfig, err := config.TLS.Config() diff --git a/internal/api/grpc/auth/user.go b/internal/api/grpc/auth/user.go index 0650082477..7f31b51567 100644 --- a/internal/api/grpc/auth/user.go +++ b/internal/api/grpc/auth/user.go @@ -9,6 +9,7 @@ import ( obj_grpc "github.com/zitadel/zitadel/internal/api/grpc/object" "github.com/zitadel/zitadel/internal/api/grpc/org" user_grpc "github.com/zitadel/zitadel/internal/api/grpc/user" + "github.com/zitadel/zitadel/internal/command" "github.com/zitadel/zitadel/internal/domain" "github.com/zitadel/zitadel/internal/eventstore/v1/models" "github.com/zitadel/zitadel/internal/query" @@ -45,7 +46,7 @@ func (s *Server) RemoveMyUser(ctx context.Context, _ *auth_pb.RemoveMyUserReques if err != nil { return nil, err } - details, err := s.command.RemoveUser(ctx, ctxData.UserID, ctxData.ResourceOwner, memberships.Memberships, userGrantsToIDs(grants.UserGrants)...) + details, err := s.command.RemoveUser(ctx, ctxData.UserID, ctxData.ResourceOwner, cascadingMemberships(memberships.Memberships), userGrantsToIDs(grants.UserGrants)...) if err != nil { return nil, err } @@ -277,6 +278,46 @@ func MemberTypeToDomain(m *query.Membership) (_ domain.MemberType, displayName, return domain.MemberTypeUnspecified, "", "", "" } +func cascadingMemberships(memberships []*query.Membership) []*command.CascadingMembership { + cascades := make([]*command.CascadingMembership, len(memberships)) + for i, membership := range memberships { + cascades[i] = &command.CascadingMembership{ + UserID: membership.UserID, + ResourceOwner: membership.ResourceOwner, + IAM: cascadingIAMMembership(membership.IAM), + Org: cascadingOrgMembership(membership.Org), + Project: cascadingProjectMembership(membership.Project), + ProjectGrant: cascadingProjectGrantMembership(membership.ProjectGrant), + } + } + return cascades +} + +func cascadingIAMMembership(membership *query.IAMMembership) *command.CascadingIAMMembership { + if membership == nil { + return nil + } + return &command.CascadingIAMMembership{IAMID: membership.IAMID} +} +func cascadingOrgMembership(membership *query.OrgMembership) *command.CascadingOrgMembership { + if membership == nil { + return nil + } + return &command.CascadingOrgMembership{OrgID: membership.OrgID} +} +func cascadingProjectMembership(membership *query.ProjectMembership) *command.CascadingProjectMembership { + if membership == nil { + return nil + } + return &command.CascadingProjectMembership{ProjectID: membership.ProjectID} +} +func cascadingProjectGrantMembership(membership *query.ProjectGrantMembership) *command.CascadingProjectGrantMembership { + if membership == nil { + return nil + } + return &command.CascadingProjectGrantMembership{ProjectID: membership.ProjectID, GrantID: membership.GrantID} +} + func userGrantsToIDs(userGrants []*query.UserGrant) []string { converted := make([]string, len(userGrants)) for i, grant := range userGrants { diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go index ef58b87f33..5fd3bc7822 100644 --- a/internal/api/grpc/management/user.go +++ b/internal/api/grpc/management/user.go @@ -338,7 +338,7 @@ func (s *Server) RemoveUser(ctx context.Context, req *mgmt_pb.RemoveUserRequest) if err != nil { return nil, err } - objectDetails, err := s.command.RemoveUser(ctx, req.Id, authz.GetCtxData(ctx).OrgID, memberships.Memberships, userGrantsToIDs(grants.UserGrants)...) + objectDetails, err := s.command.RemoveUser(ctx, req.Id, authz.GetCtxData(ctx).OrgID, cascadingMemberships(memberships.Memberships), userGrantsToIDs(grants.UserGrants)...) if err != nil { return nil, err } @@ -347,14 +347,6 @@ func (s *Server) RemoveUser(ctx context.Context, req *mgmt_pb.RemoveUserRequest) }, nil } -func userGrantsToIDs(userGrants []*query.UserGrant) []string { - converted := make([]string, len(userGrants)) - for i, grant := range userGrants { - converted[i] = grant.ID - } - return converted -} - func (s *Server) UpdateUserName(ctx context.Context, req *mgmt_pb.UpdateUserNameRequest) (*mgmt_pb.UpdateUserNameResponse, error) { objectDetails, err := s.command.ChangeUsername(ctx, authz.GetCtxData(ctx).OrgID, req.UserId, req.UserName) if err != nil { @@ -860,3 +852,51 @@ func (s *Server) ListUserMemberships(ctx context.Context, req *mgmt_pb.ListUserM Details: obj_grpc.ToListDetails(response.Count, response.Sequence, response.Timestamp), }, nil } + +func cascadingMemberships(memberships []*query.Membership) []*command.CascadingMembership { + cascades := make([]*command.CascadingMembership, len(memberships)) + for i, membership := range memberships { + cascades[i] = &command.CascadingMembership{ + UserID: membership.UserID, + ResourceOwner: membership.ResourceOwner, + IAM: cascadingIAMMembership(membership.IAM), + Org: cascadingOrgMembership(membership.Org), + Project: cascadingProjectMembership(membership.Project), + ProjectGrant: cascadingProjectGrantMembership(membership.ProjectGrant), + } + } + return cascades +} + +func cascadingIAMMembership(membership *query.IAMMembership) *command.CascadingIAMMembership { + if membership == nil { + return nil + } + return &command.CascadingIAMMembership{IAMID: membership.IAMID} +} +func cascadingOrgMembership(membership *query.OrgMembership) *command.CascadingOrgMembership { + if membership == nil { + return nil + } + return &command.CascadingOrgMembership{OrgID: membership.OrgID} +} +func cascadingProjectMembership(membership *query.ProjectMembership) *command.CascadingProjectMembership { + if membership == nil { + return nil + } + return &command.CascadingProjectMembership{ProjectID: membership.ProjectID} +} +func cascadingProjectGrantMembership(membership *query.ProjectGrantMembership) *command.CascadingProjectGrantMembership { + if membership == nil { + return nil + } + return &command.CascadingProjectGrantMembership{ProjectID: membership.ProjectID, GrantID: membership.GrantID} +} + +func userGrantsToIDs(userGrants []*query.UserGrant) []string { + converted := make([]string, len(userGrants)) + for i, grant := range userGrants { + converted[i] = grant.ID + } + return converted +} diff --git a/internal/command/user.go b/internal/command/user.go index be5b8bec94..a4f33a1fb5 100644 --- a/internal/command/user.go +++ b/internal/command/user.go @@ -14,7 +14,6 @@ import ( caos_errs "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/eventstore" "github.com/zitadel/zitadel/internal/eventstore/v1/models" - "github.com/zitadel/zitadel/internal/query" "github.com/zitadel/zitadel/internal/repository/user" "github.com/zitadel/zitadel/internal/telemetry/tracing" ) @@ -174,7 +173,7 @@ func (c *Commands) UnlockUser(ctx context.Context, userID, resourceOwner string) return writeModelToObjectDetails(&existingUser.WriteModel), nil } -func (c *Commands) RemoveUser(ctx context.Context, userID, resourceOwner string, cascadingUserMemberships []*query.Membership, cascadingGrantIDs ...string) (*domain.ObjectDetails, error) { +func (c *Commands) RemoveUser(ctx context.Context, userID, resourceOwner string, cascadingUserMemberships []*CascadingMembership, cascadingGrantIDs ...string) (*domain.ObjectDetails, error) { if userID == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-2M0ds", "Errors.User.UserIDMissing") } diff --git a/internal/command/user_membership.go b/internal/command/user_membership.go index db1831f4ea..3bc68dd4be 100644 --- a/internal/command/user_membership.go +++ b/internal/command/user_membership.go @@ -4,13 +4,39 @@ import ( "context" "github.com/zitadel/zitadel/internal/eventstore" - "github.com/zitadel/zitadel/internal/query" "github.com/zitadel/zitadel/internal/repository/instance" "github.com/zitadel/zitadel/internal/repository/org" "github.com/zitadel/zitadel/internal/repository/project" ) -func (c *Commands) removeUserMemberships(ctx context.Context, memberships []*query.Membership) (_ []eventstore.Command, err error) { +type CascadingMembership struct { + UserID string + ResourceOwner string + + IAM *CascadingIAMMembership + Org *CascadingOrgMembership + Project *CascadingProjectMembership + ProjectGrant *CascadingProjectGrantMembership +} + +type CascadingIAMMembership struct { + IAMID string +} + +type CascadingOrgMembership struct { + OrgID string +} + +type CascadingProjectMembership struct { + ProjectID string +} + +type CascadingProjectGrantMembership struct { + ProjectID string + GrantID string +} + +func (c *Commands) removeUserMemberships(ctx context.Context, memberships []*CascadingMembership) (_ []eventstore.Command, err error) { events := make([]eventstore.Command, 0) for _, membership := range memberships { if membership.IAM != nil { diff --git a/internal/command/user_test.go b/internal/command/user_test.go index 3d8c347442..383d7205df 100644 --- a/internal/command/user_test.go +++ b/internal/command/user_test.go @@ -19,7 +19,6 @@ import ( "github.com/zitadel/zitadel/internal/eventstore" "github.com/zitadel/zitadel/internal/eventstore/repository" "github.com/zitadel/zitadel/internal/id" - "github.com/zitadel/zitadel/internal/query" "github.com/zitadel/zitadel/internal/repository/instance" "github.com/zitadel/zitadel/internal/repository/user" ) @@ -929,7 +928,7 @@ func TestCommandSide_RemoveUser(t *testing.T) { instanceID string orgID string userID string - cascadeUserMemberships []*query.Membership + cascadeUserMemberships []*CascadingMembership cascadeUserGrants []string } ) @@ -1215,16 +1214,16 @@ func TestCommandSide_RemoveUser(t *testing.T) { ctx: context.Background(), orgID: "org1", userID: "user1", - cascadeUserMemberships: []*query.Membership{ + cascadeUserMemberships: []*CascadingMembership{ { - IAM: &query.IAMMembership{ + IAM: &CascadingIAMMembership{ IAMID: "INSTANCE", }, UserID: "user1", ResourceOwner: "org1", }, { - Org: &query.OrgMembership{ + Org: &CascadingOrgMembership{ OrgID: "org1", }, UserID: "user1", @@ -1232,14 +1231,14 @@ func TestCommandSide_RemoveUser(t *testing.T) { }, { - Project: &query.ProjectMembership{ + Project: &CascadingProjectMembership{ ProjectID: "project1", }, UserID: "user1", ResourceOwner: "org1", }, { - ProjectGrant: &query.ProjectGrantMembership{ + ProjectGrant: &CascadingProjectGrantMembership{ ProjectID: "project1", GrantID: "grant1", }, diff --git a/internal/eventstore/handler/crdb/statement.go b/internal/eventstore/handler/crdb/statement.go index 5b544c6909..c4bc2db9d5 100644 --- a/internal/eventstore/handler/crdb/statement.go +++ b/internal/eventstore/handler/crdb/statement.go @@ -189,6 +189,12 @@ func AddDeleteStatement(conditions []handler.Condition, opts ...execOption) func } } +func AddCopyStatement(from, to []handler.Column, conditions []handler.Condition, opts ...execOption) func(eventstore.Event) Exec { + return func(event eventstore.Event) Exec { + return NewCopyStatement(event, from, to, conditions, opts...).Execute + } +} + func NewArrayAppendCol(column string, value interface{}) handler.Column { return handler.Column{ Name: column, @@ -233,19 +239,19 @@ func NewArrayIntersectCol(column string, value interface{}) handler.Column { // if the value of a col is empty the data will be copied from the selected row // if the value of a col is not empty the data will be set by the static value // conds represent the conditions for the selection subquery -func NewCopyStatement(event eventstore.Event, cols []handler.Column, conds []handler.Condition, opts ...execOption) *handler.Statement { - columnNames := make([]string, len(cols)) - selectColumns := make([]string, len(cols)) +func NewCopyStatement(event eventstore.Event, from, to []handler.Column, conds []handler.Condition, opts ...execOption) *handler.Statement { + columnNames := make([]string, len(to)) + selectColumns := make([]string, len(from)) argCounter := 0 args := []interface{}{} - for i, col := range cols { - columnNames[i] = col.Name - selectColumns[i] = col.Name - if col.Value != nil { + for i := range from { + columnNames[i] = to[i].Name + selectColumns[i] = from[i].Name + if from[i].Value != nil { argCounter++ selectColumns[i] = "$" + strconv.Itoa(argCounter) - args = append(args, col.Value) + args = append(args, from[i].Value) } } @@ -260,7 +266,7 @@ func NewCopyStatement(event eventstore.Event, cols []handler.Column, conds []han args: args, } - if len(cols) == 0 { + if len(from) == 0 || len(to) == 0 || len(from) != len(to) { config.err = handler.ErrNoValues } diff --git a/internal/eventstore/handler/crdb/statement_test.go b/internal/eventstore/handler/crdb/statement_test.go index 8b5e33f266..a4bea29261 100644 --- a/internal/eventstore/handler/crdb/statement_test.go +++ b/internal/eventstore/handler/crdb/statement_test.go @@ -801,7 +801,8 @@ func TestNewCopyStatement(t *testing.T) { type args struct { table string event *testEvent - cols []handler.Column + from []handler.Column + to []handler.Column conds []handler.Condition } type want struct { @@ -856,7 +857,12 @@ func TestNewCopyStatement(t *testing.T) { previousSequence: 0, }, conds: []handler.Condition{}, - cols: []handler.Column{ + from: []handler.Column{ + { + Name: "col", + }, + }, + to: []handler.Column{ { Name: "col", }, @@ -876,7 +882,44 @@ func TestNewCopyStatement(t *testing.T) { }, }, { - name: "no values", + name: "more to than from cols", + args: args{ + table: "my_table", + event: &testEvent{ + aggregateType: "agg", + sequence: 1, + previousSequence: 0, + }, + conds: []handler.Condition{}, + from: []handler.Column{ + { + Name: "col", + }, + }, + to: []handler.Column{ + { + Name: "col", + }, + { + Name: "col2", + }, + }, + }, + want: want{ + table: "my_table", + aggregateType: "agg", + sequence: 1, + previousSequence: 1, + executer: &wantExecuter{ + shouldExecute: false, + }, + isErr: func(err error) bool { + return errors.Is(err, handler.ErrNoCondition) + }, + }, + }, + { + name: "no columns", args: args{ table: "my_table", event: &testEvent{ @@ -889,7 +932,7 @@ func TestNewCopyStatement(t *testing.T) { Name: "col", }, }, - cols: []handler.Column{}, + from: []handler.Column{}, }, want: want{ table: "my_table", @@ -905,7 +948,7 @@ func TestNewCopyStatement(t *testing.T) { }, }, { - name: "correct", + name: "correct same column names", args: args{ table: "my_table", event: &testEvent{ @@ -913,7 +956,7 @@ func TestNewCopyStatement(t *testing.T) { sequence: 1, previousSequence: 0, }, - cols: []handler.Column{ + from: []handler.Column{ { Name: "state", Value: 1, @@ -928,6 +971,20 @@ func TestNewCopyStatement(t *testing.T) { Name: "col_b", }, }, + to: []handler.Column{ + { + Name: "state", + }, + { + Name: "id", + }, + { + Name: "col_a", + }, + { + Name: "col_b", + }, + }, conds: []handler.Condition{ { Name: "id", @@ -958,11 +1015,78 @@ func TestNewCopyStatement(t *testing.T) { }, }, }, + { + name: "correct different column names", + args: args{ + table: "my_table", + event: &testEvent{ + aggregateType: "agg", + sequence: 1, + previousSequence: 0, + }, + from: []handler.Column{ + { + Value: 1, + }, + { + Name: "id", + }, + { + Name: "col_a", + }, + { + Name: "col_b", + }, + }, + to: []handler.Column{ + { + Name: "state", + }, + { + Name: "id", + }, + { + Name: "col_c", + }, + { + Name: "col_d", + }, + }, + conds: []handler.Condition{ + { + Name: "id", + Value: 2, + }, + { + Name: "state", + Value: 3, + }, + }, + }, + want: want{ + table: "my_table", + aggregateType: "agg", + sequence: 1, + previousSequence: 1, + executer: &wantExecuter{ + params: []params{ + { + query: "UPSERT INTO my_table (state, id, col_c, col_d) SELECT $1, id, col_a, col_b FROM my_table AS copy_table WHERE copy_table.id = $2 AND copy_table.state = $3", + args: []interface{}{1, 2, 3}, + }, + }, + shouldExecute: true, + }, + isErr: func(err error) bool { + return err == nil + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { tt.want.executer.t = t - stmt := NewCopyStatement(tt.args.event, tt.args.cols, tt.args.conds) + stmt := NewCopyStatement(tt.args.event, tt.args.from, tt.args.to, tt.args.conds) err := stmt.Execute(tt.want.executer, tt.args.table) if !tt.want.isErr(err) { diff --git a/internal/notification/notification.go b/internal/notification/notification.go deleted file mode 100644 index 2475279bfd..0000000000 --- a/internal/notification/notification.go +++ /dev/null @@ -1,38 +0,0 @@ -package notification - -import ( - "database/sql" - - "github.com/rakyll/statik/fs" - "github.com/zitadel/logging" - - "github.com/zitadel/zitadel/internal/crypto" - - "github.com/zitadel/zitadel/internal/command" - "github.com/zitadel/zitadel/internal/notification/repository/eventsourcing" - _ "github.com/zitadel/zitadel/internal/notification/statik" - "github.com/zitadel/zitadel/internal/query" -) - -type Config struct { - Repository eventsourcing.Config -} - -func Start(config Config, - externalPort uint16, - externalSecure bool, - command *command.Commands, - queries *query.Queries, - dbClient *sql.DB, - assetsPrefix, - fileSystemPath string, - userEncryption crypto.EncryptionAlgorithm, - smtpEncryption crypto.EncryptionAlgorithm, - smsEncryption crypto.EncryptionAlgorithm, -) { - statikFS, err := fs.NewWithNamespace("notification") - logging.OnError(err).Panic("unable to start listener") - - _, err = eventsourcing.Start(config.Repository, statikFS, externalPort, externalSecure, command, queries, dbClient, assetsPrefix, fileSystemPath, userEncryption, smtpEncryption, smsEncryption) - logging.OnError(err).Panic("unable to start app") -} diff --git a/internal/notification/projection.go b/internal/notification/projection.go new file mode 100644 index 0000000000..17452e2d99 --- /dev/null +++ b/internal/notification/projection.go @@ -0,0 +1,663 @@ +package notification + +import ( + "context" + "net/http" + "time" + + statik_fs "github.com/rakyll/statik/fs" + "github.com/zitadel/logging" + + "github.com/zitadel/zitadel/internal/api/authz" + http_utils "github.com/zitadel/zitadel/internal/api/http" + "github.com/zitadel/zitadel/internal/command" + "github.com/zitadel/zitadel/internal/crypto" + "github.com/zitadel/zitadel/internal/domain" + "github.com/zitadel/zitadel/internal/errors" + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/eventstore/handler" + "github.com/zitadel/zitadel/internal/eventstore/handler/crdb" + "github.com/zitadel/zitadel/internal/i18n" + "github.com/zitadel/zitadel/internal/notification/channels/fs" + "github.com/zitadel/zitadel/internal/notification/channels/log" + "github.com/zitadel/zitadel/internal/notification/channels/smtp" + "github.com/zitadel/zitadel/internal/notification/channels/twilio" + _ "github.com/zitadel/zitadel/internal/notification/statik" + "github.com/zitadel/zitadel/internal/notification/types" + "github.com/zitadel/zitadel/internal/query" + "github.com/zitadel/zitadel/internal/query/projection" + "github.com/zitadel/zitadel/internal/repository/user" +) + +const ( + NotificationsProjectionTable = "projections.notifications" + NotifyUserID = "NOTIFICATION" //TODO: system? +) + +func Start(ctx context.Context, customConfig projection.CustomConfig, externalPort uint16, externalSecure bool, commands *command.Commands, queries *query.Queries, es *eventstore.Eventstore, assetsPrefix func(context.Context) string, fileSystemPath string, userEncryption, smtpEncryption, smsEncryption crypto.EncryptionAlgorithm) { + statikFS, err := statik_fs.NewWithNamespace("notification") + logging.OnError(err).Panic("unable to start listener") + + projection.NotificationsProjection = newNotificationsProjection(ctx, projection.ApplyCustomConfig(customConfig), commands, queries, es, userEncryption, smtpEncryption, smsEncryption, externalSecure, externalPort, fileSystemPath, assetsPrefix, statikFS) +} + +type notificationsProjection struct { + crdb.StatementHandler + commands *command.Commands + queries *query.Queries + es *eventstore.Eventstore + userDataCrypto crypto.EncryptionAlgorithm + smtpPasswordCrypto crypto.EncryptionAlgorithm + smsTokenCrypto crypto.EncryptionAlgorithm + assetsPrefix func(context.Context) string + fileSystemPath string + externalPort uint16 + externalSecure bool + statikDir http.FileSystem +} + +func newNotificationsProjection( + ctx context.Context, + config crdb.StatementHandlerConfig, + commands *command.Commands, + queries *query.Queries, + es *eventstore.Eventstore, + userDataCrypto, + smtpPasswordCrypto, + smsTokenCrypto crypto.EncryptionAlgorithm, + externalSecure bool, + externalPort uint16, + fileSystemPath string, + assetsPrefix func(context.Context) string, + statikDir http.FileSystem, +) *notificationsProjection { + p := new(notificationsProjection) + config.ProjectionName = NotificationsProjectionTable + config.Reducers = p.reducers() + p.StatementHandler = crdb.NewStatementHandler(ctx, config) + p.commands = commands + p.queries = queries + p.es = es + p.userDataCrypto = userDataCrypto + p.smtpPasswordCrypto = smtpPasswordCrypto + p.smsTokenCrypto = smsTokenCrypto + p.assetsPrefix = assetsPrefix + p.externalPort = externalPort + p.externalSecure = externalSecure + p.fileSystemPath = fileSystemPath + p.statikDir = statikDir + + return p +} + +func (p *notificationsProjection) reducers() []handler.AggregateReducer { + return []handler.AggregateReducer{ + { + Aggregate: user.AggregateType, + EventRedusers: []handler.EventReducer{ + { + Event: user.UserV1InitialCodeAddedType, + Reduce: p.reduceInitCodeAdded, + }, + { + Event: user.HumanInitialCodeAddedType, + Reduce: p.reduceInitCodeAdded, + }, + { + Event: user.UserV1EmailCodeAddedType, + Reduce: p.reduceEmailCodeAdded, + }, + { + Event: user.HumanEmailCodeAddedType, + Reduce: p.reduceEmailCodeAdded, + }, + { + Event: user.UserV1PasswordCodeAddedType, + Reduce: p.reducePasswordCodeAdded, + }, + { + Event: user.HumanPasswordCodeAddedType, + Reduce: p.reducePasswordCodeAdded, + }, + { + Event: user.UserDomainClaimedType, + Reduce: p.reduceDomainClaimed, + }, + { + Event: user.HumanPasswordlessInitCodeRequestedType, + Reduce: p.reducePasswordlessCodeRequested, + }, + { + Event: user.UserV1PhoneCodeAddedType, + Reduce: p.reducePhoneCodeAdded, + }, + { + Event: user.HumanPhoneCodeAddedType, + Reduce: p.reducePhoneCodeAdded, + }, + }, + }, + } +} + +func (p *notificationsProjection) reduceInitCodeAdded(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.HumanInitialCodeAddedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-EFe2f", "reduce.wrong.event.type %s", user.HumanInitialCodeAddedType) + } + ctx := setNotificationContext(event.Aggregate()) + alreadyHandled, err := p.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil, + user.UserV1InitialCodeAddedType, user.UserV1InitialCodeSentType, + user.HumanInitialCodeAddedType, user.HumanInitialCodeSentType) + if err != nil { + return nil, err + } + if alreadyHandled { + return crdb.NewNoOpStatement(e), nil + } + code, err := crypto.DecryptString(e.Code, p.userDataCrypto) + if err != nil { + return nil, err + } + colors, err := p.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + template, err := p.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + notifyUser, err := p.queries.GeNotifyUser(ctx, true, e.Aggregate().ID) + if err != nil { + return nil, err + } + translator, err := p.getTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.InitCodeMessageType) + if err != nil { + return nil, err + } + + origin, err := p.origin(ctx) + if err != nil { + return nil, err + } + err = types.SendEmail( + ctx, + string(template.Template), + translator, + notifyUser, + p.getSMTPConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ).SendUserInitCode(notifyUser, origin, code) + if err != nil { + return nil, err + } + err = p.commands.HumanInitCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID) + if err != nil { + return nil, err + } + return crdb.NewNoOpStatement(e), nil +} + +func (p *notificationsProjection) reduceEmailCodeAdded(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.HumanEmailCodeAddedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SWf3g", "reduce.wrong.event.type %s", user.HumanEmailCodeAddedType) + } + ctx := setNotificationContext(event.Aggregate()) + alreadyHandled, err := p.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil, + user.UserV1EmailCodeAddedType, user.UserV1EmailCodeSentType, + user.HumanEmailCodeAddedType, user.HumanEmailCodeSentType) + if err != nil { + return nil, err + } + if alreadyHandled { + return crdb.NewNoOpStatement(e), nil + } + code, err := crypto.DecryptString(e.Code, p.userDataCrypto) + if err != nil { + return nil, err + } + colors, err := p.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + template, err := p.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + notifyUser, err := p.queries.GeNotifyUser(ctx, true, e.Aggregate().ID) + if err != nil { + return nil, err + } + translator, err := p.getTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.VerifyEmailMessageType) + if err != nil { + return nil, err + } + + origin, err := p.origin(ctx) + if err != nil { + return nil, err + } + err = types.SendEmail( + ctx, + string(template.Template), + translator, + notifyUser, + p.getSMTPConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ).SendEmailVerificationCode(notifyUser, origin, code) + if err != nil { + return nil, err + } + err = p.commands.HumanEmailVerificationCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID) + if err != nil { + return nil, err + } + return crdb.NewNoOpStatement(e), nil +} + +func (p *notificationsProjection) reducePasswordCodeAdded(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.HumanPasswordCodeAddedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Eeg3s", "reduce.wrong.event.type %s", user.HumanPasswordCodeAddedType) + } + ctx := setNotificationContext(event.Aggregate()) + alreadyHandled, err := p.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil, + user.UserV1PasswordCodeAddedType, user.UserV1PasswordCodeSentType, + user.HumanPasswordCodeAddedType, user.HumanPasswordCodeSentType) + if err != nil { + return nil, err + } + if alreadyHandled { + return crdb.NewNoOpStatement(e), nil + } + code, err := crypto.DecryptString(e.Code, p.userDataCrypto) + if err != nil { + return nil, err + } + colors, err := p.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + template, err := p.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + notifyUser, err := p.queries.GeNotifyUser(ctx, true, e.Aggregate().ID) + if err != nil { + return nil, err + } + translator, err := p.getTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordResetMessageType) + if err != nil { + return nil, err + } + + origin, err := p.origin(ctx) + if err != nil { + return nil, err + } + notify := types.SendEmail( + ctx, + string(template.Template), + translator, + notifyUser, + p.getSMTPConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ) + if e.NotificationType == domain.NotificationTypeSms { + notify = types.SendSMSTwilio( + ctx, + translator, + notifyUser, + p.getTwilioConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ) + } + err = notify.SendPasswordCode(notifyUser, origin, code) + if err != nil { + return nil, err + } + err = p.commands.PasswordCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID) + if err != nil { + return nil, err + } + return crdb.NewNoOpStatement(e), nil +} + +func (p *notificationsProjection) reduceDomainClaimed(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.DomainClaimedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Drh5w", "reduce.wrong.event.type %s", user.UserDomainClaimedType) + } + ctx := setNotificationContext(event.Aggregate()) + alreadyHandled, err := p.checkIfAlreadyHandled(ctx, event, nil, + user.UserDomainClaimedType, user.UserDomainClaimedSentType) + if err != nil { + return nil, err + } + if alreadyHandled { + return crdb.NewNoOpStatement(e), nil + } + colors, err := p.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + template, err := p.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + notifyUser, err := p.queries.GeNotifyUser(ctx, true, e.Aggregate().ID) + if err != nil { + return nil, err + } + translator, err := p.getTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.DomainClaimedMessageType) + if err != nil { + return nil, err + } + + origin, err := p.origin(ctx) + if err != nil { + return nil, err + } + err = types.SendEmail( + ctx, + string(template.Template), + translator, + notifyUser, + p.getSMTPConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ).SendDomainClaimed(notifyUser, origin, e.UserName) + if err != nil { + return nil, err + } + err = p.commands.UserDomainClaimedSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID) + if err != nil { + return nil, err + } + return crdb.NewNoOpStatement(e), nil +} + +func (p *notificationsProjection) reducePasswordlessCodeRequested(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.HumanPasswordlessInitCodeRequestedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-EDtjd", "reduce.wrong.event.type %s", user.HumanPasswordlessInitCodeAddedType) + } + ctx := setNotificationContext(event.Aggregate()) + alreadyHandled, err := p.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, map[string]interface{}{"id": e.ID}, user.HumanPasswordlessInitCodeSentType) + if err != nil { + return nil, err + } + if alreadyHandled { + return crdb.NewNoOpStatement(e), nil + } + code, err := crypto.DecryptString(e.Code, p.userDataCrypto) + if err != nil { + return nil, err + } + colors, err := p.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + template, err := p.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + notifyUser, err := p.queries.GeNotifyUser(ctx, true, e.Aggregate().ID) + if err != nil { + return nil, err + } + translator, err := p.getTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordlessRegistrationMessageType) + if err != nil { + return nil, err + } + + origin, err := p.origin(ctx) + if err != nil { + return nil, err + } + err = types.SendEmail( + ctx, + string(template.Template), + translator, + notifyUser, + p.getSMTPConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ).SendPasswordlessRegistrationLink(notifyUser, origin, code, e.ID) + if err != nil { + return nil, err + } + err = p.commands.HumanPasswordlessInitCodeSent(ctx, e.Aggregate().ID, e.Aggregate().ResourceOwner, e.ID) + if err != nil { + return nil, err + } + return crdb.NewNoOpStatement(e), nil +} + +func (p *notificationsProjection) reducePhoneCodeAdded(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.HumanPhoneCodeAddedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-He83g", "reduce.wrong.event.type %s", user.HumanPhoneCodeAddedType) + } + ctx := setNotificationContext(event.Aggregate()) + alreadyHandled, err := p.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil, + user.UserV1PhoneCodeAddedType, user.UserV1PhoneCodeSentType, + user.HumanPhoneCodeAddedType, user.HumanPhoneCodeSentType) + if err != nil { + return nil, err + } + if alreadyHandled { + return crdb.NewNoOpStatement(e), nil + } + code, err := crypto.DecryptString(e.Code, p.userDataCrypto) + if err != nil { + return nil, err + } + colors, err := p.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner) + if err != nil { + return nil, err + } + + notifyUser, err := p.queries.GeNotifyUser(ctx, true, e.Aggregate().ID) + if err != nil { + return nil, err + } + translator, err := p.getTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.VerifyPhoneMessageType) + if err != nil { + return nil, err + } + + origin, err := p.origin(ctx) + if err != nil { + return nil, err + } + err = types.SendSMSTwilio( + ctx, + translator, + notifyUser, + p.getTwilioConfig, + p.getFileSystemProvider, + p.getLogProvider, + colors, + p.assetsPrefix(ctx), + ).SendPhoneVerificationCode(notifyUser, origin, code) + if err != nil { + return nil, err + } + err = p.commands.HumanPhoneVerificationCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID) + if err != nil { + return nil, err + } + return crdb.NewNoOpStatement(e), nil +} + +func (p *notificationsProjection) checkIfCodeAlreadyHandledOrExpired(ctx context.Context, event eventstore.Event, expiry time.Duration, data map[string]interface{}, eventTypes ...eventstore.EventType) (bool, error) { + if event.CreationDate().Add(expiry).Before(time.Now().UTC()) { + return true, nil + } + return p.checkIfAlreadyHandled(ctx, event, data, eventTypes...) +} + +func (p *notificationsProjection) checkIfAlreadyHandled(ctx context.Context, event eventstore.Event, data map[string]interface{}, eventTypes ...eventstore.EventType) (bool, error) { + events, err := p.es.Filter( + ctx, + eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + InstanceID(event.Aggregate().InstanceID). + AddQuery(). + AggregateTypes(user.AggregateType). + AggregateIDs(event.Aggregate().ID). + SequenceGreater(event.Sequence()). + EventTypes(eventTypes...). + EventData(data). + Builder(), + ) + if err != nil { + return false, err + } + return len(events) > 0, nil +} +func (p *notificationsProjection) getSMTPConfig(ctx context.Context) (*smtp.EmailConfig, error) { + config, err := p.queries.SMTPConfigByAggregateID(ctx, authz.GetInstance(ctx).InstanceID()) + if err != nil { + return nil, err + } + password, err := crypto.DecryptString(config.Password, p.smtpPasswordCrypto) + if err != nil { + return nil, err + } + return &smtp.EmailConfig{ + From: config.SenderAddress, + FromName: config.SenderName, + Tls: config.TLS, + SMTP: smtp.SMTP{ + Host: config.Host, + User: config.User, + Password: password, + }, + }, nil +} + +// Read iam twilio config +func (p *notificationsProjection) getTwilioConfig(ctx context.Context) (*twilio.TwilioConfig, error) { + active, err := query.NewSMSProviderStateQuery(domain.SMSConfigStateActive) + if err != nil { + return nil, err + } + config, err := p.queries.SMSProviderConfig(ctx, active) + if err != nil { + return nil, err + } + if config.TwilioConfig == nil { + return nil, errors.ThrowNotFound(nil, "HANDLER-8nfow", "Errors.SMS.Twilio.NotFound") + } + token, err := crypto.DecryptString(config.TwilioConfig.Token, p.smsTokenCrypto) + if err != nil { + return nil, err + } + return &twilio.TwilioConfig{ + SID: config.TwilioConfig.SID, + Token: token, + SenderNumber: config.TwilioConfig.SenderNumber, + }, nil +} + +// Read iam filesystem provider config +func (p *notificationsProjection) getFileSystemProvider(ctx context.Context) (*fs.FSConfig, error) { + config, err := p.queries.NotificationProviderByIDAndType(ctx, authz.GetInstance(ctx).InstanceID(), domain.NotificationProviderTypeFile) + if err != nil { + return nil, err + } + return &fs.FSConfig{ + Compact: config.Compact, + Path: p.fileSystemPath, + }, nil +} + +// Read iam log provider config +func (p *notificationsProjection) getLogProvider(ctx context.Context) (*log.LogConfig, error) { + config, err := p.queries.NotificationProviderByIDAndType(ctx, authz.GetInstance(ctx).InstanceID(), domain.NotificationProviderTypeLog) + if err != nil { + return nil, err + } + return &log.LogConfig{ + Compact: config.Compact, + }, nil +} + +func (p *notificationsProjection) getTranslatorWithOrgTexts(ctx context.Context, orgID, textType string) (*i18n.Translator, error) { + translator, err := i18n.NewTranslator(p.statikDir, p.queries.GetDefaultLanguage(ctx), "") + if err != nil { + return nil, err + } + + allCustomTexts, err := p.queries.CustomTextListByTemplate(ctx, authz.GetInstance(ctx).InstanceID(), textType) + if err != nil { + return translator, nil + } + customTexts, err := p.queries.CustomTextListByTemplate(ctx, orgID, textType) + if err != nil { + return translator, nil + } + allCustomTexts.CustomTexts = append(allCustomTexts.CustomTexts, customTexts.CustomTexts...) + + for _, text := range allCustomTexts.CustomTexts { + msg := i18n.Message{ + ID: text.Template + "." + text.Key, + Text: text.Text, + } + err = translator.AddMessages(text.Language, msg) + logging.WithFields("instanceID", authz.GetInstance(ctx).InstanceID(), "orgID", orgID, "messageType", textType, "messageID", msg.ID). + OnError(err). + Warn("could not add translation message") + } + return translator, nil +} + +func (p *notificationsProjection) origin(ctx context.Context) (string, error) { + primary, err := query.NewInstanceDomainPrimarySearchQuery(true) + if err != nil { + return "", err + } + domains, err := p.queries.SearchInstanceDomains(ctx, &query.InstanceDomainSearchQueries{ + Queries: []query.SearchQuery{primary}, + }) + if err != nil { + return "", err + } + if len(domains.Domains) < 1 { + return "", errors.ThrowInternal(nil, "NOTIF-Ef3r1", "Errors.Notification.NoDomain") + } + return http_utils.BuildHTTP(domains.Domains[0].Domain, p.externalPort, p.externalSecure), nil +} + +func setNotificationContext(event eventstore.Aggregate) context.Context { + ctx := authz.WithInstanceID(context.Background(), event.InstanceID) + return authz.SetCtxData(ctx, authz.CtxData{UserID: NotifyUserID, OrgID: event.ResourceOwner}) +} diff --git a/internal/notification/repository/eventsourcing/handler/handler.go b/internal/notification/repository/eventsourcing/handler/handler.go deleted file mode 100644 index 303757f81d..0000000000 --- a/internal/notification/repository/eventsourcing/handler/handler.go +++ /dev/null @@ -1,89 +0,0 @@ -package handler - -import ( - "net/http" - "time" - - "github.com/zitadel/zitadel/internal/command" - "github.com/zitadel/zitadel/internal/crypto" - v1 "github.com/zitadel/zitadel/internal/eventstore/v1" - queryv1 "github.com/zitadel/zitadel/internal/eventstore/v1/query" - "github.com/zitadel/zitadel/internal/notification/repository/eventsourcing/view" - "github.com/zitadel/zitadel/internal/query" -) - -type Configs map[string]*Config - -type Config struct { - MinimumCycleDuration time.Duration -} - -type handler struct { - view *view.View - bulkLimit uint64 - cycleDuration time.Duration - errorCountUntilSkip uint64 - - es v1.Eventstore -} - -func (h *handler) Eventstore() v1.Eventstore { - return h.es -} - -func Register(configs Configs, - bulkLimit, - errorCount uint64, - view *view.View, - es v1.Eventstore, - command *command.Commands, - queries *query.Queries, - externalPort uint16, - externalSecure bool, - dir http.FileSystem, - assetsPrefix, - fileSystemPath string, - userEncryption crypto.EncryptionAlgorithm, - smtpEncryption crypto.EncryptionAlgorithm, - smsEncryption crypto.EncryptionAlgorithm, -) []queryv1.Handler { - return []queryv1.Handler{ - newNotifyUser( - handler{view, bulkLimit, configs.cycleDuration("User"), errorCount, es}, - queries, - ), - newNotification( - handler{view, bulkLimit, configs.cycleDuration("Notification"), errorCount, es}, - command, - queries, - externalPort, - externalSecure, - dir, - assetsPrefix, - fileSystemPath, - userEncryption, - smtpEncryption, - smsEncryption, - ), - } -} - -func (configs Configs) cycleDuration(viewModel string) time.Duration { - c, ok := configs[viewModel] - if !ok { - return 1 * time.Minute - } - return c.MinimumCycleDuration -} - -func (h *handler) MinimumCycleDuration() time.Duration { - return h.cycleDuration -} - -func (h *handler) LockDuration() time.Duration { - return h.cycleDuration / 3 -} - -func (h *handler) QueryLimit() uint64 { - return h.bulkLimit -} diff --git a/internal/notification/repository/eventsourcing/handler/notification.go b/internal/notification/repository/eventsourcing/handler/notification.go deleted file mode 100644 index df066d191b..0000000000 --- a/internal/notification/repository/eventsourcing/handler/notification.go +++ /dev/null @@ -1,637 +0,0 @@ -package handler - -import ( - "context" - "encoding/json" - "net/http" - "time" - - "github.com/zitadel/logging" - - "github.com/zitadel/zitadel/internal/api/authz" - http_utils "github.com/zitadel/zitadel/internal/api/http" - "github.com/zitadel/zitadel/internal/command" - "github.com/zitadel/zitadel/internal/crypto" - "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/errors" - "github.com/zitadel/zitadel/internal/eventstore" - v1 "github.com/zitadel/zitadel/internal/eventstore/v1" - "github.com/zitadel/zitadel/internal/eventstore/v1/models" - queryv1 "github.com/zitadel/zitadel/internal/eventstore/v1/query" - "github.com/zitadel/zitadel/internal/eventstore/v1/spooler" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/smtp" - "github.com/zitadel/zitadel/internal/notification/channels/twilio" - "github.com/zitadel/zitadel/internal/notification/types" - "github.com/zitadel/zitadel/internal/query" - user_repo "github.com/zitadel/zitadel/internal/repository/user" - es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model" - "github.com/zitadel/zitadel/internal/user/repository/view" - "github.com/zitadel/zitadel/internal/user/repository/view/model" -) - -const ( - notificationTable = "notification.notifications" - NotifyUserID = "NOTIFICATION" -) - -type Notification struct { - handler - command *command.Commands - fileSystemPath string - statikDir http.FileSystem - subscription *v1.Subscription - assetsPrefix string - queries *query.Queries - userDataCrypto crypto.EncryptionAlgorithm - smtpPasswordCrypto crypto.EncryptionAlgorithm - smsTokenCrypto crypto.EncryptionAlgorithm - externalPort uint16 - externalSecure bool -} - -func newNotification( - handler handler, - command *command.Commands, - query *query.Queries, - externalPort uint16, - externalSecure bool, - statikDir http.FileSystem, - assetsPrefix, - fileSystemPath string, - userEncryption crypto.EncryptionAlgorithm, - smtpEncryption crypto.EncryptionAlgorithm, - smsEncryption crypto.EncryptionAlgorithm, -) *Notification { - h := &Notification{ - handler: handler, - command: command, - statikDir: statikDir, - assetsPrefix: assetsPrefix, - queries: query, - userDataCrypto: userEncryption, - smtpPasswordCrypto: smtpEncryption, - smsTokenCrypto: smsEncryption, - externalSecure: externalSecure, - externalPort: externalPort, - fileSystemPath: fileSystemPath, - } - - h.subscribe() - - return h -} - -func (k *Notification) subscribe() { - k.subscription = k.es.Subscribe(k.AggregateTypes()...) - go func() { - for event := range k.subscription.Events { - queryv1.ReduceEvent(k, event) - } - }() -} - -func (n *Notification) ViewModel() string { - return notificationTable -} - -func (n *Notification) Subscription() *v1.Subscription { - return n.subscription -} - -func (_ *Notification) AggregateTypes() []models.AggregateType { - return []models.AggregateType{user_repo.AggregateType} -} - -func (n *Notification) CurrentSequence(instanceID string) (uint64, error) { - sequence, err := n.view.GetLatestNotificationSequence(instanceID) - if err != nil { - return 0, err - } - return sequence.CurrentSequence, nil -} - -func (n *Notification) EventQuery() (*models.SearchQuery, error) { - sequences, err := n.view.GetLatestNotificationSequences() - if err != nil { - return nil, err - } - query := models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(n.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(n.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil -} - -func (n *Notification) Reduce(event *models.Event) (err error) { - switch eventstore.EventType(event.Type) { - case user_repo.UserV1InitialCodeAddedType, - user_repo.HumanInitialCodeAddedType: - err = n.handleInitUserCode(event) - case user_repo.UserV1EmailCodeAddedType, - user_repo.HumanEmailCodeAddedType: - err = n.handleEmailVerificationCode(event) - case user_repo.UserV1PhoneCodeAddedType, - user_repo.HumanPhoneCodeAddedType: - err = n.handlePhoneVerificationCode(event) - case user_repo.UserV1PasswordCodeAddedType, - user_repo.HumanPasswordCodeAddedType: - err = n.handlePasswordCode(event) - case user_repo.UserDomainClaimedType: - err = n.handleDomainClaimed(event) - case user_repo.HumanPasswordlessInitCodeRequestedType: - err = n.handlePasswordlessRegistrationLink(event) - } - if err != nil { - return err - } - return n.view.ProcessedNotificationSequence(event) -} - -func (n *Notification) handleInitUserCode(event *models.Event) (err error) { - initCode := new(es_model.InitUserCode) - if err := initCode.SetData(event); err != nil { - return err - } - ctx := getSetNotifyContextData(event.InstanceID, event.ResourceOwner) - alreadyHandled, err := n.checkIfCodeAlreadyHandledOrExpired(ctx, event, initCode.Expiry, - user_repo.UserV1InitialCodeAddedType, user_repo.UserV1InitialCodeSentType, - user_repo.HumanInitialCodeAddedType, user_repo.HumanInitialCodeSentType) - if err != nil || alreadyHandled { - return err - } - colors, err := n.getLabelPolicy(ctx) - if err != nil { - return err - } - - template, err := n.getMailTemplate(ctx) - if err != nil { - return err - } - - user, err := n.getUserByID(event.AggregateID, event.InstanceID) - if err != nil && !errors.IsNotFound(err) { - return err - } - - if user.Sequence < event.Sequence { - if err = n.verifyLatestUser(ctx, user); err != nil { - return err - } - } - - if user.Sequence == 0 { - return errors.ThrowNotFound(nil, "HANDL-JED2R", "no user events found") - } - - translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.InitCodeMessageType) - if err != nil { - return err - } - - origin, err := n.origin(ctx) - if err != nil { - return err - } - err = types.SendUserInitCode(ctx, string(template.Template), translator, user, initCode, n.getSMTPConfig, n.getFileSystemProvider, n.getLogProvider, n.userDataCrypto, colors, n.assetsPrefix, origin) - if err != nil { - return err - } - return n.command.HumanInitCodeSent(ctx, event.ResourceOwner, event.AggregateID) -} - -func (n *Notification) handlePasswordCode(event *models.Event) (err error) { - pwCode := new(es_model.PasswordCode) - if err := pwCode.SetData(event); err != nil { - return err - } - ctx := getSetNotifyContextData(event.InstanceID, event.ResourceOwner) - alreadyHandled, err := n.checkIfCodeAlreadyHandledOrExpired(ctx, event, pwCode.Expiry, - user_repo.UserV1PasswordCodeAddedType, user_repo.UserV1PasswordCodeSentType, - user_repo.HumanPasswordCodeAddedType, user_repo.HumanPasswordCodeSentType) - if err != nil || alreadyHandled { - return err - } - colors, err := n.getLabelPolicy(ctx) - if err != nil { - return err - } - - template, err := n.getMailTemplate(ctx) - if err != nil { - return err - } - - user, err := n.getUserByID(event.AggregateID, event.InstanceID) - if err != nil && !errors.IsNotFound(err) { - return err - } - - if user.Sequence < event.Sequence { - if err = n.verifyLatestUser(ctx, user); err != nil { - return err - } - } - - if user.Sequence == 0 { - return errors.ThrowNotFound(nil, "HANDL-JED2R", "no user events found") - } - - translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.PasswordResetMessageType) - if err != nil { - return err - } - - origin, err := n.origin(ctx) - if err != nil { - return err - } - err = types.SendPasswordCode(ctx, string(template.Template), translator, user, pwCode, n.getSMTPConfig, n.getTwilioConfig, n.getFileSystemProvider, n.getLogProvider, n.userDataCrypto, colors, n.assetsPrefix, origin) - if err != nil { - return err - } - return n.command.PasswordCodeSent(ctx, event.ResourceOwner, event.AggregateID) -} - -func (n *Notification) handleEmailVerificationCode(event *models.Event) (err error) { - emailCode := new(es_model.EmailCode) - if err := emailCode.SetData(event); err != nil { - return err - } - ctx := getSetNotifyContextData(event.InstanceID, event.ResourceOwner) - alreadyHandled, err := n.checkIfCodeAlreadyHandledOrExpired(ctx, event, emailCode.Expiry, - user_repo.UserV1EmailCodeAddedType, user_repo.UserV1EmailCodeSentType, - user_repo.HumanEmailCodeAddedType, user_repo.HumanEmailCodeSentType) - if err != nil || alreadyHandled { - return nil - } - colors, err := n.getLabelPolicy(ctx) - if err != nil { - return err - } - - template, err := n.getMailTemplate(ctx) - if err != nil { - return err - } - - user, err := n.getUserByID(event.AggregateID, event.InstanceID) - if err != nil && !errors.IsNotFound(err) { - return err - } - if user.Sequence < event.Sequence { - if err = n.verifyLatestUser(ctx, user); err != nil { - return err - } - } - - if user.Sequence == 0 { - return errors.ThrowNotFound(nil, "HANDL-JED2R", "no user events found") - } - - translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.VerifyEmailMessageType) - if err != nil { - return err - } - - origin, err := n.origin(ctx) - if err != nil { - return err - } - err = types.SendEmailVerificationCode(ctx, string(template.Template), translator, user, emailCode, n.getSMTPConfig, n.getFileSystemProvider, n.getLogProvider, n.userDataCrypto, colors, n.assetsPrefix, origin) - if err != nil { - return err - } - return n.command.HumanEmailVerificationCodeSent(ctx, event.ResourceOwner, event.AggregateID) -} - -func (n *Notification) handlePhoneVerificationCode(event *models.Event) (err error) { - phoneCode := new(es_model.PhoneCode) - if err := phoneCode.SetData(event); err != nil { - return err - } - ctx := getSetNotifyContextData(event.InstanceID, event.ResourceOwner) - alreadyHandled, err := n.checkIfCodeAlreadyHandledOrExpired(ctx, event, phoneCode.Expiry, - user_repo.UserV1PhoneCodeAddedType, user_repo.UserV1PhoneCodeSentType, - user_repo.HumanPhoneCodeAddedType, user_repo.HumanPhoneCodeSentType) - if err != nil || alreadyHandled { - return nil - } - user, err := n.getUserByID(event.AggregateID, event.InstanceID) - if err != nil && !errors.IsNotFound(err) { - return err - } - - if user.Sequence < event.Sequence { - if err = n.verifyLatestUser(ctx, user); err != nil { - return err - } - } - - if user.Sequence == 0 { - return errors.ThrowNotFound(nil, "HANDL-JED2R", "no user events found") - } - - translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.VerifyPhoneMessageType) - if err != nil { - return err - } - err = types.SendPhoneVerificationCode(ctx, translator, user, phoneCode, n.getTwilioConfig, n.getFileSystemProvider, n.getLogProvider, n.userDataCrypto) - if err != nil { - return err - } - return n.command.HumanPhoneVerificationCodeSent(ctx, event.ResourceOwner, event.AggregateID) -} - -func (n *Notification) handleDomainClaimed(event *models.Event) (err error) { - ctx := getSetNotifyContextData(event.InstanceID, event.ResourceOwner) - alreadyHandled, err := n.checkIfAlreadyHandled(ctx, event.AggregateID, event.InstanceID, event.Sequence, user_repo.UserDomainClaimedType, user_repo.UserDomainClaimedSentType) - if err != nil || alreadyHandled { - return nil - } - data := make(map[string]string) - if err := json.Unmarshal(event.Data, &data); err != nil { - logging.Log("HANDLE-Gghq2").WithError(err).Error("could not unmarshal event data") - return errors.ThrowInternal(err, "HANDLE-7hgj3", "could not unmarshal event") - } - user, err := n.getUserByID(event.AggregateID, event.InstanceID) - if err != nil { - return err - } - if user.LastEmail == "" { - return nil - } - colors, err := n.getLabelPolicy(ctx) - if err != nil { - return err - } - - template, err := n.getMailTemplate(ctx) - if err != nil { - return err - } - - translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.DomainClaimedMessageType) - if err != nil { - return err - } - - origin, err := n.origin(ctx) - if err != nil { - return err - } - err = types.SendDomainClaimed(ctx, string(template.Template), translator, user, data["userName"], n.getSMTPConfig, n.getFileSystemProvider, n.getLogProvider, colors, n.assetsPrefix, origin) - if err != nil { - return err - } - return n.command.UserDomainClaimedSent(ctx, event.ResourceOwner, event.AggregateID) -} - -func (n *Notification) handlePasswordlessRegistrationLink(event *models.Event) (err error) { - addedEvent := new(user_repo.HumanPasswordlessInitCodeRequestedEvent) - if err := json.Unmarshal(event.Data, addedEvent); err != nil { - return err - } - ctx := getSetNotifyContextData(event.InstanceID, event.ResourceOwner) - events, err := n.getUserEvents(ctx, event.AggregateID, event.InstanceID, event.Sequence) - if err != nil { - return err - } - for _, e := range events { - if eventstore.EventType(e.Type) == user_repo.HumanPasswordlessInitCodeSentType { - sentEvent := new(user_repo.HumanPasswordlessInitCodeSentEvent) - if err := json.Unmarshal(e.Data, sentEvent); err != nil { - return err - } - if sentEvent.ID == addedEvent.ID { - return nil - } - } - } - user, err := n.getUserByID(event.AggregateID, event.InstanceID) - if err != nil { - return err - } - colors, err := n.getLabelPolicy(ctx) - if err != nil { - return err - } - - template, err := n.getMailTemplate(ctx) - if err != nil { - return err - } - - translator, err := n.getTranslatorWithOrgTexts(ctx, user.ResourceOwner, domain.PasswordlessRegistrationMessageType) - if err != nil { - return err - } - - origin, err := n.origin(ctx) - if err != nil { - return err - } - err = types.SendPasswordlessRegistrationLink(ctx, string(template.Template), translator, user, addedEvent, n.getSMTPConfig, n.getFileSystemProvider, n.getLogProvider, n.userDataCrypto, colors, n.assetsPrefix, origin) - if err != nil { - return err - } - return n.command.HumanPasswordlessInitCodeSent(ctx, event.AggregateID, event.ResourceOwner, addedEvent.ID) -} - -func (n *Notification) checkIfCodeAlreadyHandledOrExpired(ctx context.Context, event *models.Event, expiry time.Duration, eventTypes ...eventstore.EventType) (bool, error) { - if event.CreationDate.Add(expiry).Before(time.Now().UTC()) { - return true, nil - } - return n.checkIfAlreadyHandled(ctx, event.AggregateID, event.InstanceID, event.Sequence, eventTypes...) -} - -func (n *Notification) checkIfAlreadyHandled(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes ...eventstore.EventType) (bool, error) { - events, err := n.getUserEvents(ctx, userID, instanceID, sequence) - if err != nil { - return false, err - } - for _, event := range events { - for _, eventType := range eventTypes { - if eventstore.EventType(event.Type) == eventType { - return true, nil - } - } - } - return false, nil -} - -func (n *Notification) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64) ([]*models.Event, error) { - query, err := view.UserByIDQuery(userID, instanceID, sequence) - if err != nil { - return nil, err - } - - return n.es.FilterEvents(ctx, query) -} - -func (n *Notification) OnError(event *models.Event, err error) error { - logging.WithFields("id", event.AggregateID, "sequence", event.Sequence).WithError(err).Warn("something went wrong in notification handler") - return spooler.HandleError(event, err, n.view.GetLatestNotificationFailedEvent, n.view.ProcessedNotificationFailedEvent, n.view.ProcessedNotificationSequence, n.errorCountUntilSkip) -} - -func (n *Notification) OnSuccess() error { - return spooler.HandleSuccess(n.view.UpdateNotificationSpoolerRunTimestamp) -} - -func getSetNotifyContextData(instanceID, orgID string) context.Context { - ctx := authz.WithInstanceID(context.Background(), instanceID) - return authz.SetCtxData(ctx, authz.CtxData{UserID: NotifyUserID, OrgID: orgID}) -} - -// Read organization specific colors -func (n *Notification) getLabelPolicy(ctx context.Context) (*query.LabelPolicy, error) { - return n.queries.ActiveLabelPolicyByOrg(ctx, authz.GetCtxData(ctx).OrgID) -} - -// Read organization specific template -func (n *Notification) getMailTemplate(ctx context.Context) (*query.MailTemplate, error) { - return n.queries.MailTemplateByOrg(ctx, authz.GetCtxData(ctx).OrgID) -} - -// Read iam smtp config -func (n *Notification) getSMTPConfig(ctx context.Context) (*smtp.EmailConfig, error) { - config, err := n.queries.SMTPConfigByAggregateID(ctx, authz.GetInstance(ctx).InstanceID()) - if err != nil { - return nil, err - } - password, err := crypto.Decrypt(config.Password, n.smtpPasswordCrypto) - if err != nil { - return nil, err - } - return &smtp.EmailConfig{ - From: config.SenderAddress, - FromName: config.SenderName, - Tls: config.TLS, - SMTP: smtp.SMTP{ - Host: config.Host, - User: config.User, - Password: string(password), - }, - }, nil -} - -// Read iam twilio config -func (n *Notification) getTwilioConfig(ctx context.Context) (*twilio.TwilioConfig, error) { - active, err := query.NewSMSProviderStateQuery(domain.SMSConfigStateActive) - if err != nil { - return nil, err - } - config, err := n.queries.SMSProviderConfig(ctx, active) - if err != nil { - return nil, err - } - if config.TwilioConfig == nil { - return nil, errors.ThrowNotFound(nil, "HANDLER-8nfow", "Errors.SMS.Twilio.NotFound") - } - token, err := crypto.Decrypt(config.TwilioConfig.Token, n.smsTokenCrypto) - if err != nil { - return nil, err - } - return &twilio.TwilioConfig{ - SID: config.TwilioConfig.SID, - Token: string(token), - SenderNumber: config.TwilioConfig.SenderNumber, - }, nil -} - -// Read iam filesystem provider config -func (n *Notification) getFileSystemProvider(ctx context.Context) (*fs.FSConfig, error) { - config, err := n.queries.NotificationProviderByIDAndType(ctx, authz.GetInstance(ctx).InstanceID(), domain.NotificationProviderTypeFile) - if err != nil { - return nil, err - } - return &fs.FSConfig{ - Compact: config.Compact, - Path: n.fileSystemPath, - }, nil -} - -// Read iam log provider config -func (n *Notification) getLogProvider(ctx context.Context) (*log.LogConfig, error) { - config, err := n.queries.NotificationProviderByIDAndType(ctx, authz.GetInstance(ctx).InstanceID(), domain.NotificationProviderTypeLog) - if err != nil { - return nil, err - } - return &log.LogConfig{ - Compact: config.Compact, - }, nil -} - -func (n *Notification) getTranslatorWithOrgTexts(ctx context.Context, orgID, textType string) (*i18n.Translator, error) { - translator, err := i18n.NewTranslator(n.statikDir, n.queries.GetDefaultLanguage(ctx), "") - if err != nil { - return nil, err - } - - allCustomTexts, err := n.queries.CustomTextListByTemplate(ctx, authz.GetInstance(ctx).InstanceID(), textType) - if err != nil { - return translator, nil - } - customTexts, err := n.queries.CustomTextListByTemplate(ctx, orgID, textType) - if err != nil { - return translator, nil - } - allCustomTexts.CustomTexts = append(allCustomTexts.CustomTexts, customTexts.CustomTexts...) - - for _, text := range allCustomTexts.CustomTexts { - msg := i18n.Message{ - ID: text.Template + "." + text.Key, - Text: text.Text, - } - translator.AddMessages(text.Language, msg) - } - return translator, nil -} - -func (n *Notification) getUserByID(userID, instanceID string) (*model.NotifyUser, error) { - return n.view.NotifyUserByID(userID, instanceID) -} - -func (n *Notification) origin(ctx context.Context) (string, error) { - primary, err := query.NewInstanceDomainPrimarySearchQuery(true) - domains, err := n.queries.SearchInstanceDomains(ctx, &query.InstanceDomainSearchQueries{ - Queries: []query.SearchQuery{primary}, - }) - if err != nil { - return "", err - } - if len(domains.Domains) < 1 { - return "", errors.ThrowInternal(nil, "NOTIF-Ef3r1", "Errors.Notification.NoDomain") - } - return http_utils.BuildHTTP(domains.Domains[0].Domain, n.externalPort, n.externalSecure), nil -} - -func (n *Notification) verifyLatestUser(ctx context.Context, user *model.NotifyUser) error { - events, err := n.getUserEvents(ctx, user.ID, user.InstanceID, user.Sequence) - if err != nil { - return err - } - for _, event := range events { - if err = user.AppendEvent(event); err != nil { - return err - } - } - return nil -} diff --git a/internal/notification/repository/eventsourcing/handler/notify_user.go b/internal/notification/repository/eventsourcing/handler/notify_user.go deleted file mode 100644 index 9ea5081156..0000000000 --- a/internal/notification/repository/eventsourcing/handler/notify_user.go +++ /dev/null @@ -1,278 +0,0 @@ -package handler - -import ( - "context" - - "github.com/zitadel/logging" - - "github.com/zitadel/zitadel/internal/api/authz" - caos_errs "github.com/zitadel/zitadel/internal/errors" - "github.com/zitadel/zitadel/internal/eventstore" - v1 "github.com/zitadel/zitadel/internal/eventstore/v1" - es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models" - "github.com/zitadel/zitadel/internal/eventstore/v1/query" - es_sdk "github.com/zitadel/zitadel/internal/eventstore/v1/sdk" - "github.com/zitadel/zitadel/internal/eventstore/v1/spooler" - org_model "github.com/zitadel/zitadel/internal/org/model" - org_es_model "github.com/zitadel/zitadel/internal/org/repository/eventsourcing/model" - org_view "github.com/zitadel/zitadel/internal/org/repository/view" - query2 "github.com/zitadel/zitadel/internal/query" - "github.com/zitadel/zitadel/internal/repository/org" - "github.com/zitadel/zitadel/internal/repository/user" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" -) - -const ( - userTable = "notification.notify_users" -) - -type NotifyUser struct { - handler - subscription *v1.Subscription - queries *query2.Queries -} - -func newNotifyUser( - handler handler, - queries *query2.Queries, -) *NotifyUser { - h := &NotifyUser{ - handler: handler, - queries: queries, - } - - h.subscribe() - - return h -} - -func (k *NotifyUser) subscribe() { - k.subscription = k.es.Subscribe(k.AggregateTypes()...) - go func() { - for event := range k.subscription.Events { - query.ReduceEvent(k, event) - } - }() -} - -func (p *NotifyUser) ViewModel() string { - return userTable -} - -func (p *NotifyUser) Subscription() *v1.Subscription { - return p.subscription -} - -func (_ *NotifyUser) AggregateTypes() []es_models.AggregateType { - return []es_models.AggregateType{user.AggregateType, org.AggregateType} -} - -func (p *NotifyUser) CurrentSequence(instanceID string) (uint64, error) { - sequence, err := p.view.GetLatestNotifyUserSequence(instanceID) - if err != nil { - return 0, err - } - return sequence.CurrentSequence, nil -} - -func (p *NotifyUser) EventQuery() (*es_models.SearchQuery, error) { - sequences, err := p.view.GetLatestNotifyUserSequences() - if err != nil { - return nil, err - } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(p.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(p.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil -} - -func (u *NotifyUser) Reduce(event *es_models.Event) (err error) { - switch event.AggregateType { - case user.AggregateType: - return u.ProcessUser(event) - case org.AggregateType: - return u.ProcessOrg(event) - default: - return nil - } -} - -func (u *NotifyUser) ProcessUser(event *es_models.Event) (err error) { - notifyUser := new(view_model.NotifyUser) - switch eventstore.EventType(event.Type) { - case user.UserV1AddedType, - user.UserV1RegisteredType, - user.HumanRegisteredType, - user.HumanAddedType, - user.MachineAddedEventType: - err = notifyUser.AppendEvent(event) - if err != nil { - return err - } - err = u.fillLoginNames(notifyUser) - case user.UserV1ProfileChangedType, - user.UserV1EmailChangedType, - user.UserV1EmailVerifiedType, - user.UserV1PhoneChangedType, - user.UserV1PhoneVerifiedType, - user.UserV1PhoneRemovedType, - user.HumanProfileChangedType, - user.HumanEmailChangedType, - user.HumanEmailVerifiedType, - user.HumanPhoneChangedType, - user.HumanPhoneVerifiedType, - user.HumanPhoneRemovedType, - user.MachineChangedEventType: - notifyUser, err = u.view.NotifyUserByID(event.AggregateID, event.InstanceID) - if err != nil { - return err - } - err = notifyUser.AppendEvent(event) - case user.UserDomainClaimedType, - user.UserUserNameChangedType: - notifyUser, err = u.view.NotifyUserByID(event.AggregateID, event.InstanceID) - if err != nil { - return err - } - err = notifyUser.AppendEvent(event) - if err != nil { - return err - } - err = u.fillLoginNames(notifyUser) - case user.UserRemovedType: - return u.view.DeleteNotifyUser(event.AggregateID, event.InstanceID, event) - default: - return u.view.ProcessedNotifyUserSequence(event) - } - if err != nil { - return err - } - return u.view.PutNotifyUser(notifyUser, event) -} - -func (u *NotifyUser) ProcessOrg(event *es_models.Event) (err error) { - switch eventstore.EventType(event.Type) { - case org.OrgDomainVerifiedEventType, - org.OrgDomainRemovedEventType, - org.DomainPolicyAddedEventType, - org.DomainPolicyChangedEventType, - org.DomainPolicyRemovedEventType: - return u.fillLoginNamesOnOrgUsers(event) - case org.OrgDomainPrimarySetEventType: - return u.fillPreferredLoginNamesOnOrgUsers(event) - default: - return u.view.ProcessedNotifyUserSequence(event) - } -} - -func (u *NotifyUser) fillLoginNamesOnOrgUsers(event *es_models.Event) error { - userLoginMustBeDomain, _, domains, err := u.loginNameInformation(context.Background(), event.ResourceOwner, event.InstanceID) - if err != nil { - return err - } - users, err := u.view.NotifyUsersByOrgID(event.AggregateID, event.InstanceID) - if err != nil { - return err - } - for _, user := range users { - user.SetLoginNames(userLoginMustBeDomain, domains) - err := u.view.PutNotifyUser(user, event) - if err != nil { - return err - } - } - return u.view.ProcessedNotifyUserSequence(event) -} - -func (u *NotifyUser) fillPreferredLoginNamesOnOrgUsers(event *es_models.Event) error { - userLoginMustBeDomain, primaryDomain, _, err := u.loginNameInformation(context.Background(), event.ResourceOwner, event.InstanceID) - if err != nil { - return err - } - if !userLoginMustBeDomain { - return nil - } - users, err := u.view.NotifyUsersByOrgID(event.AggregateID, event.InstanceID) - if err != nil { - return err - } - for _, user := range users { - user.PreferredLoginName = user.GenerateLoginName(primaryDomain, userLoginMustBeDomain) - err := u.view.PutNotifyUser(user, event) - if err != nil { - return err - } - } - return nil -} - -func (u *NotifyUser) fillLoginNames(user *view_model.NotifyUser) (err error) { - userLoginMustBeDomain, primaryDomain, domains, err := u.loginNameInformation(context.Background(), user.ResourceOwner, user.InstanceID) - if err != nil { - return err - } - user.SetLoginNames(userLoginMustBeDomain, domains) - user.PreferredLoginName = user.GenerateLoginName(primaryDomain, userLoginMustBeDomain) - return nil -} - -func (p *NotifyUser) OnError(event *es_models.Event, err error) error { - logging.LogWithFields("SPOOL-9spwf", "id", event.AggregateID).WithError(err).Warn("something went wrong in notify user handler") - return spooler.HandleError(event, err, p.view.GetLatestNotifyUserFailedEvent, p.view.ProcessedNotifyUserFailedEvent, p.view.ProcessedNotifyUserSequence, p.errorCountUntilSkip) -} - -func (u *NotifyUser) OnSuccess() error { - return spooler.HandleSuccess(u.view.UpdateNotifyUserSpoolerRunTimestamp) -} - -func (u *NotifyUser) getOrgByID(ctx context.Context, orgID, instanceID string) (*org_model.Org, error) { - query, err := org_view.OrgByIDQuery(orgID, instanceID, 0) - if err != nil { - return nil, err - } - - esOrg := &org_es_model.Org{ - ObjectRoot: es_models.ObjectRoot{ - AggregateID: orgID, - }, - } - err = es_sdk.Filter(ctx, u.Eventstore().FilterEvents, esOrg.AppendEvents, query) - if err != nil && !caos_errs.IsNotFound(err) { - return nil, err - } - if esOrg.Sequence == 0 { - return nil, caos_errs.ThrowNotFound(nil, "EVENT-kVLb2", "Errors.Org.NotFound") - } - - return org_es_model.OrgToModel(esOrg), nil -} - -func (u *NotifyUser) loginNameInformation(ctx context.Context, orgID, instanceID string) (userLoginMustBeDomain bool, primaryDomain string, domains []*org_model.OrgDomain, err error) { - org, err := u.getOrgByID(ctx, orgID, instanceID) - if err != nil { - return false, "", nil, err - } - if org.DomainPolicy == nil { - policy, err := u.queries.DefaultDomainPolicy(authz.WithInstanceID(ctx, org.InstanceID)) - if err != nil { - return false, "", nil, err - } - userLoginMustBeDomain = policy.UserLoginMustBeDomain - } - return userLoginMustBeDomain, org.GetPrimaryDomain().Domain, org.Domains, nil -} diff --git a/internal/notification/repository/eventsourcing/repository.go b/internal/notification/repository/eventsourcing/repository.go deleted file mode 100644 index 9bb6065ae1..0000000000 --- a/internal/notification/repository/eventsourcing/repository.go +++ /dev/null @@ -1,56 +0,0 @@ -package eventsourcing - -import ( - "database/sql" - "net/http" - - "github.com/zitadel/zitadel/internal/command" - "github.com/zitadel/zitadel/internal/crypto" - v1 "github.com/zitadel/zitadel/internal/eventstore/v1" - es_spol "github.com/zitadel/zitadel/internal/eventstore/v1/spooler" - "github.com/zitadel/zitadel/internal/notification/repository/eventsourcing/spooler" - noti_view "github.com/zitadel/zitadel/internal/notification/repository/eventsourcing/view" - "github.com/zitadel/zitadel/internal/query" -) - -type Config struct { - Spooler spooler.SpoolerConfig -} - -type EsRepository struct { - spooler *es_spol.Spooler -} - -func Start(conf Config, - dir http.FileSystem, - externalPort uint16, - externalSecure bool, - command *command.Commands, - queries *query.Queries, - dbClient *sql.DB, - assetsPrefix, - fileSystemPath string, - userEncryption crypto.EncryptionAlgorithm, - smtpEncryption crypto.EncryptionAlgorithm, - smsEncryption crypto.EncryptionAlgorithm, -) (*EsRepository, error) { - es, err := v1.Start(dbClient) - if err != nil { - return nil, err - } - - view, err := noti_view.StartView(dbClient) - if err != nil { - return nil, err - } - - spool := spooler.StartSpooler(conf.Spooler, es, view, dbClient, command, queries, externalPort, externalSecure, dir, assetsPrefix, fileSystemPath, userEncryption, smtpEncryption, smsEncryption) - - return &EsRepository{ - spool, - }, nil -} - -func (repo *EsRepository) Health() error { - return nil -} diff --git a/internal/notification/repository/eventsourcing/spooler/lock.go b/internal/notification/repository/eventsourcing/spooler/lock.go deleted file mode 100644 index d773a3c399..0000000000 --- a/internal/notification/repository/eventsourcing/spooler/lock.go +++ /dev/null @@ -1,20 +0,0 @@ -package spooler - -import ( - "database/sql" - "time" - - es_locker "github.com/zitadel/zitadel/internal/eventstore/v1/locker" -) - -const ( - lockTable = "notification.locks" -) - -type locker struct { - dbClient *sql.DB -} - -func (l *locker) Renew(lockerID, viewModel, instanceID string, waitTime time.Duration) error { - return es_locker.Renew(l.dbClient, lockTable, lockerID, viewModel, instanceID, waitTime) -} diff --git a/internal/notification/repository/eventsourcing/spooler/spooler.go b/internal/notification/repository/eventsourcing/spooler/spooler.go deleted file mode 100644 index 685dbe5c44..0000000000 --- a/internal/notification/repository/eventsourcing/spooler/spooler.go +++ /dev/null @@ -1,47 +0,0 @@ -package spooler - -import ( - "database/sql" - "net/http" - - "github.com/zitadel/zitadel/internal/command" - "github.com/zitadel/zitadel/internal/crypto" - v1 "github.com/zitadel/zitadel/internal/eventstore/v1" - "github.com/zitadel/zitadel/internal/eventstore/v1/spooler" - "github.com/zitadel/zitadel/internal/notification/repository/eventsourcing/handler" - "github.com/zitadel/zitadel/internal/notification/repository/eventsourcing/view" - "github.com/zitadel/zitadel/internal/query" -) - -type SpoolerConfig struct { - BulkLimit uint64 - FailureCountUntilSkip uint64 - ConcurrentWorkers int - Handlers handler.Configs -} - -func StartSpooler(c SpoolerConfig, - es v1.Eventstore, - view *view.View, - sql *sql.DB, - command *command.Commands, - queries *query.Queries, - externalPort uint16, - externalSecure bool, - dir http.FileSystem, - assetsPrefix, - fileSystemPath string, - userEncryption crypto.EncryptionAlgorithm, - smtpEncryption crypto.EncryptionAlgorithm, - smsEncryption crypto.EncryptionAlgorithm, -) *spooler.Spooler { - spoolerConfig := spooler.Config{ - Eventstore: es, - Locker: &locker{dbClient: sql}, - ConcurrentWorkers: c.ConcurrentWorkers, - ViewHandlers: handler.Register(c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, command, queries, externalPort, externalSecure, dir, assetsPrefix, fileSystemPath, userEncryption, smtpEncryption, smsEncryption), - } - spool := spoolerConfig.New() - spool.Start() - return spool -} diff --git a/internal/notification/repository/eventsourcing/view/error_event.go b/internal/notification/repository/eventsourcing/view/error_event.go deleted file mode 100644 index 73ad6678d8..0000000000 --- a/internal/notification/repository/eventsourcing/view/error_event.go +++ /dev/null @@ -1,17 +0,0 @@ -package view - -import ( - "github.com/zitadel/zitadel/internal/view/repository" -) - -const ( - errTable = "notification.failed_events" -) - -func (v *View) saveFailedEvent(failedEvent *repository.FailedEvent) error { - return repository.SaveFailedEvent(v.Db, errTable, failedEvent) -} - -func (v *View) latestFailedEvent(viewName, instanceID string, sequence uint64) (*repository.FailedEvent, error) { - return repository.LatestFailedEvent(v.Db, errTable, viewName, instanceID, sequence) -} diff --git a/internal/notification/repository/eventsourcing/view/notification.go b/internal/notification/repository/eventsourcing/view/notification.go deleted file mode 100644 index c0810c6b43..0000000000 --- a/internal/notification/repository/eventsourcing/view/notification.go +++ /dev/null @@ -1,34 +0,0 @@ -package view - -import ( - "github.com/zitadel/zitadel/internal/eventstore/v1/models" - "github.com/zitadel/zitadel/internal/view/repository" -) - -const ( - notificationTable = "notification.notifications" -) - -func (v *View) GetLatestNotificationSequence(instanceID string) (*repository.CurrentSequence, error) { - return v.latestSequence(notificationTable, instanceID) -} - -func (v *View) GetLatestNotificationSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(notificationTable) -} - -func (v *View) ProcessedNotificationSequence(event *models.Event) error { - return v.saveCurrentSequence(notificationTable, event) -} - -func (v *View) UpdateNotificationSpoolerRunTimestamp() error { - return v.updateSpoolerRunSequence(notificationTable) -} - -func (v *View) GetLatestNotificationFailedEvent(sequence uint64, instanceID string) (*repository.FailedEvent, error) { - return v.latestFailedEvent(notificationTable, instanceID, sequence) -} - -func (v *View) ProcessedNotificationFailedEvent(failedEvent *repository.FailedEvent) error { - return v.saveFailedEvent(failedEvent) -} diff --git a/internal/notification/repository/eventsourcing/view/notify_user.go b/internal/notification/repository/eventsourcing/view/notify_user.go deleted file mode 100644 index d5639264f1..0000000000 --- a/internal/notification/repository/eventsourcing/view/notify_user.go +++ /dev/null @@ -1,61 +0,0 @@ -package view - -import ( - "github.com/zitadel/zitadel/internal/errors" - "github.com/zitadel/zitadel/internal/eventstore/v1/models" - "github.com/zitadel/zitadel/internal/user/repository/view" - "github.com/zitadel/zitadel/internal/user/repository/view/model" - "github.com/zitadel/zitadel/internal/view/repository" -) - -const ( - notifyUserTable = "notification.notify_users" -) - -func (v *View) NotifyUserByID(userID, instanceID string) (*model.NotifyUser, error) { - return view.NotifyUserByID(v.Db, notifyUserTable, userID, instanceID) -} - -func (v *View) PutNotifyUser(user *model.NotifyUser, event *models.Event) error { - err := view.PutNotifyUser(v.Db, notifyUserTable, user) - if err != nil { - return err - } - return v.ProcessedNotifyUserSequence(event) -} - -func (v *View) NotifyUsersByOrgID(orgID, instanceID string) ([]*model.NotifyUser, error) { - return view.NotifyUsersByOrgID(v.Db, notifyUserTable, orgID, instanceID) -} - -func (v *View) DeleteNotifyUser(userID, instanceID string, event *models.Event) error { - err := view.DeleteNotifyUser(v.Db, notifyUserTable, userID, instanceID) - if err != nil && !errors.IsNotFound(err) { - return err - } - return v.ProcessedNotifyUserSequence(event) -} - -func (v *View) GetLatestNotifyUserSequence(instanceID string) (*repository.CurrentSequence, error) { - return v.latestSequence(notifyUserTable, instanceID) -} - -func (v *View) GetLatestNotifyUserSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(notifyUserTable) -} - -func (v *View) ProcessedNotifyUserSequence(event *models.Event) error { - return v.saveCurrentSequence(notifyUserTable, event) -} - -func (v *View) UpdateNotifyUserSpoolerRunTimestamp() error { - return v.updateSpoolerRunSequence(notifyUserTable) -} - -func (v *View) GetLatestNotifyUserFailedEvent(sequence uint64, instanceID string) (*repository.FailedEvent, error) { - return v.latestFailedEvent(notifyUserTable, instanceID, sequence) -} - -func (v *View) ProcessedNotifyUserFailedEvent(failedEvent *repository.FailedEvent) error { - return v.saveFailedEvent(failedEvent) -} diff --git a/internal/notification/repository/eventsourcing/view/sequence.go b/internal/notification/repository/eventsourcing/view/sequence.go deleted file mode 100644 index 8c7307ef72..0000000000 --- a/internal/notification/repository/eventsourcing/view/sequence.go +++ /dev/null @@ -1,38 +0,0 @@ -package view - -import ( - "time" - - "github.com/zitadel/zitadel/internal/eventstore/v1/models" - "github.com/zitadel/zitadel/internal/view/repository" -) - -const ( - sequencesTable = "notification.current_sequences" -) - -func (v *View) saveCurrentSequence(viewName string, event *models.Event) error { - return repository.SaveCurrentSequence(v.Db, sequencesTable, viewName, event.InstanceID, event.Sequence, event.CreationDate) -} - -func (v *View) latestSequence(viewName, instanceID string) (*repository.CurrentSequence, error) { - return repository.LatestSequence(v.Db, sequencesTable, viewName, instanceID) -} - -func (v *View) latestSequences(viewName string) ([]*repository.CurrentSequence, error) { - return repository.LatestSequences(v.Db, sequencesTable, viewName) -} - -func (v *View) updateSpoolerRunSequence(viewName string) error { - currentSequences, err := repository.LatestSequences(v.Db, sequencesTable, viewName) - if err != nil { - return err - } - for _, currentSequence := range currentSequences { - if currentSequence.ViewName == "" { - currentSequence.ViewName = viewName - } - currentSequence.LastSuccessfulSpoolerRun = time.Now() - } - return repository.UpdateCurrentSequences(v.Db, sequencesTable, currentSequences) -} diff --git a/internal/notification/repository/eventsourcing/view/view.go b/internal/notification/repository/eventsourcing/view/view.go deleted file mode 100644 index 4b8c52392d..0000000000 --- a/internal/notification/repository/eventsourcing/view/view.go +++ /dev/null @@ -1,25 +0,0 @@ -package view - -import ( - "database/sql" - - "github.com/jinzhu/gorm" -) - -type View struct { - Db *gorm.DB -} - -func StartView(sqlClient *sql.DB) (*View, error) { - gorm, err := gorm.Open("postgres", sqlClient) - if err != nil { - return nil, err - } - return &View{ - Db: gorm, - }, nil -} - -func (v *View) Health() (err error) { - return v.Db.DB().Ping() -} diff --git a/internal/notification/repository/repository.go b/internal/notification/repository/repository.go deleted file mode 100644 index f99114e05f..0000000000 --- a/internal/notification/repository/repository.go +++ /dev/null @@ -1,5 +0,0 @@ -package repository - -type Repository interface { - Health() error -} diff --git a/internal/notification/templates/templateData.go b/internal/notification/templates/templateData.go index 75b4433923..29a74f3328 100644 --- a/internal/notification/templates/templateData.go +++ b/internal/notification/templates/templateData.go @@ -21,7 +21,7 @@ type TemplateData struct { Subject string Greeting string Text string - Href string + URL string ButtonText string PrimaryColor string BackgroundColor string diff --git a/internal/notification/types/domain_claimed.go b/internal/notification/types/domain_claimed.go index 4ebad6708c..cc6159454b 100644 --- a/internal/notification/types/domain_claimed.go +++ b/internal/notification/types/domain_claimed.go @@ -1,38 +1,17 @@ package types import ( - "context" "strings" "github.com/zitadel/zitadel/internal/api/ui/login" "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/smtp" - "github.com/zitadel/zitadel/internal/notification/templates" "github.com/zitadel/zitadel/internal/query" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" ) -type DomainClaimedData struct { - templates.TemplateData - URL string -} - -func SendDomainClaimed(ctx context.Context, mailhtml string, translator *i18n.Translator, user *view_model.NotifyUser, username string, emailConfig func(ctx context.Context) (*smtp.EmailConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), colors *query.LabelPolicy, assetsPrefix string, origin string) error { +func (notify Notify) SendDomainClaimed(user *query.NotifyUser, origin, username string) error { url := login.LoginLink(origin, user.ResourceOwner) - var args = mapNotifyUserToArgs(user) + args := make(map[string]interface{}) args["TempUsername"] = username args["Domain"] = strings.Split(user.LastEmail, "@")[1] - - domainClaimedData := &DomainClaimedData{ - TemplateData: GetTemplateData(translator, args, assetsPrefix, url, domain.DomainClaimedMessageType, user.PreferredLanguage, colors), - URL: url, - } - template, err := templates.GetParsedTemplate(mailhtml, domainClaimedData) - if err != nil { - return err - } - return generateEmail(ctx, user, domainClaimedData.Subject, template, emailConfig, getFileSystemProvider, getLogProvider, true) + return notify(url, args, domain.DomainClaimedMessageType, true) } diff --git a/internal/notification/types/email_verification_code.go b/internal/notification/types/email_verification_code.go index 9170e41b78..5f4ab071fb 100644 --- a/internal/notification/types/email_verification_code.go +++ b/internal/notification/types/email_verification_code.go @@ -1,43 +1,14 @@ package types import ( - "context" - "github.com/zitadel/zitadel/internal/api/ui/login" - "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/smtp" - "github.com/zitadel/zitadel/internal/notification/templates" "github.com/zitadel/zitadel/internal/query" - es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" ) -type EmailVerificationCodeData struct { - templates.TemplateData - URL string -} - -func SendEmailVerificationCode(ctx context.Context, mailhtml string, translator *i18n.Translator, user *view_model.NotifyUser, code *es_model.EmailCode, smtpConfig func(ctx context.Context) (*smtp.EmailConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), alg crypto.EncryptionAlgorithm, colors *query.LabelPolicy, assetsPrefix string, origin string) error { - codeString, err := crypto.DecryptString(code.Code, alg) - if err != nil { - return err - } - url := login.MailVerificationLink(origin, user.ID, codeString, user.ResourceOwner) - var args = mapNotifyUserToArgs(user) - args["Code"] = codeString - - emailCodeData := &EmailVerificationCodeData{ - TemplateData: GetTemplateData(translator, args, assetsPrefix, url, domain.VerifyEmailMessageType, user.PreferredLanguage, colors), - URL: url, - } - - template, err := templates.GetParsedTemplate(mailhtml, emailCodeData) - if err != nil { - return err - } - return generateEmail(ctx, user, emailCodeData.Subject, template, smtpConfig, getFileSystemProvider, getLogProvider, true) +func (notify Notify) SendEmailVerificationCode(user *query.NotifyUser, origin, code string) error { + url := login.MailVerificationLink(origin, user.ID, code, user.ResourceOwner) + args := make(map[string]interface{}) + args["Code"] = code + return notify(url, args, domain.VerifyEmailMessageType, true) } diff --git a/internal/notification/types/init_code.go b/internal/notification/types/init_code.go index e4b6095e28..01399ef29d 100644 --- a/internal/notification/types/init_code.go +++ b/internal/notification/types/init_code.go @@ -1,49 +1,14 @@ package types import ( - "context" - "github.com/zitadel/zitadel/internal/api/ui/login" - "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/smtp" - "github.com/zitadel/zitadel/internal/notification/templates" "github.com/zitadel/zitadel/internal/query" - es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" ) -type InitCodeEmailData struct { - templates.TemplateData - URL string -} - -type UrlData struct { - UserID string - Code string - PasswordSet bool - OrgID string -} - -func SendUserInitCode(ctx context.Context, mailhtml string, translator *i18n.Translator, user *view_model.NotifyUser, code *es_model.InitUserCode, smtpConfig func(ctx context.Context) (*smtp.EmailConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), alg crypto.EncryptionAlgorithm, colors *query.LabelPolicy, assetsPrefix, origin string) error { - codeString, err := crypto.DecryptString(code.Code, alg) - if err != nil { - return err - } - url := login.InitUserLink(origin, user.ID, codeString, user.ResourceOwner, user.PasswordSet) - var args = mapNotifyUserToArgs(user) - args["Code"] = codeString - - initCodeData := &InitCodeEmailData{ - TemplateData: GetTemplateData(translator, args, assetsPrefix, url, domain.InitCodeMessageType, user.PreferredLanguage, colors), - URL: url, - } - template, err := templates.GetParsedTemplate(mailhtml, initCodeData) - if err != nil { - return err - } - return generateEmail(ctx, user, initCodeData.Subject, template, smtpConfig, getFileSystemProvider, getLogProvider, true) +func (notify Notify) SendUserInitCode(user *query.NotifyUser, origin, code string) error { + url := login.InitUserLink(origin, user.ID, code, user.ResourceOwner, user.PasswordSet) + args := make(map[string]interface{}) + args["Code"] = code + return notify(url, args, domain.InitCodeMessageType, true) } diff --git a/internal/notification/types/notification.go b/internal/notification/types/notification.go new file mode 100644 index 0000000000..117e272add --- /dev/null +++ b/internal/notification/types/notification.go @@ -0,0 +1,73 @@ +package types + +import ( + "context" + + "github.com/zitadel/zitadel/internal/i18n" + "github.com/zitadel/zitadel/internal/notification/channels/fs" + "github.com/zitadel/zitadel/internal/notification/channels/log" + "github.com/zitadel/zitadel/internal/notification/channels/smtp" + "github.com/zitadel/zitadel/internal/notification/channels/twilio" + "github.com/zitadel/zitadel/internal/notification/templates" + "github.com/zitadel/zitadel/internal/query" +) + +type Notify func( + url string, + args map[string]interface{}, + messageType string, + allowUnverifiedNotificationChannel bool, +) error + +func SendEmail( + ctx context.Context, + mailhtml string, + translator *i18n.Translator, + user *query.NotifyUser, + emailConfig func(ctx context.Context) (*smtp.EmailConfig, error), + getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), + getLogProvider func(ctx context.Context) (*log.LogConfig, error), + colors *query.LabelPolicy, + assetsPrefix string, +) Notify { + return func( + url string, + args map[string]interface{}, + messageType string, + allowUnverifiedNotificationChannel bool, + ) error { + args = mapNotifyUserToArgs(user, args) + data := GetTemplateData(translator, args, assetsPrefix, url, messageType, user.PreferredLanguage.String(), colors) + template, err := templates.GetParsedTemplate(mailhtml, data) + if err != nil { + return err + } + return generateEmail(ctx, user, data.Subject, template, emailConfig, getFileSystemProvider, getLogProvider, allowUnverifiedNotificationChannel) + } +} + +func SendSMSTwilio( + ctx context.Context, + translator *i18n.Translator, + user *query.NotifyUser, + twilioConfig func(ctx context.Context) (*twilio.TwilioConfig, error), + getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), + getLogProvider func(ctx context.Context) (*log.LogConfig, error), + colors *query.LabelPolicy, + assetsPrefix string, +) Notify { + return func( + url string, + args map[string]interface{}, + messageType string, + allowUnverifiedNotificationChannel bool, + ) error { + args = mapNotifyUserToArgs(user, args) + data := GetTemplateData(translator, args, assetsPrefix, url, messageType, user.PreferredLanguage.String(), colors) + return generateSms(ctx, user, data.Text, twilioConfig, getFileSystemProvider, getLogProvider, allowUnverifiedNotificationChannel) + } +} + +func externalLink(origin string) string { + return origin + "/ui/login" +} diff --git a/internal/notification/types/password_code.go b/internal/notification/types/password_code.go index 9baa41123f..e9b5df529f 100644 --- a/internal/notification/types/password_code.go +++ b/internal/notification/types/password_code.go @@ -1,51 +1,14 @@ package types import ( - "context" - "github.com/zitadel/zitadel/internal/api/ui/login" - "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/smtp" - "github.com/zitadel/zitadel/internal/notification/channels/twilio" - "github.com/zitadel/zitadel/internal/notification/templates" "github.com/zitadel/zitadel/internal/query" - es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" ) -type PasswordCodeData struct { - templates.TemplateData - FirstName string - LastName string - URL string -} - -func SendPasswordCode(ctx context.Context, mailhtml string, translator *i18n.Translator, user *view_model.NotifyUser, code *es_model.PasswordCode, smtpConfig func(ctx context.Context) (*smtp.EmailConfig, error), getTwilioConfig func(ctx context.Context) (*twilio.TwilioConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), alg crypto.EncryptionAlgorithm, colors *query.LabelPolicy, assetsPrefix string, origin string) error { - codeString, err := crypto.DecryptString(code.Code, alg) - if err != nil { - return err - } - url := login.InitPasswordLink(origin, user.ID, codeString, user.ResourceOwner) - var args = mapNotifyUserToArgs(user) - args["Code"] = codeString - - passwordResetData := &PasswordCodeData{ - TemplateData: GetTemplateData(translator, args, assetsPrefix, url, domain.PasswordResetMessageType, user.PreferredLanguage, colors), - FirstName: user.FirstName, - LastName: user.LastName, - URL: url, - } - template, err := templates.GetParsedTemplate(mailhtml, passwordResetData) - if err != nil { - return err - } - if code.NotificationType == int32(domain.NotificationTypeSms) { - return generateSms(ctx, user, passwordResetData.Text, getTwilioConfig, getFileSystemProvider, getLogProvider, false) - } - return generateEmail(ctx, user, passwordResetData.Subject, template, smtpConfig, getFileSystemProvider, getLogProvider, true) - +func (notify Notify) SendPasswordCode(user *query.NotifyUser, origin, code string) error { + url := login.InitPasswordLink(origin, user.ID, code, user.ResourceOwner) + args := make(map[string]interface{}) + args["Code"] = code + return notify(url, args, domain.PasswordResetMessageType, true) } diff --git a/internal/notification/types/passwordless_registration_link.go b/internal/notification/types/passwordless_registration_link.go index 88c2381eaf..8c6f6894ba 100644 --- a/internal/notification/types/passwordless_registration_link.go +++ b/internal/notification/types/passwordless_registration_link.go @@ -1,42 +1,12 @@ package types import ( - "context" - "github.com/zitadel/zitadel/internal/api/ui/login" - "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/smtp" - "github.com/zitadel/zitadel/internal/notification/templates" "github.com/zitadel/zitadel/internal/query" - "github.com/zitadel/zitadel/internal/repository/user" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" ) -type PasswordlessRegistrationLinkData struct { - templates.TemplateData - URL string -} - -func SendPasswordlessRegistrationLink(ctx context.Context, mailhtml string, translator *i18n.Translator, user *view_model.NotifyUser, code *user.HumanPasswordlessInitCodeRequestedEvent, smtpConfig func(ctx context.Context) (*smtp.EmailConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), alg crypto.EncryptionAlgorithm, colors *query.LabelPolicy, assetsPrefix string, origin string) error { - codeString, err := crypto.DecryptString(code.Code, alg) - if err != nil { - return err - } - url := domain.PasswordlessInitCodeLink(origin+login.HandlerPrefix+login.EndpointPasswordlessRegistration, user.ID, user.ResourceOwner, code.ID, codeString) - var args = mapNotifyUserToArgs(user) - - emailCodeData := &PasswordlessRegistrationLinkData{ - TemplateData: GetTemplateData(translator, args, assetsPrefix, url, domain.PasswordlessRegistrationMessageType, user.PreferredLanguage, colors), - URL: url, - } - - template, err := templates.GetParsedTemplate(mailhtml, emailCodeData) - if err != nil { - return err - } - return generateEmail(ctx, user, emailCodeData.Subject, template, smtpConfig, getFileSystemProvider, getLogProvider, true) +func (notify Notify) SendPasswordlessRegistrationLink(user *query.NotifyUser, origin, code, codeID string) error { + url := domain.PasswordlessInitCodeLink(origin+login.HandlerPrefix+login.EndpointPasswordlessRegistration, user.ID, user.ResourceOwner, codeID, code) + return notify(url, nil, domain.PasswordlessRegistrationMessageType, true) } diff --git a/internal/notification/types/phone_verification_code.go b/internal/notification/types/phone_verification_code.go index e37d39a1ea..88eb744c4b 100644 --- a/internal/notification/types/phone_verification_code.go +++ b/internal/notification/types/phone_verification_code.go @@ -1,38 +1,12 @@ package types import ( - "context" - "fmt" - - "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/i18n" - "github.com/zitadel/zitadel/internal/notification/channels/fs" - "github.com/zitadel/zitadel/internal/notification/channels/log" - "github.com/zitadel/zitadel/internal/notification/channels/twilio" - "github.com/zitadel/zitadel/internal/notification/templates" - es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" + "github.com/zitadel/zitadel/internal/query" ) -type PhoneVerificationCodeData struct { - UserID string -} - -func SendPhoneVerificationCode(ctx context.Context, translator *i18n.Translator, user *view_model.NotifyUser, code *es_model.PhoneCode, getTwilioConfig func(ctx context.Context) (*twilio.TwilioConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), alg crypto.EncryptionAlgorithm) error { - codeString, err := crypto.DecryptString(code.Code, alg) - if err != nil { - return err - } - var args = mapNotifyUserToArgs(user) - args["Code"] = codeString - - text := translator.Localize(fmt.Sprintf("%s.%s", domain.VerifyPhoneMessageType, domain.MessageText), args, user.PreferredLanguage) - - codeData := &PhoneVerificationCodeData{UserID: user.ID} - template, err := templates.ParseTemplateText(text, codeData) - if err != nil { - return err - } - return generateSms(ctx, user, template, getTwilioConfig, getFileSystemProvider, getLogProvider, true) +func (notify Notify) SendPhoneVerificationCode(user *query.NotifyUser, origin, code string) error { + args := make(map[string]interface{}) + args["Code"] = code + return notify("", args, domain.VerifyPhoneMessageType, true) } diff --git a/internal/notification/types/templateData.go b/internal/notification/types/templateData.go index ae464f69e1..465e17555c 100644 --- a/internal/notification/types/templateData.go +++ b/internal/notification/types/templateData.go @@ -11,7 +11,7 @@ import ( func GetTemplateData(translator *i18n.Translator, translateArgs map[string]interface{}, assetsPrefix, href, msgType, lang string, policy *query.LabelPolicy) templates.TemplateData { templateData := templates.TemplateData{ - Href: href, + URL: href, PrimaryColor: templates.DefaultPrimaryColor, BackgroundColor: templates.DefaultBackgroundColor, FontColor: templates.DefaultFontColor, diff --git a/internal/notification/types/user_email.go b/internal/notification/types/user_email.go index 7b4cf37ef9..afcc302835 100644 --- a/internal/notification/types/user_email.go +++ b/internal/notification/types/user_email.go @@ -10,11 +10,10 @@ import ( "github.com/zitadel/zitadel/internal/notification/channels/smtp" "github.com/zitadel/zitadel/internal/notification/messages" "github.com/zitadel/zitadel/internal/notification/senders" - - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" + "github.com/zitadel/zitadel/internal/query" ) -func generateEmail(ctx context.Context, user *view_model.NotifyUser, subject, content string, smtpConfig func(ctx context.Context) (*smtp.EmailConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), lastEmail bool) error { +func generateEmail(ctx context.Context, user *query.NotifyUser, subject, content string, smtpConfig func(ctx context.Context) (*smtp.EmailConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), lastEmail bool) error { content = html.UnescapeString(content) message := &messages.Email{ Recipients: []string{user.VerifiedEmail}, @@ -36,20 +35,22 @@ func generateEmail(ctx context.Context, user *view_model.NotifyUser, subject, co return channelChain.HandleMessage(message) } -func mapNotifyUserToArgs(user *view_model.NotifyUser) map[string]interface{} { - return map[string]interface{}{ - "UserName": user.UserName, - "FirstName": user.FirstName, - "LastName": user.LastName, - "NickName": user.NickName, - "DisplayName": user.DisplayName, - "LastEmail": user.LastEmail, - "VerifiedEmail": user.VerifiedEmail, - "LastPhone": user.LastPhone, - "VerifiedPhone": user.VerifiedPhone, - "PreferredLoginName": user.PreferredLoginName, - "LoginNames": user.LoginNames, - "ChangeDate": user.ChangeDate, - "CreationDate": user.CreationDate, +func mapNotifyUserToArgs(user *query.NotifyUser, args map[string]interface{}) map[string]interface{} { + if args == nil { + args = make(map[string]interface{}) } + args["UserName"] = user.Username + args["FirstName"] = user.FirstName + args["LastName"] = user.LastName + args["NickName"] = user.NickName + args["DisplayName"] = user.DisplayName + args["LastEmail"] = user.LastEmail + args["VerifiedEmail"] = user.VerifiedEmail + args["LastPhone"] = user.LastPhone + args["VerifiedPhone"] = user.VerifiedPhone + args["PreferredLoginName"] = user.PreferredLoginName + args["LoginNames"] = user.LoginNames + args["ChangeDate"] = user.ChangeDate + args["CreationDate"] = user.CreationDate + return args } diff --git a/internal/notification/types/user_phone.go b/internal/notification/types/user_phone.go index 5d7663edb1..ea9462ff97 100644 --- a/internal/notification/types/user_phone.go +++ b/internal/notification/types/user_phone.go @@ -3,20 +3,22 @@ package types import ( "context" + "github.com/zitadel/logging" + caos_errors "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/notification/channels/fs" "github.com/zitadel/zitadel/internal/notification/channels/log" "github.com/zitadel/zitadel/internal/notification/channels/twilio" "github.com/zitadel/zitadel/internal/notification/messages" "github.com/zitadel/zitadel/internal/notification/senders" - view_model "github.com/zitadel/zitadel/internal/user/repository/view/model" + "github.com/zitadel/zitadel/internal/query" ) -func generateSms(ctx context.Context, user *view_model.NotifyUser, content string, getTwilioProvider func(ctx context.Context) (*twilio.TwilioConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), lastPhone bool) error { +func generateSms(ctx context.Context, user *query.NotifyUser, content string, getTwilioProvider func(ctx context.Context) (*twilio.TwilioConfig, error), getFileSystemProvider func(ctx context.Context) (*fs.FSConfig, error), getLogProvider func(ctx context.Context) (*log.LogConfig, error), lastPhone bool) error { number := "" - twilio, err := getTwilioProvider(ctx) + twilioConfig, err := getTwilioProvider(ctx) if err == nil { - number = twilio.SenderNumber + number = twilioConfig.SenderNumber } message := &messages.SMS{ SenderPhoneNumber: number, @@ -27,7 +29,8 @@ func generateSms(ctx context.Context, user *view_model.NotifyUser, content strin message.RecipientPhoneNumber = user.LastPhone } - channelChain, err := senders.SMSChannels(ctx, twilio, getFileSystemProvider, getLogProvider) + channelChain, err := senders.SMSChannels(ctx, twilioConfig, getFileSystemProvider, getLogProvider) + logging.OnError(err).Error("could not create sms channel") if channelChain.Len() == 0 { return caos_errors.ThrowPreconditionFailed(nil, "PHONE-w8nfow", "Errors.Notification.Channels.NotPresent") diff --git a/internal/query/iam_member_test.go b/internal/query/iam_member_test.go index 0d740e5846..50896e73d0 100644 --- a/internal/query/iam_member_test.go +++ b/internal/query/iam_member_test.go @@ -20,18 +20,18 @@ var ( ", members.user_id" + ", members.roles" + ", projections.login_names.login_name" + - ", projections.users_humans.email" + - ", projections.users_humans.first_name" + - ", projections.users_humans.last_name" + - ", projections.users_humans.display_name" + - ", projections.users_machines.name" + - ", projections.users_humans.avatar_key" + + ", projections.users2_humans.email" + + ", projections.users2_humans.first_name" + + ", projections.users2_humans.last_name" + + ", projections.users2_humans.display_name" + + ", projections.users2_machines.name" + + ", projections.users2_humans.avatar_key" + ", COUNT(*) OVER () " + "FROM projections.instance_members as members " + - "LEFT JOIN projections.users_humans " + - "ON members.user_id = projections.users_humans.user_id " + - "LEFT JOIN projections.users_machines " + - "ON members.user_id = projections.users_machines.user_id " + + "LEFT JOIN projections.users2_humans " + + "ON members.user_id = projections.users2_humans.user_id " + + "LEFT JOIN projections.users2_machines " + + "ON members.user_id = projections.users2_machines.user_id " + "LEFT JOIN projections.login_names " + "ON members.user_id = projections.login_names.user_id " + "WHERE projections.login_names.is_primary = $1") diff --git a/internal/query/org_member_test.go b/internal/query/org_member_test.go index e176774c31..4b89ad59df 100644 --- a/internal/query/org_member_test.go +++ b/internal/query/org_member_test.go @@ -20,18 +20,18 @@ var ( ", members.user_id" + ", members.roles" + ", projections.login_names.login_name" + - ", projections.users_humans.email" + - ", projections.users_humans.first_name" + - ", projections.users_humans.last_name" + - ", projections.users_humans.display_name" + - ", projections.users_machines.name" + - ", projections.users_humans.avatar_key" + + ", projections.users2_humans.email" + + ", projections.users2_humans.first_name" + + ", projections.users2_humans.last_name" + + ", projections.users2_humans.display_name" + + ", projections.users2_machines.name" + + ", projections.users2_humans.avatar_key" + ", COUNT(*) OVER () " + "FROM projections.org_members as members " + - "LEFT JOIN projections.users_humans " + - "ON members.user_id = projections.users_humans.user_id " + - "LEFT JOIN projections.users_machines " + - "ON members.user_id = projections.users_machines.user_id " + + "LEFT JOIN projections.users2_humans " + + "ON members.user_id = projections.users2_humans.user_id " + + "LEFT JOIN projections.users2_machines " + + "ON members.user_id = projections.users2_machines.user_id " + "LEFT JOIN projections.login_names " + "ON members.user_id = projections.login_names.user_id " + "WHERE projections.login_names.is_primary = $1") diff --git a/internal/query/project_grant_member_test.go b/internal/query/project_grant_member_test.go index 58069c2908..d449dd926e 100644 --- a/internal/query/project_grant_member_test.go +++ b/internal/query/project_grant_member_test.go @@ -20,18 +20,18 @@ var ( ", members.user_id" + ", members.roles" + ", projections.login_names.login_name" + - ", projections.users_humans.email" + - ", projections.users_humans.first_name" + - ", projections.users_humans.last_name" + - ", projections.users_humans.display_name" + - ", projections.users_machines.name" + - ", projections.users_humans.avatar_key" + + ", projections.users2_humans.email" + + ", projections.users2_humans.first_name" + + ", projections.users2_humans.last_name" + + ", projections.users2_humans.display_name" + + ", projections.users2_machines.name" + + ", projections.users2_humans.avatar_key" + ", COUNT(*) OVER () " + "FROM projections.project_grant_members as members " + - "LEFT JOIN projections.users_humans " + - "ON members.user_id = projections.users_humans.user_id " + - "LEFT JOIN projections.users_machines " + - "ON members.user_id = projections.users_machines.user_id " + + "LEFT JOIN projections.users2_humans " + + "ON members.user_id = projections.users2_humans.user_id " + + "LEFT JOIN projections.users2_machines " + + "ON members.user_id = projections.users2_machines.user_id " + "LEFT JOIN projections.login_names " + "ON members.user_id = projections.login_names.user_id " + "LEFT JOIN projections.project_grants " + diff --git a/internal/query/project_member_test.go b/internal/query/project_member_test.go index 222153a100..dbef1b8283 100644 --- a/internal/query/project_member_test.go +++ b/internal/query/project_member_test.go @@ -20,18 +20,18 @@ var ( ", members.user_id" + ", members.roles" + ", projections.login_names.login_name" + - ", projections.users_humans.email" + - ", projections.users_humans.first_name" + - ", projections.users_humans.last_name" + - ", projections.users_humans.display_name" + - ", projections.users_machines.name" + - ", projections.users_humans.avatar_key" + + ", projections.users2_humans.email" + + ", projections.users2_humans.first_name" + + ", projections.users2_humans.last_name" + + ", projections.users2_humans.display_name" + + ", projections.users2_machines.name" + + ", projections.users2_humans.avatar_key" + ", COUNT(*) OVER () " + "FROM projections.project_members as members " + - "LEFT JOIN projections.users_humans " + - "ON members.user_id = projections.users_humans.user_id " + - "LEFT JOIN projections.users_machines " + - "ON members.user_id = projections.users_machines.user_id " + + "LEFT JOIN projections.users2_humans " + + "ON members.user_id = projections.users2_humans.user_id " + + "LEFT JOIN projections.users2_machines " + + "ON members.user_id = projections.users2_machines.user_id " + "LEFT JOIN projections.login_names " + "ON members.user_id = projections.login_names.user_id " + "WHERE projections.login_names.is_primary = $1") diff --git a/internal/query/projection/label_policy.go b/internal/query/projection/label_policy.go index f15a76c6ee..3bd2f61d8f 100644 --- a/internal/query/projection/label_policy.go +++ b/internal/query/projection/label_policy.go @@ -358,6 +358,32 @@ func (p *labelPolicyProjection) reduceActivated(event eventstore.Event) (*handle handler.NewCol(LabelPolicyDarkLogoURLCol, nil), handler.NewCol(LabelPolicyDarkIconURLCol, nil), }, + []handler.Column{ + handler.NewCol(LabelPolicyChangeDateCol, nil), + handler.NewCol(LabelPolicySequenceCol, nil), + handler.NewCol(LabelPolicyStateCol, nil), + handler.NewCol(LabelPolicyCreationDateCol, nil), + handler.NewCol(LabelPolicyResourceOwnerCol, nil), + handler.NewCol(LabelPolicyInstanceIDCol, nil), + handler.NewCol(LabelPolicyIDCol, nil), + handler.NewCol(LabelPolicyIsDefaultCol, nil), + handler.NewCol(LabelPolicyHideLoginNameSuffixCol, nil), + handler.NewCol(LabelPolicyFontURLCol, nil), + handler.NewCol(LabelPolicyWatermarkDisabledCol, nil), + handler.NewCol(LabelPolicyShouldErrorPopupCol, nil), + handler.NewCol(LabelPolicyLightPrimaryColorCol, nil), + handler.NewCol(LabelPolicyLightWarnColorCol, nil), + handler.NewCol(LabelPolicyLightBackgroundColorCol, nil), + handler.NewCol(LabelPolicyLightFontColorCol, nil), + handler.NewCol(LabelPolicyLightLogoURLCol, nil), + handler.NewCol(LabelPolicyLightIconURLCol, nil), + handler.NewCol(LabelPolicyDarkPrimaryColorCol, nil), + handler.NewCol(LabelPolicyDarkWarnColorCol, nil), + handler.NewCol(LabelPolicyDarkBackgroundColorCol, nil), + handler.NewCol(LabelPolicyDarkFontColorCol, nil), + handler.NewCol(LabelPolicyDarkLogoURLCol, nil), + handler.NewCol(LabelPolicyDarkIconURLCol, nil), + }, []handler.Condition{ handler.NewCond(LabelPolicyIDCol, event.Aggregate().ID), handler.NewCond(LabelPolicyStateCol, domain.LabelPolicyStatePreview), diff --git a/internal/query/projection/projection.go b/internal/query/projection/projection.go index 4e377b8628..1995831dfa 100644 --- a/internal/query/projection/projection.go +++ b/internal/query/projection/projection.go @@ -18,6 +18,7 @@ const ( ) var ( + projectionConfig crdb.StatementHandlerConfig OrgProjection *orgProjection ActionProjection *actionProjection FlowProjection *flowProjection @@ -58,10 +59,11 @@ var ( OIDCSettingsProjection *oidcSettingsProjection DebugNotificationProviderProjection *debugNotificationProviderProjection KeyProjection *keyProjection + NotificationsProjection interface{} ) func Start(ctx context.Context, sqlClient *sql.DB, es *eventstore.Eventstore, config Config, keyEncryptionAlgorithm crypto.EncryptionAlgorithm) error { - projectionConfig := crdb.StatementHandlerConfig{ + projectionConfig = crdb.StatementHandlerConfig{ ProjectionHandlerConfig: handler.ProjectionHandlerConfig{ HandlerConfig: handler.HandlerConfig{ Eventstore: es, @@ -120,6 +122,11 @@ func Start(ctx context.Context, sqlClient *sql.DB, es *eventstore.Eventstore, co return nil } +func ApplyCustomConfig(customConfig CustomConfig) crdb.StatementHandlerConfig { + return applyCustomConfig(projectionConfig, customConfig) + +} + func applyCustomConfig(config crdb.StatementHandlerConfig, customConfig CustomConfig) crdb.StatementHandlerConfig { if customConfig.BulkLimit != nil { config.BulkLimit = *customConfig.BulkLimit diff --git a/internal/query/projection/user.go b/internal/query/projection/user.go index 800a21d063..fc762761d6 100644 --- a/internal/query/projection/user.go +++ b/internal/query/projection/user.go @@ -17,9 +17,10 @@ type userProjection struct { } const ( - UserTable = "projections.users" + UserTable = "projections.users2" UserHumanTable = UserTable + "_" + UserHumanSuffix UserMachineTable = UserTable + "_" + UserMachineSuffix + UserNotifyTable = UserTable + "_" + UserNotifySuffix UserIDCol = "id" UserCreationDateCol = "creation_date" @@ -58,6 +59,16 @@ const ( MachineUserInstanceIDCol = "instance_id" MachineNameCol = "name" MachineDescriptionCol = "description" + + // notify + UserNotifySuffix = "notifications" + NotifyUserIDCol = "user_id" + NotifyInstanceIDCol = "instance_id" + NotifyLastEmailCol = "last_email" + NotifyVerifiedEmailCol = "verified_email" + NotifyLastPhoneCol = "last_phone" + NotifyVerifiedPhoneCol = "verified_phone" + NotifyPasswordSetCol = "password_set" ) func newUserProjection(ctx context.Context, config crdb.StatementHandlerConfig) *userProjection { @@ -110,6 +121,19 @@ func newUserProjection(ctx context.Context, config crdb.StatementHandlerConfig) UserMachineSuffix, crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys("fk_machine_ref_user")), ), + crdb.NewSuffixedTable([]*crdb.Column{ + crdb.NewColumn(NotifyUserIDCol, crdb.ColumnTypeText), + crdb.NewColumn(NotifyInstanceIDCol, crdb.ColumnTypeText), + crdb.NewColumn(NotifyLastEmailCol, crdb.ColumnTypeText, crdb.Nullable()), + crdb.NewColumn(NotifyVerifiedEmailCol, crdb.ColumnTypeText, crdb.Nullable()), + crdb.NewColumn(NotifyLastPhoneCol, crdb.ColumnTypeText, crdb.Nullable()), + crdb.NewColumn(NotifyVerifiedPhoneCol, crdb.ColumnTypeText, crdb.Nullable()), + crdb.NewColumn(NotifyPasswordSetCol, crdb.ColumnTypeBool, crdb.Default(false)), + }, + crdb.NewPrimaryKey(NotifyUserIDCol, NotifyInstanceIDCol), + UserNotifySuffix, + crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys("fk_notify_ref_user")), + ), ) p.StatementHandler = crdb.NewStatementHandler(ctx, config) return p @@ -240,6 +264,10 @@ func (p *userProjection) reducers() []handler.AggregateReducer { Event: user.MachineChangedEventType, Reduce: p.reduceMachineChanged, }, + { + Event: user.HumanPasswordChangedType, + Reduce: p.reduceHumanPasswordChanged, + }, }, }, } @@ -280,6 +308,16 @@ func (p *userProjection) reduceHumanAdded(event eventstore.Event) (*handler.Stat }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddCreateStatement( + []handler.Column{ + handler.NewCol(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCol(NotifyInstanceIDCol, e.Aggregate().InstanceID), + handler.NewCol(NotifyLastEmailCol, e.EmailAddress), + handler.NewCol(NotifyLastPhoneCol, &sql.NullString{String: e.PhoneNumber, Valid: e.PhoneNumber != ""}), + handler.NewCol(NotifyPasswordSetCol, e.Secret != nil), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -318,6 +356,16 @@ func (p *userProjection) reduceHumanRegistered(event eventstore.Event) (*handler }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddCreateStatement( + []handler.Column{ + handler.NewCol(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCol(NotifyInstanceIDCol, e.Aggregate().InstanceID), + handler.NewCol(NotifyLastEmailCol, e.EmailAddress), + handler.NewCol(NotifyLastPhoneCol, &sql.NullString{String: e.PhoneNumber, Valid: e.PhoneNumber != ""}), + handler.NewCol(NotifyPasswordSetCol, e.Secret != nil), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -552,6 +600,16 @@ func (p *userProjection) reduceHumanPhoneChanged(event eventstore.Event) (*handl }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddUpdateStatement( + []handler.Column{ + handler.NewCol(NotifyLastPhoneCol, &sql.NullString{String: e.PhoneNumber, Valid: e.PhoneNumber != ""}), + }, + []handler.Condition{ + handler.NewCond(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -584,6 +642,17 @@ func (p *userProjection) reduceHumanPhoneRemoved(event eventstore.Event) (*handl }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddUpdateStatement( + []handler.Column{ + handler.NewCol(NotifyLastPhoneCol, nil), + handler.NewCol(NotifyVerifiedPhoneCol, nil), + }, + []handler.Condition{ + handler.NewCond(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -615,6 +684,23 @@ func (p *userProjection) reduceHumanPhoneVerified(event eventstore.Event) (*hand }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddCopyStatement( + []handler.Column{ + handler.NewCol(NotifyUserIDCol, nil), + handler.NewCol(NotifyInstanceIDCol, nil), + handler.NewCol(NotifyLastPhoneCol, nil), + }, + []handler.Column{ + handler.NewCol(NotifyUserIDCol, nil), + handler.NewCol(NotifyInstanceIDCol, nil), + handler.NewCol(NotifyVerifiedPhoneCol, nil), + }, + []handler.Condition{ + handler.NewCond(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -647,6 +733,16 @@ func (p *userProjection) reduceHumanEmailChanged(event eventstore.Event) (*handl }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddUpdateStatement( + []handler.Column{ + handler.NewCol(NotifyLastEmailCol, &sql.NullString{String: e.EmailAddress, Valid: e.EmailAddress != ""}), + }, + []handler.Condition{ + handler.NewCond(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -678,6 +774,23 @@ func (p *userProjection) reduceHumanEmailVerified(event eventstore.Event) (*hand }, crdb.WithTableSuffix(UserHumanSuffix), ), + crdb.AddCopyStatement( + []handler.Column{ + handler.NewCol(NotifyUserIDCol, nil), + handler.NewCol(NotifyInstanceIDCol, nil), + handler.NewCol(NotifyLastEmailCol, nil), + }, + []handler.Column{ + handler.NewCol(NotifyUserIDCol, nil), + handler.NewCol(NotifyInstanceIDCol, nil), + handler.NewCol(NotifyVerifiedEmailCol, nil), + }, + []handler.Condition{ + handler.NewCond(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), ), nil } @@ -743,6 +856,25 @@ func (p *userProjection) reduceHumanAvatarRemoved(event eventstore.Event) (*hand ), nil } +func (p *userProjection) reduceHumanPasswordChanged(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.HumanPasswordChangedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-jqXUY", "reduce.wrong.event.type %s", user.HumanPasswordChangedType) + } + + return crdb.NewUpdateStatement( + e, + []handler.Column{ + handler.NewCol(NotifyPasswordSetCol, true), + }, + []handler.Condition{ + handler.NewCond(NotifyUserIDCol, e.Aggregate().ID), + handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID), + }, + crdb.WithTableSuffix(UserNotifySuffix), + ), nil +} + func (p *userProjection) reduceMachineAdded(event eventstore.Event) (*handler.Statement, error) { e, ok := event.(*user.MachineAddedEvent) if !ok { diff --git a/internal/query/projection/user_test.go b/internal/query/projection/user_test.go index f65da31458..085192161b 100644 --- a/internal/query/projection/user_test.go +++ b/internal/query/projection/user_test.go @@ -50,7 +50,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -64,7 +64,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", + expectedStmt: "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -78,6 +78,16 @@ func TestUserProjection_reduces(t *testing.T) { &sql.NullString{String: "+41 00 000 00 00", Valid: true}, }, }, + { + expectedStmt: "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + "email@zitadel.com", + &sql.NullString{String: "+41 00 000 00 00", Valid: true}, + false, + }, + }, }, }, }, @@ -110,7 +120,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -124,7 +134,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", + expectedStmt: "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -138,6 +148,16 @@ func TestUserProjection_reduces(t *testing.T) { &sql.NullString{String: "+41 00 000 00 00", Valid: true}, }, }, + { + expectedStmt: "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + "email@zitadel.com", + &sql.NullString{String: "+41 00 000 00 00", Valid: true}, + false, + }, + }, }, }, }, @@ -165,7 +185,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -179,7 +199,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", + expectedStmt: "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -193,6 +213,16 @@ func TestUserProjection_reduces(t *testing.T) { &sql.NullString{}, }, }, + { + expectedStmt: "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + "email@zitadel.com", + &sql.NullString{String: "", Valid: false}, + false, + }, + }, }, }, }, @@ -225,7 +255,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -239,7 +269,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", + expectedStmt: "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -253,6 +283,16 @@ func TestUserProjection_reduces(t *testing.T) { &sql.NullString{String: "+41 00 000 00 00", Valid: true}, }, }, + { + expectedStmt: "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + "email@zitadel.com", + &sql.NullString{String: "+41 00 000 00 00", Valid: true}, + false, + }, + }, }, }, }, @@ -285,7 +325,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -299,7 +339,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", + expectedStmt: "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -313,6 +353,16 @@ func TestUserProjection_reduces(t *testing.T) { &sql.NullString{String: "+41 00 000 00 00", Valid: true}, }, }, + { + expectedStmt: "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + "email@zitadel.com", + &sql.NullString{String: "+41 00 000 00 00", Valid: true}, + false, + }, + }, }, }, }, @@ -340,7 +390,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -354,7 +404,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", + expectedStmt: "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -368,6 +418,16 @@ func TestUserProjection_reduces(t *testing.T) { &sql.NullString{}, }, }, + { + expectedStmt: "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + "email@zitadel.com", + &sql.NullString{String: "", Valid: false}, + false, + }, + }, }, }, }, @@ -390,7 +450,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ domain.UserStateInitial, "agg-id", @@ -419,7 +479,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ domain.UserStateInitial, "agg-id", @@ -448,7 +508,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ domain.UserStateActive, "agg-id", @@ -477,7 +537,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ domain.UserStateActive, "agg-id", @@ -506,7 +566,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", + expectedStmt: "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", expectedArgs: []interface{}{ anyArg{}, domain.UserStateLocked, @@ -537,7 +597,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", + expectedStmt: "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", expectedArgs: []interface{}{ anyArg{}, domain.UserStateActive, @@ -568,7 +628,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", + expectedStmt: "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", expectedArgs: []interface{}{ anyArg{}, domain.UserStateInactive, @@ -599,7 +659,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", + expectedStmt: "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", expectedArgs: []interface{}{ anyArg{}, domain.UserStateActive, @@ -630,7 +690,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.users WHERE (id = $1) AND (instance_id = $2)", + expectedStmt: "DELETE FROM projections.users2 WHERE (id = $1) AND (instance_id = $2)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -660,7 +720,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, username, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", + expectedStmt: "UPDATE projections.users2 SET (change_date, username, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", expectedArgs: []interface{}{ anyArg{}, "username", @@ -698,7 +758,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -707,7 +767,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (first_name, last_name, nick_name, display_name, preferred_language, gender) = ($1, $2, $3, $4, $5, $6) WHERE (user_id = $7) AND (instance_id = $8)", + expectedStmt: "UPDATE projections.users2_humans SET (first_name, last_name, nick_name, display_name, preferred_language, gender) = ($1, $2, $3, $4, $5, $6) WHERE (user_id = $7) AND (instance_id = $8)", expectedArgs: []interface{}{ "first-name", "last-name", @@ -748,7 +808,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -757,7 +817,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (first_name, last_name, nick_name, display_name, preferred_language, gender) = ($1, $2, $3, $4, $5, $6) WHERE (user_id = $7) AND (instance_id = $8)", + expectedStmt: "UPDATE projections.users2_humans SET (first_name, last_name, nick_name, display_name, preferred_language, gender) = ($1, $2, $3, $4, $5, $6) WHERE (user_id = $7) AND (instance_id = $8)", expectedArgs: []interface{}{ "first-name", "last-name", @@ -793,7 +853,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -802,7 +862,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ "+41 00 000 00 00", false, @@ -810,6 +870,14 @@ func TestUserProjection_reduces(t *testing.T) { "instance-id", }, }, + { + expectedStmt: "UPDATE projections.users2_notifications SET (last_phone) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedArgs: []interface{}{ + &sql.NullString{String: "+41 00 000 00 00", Valid: true}, + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -834,7 +902,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -843,7 +911,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ "+41 00 000 00 00", false, @@ -851,6 +919,14 @@ func TestUserProjection_reduces(t *testing.T) { "instance-id", }, }, + { + expectedStmt: "UPDATE projections.users2_notifications SET (last_phone) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedArgs: []interface{}{ + &sql.NullString{String: "+41 00 000 00 00", Valid: true}, + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -873,7 +949,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -882,7 +958,16 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedArgs: []interface{}{ + nil, + nil, + "agg-id", + "instance-id", + }, + }, + { + expectedStmt: "UPDATE projections.users2_notifications SET (last_phone, verified_phone) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ nil, nil, @@ -912,7 +997,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -921,7 +1006,16 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedArgs: []interface{}{ + nil, + nil, + "agg-id", + "instance-id", + }, + }, + { + expectedStmt: "UPDATE projections.users2_notifications SET (last_phone, verified_phone) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ nil, nil, @@ -951,7 +1045,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -960,13 +1054,20 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (is_phone_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_humans SET (is_phone_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ true, "agg-id", "instance-id", }, }, + { + expectedStmt: "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_phone) SELECT user_id, instance_id, last_phone FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -989,7 +1090,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -998,13 +1099,20 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (is_phone_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_humans SET (is_phone_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ true, "agg-id", "instance-id", }, }, + { + expectedStmt: "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_phone) SELECT user_id, instance_id, last_phone FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -1029,7 +1137,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1038,7 +1146,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (email, is_email_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_humans SET (email, is_email_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ "email@zitadel.com", false, @@ -1046,6 +1154,14 @@ func TestUserProjection_reduces(t *testing.T) { "instance-id", }, }, + { + expectedStmt: "UPDATE projections.users2_notifications SET (last_email) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedArgs: []interface{}{ + &sql.NullString{String: "email@zitadel.com", Valid: true}, + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -1070,7 +1186,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1079,7 +1195,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (email, is_email_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_humans SET (email, is_email_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ "email@zitadel.com", false, @@ -1087,6 +1203,14 @@ func TestUserProjection_reduces(t *testing.T) { "instance-id", }, }, + { + expectedStmt: "UPDATE projections.users2_notifications SET (last_email) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedArgs: []interface{}{ + &sql.NullString{String: "email@zitadel.com", Valid: true}, + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -1109,7 +1233,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1118,13 +1242,20 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (is_email_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_humans SET (is_email_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ true, "agg-id", "instance-id", }, }, + { + expectedStmt: "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_email) SELECT user_id, instance_id, last_email FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -1147,7 +1278,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1156,13 +1287,20 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (is_email_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_humans SET (is_email_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ true, "agg-id", "instance-id", }, }, + { + expectedStmt: "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_email) SELECT user_id, instance_id, last_email FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + }, + }, }, }, }, @@ -1187,7 +1325,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1196,7 +1334,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (avatar_key) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_humans SET (avatar_key) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ "users/agg-id/avatar", "agg-id", @@ -1225,7 +1363,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1234,7 +1372,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_humans SET (avatar_key) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_humans SET (avatar_key) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ nil, "agg-id", @@ -1266,7 +1404,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -1280,7 +1418,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_machines (user_id, instance_id, name, description) VALUES ($1, $2, $3, $4)", + expectedStmt: "INSERT INTO projections.users2_machines (user_id, instance_id, name, description) VALUES ($1, $2, $3, $4)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -1314,7 +1452,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "INSERT INTO projections.users (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + expectedStmt: "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", expectedArgs: []interface{}{ "agg-id", anyArg{}, @@ -1328,7 +1466,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "INSERT INTO projections.users_machines (user_id, instance_id, name, description) VALUES ($1, $2, $3, $4)", + expectedStmt: "INSERT INTO projections.users2_machines (user_id, instance_id, name, description) VALUES ($1, $2, $3, $4)", expectedArgs: []interface{}{ "agg-id", "instance-id", @@ -1361,7 +1499,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1370,7 +1508,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_machines SET (name, description) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2_machines SET (name, description) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ "machine-name", "description", @@ -1402,7 +1540,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1411,7 +1549,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_machines SET (name) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_machines SET (name) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ "machine-name", "agg-id", @@ -1442,7 +1580,7 @@ func TestUserProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPDATE projections.users SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", + expectedStmt: "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)", expectedArgs: []interface{}{ anyArg{}, uint64(15), @@ -1451,7 +1589,7 @@ func TestUserProjection_reduces(t *testing.T) { }, }, { - expectedStmt: "UPDATE projections.users_machines SET (description) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", + expectedStmt: "UPDATE projections.users2_machines SET (description) = ($1) WHERE (user_id = $2) AND (instance_id = $3)", expectedArgs: []interface{}{ "description", "agg-id", diff --git a/internal/query/user.go b/internal/query/user.go index 1fe93b61ca..1d928f38fe 100644 --- a/internal/query/user.go +++ b/internal/query/user.go @@ -11,9 +11,7 @@ import ( "golang.org/x/text/language" "github.com/zitadel/zitadel/internal/api/authz" - "github.com/zitadel/zitadel/internal/domain" - "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/query/projection" ) @@ -92,6 +90,31 @@ type Machine struct { Description string } +type NotifyUser struct { + ID string + CreationDate time.Time + ChangeDate time.Time + ResourceOwner string + Sequence uint64 + State domain.UserState + Type domain.UserType + Username string + LoginNames []string + PreferredLoginName string + FirstName string + LastName string + NickName string + DisplayName string + AvatarKey string + PreferredLanguage language.Tag + Gender domain.Gender + LastEmail string + VerifiedEmail string + LastPhone string + VerifiedPhone string + PasswordSet bool +} + type UserSearchQueries struct { SearchRequest Queries []SearchQuery @@ -237,6 +260,38 @@ var ( } ) +var ( + notifyTable = table{ + name: projection.UserNotifyTable, + } + NotifyUserIDCol = Column{ + name: projection.NotifyUserIDCol, + table: notifyTable, + } + NotifyEmailCol = Column{ + name: projection.NotifyLastEmailCol, + table: notifyTable, + isOrderByLower: true, + } + NotifyVerifiedEmailCol = Column{ + name: projection.NotifyVerifiedEmailCol, + table: notifyTable, + isOrderByLower: true, + } + NotifyPhoneCol = Column{ + name: projection.NotifyLastPhoneCol, + table: notifyTable, + } + NotifyVerifiedPhoneCol = Column{ + name: projection.NotifyVerifiedPhoneCol, + table: notifyTable, + } + NotifyPasswordSetCol = Column{ + name: projection.NotifyPasswordSetCol, + table: notifyTable, + } +) + func (q *Queries) GetUserByID(ctx context.Context, shouldTriggered bool, userID string, queries ...SearchQuery) (*User, error) { if shouldTriggered { projection.UserProjection.TriggerBulk(ctx) @@ -327,6 +382,28 @@ func (q *Queries) GetHumanPhone(ctx context.Context, userID string, queries ...S return scan(row) } +func (q *Queries) GeNotifyUser(ctx context.Context, shouldTriggered bool, userID string, queries ...SearchQuery) (*NotifyUser, error) { + if shouldTriggered { + projection.UserProjection.TriggerBulk(ctx) + } + + instanceID := authz.GetInstance(ctx).InstanceID() + query, scan := prepareNotifyUserQuery(instanceID) + for _, q := range queries { + query = q.toQuery(query) + } + stmt, args, err := query.Where(sq.Eq{ + UserIDCol.identifier(): userID, + UserInstanceIDCol.identifier(): instanceID, + }).ToSql() + if err != nil { + return nil, errors.ThrowInternal(err, "QUERY-Err3g", "Errors.Query.SQLStatment") + } + + row := q.client.QueryRowContext(ctx, stmt, args...) + return scan(row) +} + func (q *Queries) SearchUsers(ctx context.Context, queries *UserSearchQueries) (*Users, error) { query, scan := prepareUsersQuery() stmt, args, err := queries.toQuery(query). @@ -748,6 +825,143 @@ func preparePhoneQuery() (sq.SelectBuilder, func(*sql.Row) (*Phone, error)) { } } +func prepareNotifyUserQuery(instanceID string) (sq.SelectBuilder, func(*sql.Row) (*NotifyUser, error)) { + loginNamesQuery, loginNamesArgs, err := sq.Select( + userLoginNamesUserIDCol.identifier(), + "ARRAY_AGG("+userLoginNamesNameCol.identifier()+") as "+userLoginNamesListCol.name). + From(userLoginNamesTable.identifier()). + GroupBy(userLoginNamesUserIDCol.identifier()). + Where(sq.Eq{ + userLoginNamesInstanceIDCol.identifier(): instanceID, + }).ToSql() + if err != nil { + return sq.SelectBuilder{}, nil + } + preferredLoginNameQuery, preferredLoginNameArgs, err := sq.Select( + userPreferredLoginNameUserIDCol.identifier(), + userPreferredLoginNameCol.identifier()). + From(userPreferredLoginNameTable.identifier()). + Where(sq.Eq{ + userPreferredLoginNameIsPrimaryCol.identifier(): true, + userPreferredLoginNameInstanceIDCol.identifier(): instanceID, + }).ToSql() + if err != nil { + return sq.SelectBuilder{}, nil + } + return sq.Select( + UserIDCol.identifier(), + UserCreationDateCol.identifier(), + UserChangeDateCol.identifier(), + UserResourceOwnerCol.identifier(), + UserSequenceCol.identifier(), + UserStateCol.identifier(), + UserTypeCol.identifier(), + UserUsernameCol.identifier(), + userLoginNamesListCol.identifier(), + userPreferredLoginNameCol.identifier(), + HumanUserIDCol.identifier(), + HumanFirstNameCol.identifier(), + HumanLastNameCol.identifier(), + HumanNickNameCol.identifier(), + HumanDisplayNameCol.identifier(), + HumanPreferredLanguageCol.identifier(), + HumanGenderCol.identifier(), + HumanAvatarURLCol.identifier(), + NotifyUserIDCol.identifier(), + NotifyEmailCol.identifier(), + NotifyVerifiedEmailCol.identifier(), + NotifyPhoneCol.identifier(), + NotifyVerifiedPhoneCol.identifier(), + NotifyPasswordSetCol.identifier(), + ). + From(userTable.identifier()). + LeftJoin(join(HumanUserIDCol, UserIDCol)). + LeftJoin(join(NotifyUserIDCol, UserIDCol)). + LeftJoin("("+loginNamesQuery+") as "+userLoginNamesTable.alias+" on "+userLoginNamesUserIDCol.identifier()+" = "+UserIDCol.identifier(), loginNamesArgs...). + LeftJoin("("+preferredLoginNameQuery+") as "+userPreferredLoginNameTable.alias+" on "+userPreferredLoginNameUserIDCol.identifier()+" = "+UserIDCol.identifier(), preferredLoginNameArgs...). + PlaceholderFormat(sq.Dollar), + func(row *sql.Row) (*NotifyUser, error) { + u := new(NotifyUser) + loginNames := pq.StringArray{} + preferredLoginName := sql.NullString{} + + humanID := sql.NullString{} + firstName := sql.NullString{} + lastName := sql.NullString{} + nickName := sql.NullString{} + displayName := sql.NullString{} + preferredLanguage := sql.NullString{} + gender := sql.NullInt32{} + avatarKey := sql.NullString{} + + notifyUserID := sql.NullString{} + notifyEmail := sql.NullString{} + notifyVerifiedEmail := sql.NullString{} + notifyPhone := sql.NullString{} + notifyVerifiedPhone := sql.NullString{} + notifyPasswordSet := sql.NullBool{} + + err := row.Scan( + &u.ID, + &u.CreationDate, + &u.ChangeDate, + &u.ResourceOwner, + &u.Sequence, + &u.State, + &u.Type, + &u.Username, + &loginNames, + &preferredLoginName, + &humanID, + &firstName, + &lastName, + &nickName, + &displayName, + &preferredLanguage, + &gender, + &avatarKey, + ¬ifyUserID, + ¬ifyEmail, + ¬ifyVerifiedEmail, + ¬ifyPhone, + ¬ifyVerifiedPhone, + ¬ifyPasswordSet, + ) + + if err != nil { + if errs.Is(err, sql.ErrNoRows) { + return nil, errors.ThrowNotFound(err, "QUERY-Dgqd2", "Errors.User.NotFound") + } + return nil, errors.ThrowInternal(err, "QUERY-Dbwsg", "Errors.Internal") + } + + if !notifyUserID.Valid { + return nil, errors.ThrowPreconditionFailed(nil, "QUERY-Sfw3f", "Errors.User.NotFound") + } + + u.LoginNames = loginNames + if preferredLoginName.Valid { + u.PreferredLoginName = preferredLoginName.String + } + if humanID.Valid { + u.FirstName = firstName.String + u.LastName = lastName.String + u.NickName = nickName.String + u.DisplayName = displayName.String + u.AvatarKey = avatarKey.String + u.PreferredLanguage = language.Make(preferredLanguage.String) + u.Gender = domain.Gender(gender.Int32) + } + u.LastEmail = notifyEmail.String + u.VerifiedEmail = notifyVerifiedEmail.String + u.LastPhone = notifyPhone.String + u.VerifiedPhone = notifyVerifiedPhone.String + u.PasswordSet = notifyPasswordSet.Bool + + return u, nil + } +} + func prepareUserUniqueQuery() (sq.SelectBuilder, func(*sql.Row) (bool, error)) { return sq.Select( UserIDCol.identifier(), diff --git a/internal/query/user_grant_test.go b/internal/query/user_grant_test.go index 3c978c1618..9b3f24bb36 100644 --- a/internal/query/user_grant_test.go +++ b/internal/query/user_grant_test.go @@ -24,14 +24,14 @@ var ( ", projections.user_grants.roles" + ", projections.user_grants.state" + ", projections.user_grants.user_id" + - ", projections.users.username" + - ", projections.users.type" + - ", projections.users.resource_owner" + - ", projections.users_humans.first_name" + - ", projections.users_humans.last_name" + - ", projections.users_humans.email" + - ", projections.users_humans.display_name" + - ", projections.users_humans.avatar_key" + + ", projections.users2.username" + + ", projections.users2.type" + + ", projections.users2.resource_owner" + + ", projections.users2_humans.first_name" + + ", projections.users2_humans.last_name" + + ", projections.users2_humans.email" + + ", projections.users2_humans.display_name" + + ", projections.users2_humans.avatar_key" + ", projections.login_names.login_name" + ", projections.user_grants.resource_owner" + ", projections.orgs.name" + @@ -39,8 +39,8 @@ var ( ", projections.user_grants.project_id" + ", projections.projects.name" + " FROM projections.user_grants" + - " LEFT JOIN projections.users ON projections.user_grants.user_id = projections.users.id" + - " LEFT JOIN projections.users_humans ON projections.user_grants.user_id = projections.users_humans.user_id" + + " LEFT JOIN projections.users2 ON projections.user_grants.user_id = projections.users2.id" + + " LEFT JOIN projections.users2_humans ON projections.user_grants.user_id = projections.users2_humans.user_id" + " LEFT JOIN projections.orgs ON projections.user_grants.resource_owner = projections.orgs.id" + " LEFT JOIN projections.projects ON projections.user_grants.project_id = projections.projects.id" + " LEFT JOIN projections.login_names ON projections.user_grants.user_id = projections.login_names.user_id" + @@ -78,14 +78,14 @@ var ( ", projections.user_grants.roles" + ", projections.user_grants.state" + ", projections.user_grants.user_id" + - ", projections.users.username" + - ", projections.users.type" + - ", projections.users.resource_owner" + - ", projections.users_humans.first_name" + - ", projections.users_humans.last_name" + - ", projections.users_humans.email" + - ", projections.users_humans.display_name" + - ", projections.users_humans.avatar_key" + + ", projections.users2.username" + + ", projections.users2.type" + + ", projections.users2.resource_owner" + + ", projections.users2_humans.first_name" + + ", projections.users2_humans.last_name" + + ", projections.users2_humans.email" + + ", projections.users2_humans.display_name" + + ", projections.users2_humans.avatar_key" + ", projections.login_names.login_name" + ", projections.user_grants.resource_owner" + ", projections.orgs.name" + @@ -94,8 +94,8 @@ var ( ", projections.projects.name" + ", COUNT(*) OVER ()" + " FROM projections.user_grants" + - " LEFT JOIN projections.users ON projections.user_grants.user_id = projections.users.id" + - " LEFT JOIN projections.users_humans ON projections.user_grants.user_id = projections.users_humans.user_id" + + " LEFT JOIN projections.users2 ON projections.user_grants.user_id = projections.users2.id" + + " LEFT JOIN projections.users2_humans ON projections.user_grants.user_id = projections.users2_humans.user_id" + " LEFT JOIN projections.orgs ON projections.user_grants.resource_owner = projections.orgs.id" + " LEFT JOIN projections.projects ON projections.user_grants.project_id = projections.projects.id" + " LEFT JOIN projections.login_names ON projections.user_grants.user_id = projections.login_names.user_id" + diff --git a/internal/query/user_test.go b/internal/query/user_test.go index 82958053d6..98a496511e 100644 --- a/internal/query/user_test.go +++ b/internal/query/user_test.go @@ -17,43 +17,43 @@ import ( ) var ( - userQuery = `SELECT projections.users.id,` + - ` projections.users.creation_date,` + - ` projections.users.change_date,` + - ` projections.users.resource_owner,` + - ` projections.users.sequence,` + - ` projections.users.state,` + - ` projections.users.type,` + - ` projections.users.username,` + + userQuery = `SELECT projections.users2.id,` + + ` projections.users2.creation_date,` + + ` projections.users2.change_date,` + + ` projections.users2.resource_owner,` + + ` projections.users2.sequence,` + + ` projections.users2.state,` + + ` projections.users2.type,` + + ` projections.users2.username,` + ` login_names.loginnames,` + ` preferred_login_name.login_name,` + - ` projections.users_humans.user_id,` + - ` projections.users_humans.first_name,` + - ` projections.users_humans.last_name,` + - ` projections.users_humans.nick_name,` + - ` projections.users_humans.display_name,` + - ` projections.users_humans.preferred_language,` + - ` projections.users_humans.gender,` + - ` projections.users_humans.avatar_key,` + - ` projections.users_humans.email,` + - ` projections.users_humans.is_email_verified,` + - ` projections.users_humans.phone,` + - ` projections.users_humans.is_phone_verified,` + - ` projections.users_machines.user_id,` + - ` projections.users_machines.name,` + - ` projections.users_machines.description` + - ` FROM projections.users` + - ` LEFT JOIN projections.users_humans ON projections.users.id = projections.users_humans.user_id` + - ` LEFT JOIN projections.users_machines ON projections.users.id = projections.users_machines.user_id` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.first_name,` + + ` projections.users2_humans.last_name,` + + ` projections.users2_humans.nick_name,` + + ` projections.users2_humans.display_name,` + + ` projections.users2_humans.preferred_language,` + + ` projections.users2_humans.gender,` + + ` projections.users2_humans.avatar_key,` + + ` projections.users2_humans.email,` + + ` projections.users2_humans.is_email_verified,` + + ` projections.users2_humans.phone,` + + ` projections.users2_humans.is_phone_verified,` + + ` projections.users2_machines.user_id,` + + ` projections.users2_machines.name,` + + ` projections.users2_machines.description` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` + + ` LEFT JOIN projections.users2_machines ON projections.users2.id = projections.users2_machines.user_id` + ` LEFT JOIN` + ` (SELECT login_names.user_id, ARRAY_AGG(login_names.login_name) as loginnames` + ` FROM projections.login_names as login_names` + ` WHERE login_names.instance_id = $1` + ` GROUP BY login_names.user_id) as login_names` + - ` on login_names.user_id = projections.users.id` + + ` on login_names.user_id = projections.users2.id` + ` LEFT JOIN` + ` (SELECT preferred_login_name.user_id, preferred_login_name.login_name FROM projections.login_names as preferred_login_name WHERE preferred_login_name.instance_id = $2 AND preferred_login_name.is_primary = $3) as preferred_login_name` + - ` on preferred_login_name.user_id = projections.users.id` + ` on preferred_login_name.user_id = projections.users2.id` userCols = []string{ "id", "creation_date", @@ -83,21 +83,21 @@ var ( "name", "description", } - profileQuery = `SELECT projections.users.id,` + - ` projections.users.creation_date,` + - ` projections.users.change_date,` + - ` projections.users.resource_owner,` + - ` projections.users.sequence,` + - ` projections.users_humans.user_id,` + - ` projections.users_humans.first_name,` + - ` projections.users_humans.last_name,` + - ` projections.users_humans.nick_name,` + - ` projections.users_humans.display_name,` + - ` projections.users_humans.preferred_language,` + - ` projections.users_humans.gender,` + - ` projections.users_humans.avatar_key` + - ` FROM projections.users` + - ` LEFT JOIN projections.users_humans ON projections.users.id = projections.users_humans.user_id` + profileQuery = `SELECT projections.users2.id,` + + ` projections.users2.creation_date,` + + ` projections.users2.change_date,` + + ` projections.users2.resource_owner,` + + ` projections.users2.sequence,` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.first_name,` + + ` projections.users2_humans.last_name,` + + ` projections.users2_humans.nick_name,` + + ` projections.users2_humans.display_name,` + + ` projections.users2_humans.preferred_language,` + + ` projections.users2_humans.gender,` + + ` projections.users2_humans.avatar_key` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` profileCols = []string{ "id", "creation_date", @@ -113,16 +113,16 @@ var ( "gender", "avatar_key", } - emailQuery = `SELECT projections.users.id,` + - ` projections.users.creation_date,` + - ` projections.users.change_date,` + - ` projections.users.resource_owner,` + - ` projections.users.sequence,` + - ` projections.users_humans.user_id,` + - ` projections.users_humans.email,` + - ` projections.users_humans.is_email_verified` + - ` FROM projections.users` + - ` LEFT JOIN projections.users_humans ON projections.users.id = projections.users_humans.user_id` + emailQuery = `SELECT projections.users2.id,` + + ` projections.users2.creation_date,` + + ` projections.users2.change_date,` + + ` projections.users2.resource_owner,` + + ` projections.users2.sequence,` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.email,` + + ` projections.users2_humans.is_email_verified` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` emailCols = []string{ "id", "creation_date", @@ -133,16 +133,16 @@ var ( "email", "is_email_verified", } - phoneQuery = `SELECT projections.users.id,` + - ` projections.users.creation_date,` + - ` projections.users.change_date,` + - ` projections.users.resource_owner,` + - ` projections.users.sequence,` + - ` projections.users_humans.user_id,` + - ` projections.users_humans.phone,` + - ` projections.users_humans.is_phone_verified` + - ` FROM projections.users` + - ` LEFT JOIN projections.users_humans ON projections.users.id = projections.users_humans.user_id` + phoneQuery = `SELECT projections.users2.id,` + + ` projections.users2.creation_date,` + + ` projections.users2.change_date,` + + ` projections.users2.resource_owner,` + + ` projections.users2.sequence,` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.phone,` + + ` projections.users2_humans.is_phone_verified` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` phoneCols = []string{ "id", "creation_date", @@ -153,15 +153,14 @@ var ( "phone", "is_phone_verified", } - - userUniqueQuery = `SELECT projections.users.id,` + - ` projections.users.state,` + - ` projections.users.username,` + - ` projections.users_humans.user_id,` + - ` projections.users_humans.email,` + - ` projections.users_humans.is_email_verified` + - ` FROM projections.users` + - ` LEFT JOIN projections.users_humans ON projections.users.id = projections.users_humans.user_id` + userUniqueQuery = `SELECT projections.users2.id,` + + ` projections.users2.state,` + + ` projections.users2.username,` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.email,` + + ` projections.users2_humans.is_email_verified` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` userUniqueCols = []string{ "id", "state", @@ -170,43 +169,107 @@ var ( "email", "is_email_verified", } - usersQuery = `SELECT projections.users.id,` + - ` projections.users.creation_date,` + - ` projections.users.change_date,` + - ` projections.users.resource_owner,` + - ` projections.users.sequence,` + - ` projections.users.state,` + - ` projections.users.type,` + - ` projections.users.username,` + + notifyUserQuery = `SELECT projections.users2.id,` + + ` projections.users2.creation_date,` + + ` projections.users2.change_date,` + + ` projections.users2.resource_owner,` + + ` projections.users2.sequence,` + + ` projections.users2.state,` + + ` projections.users2.type,` + + ` projections.users2.username,` + ` login_names.loginnames,` + ` preferred_login_name.login_name,` + - ` projections.users_humans.user_id,` + - ` projections.users_humans.first_name,` + - ` projections.users_humans.last_name,` + - ` projections.users_humans.nick_name,` + - ` projections.users_humans.display_name,` + - ` projections.users_humans.preferred_language,` + - ` projections.users_humans.gender,` + - ` projections.users_humans.avatar_key,` + - ` projections.users_humans.email,` + - ` projections.users_humans.is_email_verified,` + - ` projections.users_humans.phone,` + - ` projections.users_humans.is_phone_verified,` + - ` projections.users_machines.user_id,` + - ` projections.users_machines.name,` + - ` projections.users_machines.description,` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.first_name,` + + ` projections.users2_humans.last_name,` + + ` projections.users2_humans.nick_name,` + + ` projections.users2_humans.display_name,` + + ` projections.users2_humans.preferred_language,` + + ` projections.users2_humans.gender,` + + ` projections.users2_humans.avatar_key,` + + ` projections.users2_notifications.user_id,` + + ` projections.users2_notifications.last_email,` + + ` projections.users2_notifications.verified_email,` + + ` projections.users2_notifications.last_phone,` + + ` projections.users2_notifications.verified_phone,` + + ` projections.users2_notifications.password_set` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` + + ` LEFT JOIN projections.users2_notifications ON projections.users2.id = projections.users2_notifications.user_id` + + ` LEFT JOIN` + + ` (SELECT login_names.user_id, ARRAY_AGG(login_names.login_name) as loginnames` + + ` FROM projections.login_names as login_names` + + ` WHERE login_names.instance_id = $1` + + ` GROUP BY login_names.user_id) as login_names` + + ` on login_names.user_id = projections.users2.id` + + ` LEFT JOIN` + + ` (SELECT preferred_login_name.user_id, preferred_login_name.login_name FROM projections.login_names as preferred_login_name WHERE preferred_login_name.instance_id = $2 AND preferred_login_name.is_primary = $3) as preferred_login_name` + + ` on preferred_login_name.user_id = projections.users2.id` + notifyUserCols = []string{ + "id", + "creation_date", + "change_date", + "resource_owner", + "sequence", + "state", + "type", + "username", + "loginnames", + "login_name", + //human + "user_id", + "first_name", + "last_name", + "nick_name", + "display_name", + "preferred_language", + "gender", + "avatar_key", + //machine + "user_id", + "last_email", + "verified_email", + "last_phone", + "verified_phone", + "password_set", + } + usersQuery = `SELECT projections.users2.id,` + + ` projections.users2.creation_date,` + + ` projections.users2.change_date,` + + ` projections.users2.resource_owner,` + + ` projections.users2.sequence,` + + ` projections.users2.state,` + + ` projections.users2.type,` + + ` projections.users2.username,` + + ` login_names.loginnames,` + + ` preferred_login_name.login_name,` + + ` projections.users2_humans.user_id,` + + ` projections.users2_humans.first_name,` + + ` projections.users2_humans.last_name,` + + ` projections.users2_humans.nick_name,` + + ` projections.users2_humans.display_name,` + + ` projections.users2_humans.preferred_language,` + + ` projections.users2_humans.gender,` + + ` projections.users2_humans.avatar_key,` + + ` projections.users2_humans.email,` + + ` projections.users2_humans.is_email_verified,` + + ` projections.users2_humans.phone,` + + ` projections.users2_humans.is_phone_verified,` + + ` projections.users2_machines.user_id,` + + ` projections.users2_machines.name,` + + ` projections.users2_machines.description,` + ` COUNT(*) OVER ()` + - ` FROM projections.users` + - ` LEFT JOIN projections.users_humans ON projections.users.id = projections.users_humans.user_id` + - ` LEFT JOIN projections.users_machines ON projections.users.id = projections.users_machines.user_id` + + ` FROM projections.users2` + + ` LEFT JOIN projections.users2_humans ON projections.users2.id = projections.users2_humans.user_id` + + ` LEFT JOIN projections.users2_machines ON projections.users2.id = projections.users2_machines.user_id` + ` LEFT JOIN` + ` (SELECT login_names.user_id, ARRAY_AGG(login_names.login_name) as loginnames` + ` FROM projections.login_names as login_names` + ` GROUP BY login_names.user_id) as login_names` + - ` on login_names.user_id = projections.users.id` + + ` on login_names.user_id = projections.users2.id` + ` LEFT JOIN` + ` (SELECT preferred_login_name.user_id, preferred_login_name.login_name FROM projections.login_names as preferred_login_name WHERE preferred_login_name.is_primary = $1) as preferred_login_name` + - ` on preferred_login_name.user_id = projections.users.id` + ` on preferred_login_name.user_id = projections.users2.id` usersCols = []string{ "id", "creation_date", @@ -760,6 +823,155 @@ func Test_UserPrepares(t *testing.T) { }, object: nil, }, + { + name: "prepareNotifyUserQuery no result", + prepare: func() (sq.SelectBuilder, func(*sql.Row) (*NotifyUser, error)) { + return prepareNotifyUserQuery("instanceID") + }, + want: want{ + sqlExpectations: mockQuery( + regexp.QuoteMeta(notifyUserQuery), + nil, + nil, + ), + err: func(err error) (error, bool) { + if !errs.IsNotFound(err) { + return fmt.Errorf("err should be zitadel.NotFoundError got: %w", err), false + } + return nil, true + }, + }, + object: (*NotifyUser)(nil), + }, + { + name: "prepareNotifyUserQuery notify found", + prepare: func() (sq.SelectBuilder, func(*sql.Row) (*NotifyUser, error)) { + return prepareNotifyUserQuery("instanceID") + }, + want: want{ + sqlExpectations: mockQuery( + regexp.QuoteMeta(notifyUserQuery), + notifyUserCols, + []driver.Value{ + "id", + testNow, + testNow, + "resource_owner", + uint64(20211108), + domain.UserStateActive, + domain.UserTypeHuman, + "username", + pq.StringArray{"login_name1", "login_name2"}, + "login_name1", + //human + "id", + "first_name", + "last_name", + "nick_name", + "display_name", + "de", + domain.GenderUnspecified, + "avatar_key", + //notify + "id", + "lastEmail", + "verifiedEmail", + "lastPhone", + "verifiedPhone", + true, + }, + ), + }, + object: &NotifyUser{ + ID: "id", + CreationDate: testNow, + ChangeDate: testNow, + ResourceOwner: "resource_owner", + Sequence: 20211108, + State: domain.UserStateActive, + Type: domain.UserTypeHuman, + Username: "username", + LoginNames: []string{"login_name1", "login_name2"}, + PreferredLoginName: "login_name1", + FirstName: "first_name", + LastName: "last_name", + NickName: "nick_name", + DisplayName: "display_name", + AvatarKey: "avatar_key", + PreferredLanguage: language.German, + Gender: domain.GenderUnspecified, + LastEmail: "lastEmail", + VerifiedEmail: "verifiedEmail", + LastPhone: "lastPhone", + VerifiedPhone: "verifiedPhone", + PasswordSet: true, + }, + }, + { + name: "prepareNotifyUserQuery not notify found (error)", + prepare: func() (sq.SelectBuilder, func(*sql.Row) (*NotifyUser, error)) { + return prepareNotifyUserQuery("instanceID") + }, + want: want{ + sqlExpectations: mockQuery( + regexp.QuoteMeta(notifyUserQuery), + notifyUserCols, + []driver.Value{ + "id", + testNow, + testNow, + "resource_owner", + uint64(20211108), + domain.UserStateActive, + domain.UserTypeHuman, + "username", + pq.StringArray{"login_name1", "login_name2"}, + "login_name1", + //human + "id", + "first_name", + "last_name", + "nick_name", + "display_name", + "de", + domain.GenderUnspecified, + "avatar_key", + nil, + nil, + nil, + nil, + nil, + nil, + }, + ), + err: func(err error) (error, bool) { + if !errs.IsPreconditionFailed(err) { + return fmt.Errorf("err should be zitadel.PredconditionError got: %w", err), false + } + return nil, true + }, + }, + object: (*NotifyUser)(nil), + }, + { + name: "prepareNotifyUserQuery sql err", + prepare: func() (sq.SelectBuilder, func(*sql.Row) (*NotifyUser, error)) { + return prepareNotifyUserQuery("instanceID") + }, + want: want{ + sqlExpectations: mockQueryErr( + regexp.QuoteMeta(notifyUserQuery), + sql.ErrConnDone, + ), + err: func(err error) (error, bool) { + if !errors.Is(err, sql.ErrConnDone) { + return fmt.Errorf("err should be sql.ErrConnDone got: %w", err), false + } + return nil, true + }, + }, + object: nil, + }, { name: "prepareUsersQuery no result", prepare: prepareUsersQuery, From 3267daedda4febac7903edaa4c4b1408bbbd61b2 Mon Sep 17 00:00:00 2001 From: mffap Date: Wed, 6 Jul 2022 15:40:11 +0200 Subject: [PATCH 005/116] feat: internationalization french (#3890) * initial * console_fr updates * console_en fix issues * notifications_fr * internal_static_i18n_fr fixes * internal_static_i18n_en fix * docs * search parameter * missing italian translations Co-authored-by: Max Peintner Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> --- console/src/assets/i18n/en.json | 12 +- console/src/assets/i18n/fr.json | 1852 +++++++++++++++++++++ console/src/assets/i18n/it.json | 6 +- docs/docs/guides/customization/texts.md | 1 + internal/api/ui/login/static/i18n/fr.yaml | 372 +++++ internal/notification/static/i18n/fr.yaml | 42 + internal/static/i18n/en.yaml | 10 +- internal/static/i18n/fr.yaml | 928 +++++++++++ 8 files changed, 3209 insertions(+), 14 deletions(-) create mode 100644 console/src/assets/i18n/fr.json create mode 100644 internal/api/ui/login/static/i18n/fr.yaml create mode 100644 internal/notification/static/i18n/fr.yaml create mode 100644 internal/static/i18n/fr.yaml diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 5860808cda..da399ec73a 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -22,11 +22,11 @@ "DISCLAIMERLINK": "Further information", "DOCUMENTATION": { "TITLE": "Documentation", - "DESCRIPTION": "Mit ZITADEL schnell durchstarten." + "DESCRIPTION": "Get started with ZITADEL quickly." }, "GETSTARTED": { "TITLE": "Get started with ZITADEL", - "DESCRIPTION": "Mit ZITADEL schnell durchstarten." + "DESCRIPTION": "Get started with ZITADEL quickly." }, "QUICKSTARTS": { "LABEL": "First Steps", @@ -154,7 +154,7 @@ "TEXT": "Here you can switch between your user accounts and manage your sessions and profile." }, "NAV": { - "TEXT": "This navigation changes based on your selected oranization above or your instance" + "TEXT": "This navigation changes based on your selected organization above or your instance" }, "CONTEXTCHANGED": { "TEXT": "Attention! The organization context has changed." @@ -227,7 +227,7 @@ "DETAIL": "Detail", "CREATE": "Create", "MY": "My Information", - "LOGINNAMES": "Loginnames", + "LOGINNAMES": "Login names", "LOGINNAMESDESC": "These are your login names:", "NOUSER": "No associated user.", "REACTIVATE": "Reactivate", @@ -927,7 +927,7 @@ "RESET": { "DEFAULTTITLE": "Reset Setting", "DEFAULTDESCRIPTION": "You are about to reset your settings to the default configuration of your instance. Are you sure you want to continue?", - "LOGINPOLICY_DESCRIPTION": "Warning: If your continue, Identiy Provider settings will be reset to the instance setting too." + "LOGINPOLICY_DESCRIPTION": "Warning: If your continue, Identity Provider settings will be reset to the instance setting too." } } }, @@ -1471,7 +1471,7 @@ "SCOPESLIST": "Scopes List", "CLIENTID": "Client ID", "CLIENTSECRET": "Client Secret", - "IDPDISPLAYNAMMAPPING": "IDP Anzeigename Mapping", + "IDPDISPLAYNAMMAPPING": "IDP Display Name Mapping", "USERNAMEMAPPING": "Username Mapping", "DATES": "Dates", "CREATIONDATE": "Created At", diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json new file mode 100644 index 0000000000..eaf75d891b --- /dev/null +++ b/console/src/assets/i18n/fr.json @@ -0,0 +1,1852 @@ +{ + "APP_NAME": "ZITADEL", + "PAGINATOR": { + "PREVIOUS": "Précédent", + "NEXT": "Suivant", + "COUNT": "Résultats totaux" + }, + "FOOTER": { + "LINKS": { + "CONTACT": "Contact", + "TOS": "Conditions d'utilisation", + "PP": "Politique de confidentialité" + }, + "THEME": { + "DARK": "Sombre", + "LIGHT": "Clair" + } + }, + "HOME": { + "WELCOME": "Commencez avec ZITADEL", + "DISCLAIMER": "ZITADEL traite vos données de manière confidentielle et sécurisée.", + "DISCLAIMERLINK": "Plus d'informations", + "DOCUMENTATION": { + "TITLE": "Documentation", + "DESCRIPTION": "Pour un démarrage rapide de ZITADEL." + }, + "GETSTARTED": { + "TITLE": "Démarrer avec ZITADEL", + "DESCRIPTION": "Pour un démarrage rapide de ZITADEL." + }, + "QUICKSTARTS": { + "LABEL": "Premiers pas", + "TITLE": "Démarrages rapides", + "DESCRIPTION": "Démarrez rapidement avec ZITADEL." + }, + "SHORTCUTS": { + "SHORTCUTS": "Raccourcis", + "SETTINGS": "Raccourcis disponibles", + "PROJECTS": "Projets", + "REORDER": "Maintenir et faire glisser la tuile pour la déplacer", + "ADD": "Maintenir et faire glisser une tuile pour ajouter" + } + }, + "MENU": { + "INSTANCE": "Instance", + "DASHBOARD": "Accueil", + "PERSONAL_INFO": "Informations personnelles", + "DOCUMENTATION": "Documentation", + "INSTANCEOVERVIEW": "Instance", + "ORGS": "Organisations", + "VIEWS": "Vues", + "FAILEDEVENTS": "Événements échoués", + "ORGANIZATION": "Organisation", + "DOMAINS": "Domaines", + "PROJECT": "Projets", + "PROJECTOVERVIEW": "Vue d'ensemble", + "PROJECTGRANTS": "Subventions", + "ROLES": "Rôles", + "GRANTEDPROJECT": "Projets accordés", + "HUMANUSERS": "Utilisateurs", + "MACHINEUSERS": "Utilisateurs de services", + "LOGOUT": "Déconnexion de tous les utilisateurs", + "NEWORG": "Nouvelle organisation", + "IAMADMIN": "Vous êtes un administrateur IAM. Notez que vous disposez de permissions étendues.", + "SHOWORGS": "Afficher toutes les organisations", + "GRANTS": "Autorisations", + "ACTIONS": "Actions", + "PRIVACY": "Vie privée", + "TOS": "Conditions de service", + "OPENSHORTCUTSTOOLTIP": "Tapez ? pour afficher les raccourcis clavier", + "SETTINGS": "Paramètres" + }, + "ACTIONS": { + "ACTIONS": "Actions", + "FILTER": "Filtrer", + "RENAME": "Renommer", + "SET": "Définir", + "COPY": "Copier dans le presse-papiers", + "COPIED": "Copié dans le presse-papiers.", + "RESET": "Réinitialiser", + "RESETDEFAULT": "Réinitialiser par défaut", + "RESETTO": "Réinitialiser à", + "RESETCURRENT": "Réinitialiser à la valeur actuelle", + "SHOW": "Afficher", + "HIDE": "Cacher", + "SAVE": "Sauvegarder", + "SAVENOW": "Sauvegarder maintenant", + "NEW": "Nouveau", + "ADD": "Ajouter", + "CREATE": "Créer", + "CONTINUE": "Continuer", + "BACK": "Retour", + "CLOSE": "Fermer", + "CLEAR": "Effacer", + "CANCEL": "Annuler", + "INFO": "Info", + "OK": "OK", + "SELECT": "Sélectionnez", + "VIEW": "Afficher", + "SELECTIONDELETE": "Supprimer la sélection", + "DELETE": "Supprimer", + "REMOVE": "Supprimer", + "VERIFY": "Vérifier", + "FINISH": "Terminer", + "FINISHED": "Fermer", + "CHANGE": "Modifier", + "REACTIVATE": "Réactiver", + "DEACTIVATE": "Désactiver", + "REFRESH": "Rafraîchir", + "LOGIN": "Connexion", + "EDIT": "Modifier", + "PIN": "Pin / Unpin", + "CONFIGURE": "Configurer", + "SEND": "Envoyer", + "NEWVALUE": "Nouvelle valeur", + "RESTORE": "Restaurer", + "CONTINUEWITHOUTSAVE": "Continuer sans sauvegarder", + "OF": "de", + "PREVIOUS": "Précédent", + "NEXT": "Suivant", + "MORE": "plus", + "STEP": "Étape", + "TABLE": { + "SHOWUSER": "Afficher l'utilisateur{{value}}" + } + }, + "MEMBERROLES": { + "IAM_OWNER": "A le contrôle de toute l'instance, y compris toutes les organisations", + "IAM_OWNER_VIEWER": "A le droit de passer en revue l'ensemble de l'instance, y compris toutes les organisations.", + "IAM_ORG_MANAGER": "A le droit de créer et de gérer des organisations", + "IAM_USER_MANAGER": "A le droit de créer et de gérer les utilisateurs", + "ORG_OWNER": "A le droit de contrôler l'ensemble de l'organisation", + "ORG_USER_MANAGER": "A le droit de créer et de gérer les utilisateurs de l'organisation", + "ORG_OWNER_VIEWER": "A le droit de passer en revue l'ensemble de l'organisation", + "ORG_USER_PERMISSION_EDITOR": "A le droit de gérer les subventions aux utilisateurs", + "ORG_PROJECT_PERMISSION_EDITOR": "A le droit de gérer les subventions aux projets", + "ORG_PROJECT_CREATOR": "A le droit de créer ses propres projets et leurs paramètres sous-jacents.", + "PROJECT_OWNER": "A le droit de gérer l'ensemble du projet", + "PROJECT_OWNER_VIEWER": "A le droit de passer en revue l'ensemble du projet", + "PROJECT_OWNER_GLOBAL": "A le droit d'accéder à l'ensemble du projet", + "PROJECT_OWNER_VIEWER_GLOBAL": "A le droit de réviser l'ensemble du projet", + "PROJECT_GRANT_OWNER": "A le droit de gérer la subvention du projet", + "PROJECT_GRANT_OWNER_VIEWER": "A le droit de réviser la subvention du projet" + }, + "OVERLAYS": { + "ORGSWITCHER": { + "TEXT": "Tous les paramètres d'organisation et les tableaux de la console sont basés sur l'organisation sélectionnée. Cliquez sur ce bouton pour changer d'organisation ou en créer une nouvelle." + }, + "INSTANCE": { + "TEXT": "Cliquez ici pour accéder aux paramètres de l'instance. Notez que vous n'avez accès à ce bouton que si vous disposez de permissions étendues." + }, + "PROFILE": { + "TEXT": "Ici, vous pouvez passer d'un compte utilisateur à l'autre et gérer vos sessions et votre profil." + }, + "NAV": { + "TEXT": "Cette navigation change en fonction de l'organisation sélectionnée ci-dessus ou de votre instance." + }, + "CONTEXTCHANGED": { + "TEXT": "Attention ! Le contexte de l'organisation a changé." + } + }, + "FILTER": { + "TITLE": "Filtre", + "STATE": "Statut", + "DISPLAYNAME": "Nom d'affichage de l'utilisateur", + "EMAIL": "Courriel", + "USERNAME": "Nom de l'utilisateur", + "ORGNAME": "Nom de l'organisation", + "PROJECTNAME": "Nom du projet", + "RESOURCEOWNER": "Propriétaire des ressources", + "METHODS": { + "5": "contient", + "7": "se termine par", + "1": "est égal à" + } + }, + "KEYBOARDSHORTCUTS": { + "TITLE": "Raccourcis clavier", + "UNDERORGCONTEXT": "Dans les pages de l'organisation", + "SIDEWIDE": "Raccourcis pour l'ensemble du site", + "SHORTCUTS": { + "HOME": "Aller à Accueil", + "SYSTEM": "Aller à Système", + "ORG": "Aller à Organisation", + "ORGSWITCHER": "Modifier l'organisation", + "ME": "Aller à son propre profil", + "PROJECTS": "Aller à Projets", + "USERS": "Aller à Utilisateurs", + "USERGRANTS": "Aller àAutorisations", + "ACTIONS": "Aller à Actions et Flux", + "DOMAINS": "Aller à Domaines" + } + }, + "RESOURCEID": "Id de la ressource", + "TABLE": { + "NOROWS": "Pas de données" + }, + "ERRORS": { + "REQUIRED": "Certains champs obligatoires sont manquants.", + "TOKENINVALID": { + "TITLE": "Votre jeton d'autorisation a expiré.", + "DESCRIPTION": "Cliquez sur le bouton ci-dessous pour vous reconnecter." + } + }, + "USER": { + "SETTINGS": { + "TITLE": "Paramètres", + "GENERAL": "Général", + "IDP": "Fournisseurs d'identité", + "MFA": "Authentification multifactorielle", + "KEYS": "Clés", + "PAT": "Jetons d'accès personnels", + "PASSWORDLESS": "Sans mot de passe", + "USERGRANTS": "Autorisations", + "MEMBERSHIPS": "Adhésions", + "METADATA": "Métadonnées" + }, + "TITLE": "Informations personnelles", + "DESCRIPTION": "Gérez vos informations et vos paramètres de sécurité.", + "PAGES": { + "LIST": "Utilisateurs", + "TITLE": "Utilisateur", + "DESCRIPTION": "Créer de nouveaux utilisateurs dans votre organisation et gérer les utilisateurs existants.", + "LISTMACHINE": "Service Users", + "DESCRIPTIONMACHINE": "Créez et gérez les Service Users de votre organisation", + "DETAIL": "Détail", + "CREATE": "Créer", + "MY": "Mes informations", + "LOGINNAMES": "Noms de connexion", + "LOGINNAMESDESC": "Ce sont vos noms de connexion", + "NOUSER": "Aucun utilisateur associé.", + "REACTIVATE": "Réactiver", + "DEACTIVATE": "Désactiver", + "FILTER": "Filtre", + "STATE": "Statut", + "DELETE": "Supprimer l'utilisateur", + "UNLOCK": "Déverrouiller l'utilisateur", + "LOCKEDDESCRIPTION": "Cet utilisateur a été verrouillé pour avoir dépassé le nombre maximum de tentatives de connexion et doit être déverrouillé pour être à nouveau utilisé.", + "DELETEACCOUNT": "Supprimer le compte", + "DELETEACCOUNT_DESC": "Si vous effectuez cette action, vous serez déconnecté et n'aurez plus accès à votre compte. Cette action n'est pas réversible, veuillez donc continuer avec prudence.", + "DELETEACCOUNT_BTN": "Supprimer le compte", + "DELETEACCOUNT_SUCCESS": "Compte supprimé avec succès !" + }, + "DETAILS": { + "DATECREATED": "Créé", + "DATECHANGED": "Modifié" + }, + "DIALOG": { + "DELETE_TITLE": "Supprimer l'utilisateur", + "DELETE_SELF_TITLE": "Supprimer le compte", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer définitivement un utilisateur. Êtes-vous sûr ?", + "DELETE_SELF_DESCRIPTION": "Vous êtes sur le point de supprimer définitivement votre compte personnel. Cela vous déconnectera et supprimera votre utilisateur. Cette action ne peut être annulée !", + "DELETE_AUTH_DESCRIPTION": "Vous êtes sur le point de supprimer définitivement votre compte personnel. En êtes-vous sûr ?", + "TYPEUSERNAME": "Tapez '{{value}}', pour confirmer et supprimer l'utilisateur.", + "DELETE_BTN": "Supprimer définitivement" + }, + "SENDEMAILDIALOG": { + "TITLE": "Envoyer une notification par e-mail", + "DESCRIPTION": "Cliquez sur le bouton ci-dessous pour envoyer une notification à l'adresse e-mail actuelle ou modifier l'adresse e-mail dans le champ.", + "NEWEMAIL": "Nouvelle adresse e-mail" + }, + "TABLE": { + "DEACTIVATE": "Désactiver", + "ACTIVATE": "Activer", + "CHANGEDATE": "Dernière modification", + "CREATIONDATE": "Créé à", + "TYPES": { + "HUMAN": "Utilisateurs", + "MACHINE": "Utilisateurs du service" + }, + "FILTER": { + "0": "Filtre pour DisplayName", + "1": "Filtre sur le nom d'utilisateur", + "2": "filtre pour DisplayName", + "3": "filtre pour Username", + "4": "filtre pour Email", + "5": "filtre pour DisplayName", + "10": "filtre pour le nom de l'organisation", + "12": "filtre pour le nom du projet" + }, + "EMPTY": "Aucune entrée" + }, + "PASSWORDLESS": { + "SEND": "Envoyer le lien d'enregistrement", + "TABLETYPE": "Type", + "TABLESTATE": "Statut", + "NAME": "Nom", + "EMPTY": "Aucun dispositif défini", + "TITLE": "Authentification sans mot de passe", + "DESCRIPTION": "Ajoutez des méthodes d'authentification basées sur WebAuthn pour vous connecter à ZITADEL sans mot de passe.", + "MANAGE_DESCRIPTION": "Gérez les méthodes de second facteur de vos utilisateurs.", + "U2F": "Ajouter un authentifiant", + "U2F_DIALOG_TITLE": "Vérifier l'authentifiant", + "U2F_DIALOG_DESCRIPTION": "Entrez un nom pour votre connexion sans mot de passe utilisée", + "U2F_SUCCESS": "Auth sans mot de passe créé avec succès !", + "U2F_ERROR": "Une erreur s'est produite pendant la configuration !", + "U2F_NAME": "Nom de l'authentificateur", + "TYPE": { + "0": "Pas de MFA défini", + "1": "Mot de passe à usage unique (OTP)", + "2": "Empreinte digitale, clés de sécurité, Face ID et autres" + }, + "STATE": { + "0": "Pas d'état", + "1": "Pas prêt", + "2": "Prêt", + "3": "Supprimé" + }, + "DIALOG": { + "DELETE_TITLE": "Supprimer une méthode d'authentification sans mot de passe", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer une méthode d'authentification sans mot de passe. Vous êtes sûr ?", + "ADD_TITLE": "Authentification sans mot de passe", + "ADD_DESCRIPTION": "Sélectionnez l'une des options disponibles pour créer une méthode d'authentification sans mot de passe.", + "SEND_DESCRIPTION": "Envoyez vous-même un lien d'enregistrement à votre adresse électronique.", + "SEND": "Envoyer le lien d'enregistrement", + "SENT": "L'email a été délivré avec succès. Vérifiez votre boîte aux lettres électronique pour poursuivre la configuration.", + "QRCODE_DESCRIPTION": "Générer un code QR à scanner avec un autre appareil.", + "QRCODE": "Générer un code QR", + "QRCODE_SCAN": "Scannez ce code QR pour poursuivre la configuration sur votre appareil.", + "NEW_DESCRIPTION": "Utilisez cet appareil pour configurer Passwordless.", + "NEW": "Ajouter un nouveau" + } + }, + "METADATA": { + "TITLE": "Métadonnées", + "DESCRIPTION": "", + "KEY": "Clé", + "VALUE": "Valeur", + "ADD": "Nouvelle entrée", + "SAVE": "Enregistrer", + "EMPTY": "Pas de métadonnées", + "SETSUCCESS": "Élément sauvegardé avec succès", + "REMOVESUCCESS": "Élément supprimé avec succès" + }, + "MFA": { + "TABLETYPE": "Type", + "TABLESTATE": "Statut", + "NAME": "Nom", + "EMPTY": "Aucun facteur supplémentaire", + "TITLE": "Authentification multifactorielle", + "DESCRIPTION": "Ajoutez un second facteur pour garantir une sécurité optimale de votre compte.", + "MANAGE_DESCRIPTION": "Gérez les méthodes de second facteur de vos utilisateurs.", + "ADD": "Ajouter un facteur", + "OTP": "OTP (mot de passe à usage unique)", + "OTP_DIALOG_TITLE": "Ajouter un OTP", + "OTP_DIALOG_DESCRIPTION": "Scannez le code QR avec une application d'authentification et saisissez le code ci-dessous pour vérifier et activer la méthode OTP.", + "U2F": "Empreinte digitale, clés de sécurité, Face ID et autres", + "U2F_DIALOG_TITLE": "Vérifier le facteur", + "U2F_DIALOG_DESCRIPTION": "Entrez un nom pour votre multifacteur universel utilisé.", + "U2F_SUCCESS": "Facteur ajouté avec succès !", + "U2F_ERROR": "Une erreur s'est produite pendant l'installation !", + "U2F_NAME": "Nom de l'authentificateur", + "TYPE": { + "0": "Pas de MFA défini", + "1": "Mot de passe à usage unique (OTP)", + "2": "Empreinte digitale, clés de sécurité, Face ID et autres" + }, + "STATE": { + "0": "Pas d'état", + "1": "Pas prêt", + "2": "Prêt", + "3": "Supprimé" + }, + "DIALOG": { + "MFA_DELETE_TITLE": "Supprimer le second facteur", + "MFA_DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer un second facteur. En êtes-vous sûr ?", + "ADD_MFA_TITLE": "Ajouter un second facteur", + "ADD_MFA_DESCRIPTION": "Sélectionnez l'une des options suivantes." + } + }, + "EXTERNALIDP": { + "TITLE": "Fournisseurs d'identité externes", + "DESC": "", + "IDPCONFIGID": "IDP Config ID", + "IDPNAME": "Nom IDP", + "USERDISPLAYNAME": "Nom externe", + "EXTERNALUSERID": "IDP externe", + "EMPTY": "Aucun IDP externe trouvé", + "DIALOG": { + "DELETE_TITLE": "Supprimer l'IDP", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer un fournisseur d'identité d'un utilisateur. Voulez-vous vraiment continuer ?" + } + }, + "CREATE": { + "TITLE": "Créer un nouvel utilisateur", + "DESCRIPTION": "Veuillez fournir les informations nécessaires.", + "NAMEANDEMAILSECTION": "Nom et e-mail", + "GENDERLANGSECTION": "Sexe et langue", + "PHONESECTION": "Numéro de téléphone", + "PASSWORDSECTION": "Mot de passe initial", + "ADDRESSANDPHONESECTION": "Numéro de téléphone", + "INITMAILDESCRIPTION": "Si les deux options sont sélectionnées, aucun mail d'initialisation ne sera envoyé. Si une seule des options est sélectionnée, un mail pour fournir / vérifier les données sera envoyé." + }, + "CODEDIALOG": { + "TITLE": "Vérifier le numéro de téléphone", + "DESCRIPTION": "Entrez le code que vous avez reçu par SMS pour vérifier votre numéro de téléphone.", + "CODE": "Code" + }, + "DATA": { + "STATE": "Statut", + "STATE0": "Inconnu", + "STATE1": "Actif", + "STATE2": "Inactif", + "STATE3": "Supprimé", + "STATE4": "Verrouillé", + "STATE5": "Suspendu", + "STATE6": "Initial" + }, + "PROFILE": { + "TITLE": "Profil", + "EMAIL": "Courriel", + "PHONE": "Numéro de téléphone", + "USERNAME": "Nom de l'utilisateur", + "CHANGEUSERNAME": "modifier", + "CHANGEUSERNAME_TITLE": "Modifier le nom d'utilisateur", + "CHANGEUSERNAME_DESC": "Entrez le nouveau nom dans le champ ci-dessous.", + "FIRSTNAME": "Prénom", + "LASTNAME": "Nom de famille", + "NICKNAME": "Surnom", + "DISPLAYNAME": "Nom d'affichage", + "PREFERRED_LANGUAGE": "Langue", + "GENDER": "Sexe", + "PASSWORD": "Mot de passe", + "AVATAR": { + "UPLOADTITLE": "Téléchargez votre photo de profil", + "UPLOADBTN": "Choisir le fichier", + "UPLOAD": "Télécharger", + "CURRENT": "Photo actuelle", + "PREVIEW": "Prévisualiser", + "DELETESUCCESS": "Supprimé avec succès !", + "CROPPERERROR": "Une erreur s'est produite lors du téléchargement de votre fichier. Essayez un autre format et une autre taille si nécessaire." + } + }, + "MACHINE": { + "TITLE": "Détails de l'utilisateur du service", + "USERNAME": "Nom de l'utilisateur", + "NAME": "Nom", + "DESCRIPTION": "Description", + "KEYSTITLE": "Clés", + "KEYSDESC": "Définissez vos clés et ajoutez une date d'expiration facultative.", + "TOKENSTITLE": "Jetons d'accès personnels", + "TOKENSDESC": "Les jetons d'accès personnels fonctionnent comme des jetons d'accès OAuth ordinaires.", + "ID": "ID de la clé", + "TYPE": "Type", + "EXPIRATIONDATE": "Date d'expiration", + "CHOOSEDATEAFTER": "Entrez une date d'expiration valide après", + "CHOOSEEXPIRY": "Sélectionnez une date d'expiration", + "CREATIONDATE": "Date de création", + "KEYDETAILS": "Détails de la clé", + "ADD": { + "TITLE": "Ajouter une clé", + "DESCRIPTION": "Sélectionnez votre type de clé et choisissez une date d'expiration facultative." + }, + "ADDED": { + "TITLE": "La clé a été créée", + "DESCRIPTION": "Téléchargez la clé car elle ne sera plus visible après la fermeture de cette boîte de dialogue !" + }, + "KEYTYPES": { + "1": "JSON" + }, + "DIALOG": { + "DELETE_KEY": { + "TITLE": "Supprimer la clé", + "DESCRIPTION": "Voulez-vous supprimer la clé sélectionnée ? Cette opération ne peut être annulée." + } + } + }, + "PASSWORD": { + "TITLE": "Mot de passe", + "DESCRIPTION": "Saisissez le nouveau mot de passe conformément à la politique ci-dessous.", + "OLD": "Mot de passe actuel", + "NEW": "Nouveau mot de passe", + "CONFIRM": "Confirmer le nouveau mot de passe", + "NEWINITIAL": "Mot de passe", + "CONFIRMINITIAL": "Confirmer le mot de passe", + "RESET": "Réinitialiser le mot de passe actuel", + "SET": "Définir un nouveau mot de passe", + "RESENDNOTIFICATION": "Envoyer le lien de réinitialisation du mot de passe", + "REQUIRED": "Certains champs obligatoires sont manquants.", + "MINLENGTHERROR": "Le mot de passe doit comporter au moins{{value}} caractères.", + "NOTEQUAL": "Les mots de passe fournis ne correspondent pas." + }, + "ID": "ID", + "EMAIL": "E-mail", + "PHONE": "Numéro de téléphone", + "PHONEEMPTY": "Pas de numéro de téléphone défini", + "PHONEVERIFIED": "Numéro de téléphone vérifié.", + "EMAILVERIFIED": "Courriel vérifié", + "NOTVERIFIED": "non vérifié", + "PREFERRED_LOGINNAME": "Nom de connexion préféré", + "LOGINMETHODS": { + "TITLE": "Informations sur le contact", + "DESCRIPTION": "Les informations fournies sont utilisées pour vous envoyer des informations importantes, comme des e-mails de réinitialisation de mot de passe.", + "EMAIL": { + "TITLE": "Courriel", + "VALID": "validé", + "ISVERIFIED": "Courriel vérifié", + "ISVERIFIEDDESC": "Si l'e-mail est indiqué comme vérifié, aucune demande de vérification d'e-mail ne sera effectuée.", + "RESEND": "Renvoyer l'e-mail de vérification", + "EDITTITLE": "Modifier l'e-mail", + "EDITDESC": "Entrez le nouvel e-mail dans le champ ci-dessous." + }, + "PHONE": { + "TITLE": "Téléphone", + "VALID": "validé", + "RESEND": "Renvoyer le message texte de vérification", + "EDITTITLE": "Changer le numéro", + "EDITVALUE": "Numéro de téléphone", + "EDITDESC": "Entrez le nouveau numéro de téléphone dans le champ ci-dessous.", + "DELETETITLE": "Supprimer le numéro de téléphone", + "DELETEDESC": "Voulez-vous vraiment supprimer le numéro de téléphone ?" + }, + "RESENDCODE": "Renvoyer le code", + "ENTERCODE": "Vérifier", + "ENTERCODE_DESC": "Code de vérification" + }, + "GRANTS": { + "TITLE": "Attribution d'un utilisateur", + "DESCRIPTION": "Accorder à cet utilisateur l'accès à certains projets", + "CREATE": { + "TITLE": "Créer une autorisation d'utilisateur", + "DESCRIPTION": "Recherchez l'organisation, le projet et les rôles de projet correspondants." + }, + "PROJECTNAME": "Nom du projet", + "PROJECT-OWNED": "Projet", + "PROJECT-GRANTED": "Projet concédé", + "FILTER": { + "0": "filtre pour l'utilisateur", + "1": "filtre pour le domaine", + "2": "filtre pour le nom du projet", + "3": "filtre pour nom de rôle" + } + }, + "VALIDATION": { + "INVALIDPATTERN": "Le mot de passe ne répond pas aux règles définies.", + "NOTANEMAIL": "La valeur donnée n'est pas une adresse e-mail", + "REQUIRED": "Le champ de saisie est vide.", + "MINLENGTH": "Le mot de passe doit comporter au moins{{length}} caractères.", + "NOEMAIL": "Le nom d'utilisateur ne peut pas être une adresse électronique.", + "UPPERCASEMISSING": "Le mot de passe doit comporter un caractère majuscule.", + "LOWERCASEMISSING": "Le mot de passe doit inclure un caractère minuscule.", + "SYMBOLERROR": "Le mot de passe doit inclure un symbole ou un signe de ponctuation.", + "NUMBERERROR": "Le mot de passe doit contenir un chiffre." + }, + "STATE": { + "0": "Inconnu", + "1": "Actif", + "2": "Inactif", + "3": "Supprimé", + "4": "Verrouillé", + "5": "Suspendu", + "6": "Initial" + }, + "SEARCH": { + "ADDITIONAL": "Nom de connexion (organisation actuelle)", + "ADDITIONAL-EXTERNAL": "Nom de connexion (organisation externe)" + }, + "TARGET": { + "SELF": "Si vous souhaitez accorder une autorisation à un utilisateur d'une autre organisation", + "EXTERNAL": "Pour accorder un utilisateur de votre organisation", + "CLICKHERE": "cliquez ici" + }, + "SIGNEDOUT": "Vous êtes déconnecté. Cliquez sur le bouton \"Se connecter\" pour vous reconnecter.", + "SIGNEDOUT_BTN": "Se connecter", + "EDITACCOUNT": "Modifier le compte", + "ADDACCOUNT": "Se connecter avec un autre compte", + "RESENDINITIALEMAIL": "Envoyer un nouveau courrier d'initialisation", + "RESENDEMAILNOTIFICATION": "Renvoyer la notification par e-mail", + "TOAST": { + "CREATED": "Utilisateur créé avec succès.", + "SAVED": "Profil enregistré avec succès.", + "USERNAMECHANGED": "Nom d'utilisateur modifié.", + "EMAILSAVED": "E-mail enregistré avec succès.", + "INITEMAILSENT": "Initialisation du courrier envoyé.", + "PHONESAVED": "Téléphone enregistré avec succès.", + "PHONEREMOVED": "Le téléphone a été supprimé.", + "PHONEVERIFIED": "Téléphone vérifié avec succès.", + "PHONEVERIFICATIONSENT": "Code de vérification du téléphone envoyé.", + "EMAILVERIFICATIONSENT": "Code de vérification de l'e-mail envoyé.", + "OTPREMOVED": "OTP supprimé.", + "U2FREMOVED": "Facteur supprimé.", + "PASSWORDLESSREMOVED": "Sans mot de passe supprimé.", + "INITIALPASSWORDSET": "Mot de passe initial défini.", + "PASSWORDNOTIFICATIONSENT": "Notification de changement de mot de passe envoyée.", + "PASSWORDCHANGED": "Mot de passe modifié avec succès.", + "REACTIVATED": "Utilisateur réactivé.", + "DEACTIVATED": "Utilisateur désactivé.", + "SELECTEDREACTIVATED": "Utilisateurs sélectionnés réactivés.", + "SELECTEDDEACTIVATED": "Utilisateurs sélectionnés désactivés.", + "SELECTEDKEYSDELETED": "Clés sélectionnées supprimées.", + "KEYADDED": "Clé ajoutée !", + "MACHINEADDED": "Utilisateur de service créé !", + "DELETED": "Utilisateur supprimé avec succès !", + "UNLOCKED": "Utilisateur déverrouillé avec succès !", + "PASSWORDLESSREGISTRATIONSENT": "Lien d'enregistrement envoyé avec succès." + }, + "MEMBERSHIPS": { + "TITLE": "Rôles du gestionnaire ZITADEL", + "DESCRIPTION": "Il s'agit de toutes les attributions des membres de l'utilisateur. Vous pouvez les modifier également sur les pages de détails de l'organisation, du projet ou de l'IAM.", + "ORGCONTEXT": "Vous voyez toutes les organisations et tous les projets qui sont liés à l'organisation actuellement sélectionnée.", + "USERCONTEXT": "Vous voyez toutes les organisations et tous les projets auxquels vous êtes autorisé. Y compris les autres organisations.", + "CREATIONDATE": "Date de création", + "CHANGEDATE": "Dernière modification", + "DISPLAYNAME": "Nom d'affichage", + "REMOVE": "Supprimer", + "TYPE": "Type", + "ORGID": "ID de l'organisation", + "UPDATED": "L'adhésion a été mise à jour.", + "NOPERMISSIONTOEDIT": "Il vous manque les autorisations nécessaires pour modifier les rôles !", + "TYPES": { + "UNKNOWN": "Inconnu", + "ORG": "Organisation", + "PROJECT": "Projet", + "GRANTEDPROJECT": "Projet accordé" + } + }, + "PERSONALACCESSTOKEN": { + "ID": "ID", + "TOKEN": "Jeton", + "ADD": { + "TITLE": "Générer un nouveau jeton d'accès personnel", + "DESCRIPTION": "Définissez une expiration personnalisée pour le jeton.", + "CHOOSEEXPIRY": "Sélectionnez une date d'expiration", + "CHOOSEDATEAFTER": "Entrez une expiration valide après" + }, + "ADDED": { + "TITLE": "Jeton d'accès personnel", + "DESCRIPTION": "Veillez à copier votre jeton d'accès personnel. Vous ne pourrez plus le voir !" + }, + "DELETE": { + "TITLE": "Supprimer le jeton", + "DESCRIPTION": "Vous êtes sur le point de supprimer le jeton d'accès personnel. Vous êtes sûr ?" + }, + "DELETED": "Jeton supprimé avec succès." + } + }, + "FLOWS": { + "TITLE": "Actions et flux", + "DESCRIPTION": "Définissez des scripts à exécuter lors d'un certain événement.", + "ACTIONSTITLE": "Actions", + "ACTIONSDESCRIPTION": "Ce sont vos scripts que vous pouvez exécuter dans les flux.", + "FLOWSTITLE": "Flux", + "FLOWSDESCRIPTION": "Les flux d'un certain type exécutent des actions au moment d'un déclencheur.", + "ID": "ID", + "NAME": "Nom", + "STATE": "État", + "STATES": { + "0": "pas d'état", + "1": "inactif", + "2": "actif" + }, + "TYPES": { + "0": "Type non spécifié", + "1": "Authentification externe" + }, + "TRIGGERTYPES": { + "1": "Post Authentification", + "2": "Pré création", + "3": "Post création" + }, + "ADDTRIGGER": "Ajouter un déclencheur", + "TIMEOUT": "Délai d'attente", + "TIMEOUTINSEC": "Délai en secondes", + "ALLOWEDTOFAIL": "Autorisé à échouer", + "SCRIPT": "Script", + "FLOWTYPE": "Type de flux", + "TRIGGERTYPE": "Type de déclencheur", + "ACTIONS": "Actions", + "ACTIONSMAX": "En fonction de votre niveau, vous disposez d'un nombre limité d'actions ({{value}}). Veillez à désactiver celles dont vous n'avez pas besoin ou envisagez d'améliorer votre niveau.", + "DIALOG": { + "ADD": { + "TITLE": "Créer une action" + }, + "UPDATE": { + "TITLE": "Mettre à jour l'action" + }, + "DELETEACTION": { + "TITLE": "Supprimer une action ?", + "DESCRIPTION": "Vous êtes sur le point de supprimer une action. Cette action ne peut pas être annulée. Vous êtes sûr ?", + "DELETE_SUCCESS": "Action supprimée avec succès." + }, + "CLEAR": { + "TITLE": "Effacer le flux ?", + "DESCRIPTION": "Vous êtes sur le point de réinitialiser le flux ainsi que ses déclencheurs et actions. Ce changement ne peut pas être restauré. Etes-vous sûr ?" + } + }, + "TOAST": { + "ACTIONSSET": "Actions définies", + "ACTIONREACTIVATED": "Actions réactivées avec succès", + "ACTIONDEACTIVATED": "Actions désactivées avec succès" + } + }, + "IAM": { + "TITLE": "Instance", + "DESCRIPTION": "Gérez les paramètres de votre instance et les organisations", + "POLICIES": { + "TITLE": "Politiques et paramètres d'accès au système", + "DESCRIPTION": "Gérer vos politiques globales et vos paramètres d'accès à la gestion." + }, + "EVENTSTORE": { + "TITLE": "Administration du stockage IAM", + "DESCRIPTION": "Gérez vos vues ZITADEL et les événements échoués." + }, + "MEMBER": { + "TITLE": "Managers", + "DESCRIPTION": "Ces gestionnaires sont autorisés à effectuer des changements dans votre instance." + }, + "VIEWS": { + "TITLE": "Vues", + "DESCRIPTION": "Cette carte montre vos vues ZITADEL.", + "VIEWNAME": "Nom", + "DATABASE": "Base de données", + "SEQUENCE": "Séquence", + "EVENTTIMESTAMP": "Horodatage", + "LASTSPOOL": "Spool réussi", + "ACTIONS": "Actions", + "CLEAR": "Effacer", + "CLEARED": "La vue a été effacée avec succès !", + "DIALOG": { + "VIEW_CLEAR_TITLE": "Effacer la vue", + "VIEW_CLEAR_DESCRIPTION": "Vous êtes sur le point d'effacer une vue. L'effacement d'une vue crée un processus pendant lequel les données ne sont peut-être pas disponibles pour les utilisateurs finaux. Etes-vous vraiment sûr ?" + } + }, + "FAILEDEVENTS": { + "TITLE": "Événements échoués", + "DESCRIPTION": "Cette carte montre vos événements échoués.", + "VIEWNAME": "Nom", + "DATABASE": "Base de données", + "FAILEDSEQUENCE": "Séquence échouée", + "FAILURECOUNT": "Nombre d'échecs", + "ERRORMESSAGE": "Message d'erreur", + "ACTIONS": "Actions", + "DELETE": "Supprimer", + "DELETESUCCESS": "Événements échoués supprimés." + }, + "TOAST": { + "MEMBERREMOVED": "Gestionnaire supprimé.", + "MEMBERSADDED": "Gestionnaires ajoutés.", + "MEMBERADDED": "Gestionnaire ajouté.", + "MEMBERCHANGED": "Manager changé.", + "ROLEREMOVED": "Rôle supprimé.", + "ROLECHANGED": "Rôle modifié.", + "REACTIVATED": "Réactivé", + "DEACTIVATED": "Désactivé" + } + }, + "ORG": { + "PAGES": { + "NAME": "Nom", + "ID": "ID", + "CREATIONDATE": "Date de création", + "DATECHANGED": "Modifié", + "FILTER": "Filtre", + "FILTERPLACEHOLDER": "Filtre pour le nom", + "LIST": "Organisations", + "LISTDESCRIPTION": "Choisissez une organisation.", + "ACTIVE": "Actif", + "CREATE": "Créer une organisation", + "NOPERMISSION": "Vous n'avez pas la permission d'accéder aux paramètres de l'organisation.", + "USERSELFACCOUNT": "Utilisez votre compte personnel comme propriétaire de l'organisation", + "ORGDETAIL_TITLE": "Saisissez le nom et le domaine de votre nouvelle organisation.", + "ORGDETAIL_TITLE_WITHOUT_DOMAIN": "Saisissez le nom de votre nouvelle organisation.", + "ORGDETAILUSER_TITLE": "Configurer le propriétaire de l'organisation", + "ORGDOMAIN": { + "TITLE": "Vérification de la propriété du domaine de l'organisation", + "VERIFICATION": "Pour vérifier la propriété de votre domaine, vous devez télécharger un fichier de vérification et le charger à l'URL indiquée ci-dessous, ou placer une entrée DNS TXT Record pour l'URL indiquée. Pour terminer, cliquez sur le bouton de vérification.", + "VERIFICATION_SKIP": "Vous pouvez ignorer la vérification pour l'instant et continuer à créer votre organisation, mais cette étape doit être terminée pour pouvoir utiliser votre organisation !", + "VERIFICATION_VALIDATION_DESC": "Les jetons sont vérifiés régulièrement pour s'assurer que vous êtes toujours propriétaire du domaine.", + "VERIFICATION_NEWTOKEN_TITLE": "Demander un nouveau jeton", + "VERIFICATION_NEWTOKEN_DESC": "Si vous voulez demander un nouveau jeton, sélectionnez votre méthode préférée. Si vous voulez valider un jeton persistant, cliquez sur le bouton ci-dessus.", + "VERIFICATION_VALIDATION_ONGOING": "Un jeton de vérification a déjà été demandé. Cliquez sur le bouton pour déclencher un contrôle de vérification.", + "VERIFICATION_VALIDATION_ONGOING_TYPE": "Type de jeton", + "VERIFICATION_SUCCESSFUL": "Domaine vérifié avec succès !", + "REQUESTNEWTOKEN": "Demander un nouveau jeton", + "TYPES": { + "1": "HTTP", + "2": "DNS" + } + }, + "DOWNLOAD_FILE": "Télécharger le fichier", + "SELECTORGTOOLTIP": "Sélectionnez cette organisation.", + "PRIMARYDOMAIN": "Domaine primaire", + "STATE": "État", + "USEPASSWORD": "Définir le mot de passe initial", + "USEPASSWORDDESC": "L'utilisateur n'a pas à définir le mot de passe lors de l'initialisation." + }, + "LIST": { + "TITLE": "Organisations", + "DESCRIPTION": "Ce sont les organisations de votre instance" + }, + "DOMAINS": { + "NEW": "Ajouter un domaine", + "TITLE": "Domaines", + "DESCRIPTION": "Configurez vos domaines. Ce domaine peut être utilisé pour se connecter avec vos utilisateurs.", + "SETPRIMARY": "Définir comme primaire", + "DELETE": { + "TITLE": "Supprimer un domaine", + "DESCRIPTION": "Vous êtes sur le point de supprimer l'un de vos domaines. Notez que vos utilisateurs ne peuvent plus utiliser ce domaine pour leur connexion." + }, + "ADD": { + "TITLE": "Ajouter un domaine", + "DESCRIPTION": "Vous êtes sur le point d'ajouter un domaine pour votre organisation. Une fois le processus réussi, vos utilisateurs pourront utiliser le domaine pour leur connexion." + } + }, + "STATE": { + "0": "Non défini", + "1": "Actif", + "2": "Désactivé" + }, + "MEMBER": { + "TITLE": "Gestionnaires de l'organisation", + "DESCRIPTION": "Définissez les utilisateurs qui peuvent modifier les préférences de votre organisation." + }, + "TOAST": { + "DEACTIVATED": "Organisation désactivée.", + "REACTIVATED": "Organisation réactivée.", + "DOMAINADDED": "Domaine ajouté.", + "DOMAINREMOVED": "Domaine supprimé.", + "MEMBERADDED": "Gestionnaire ajouté.", + "MEMBERREMOVED": "Gestionnaire supprimé.", + "MEMBERCHANGED": "Gestionnaire modifié.", + "SETPRIMARY": "Domaine primaire défini." + } + }, + "SETTINGS": { + "INSTANCE": { + "TITLE": "Paramètres de l'instance", + "DESCRIPTION": "Ces paramètres s'appliqueront à toutes vos organisations, sauf s'ils ont été remplacés." + }, + "ORG": { + "TITLE": "Paramètres de l'organisation", + "DESCRIPTION": "Ces paramètres étendent et remplacent les paramètres de votre instance." + }, + "LIST": { + "GENERAL": "Général", + "LOGIN": "Comportement de connexion et sécurité", + "LOCKOUT": "Verrouillage", + "COMPLEXITY": "Complexité du mot de passe", + "NOTIFICATIONS": "Fournisseurs de notifications et SMTP", + "NOTIFICATIONS_DESC": "Paramètres SMTP et SMS", + "MESSAGETEXTS": "Textes des messages", + "IDP": "Fournisseurs d'identité", + "DOMAIN": "Paramètres du domaine", + "LOGINTEXTS": "Textes de l'interface de connexion", + "BRANDING": "Image de marque", + "PRIVACYPOLICY": "Politique de confidentialité", + "OIDC": "Durée de vie et expiration des jetons OIDC", + "SECRETS": "Apparence secrète" + }, + "GROUPS": { + "NOTIFICATIONS": "Notifications", + "LOGIN": "Connexion et accès", + "DOMAIN": "Domaine", + "TEXTS": "Textes et langues", + "APPEARANCE": "Apparence", + "OTHER": "Autres" + } + }, + "SETTING": { + "DEFAULTLANGUAGE": "Langue par défaut", + "LANGUAGE": { + "de": "Deutsch", + "it": "Italiano", + "en": "English" + }, + "SMTP": { + "TITLE": "Paramètres SMTP", + "SENDERADDRESS": "Adresse e-mail de l'expéditeur", + "SENDERNAME": "Nom de l'expéditeur", + "HOST": "Hôte", + "USER": "Utilisateur", + "PASSWORD": "Mot de passe", + "SETPASSWORD": "Définir le mot de passe SMTP", + "PASSWORDSET": "Le mot de passe SMTP a été défini avec succès.", + "TLS": "Sécurité de la couche de transport (TLS)", + "SAVED": "Enregistré avec succès !", + "REQUIREDWARN": "Pour envoyer des notifications depuis votre domaine, vous devez entrer vos données SMTP." + }, + "SMS": { + "TITLE": "Paramètres SMS", + "PROVIDERS": "Fournisseurs", + "PROVIDER": "Fournisseur de SMS", + "ADDPROVIDER": "Ajouter un fournisseur de SMS", + "ADDPROVIDERDESCRIPTION": "Choisissez l'un des fournisseurs disponibles et saisissez les données requises.", + "TWILIO": { + "SID": "Sid", + "TOKEN": "Jeton", + "SENDERNUMBER": "Numéro d'expéditeur", + "ADDED": "Twilio a été ajouté avec succès.", + "CHANGETOKEN": "Changer de Token", + "SETTOKEN": "Définir le jeton", + "TOKENSET": "Le jeton a été défini avec succès." + } + }, + "OIDC": { + "TITLE": "Paramètres OIDC", + "ACCESSTOKENLIFETIME": "Durée de vie du jeton d'accès", + "IDTOKENLIFETIME": "Durée de vie du jeton d'identité", + "REFRESHTOKENEXPIRATION": "Rafraîchir l'expiration du jeton", + "REFRESHTOKENIDLEEXPIRATION": "Rafraîchissement de l'expiration de la période d'inactivité du jeton", + "INHOURS": "heures", + "INDAYS": "Jours" + }, + "SECRETS": { + "TITLE": "Apparence du secret", + "TYPES": "Types de secret", + "TYPE": { + "1": "Courrier d'initialisation", + "2": "Vérification du courrier électronique", + "3": "Vérification par téléphone", + "4": "Réinitialisation du mot de passe", + "5": "Initialisation sans mot de passe", + "6": "Secret de l'application" + }, + "ADDGENERATOR": "Définir l'apparence du secret", + "GENERATORTYPE": "Type", + "EXPIRY": "Expiration (en heures)", + "INCLUDEDIGITS": "Inclure les chiffres", + "INCLUDESYMBOLS": "Inclure les symboles", + "INCLUDELOWERLETTERS": "Inclure les lettres minuscules", + "INCLUDEUPPERLETTERS": "Inclure les lettres majuscules", + "LENGTH": "Longueur", + "UPDATED": "Paramètres mis à jour." + }, + "DIALOG": { + "RESET": { + "DEFAULTTITLE": "Réinitialiser les paramètres", + "DEFAULTDESCRIPTION": "Vous êtes sur le point de réinitialiser vos paramètres à la configuration par défaut de votre instance. Êtes-vous sûr de vouloir continuer ?", + "LOGINPOLICY_DESCRIPTION": "Avertissement" + } + } + }, + "POLICY": { + "TITLE": "Explorer les paramètres", + "DESCRIPTION": "Paramètres préemballés qui renforcent votre sécurité.", + "APPLIEDTO": "Appliqué à", + "PWD_COMPLEXITY": { + "TITLE": "Complexité des mots de passe", + "DESCRIPTION": "Assure que tous les mots de passe définis correspondent à un modèle spécifique.", + "SYMBOLANDNUMBERERROR": "Le mot de passe doit être composé d'un chiffre et d'un symbole/une marque de ponctuation.", + "SYMBOLERROR": "Le mot de passe doit comprendre un symbole ou un signe de ponctuation.", + "NUMBERERROR": "Le mot de passe doit comprendre un chiffre.", + "PATTERNERROR": "Le mot de passe ne correspond pas au modèle requis." + }, + "PRIVATELABELING": { + "TITLE": "Image de marque", + "DESCRIPTION": "Donnez au login votre style personnalisé et modifiez son comportement.", + "PREVIEW_DESCRIPTION": "Les modifications de la politique seront automatiquement déployées dans l'environnement de prévisualisation.", + "BTN": "Sélectionner le fichier", + "ACTIVATEPREVIEW": "Appliquer la configuration", + "DARK": "Mode foncé", + "LIGHT": "Mode clair", + "CHANGEVIEW": "Modifier la vue", + "ACTIVATED": "Les changements de politique sont maintenant LIVE", + "THEME": "Thème", + "COLORS": "Couleurs", + "FONT": "Police de caractères", + "ADVANCEDBEHAVIOR": "Comportement avancé", + "DROP": "Déposer une image ici ou", + "RELEASE": "Communiqué", + "DROPFONT": "Déposer le fichier de la police ici", + "RELEASEFONT": "Release", + "USEOFLOGO": "Votre logo sera utilisé dans la connexion ainsi que dans les courriels, tandis que l'icône est utilisée pour les petits éléments de l'interface utilisateur, comme le sélecteur d'organisation dans la console.", + "MAXSIZE": "La taille maximale est limitée à 524 Ko.", + "EMAILNOSVG": "Le format de fichier SVG n'est pas supporté dans les emails. Téléchargez donc votre logo en PNG ou dans un autre format pris en charge.", + "MAXSIZEEXCEEDED": "La taille maximale de 524kB est dépassée.", + "FONTINLOGINONLY": "La police n'est actuellement affichée que dans l'interface de connexion.", + "VIEWS": { + "PREVIEW": "Aperçu", + "CURRENT": "Configuration actuelle" + }, + "PREVIEW": { + "TITLE": "Connexion", + "SECOND": "Connectez-vous avec votre compte ZITADEL.", + "ERROR": "L'utilisateur n'a pas pu être trouvé !", + "PRIMARYBUTTON": "suivant", + "SECONDARYBUTTON": "enregistrez-vous" + } + }, + "PWD_AGE": { + "TITLE": "Vieillissement des mots de passe", + "DESCRIPTION": "Vous pouvez définir une politique pour le vieillissement des mots de passe. Cette politique émet un avertissement après que le temps de vieillissement spécifique se soit écoulé." + }, + "PWD_LOCKOUT": { + "TITLE": "Politique de verrouillage", + "DESCRIPTION": "Définissez un nombre maximum de tentatives de saisie du mot de passe, après quoi les comptes seront bloqués." + }, + "DOMAIN_POLICY": { + "TITLE": "Paramètres du domaine" + }, + "PRIVATELABELING_POLICY": { + "TITLE": "Image de marque", + "BTN": "Sélectionner le fichier", + "DESCRIPTION": "Personnaliser l'apparence de la connexion", + "ACTIVATEPREVIEW": "Activer la configuration" + }, + "LOGIN_POLICY": { + "TITLE": "Paramètres de connexion", + "DESCRIPTION": "Définir la manière dont les utilisateurs peuvent être authentifiés et configurer les fournisseurs d'identité.", + "DESCRIPTIONCREATEADMIN": "Les utilisateurs peuvent choisir parmi les fournisseurs d'identité disponibles ci-dessous.", + "DESCRIPTIONCREATEMGMT": "Les utilisateurs peuvent choisir parmi les fournisseurs d'identité disponibles ci-dessous. Note", + "ADVANCED": "Avancé", + "LIFETIMEDURATIONS": "Durée de vie des connexions", + "SAVED": "Enregistré avec succès !" + }, + "PRIVACY_POLICY": { + "TITLE": "Politique de confidentialité et CGS", + "DESCRIPTION": "Définissez vos liens vers la politique de confidentialité et les conditions de service", + "TOSLINK": "Lien vers les conditions d'utilisation", + "POLICYLINK": "Lien vers la politique de confidentialité", + "HELPLINK": "Lien vers l'aide", + "SAVED": "Enregistré avec succès !", + "RESET_TITLE": "Restaurer les valeurs par défaut", + "RESET_DESCRIPTION": "Vous êtes sur le point de restaurer les liens par défaut pour les CGS et la politique de confidentialité. Voulez-vous vraiment continuer ?" + }, + "LOGIN_TEXTS": { + "TITLE": "Textes des interfaces de connexion", + "DESCRIPTION": "Définissez vos textes pour les interfaces de connexion. Si les textes sont vides, la valeur par défaut affichée dans l'espace réservé sera utilisée.", + "DESCRIPTION_SHORT": "Définissez vos textes pour les interfaces de connexion.", + "NEWERVERSIONEXISTS": "Une version plus récente existe", + "CURRENTDATE": "Configuration actuelle", + "CHANGEDATE": "Version plus récente de", + "KEYNAME": "Écran / Interface de connexion", + "RESET_TITLE": "Restaurer les valeurs par défaut", + "RESET_DESCRIPTION": "Vous êtes sur le point de restaurer toutes les valeurs par défaut. Toutes les modifications que vous avez apportées seront définitivement supprimées. Voulez-vous vraiment continuer ?", + "UNSAVED_TITLE": "Continuer sans sauvegarder ?", + "UNSAVED_DESCRIPTION": "Vous avez apporté des modifications sans les sauvegarder. Voulez-vous les enregistrer maintenant ?", + "LOCALE": "Code Locale", + "LOCALES": { + "de": "Deutsch", + "en": "English", + "it": "Italiano", + "fr": "Français" + }, + "KEYS": { + "emailVerificationDoneText": "Vérification de l'email effectuée", + "emailVerificationText": "Vérification de l'email", + "externalUserNotFoundText": "Utilisateur externe non trouvé", + "footerText": "Pied de page", + "initMfaDoneText": "Initialiser MFA terminé", + "initMfaOtpText": "Initialiser MFA", + "initMfaPromptText": "Initialiser l'invite MFA", + "initMfaU2fText": "Initialiser le second facteur universel", + "initPasswordDoneText": "Initialiser le mot de passe fait", + "initPasswordText": "Initialiser le mot de passe", + "initializeDoneText": "Initialiser l'utilisateur terminé", + "initializeUserText": "Initialiser l'utilisateur", + "linkingUserDoneText": "Lier l'utilisateur fait", + "loginText": "Connexion", + "logoutText": "Déconnexion", + "mfaProvidersText": "Fournisseurs MFA", + "passwordChangeDoneText": "Changement de mot de passe effectué", + "passwordChangeText": "Changement de mot de passe", + "passwordResetDoneText": "Réinitialisation du mot de passe effectuée", + "passwordText": "Mot de passe", + "registrationOptionText": "Options d'enregistrement", + "registrationOrgText": "Enregistrer l'organisation", + "registrationUserText": "Enregistrer un utilisateur", + "selectAccountText": "Sélectionner un compte", + "successLoginText": "Connexion avec succès", + "usernameChangeDoneText": "Changement de nom d'utilisateur effectué", + "usernameChangeText": "Changement de nom d'utilisateur", + "verifyMfaOtpText": "Vérifier l'OTP", + "verifyMfaU2fText": "Vérifier le second facteur universel", + "passwordlessPromptText": "Invitation sans mot de passe", + "passwordlessRegistrationDoneText": "Enregistrement sans mot de passe Terminé", + "passwordlessRegistrationText": "Enregistrement sans mot de passe", + "passwordlessText": "Sans mot de passe", + "externalRegistrationUserOverviewText": "Enregistrement externe Aperçu de l'utilisateur" + } + }, + "MESSAGE_TEXTS": { + "TITLE": "Textes des messages", + "DESCRIPTION": "Définissez vos textes pour vos messages de notification.", + "TYPE": "Notification", + "TYPES": { + "INIT": "Initialisation", + "VE": "Vérifier l'email", + "VP": "Vérifier le téléphone", + "PR": "Réinitialisation du mot de passe", + "DC": "Réclamation de domaine", + "PL": "Sans mot de passe" + }, + "CHIPS": { + "firstname": "Prénom", + "lastname": "Nom de famille", + "code": "Code", + "preferredLoginName": "Nom de connexion préféré", + "displayName": "Nom d'affichage", + "nickName": "Surnom", + "loginnames": "Noms de connexion", + "domain": "Domaine", + "lastEmail": "Dernier email", + "lastPhone": "Dernier téléphone", + "verifiedEmail": "Courriel vérifié", + "verifiedPhone": "Téléphone vérifié", + "changedate": "Date de changement", + "username": "Nom d'utilisateur", + "tempUsername": "Nom d'utilisateur temporaire" + }, + "TOAST": { + "UPDATED": "Textes personnalisés enregistrés." + } + }, + "DEFAULTLABEL": "Les paramètres actuels correspondent au standard de votre Instance.", + "BTN_INSTALL": "Configurer", + "BTN_EDIT": "Modifier", + "DATA": { + "DESCRIPTION": "Description", + "MINLENGTH": "longueur minimale", + "HASNUMBER": "a numéro", + "HASSYMBOL": "a un symbole", + "HASLOWERCASE": "a minuscule", + "HASUPPERCASE": "a majuscule", + "SHOWLOCKOUTFAILURES": "montrer les échecs de verrouillage", + "MAXATTEMPTS": "Mot de passe maximum Tentatives", + "EXPIREWARNDAYS": "Expiration Avertissement après le jour", + "MAXAGEDAYS": "Âge maximum en jours", + "USERLOGINMUSTBEDOMAIN": "Le nom de connexion de l'utilisateur doit contenir le nom de domaine de l'organisation", + "VALIDATEORGDOMAINS": "Valider les domaines d'Org", + "SMTPSENDERADDRESSMATCHESINSTANCEDOMAIN": "L'adresse de l'expéditeur SMTP correspond au domaine de l'instance", + "ALLOWUSERNAMEPASSWORD": "Nom d'utilisateur Mot de passe autorisé", + "ALLOWEXTERNALIDP": "IDP externe autorisé", + "ALLOWREGISTER": "Enregistrement autorisé", + "ALLOWUSERNAMEPASSWORD_DESC": "La connexion classique avec nom d'utilisateur et mot de passe est autorisée.", + "ALLOWEXTERNALIDP_DESC": "La connexion est autorisée pour les fournisseurs d'identité sous-jacents", + "ALLOWREGISTER_DESC": "Si l'option est sélectionnée, une étape supplémentaire pour l'enregistrement d'un utilisateur apparaît dans la connexion.", + "FORCEMFA": "Forcer MFA", + "FORCEMFA_DESC": "Si l'option est sélectionnée, les utilisateurs doivent configurer un deuxième facteur pour la connexion.", + "HIDEPASSWORDRESET": "Masquer la réinitialisation du mot de passe", + "HIDEPASSWORDRESET_DESC": "Si l'option est sélectionnée, l'utilisateur ne peut pas réinitialiser son mot de passe lors du processus de connexion.", + "HIDELOGINNAMESUFFIX": "Masquer le suffixe du nom de connexion", + "IGNOREUNKNOWNUSERNAMES": "Ignorer les noms d'utilisateur inconnus", + "IGNOREUNKNOWNUSERNAMES_DESC": "Si l'option est sélectionnée, l'écran du mot de passe sera affiché dans le processus de connexion même si l'utilisateur n'a pas été trouvé. L'erreur sur la vérification du mot de passe ne révélera pas si le nom d'utilisateur ou le mot de passe était erroné.", + "DEFAULTREDIRECTURI": "URI de redirection par défaut", + "DEFAULTREDIRECTURI_DESC": "Définit l'endroit où l'utilisateur sera redirigé si la connexion a commencé sans contexte d'application (par exemple, à partir du courrier électronique).", + "ERRORMSGPOPUP": "Afficher l'erreur dans la boîte de dialogue", + "DISABLEWATERMARK": "Cacher le filigrane", + "PASSWORDCHECKLIFETIME": "Durée de vie de la vérification du mot de passe", + "EXTERNALLOGINCHECKLIFETIME": "Durée de vie de la vérification de la connexion externe", + "MFAINITSKIPLIFETIME": "Durée de vie de l'initialisation multifactorielle", + "SECONDFACTORCHECKLIFETIME": "Durée de vie de la vérification du second facteur", + "MULTIFACTORCHECKLIFETIME": "Durée de vie de la vérification multifactorielle", + "INHOURS": "heures" + }, + "RESET": "Réinitialiser à la valeur par défaut de l'Instance", + "CREATECUSTOM": "Créer une politique personnalisée", + "TOAST": { + "SET": "Politique définie avec succès !", + "RESETSUCCESS": "Politique réinitialisée avec succès !", + "UPLOADSUCCESS": "Téléchargé avec succès !", + "DELETESUCCESS": "Suppression réussie !", + "UPLOADFAILED": "Échec du téléchargement !" + } + }, + "ORG_DETAIL": { + "TITLE": "Organisation", + "DESCRIPTION": "Ici, vous pouvez modifier la configuration de votre organisation et gérer les membres.", + "DETAIL": { + "TITLE": "Détail", + "NAME": "Nom", + "DOMAIN": "Domaine", + "STATE": { + "0": "Non défini", + "1": "Actif", + "2": "Inactif" + } + }, + "MEMBER": { + "TITLE": "Membres", + "USERNAME": "Nom d'utilisateur", + "DISPLAYNAME": "Nom d'affichage", + "LOGINNAME": "Nom de connexion", + "EMAIL": "E-mail", + "ROLES": "Rôles", + "ADD": "Ajouter un membre", + "ADDDESCRIPTION": "Saisissez les noms des utilisateurs à ajouter." + }, + "TABLE": { + "TOTAL": "Total des entrées", + "SELECTION": "Éléments sélectionnés", + "DEACTIVATE": "Désactiver l'utilisateur", + "ACTIVATE": "Activer l'utilisateur", + "DELETE": "Supprimer l'utilisateur", + "CLEAR": "Effacer la sélection" + } + }, + "PROJECT": { + "PAGES": { + "TITLE": "Projet", + "DESCRIPTION": "Ici, vous pouvez définir des applications, gérer les rôles et autoriser d'autres organisations à utiliser votre projet.", + "DELETE": "Supprimer le projet", + "LIST": "Projets", + "LISTDESCRIPTION": "Si vous ne trouvez pas un projet, contactez le propriétaire du projet ou une personne ayant les droits correspondants pour obtenir l'accès au projet.", + "DETAIL": "Détail", + "CREATE": "Créer un projet", + "CREATE_DESC": "Insérez le nom de votre projet.", + "ROLE": "Rôle", + "NOITEMS": "Aucun projet", + "ZITADELPROJECT": "Ceci appartient au projet ZITADEL. Attention", + "TYPE": { + "OWNED": "Projets possédés", + "GRANTED": "Projets accordés", + "OWNED_SINGULAR": "Projet propre", + "GRANTED_SINGULAR": "Projet concédé" + }, + "PRIVATELABEL": { + "TITLE": "Image de marque", + "0": { + "TITLE": "Non spécifié", + "DESC": "Dès que l'utilisateur est identifié, la marque de l'organisation de l'utilisateur identifié sera affichée, avant que le système par défaut ne soit affiché." + }, + "1": { + "TITLE": "Utiliser le paramètre du projet", + "DESC": "L'image de marque de l'organisation propriétaire du projet s'affiche." + }, + "2": { + "TITLE": "Utiliser le paramètre de l'organisation de l'utilisateur", + "DESC": "La marque de l'organisation du projet sera affichée, mais dès que l'utilisateur est identifié, le paramètre de l'organisation de l'utilisateur identifié, sera affiché." + }, + "DIALOG": { + "TITLE": "Réglage de l'image de marque", + "DESCRIPTION": "Sélectionnez le comportement de la connexion, lors de l'utilisation du projet." + } + }, + "PINNED": "Épinglé", + "ALL": "Tous", + "CREATEDON": "Créé le", + "LASTMODIFIED": "Dernière modification le", + "ADDNEW": "Créer un nouveau projet", + "DIALOG": { + "REACTIVATE": { + "TITLE": "Réactiver le projet", + "DESCRIPTION": "Voulez-vous vraiment réactiver votre projet ?" + }, + "DEACTIVATE": { + "TITLE": "Désactiver le projet", + "DESCRIPTION": "Voulez-vous vraiment désactiver votre projet ?" + }, + "DELETE": { + "TITLE": "Supprimer le projet", + "DESCRIPTION": "Voulez-vous vraiment supprimer votre projet ?", + "TYPENAME": "Tapez le nom du projet pour le supprimer définitivement." + } + } + }, + "SETTINGS": { + "TITLE": "Paramètres", + "DESCRIPTION": "" + }, + "STATE": { + "TITLE": "Statut", + "0": "Non défini", + "1": "Actif", + "2": "Inactif" + }, + "TYPE": { + "TITLE": "Type", + "0": "Type inconnu", + "1": "Propriété", + "2": "Accordé" + }, + "NAME": "Nom", + "NAMEDIALOG": { + "TITLE": "Renommer le projet", + "DESCRIPTION": "Entrez le nouveau nom de votre projet", + "NAME": "Nouveau nom" + }, + "MEMBER": { + "TITLE": "Managers", + "TITLEDESC": "Les gestionnaires peuvent apporter des modifications à ce projet en fonction de leur rôle.", + "DESCRIPTION": "Ces gestionnaires peuvent être en mesure de modifier votre projet.", + "USERNAME": "Nom de l'utilisateur", + "DISPLAYNAME": "Nom d'affichage", + "LOGINNAME": "Nom de connexion", + "EMAIL": "E-mail", + "ROLES": "Rôles", + "USERID": "ID de l'utilisateur" + }, + "GRANT": { + "EMPTY": "Aucune organisation subventionnée.", + "TITLE": "Subventions de projet", + "DESCRIPTION": "Autoriser une autre organisation à utiliser votre projet.", + "EDITTITLE": "Rôles d'édition", + "CREATE": { + "TITLE": "Créer une subvention d'organisation", + "SEL_USERS": "Sélectionnez les utilisateurs auxquels vous souhaitez accorder l'accès", + "SEL_PROJECT": "Rechercher un projet", + "SEL_ROLES": "Sélectionnez les rôles que vous souhaitez ajouter à l'autorisation.", + "SEL_USER": "Sélectionnez les utilisateurs", + "SEL_ORG": "Définir le domaine", + "SEL_ORG_DESC": "Entrez le domaine complet pour spécifier l'organisation à accorder.", + "ORG_TITLE": "Organisation", + "ORG_DESCRIPTION": "Vous êtes sur le point d'accorder un utilisateur pour l'organisation{{name}}.", + "ORG_DESCRIPTION_DESC": "Changez le contexte dans l'en-tête ci-dessus pour accorder un utilisateur pour une autre organisation.", + "SEL_ORG_FORMFIELD": "Domaine complet", + "SEL_ORG_BUTTON": "Rechercher une organisation", + "FOR_ORG": "L'autorisation est créée pour" + }, + "DETAIL": { + "TITLE": "Subvention de projet", + "DESC": "Vous pouvez sélectionner les rôles qui peuvent être utilisés par l'organisation spécifiée, et élire les managers.", + "MEMBERTITLE": "Responsables", + "MEMBERDESC": "Il s'agit des gestionnaires de l'organisation subventionnée. Ajoutez ici les utilisateurs qui doivent avoir accès à la modification des données du projet.", + "PROJECTNAME": "Nom du projet", + "GRANTEDORG": "Organisation autorisée", + "RESOURCEOWNER": "Propriétaire des ressources" + }, + "STATE": "Statut", + "STATES": { + "1": "Actif", + "2": "Inactif" + }, + "ALL": "Tous", + "SHOWDETAIL": "Afficher les détails", + "USER": "Utilisateur", + "MEMBERS": "Managers", + "ORG": "Organisation", + "PROJECTNAME": "Nom du projet", + "GRANTEDORG": "Organisation accordée", + "GRANTEDORGDOMAIN": "Domaine", + "RESOURCEOWNER": "Propriétaire de la ressource", + "GRANTEDORGNAME": "Nom de l'organisation", + "CREATIONDATE": "Date de création", + "CHANGEDATE": "Dernière modification", + "DATES": "Dates", + "ROLENAMESLIST": "Rôles", + "NOROLES": "Aucun rôle", + "TYPE": "Type", + "TOAST": { + "PROJECTGRANTUSERGRANTADDED": "Subvention de projet créée.", + "PROJECTGRANTADDED": "Accord de projet créé.", + "PROJECTGRANTCHANGED": "Subvention de projet modifiée.", + "PROJECTGRANTMEMBERADDED": "Ajout d'un gestionnaire de subvention.", + "PROJECTGRANTMEMBERCHANGED": "Directeur de subvention modifié.", + "PROJECTGRANTMEMBERREMOVED": "Gestionnaire de subvention supprimé.", + "PROJECTGRANTUPDATED": "Subvention de projet mise à jour" + }, + "DIALOG": { + "DELETE_TITLE": "Supprimer une subvention de projet", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer une subvention de projet. Vous êtes sûr ?" + }, + "ROLES": "Rôles du projet" + }, + "APP": { + "TITLE": "Applications", + "NAME": "Nom", + "NAMEREQUIRED": "Un nom est requis." + }, + "ROLE": { + "EMPTY": "Aucun rôle n'a encore été créé.", + "ADDNEWLINE": "Ajouter un rôle supplémentaire", + "KEY": "Clé", + "TITLE": "Rôles", + "DESCRIPTION": "Définissez certains rôles qui peuvent être utilisés pour créer des subventions de projet.", + "NAME": "Nom", + "DISPLAY_NAME": "Afficher le nom", + "GROUP": "Groupe", + "ACTIONS": "Actions", + "ADDTITLE": "Créer un rôle", + "ADDDESCRIPTION": "Entrez les données pour le nouveau rôle.", + "EDITTITLE": "Modifier un rôle", + "EDITDESCRIPTION": "Entrez les nouvelles données pour le rôle.", + "DELETE": "Supprimer un rôle", + "CREATIONDATE": "Créé", + "CHANGEDATE": "Dernière modification", + "SELECTGROUPTOOLTIP": "Sélectionner tous les Rôles du groupe{{group}}.", + "OPTIONS": "Options", + "ASSERTION": "Affirmer les rôles lors de l'authentification", + "ASSERTION_DESCRIPTION": "Les informations sur les rôles sont envoyées par le point de terminaison Userinfo et, selon les paramètres de votre application, sous forme de jetons ou d'autres types.", + "CHECK": "Vérifier l'autorisation lors de l'authentification", + "CHECK_DESCRIPTION": "Si cette option est définie, les utilisateurs ne sont autorisés à s'authentifier que si un rôle est attribué à leur compte.", + "DIALOG": { + "DELETE_TITLE": "Supprimer un rôle", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer un rôle de projet. Êtes-vous sûr ?" + } + }, + "HAS_PROJECT": "Vérifier le projet lors de l'authentification", + "HAS_PROJECT_DESCRIPTION": "Il est vérifié si l'organisation de l'utilisateur possède ce projet. Si ce n'est pas le cas, l'utilisateur ne peut pas être authentifié.", + "TABLE": { + "TOTAL": "Total des entrées", + "SELECTION": "Éléments sélectionnés", + "DEACTIVATE": "Désactiver le projet", + "ACTIVATE": "Activer le projet", + "DELETE": "Supprimer le projet", + "ORGNAME": "Nom de l'organisation", + "ORGDOMAIN": "Domaine de l'organisation", + "STATE": "Statut", + "TYPE": "Type", + "CREATIONDATE": "Créé à", + "CHANGEDATE": "Dernière modification", + "RESOURCEOWNER": "Propriétaire", + "SHOWTABLE": "Afficher le tableau", + "SHOWGRID": "Afficher la grille", + "EMPTY": "Aucun projet trouvé" + }, + "TOAST": { + "MEMBERREMOVED": "Gestionnaire supprimé.", + "MEMBERSADDED": "Gestionnaires ajoutés.", + "MEMBERADDED": "Gestionnaire ajouté.", + "MEMBERCHANGED": "Manager changé.", + "ROLESCREATED": "Rôles créés.", + "ROLEREMOVED": "Rôle supprimé.", + "ROLECHANGED": "Rôle modifié.", + "REACTIVATED": "Réactivé.", + "DEACTIVATED": "Désactivé.", + "CREATED": "Projet créé.", + "UPDATED": "Projet modifié.", + "GRANTUPDATED": "Subvention modifiée.", + "DELETED": "Projet supprimé." + } + }, + "NEXTSTEPS": { + "TITLE": "Étapes suivantes" + }, + "IDP": { + "LIST": { + "TITLE": "Fournisseurs d'identité", + "DESCRIPTION": "Gérez la configuration de votre fournisseur d'identité, qui peut ensuite être activé dans vos paramètres de connexion.", + "ACTIVETITLE": "Fournisseurs d'identité actifs" + }, + "CREATE": { + "TITLE": "Nouveau fournisseur d'identité", + "DESCRIPTION": "Choisissez l'un des types de fournisseur d'identité suivants." + }, + "DETAIL": { + "TITLE": "Fournisseur d'identité", + "DESCRIPTION": "Configuration générale de votre fournisseur d'identité.", + "DATECREATED": "Créé", + "DATECHANGED": "Modifié" + }, + "OWNERTYPES": { + "0": "inconnu", + "1": "Instance", + "2": "Organisation" + }, + "TYPES": { + "0": "inconnu", + "1": "OIDC", + "3": "JWT" + }, + "STATES": { + "1": "actif", + "2": "inactif" + }, + "MAPPINGFIELD": { + "1": "Nom d'utilisateur préféré", + "2": "Courriel" + }, + "STYLE": "Style", + "STYLEFIELD": { + "0": "Pas de style", + "1": "Google" + }, + "ADD": "Ajouter un fournisseur d'identité", + "AUTOREGISTER": "Enregistrement automatique", + "AUTOREGISTER_DESC": "Si cette option est sélectionnée et qu'aucun compte n'existe encore, un compte sera créé.", + "TYPE": "Type", + "OWNER": "Propriétaire", + "ID": "ID", + "NAME": "Nom", + "AVAILABILITY": "Disponibilité", + "AVAILABLE": "disponible", + "AVAILABLEBUTINACTIVE": "disponible mais inactif", + "SETAVAILABLE": "défini comme disponible", + "SETUNAVAILABLE": "défini comme non disponible", + "CONFIG": "Configuration", + "STATE": "Statut", + "ISSUER": "Émetteur", + "SCOPESLIST": "Liste des champs d'application", + "CLIENTID": "ID du client", + "CLIENTSECRET": "Secret du client", + "IDPDISPLAYNAMMAPPING": "Mappage de IDP nom d'affichage", + "USERNAMEMAPPING": "Mappage des noms d'utilisateur", + "DATES": "Dates", + "CREATIONDATE": "Créé à", + "CHANGEDATE": "Dernière modification", + "DEACTIVATE": "Désactiver", + "ACTIVATE": "Activer", + "DELETE": "Supprimer", + "DELETE_TITLE": "Supprimer Idp", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer un fournisseur d'identité. Les changements qui en résultent sont irrévocables. Voulez-vous vraiment le faire ?", + "DELETE_SELECTION_TITLE": "Supprimer Idp", + "DELETE_SELECTION_DESCRIPTION": "Vous êtes sur le point de supprimer un fournisseur d'identité. Les changements qui en résultent sont irrévocables. Voulez-vous vraiment le faire ?", + "EMPTY": "Aucun IPD disponible", + "OIDC": { + "GENERAL": "Informations générales", + "TITLE": "Configuration de l'OIDC", + "DESCRIPTION": "Saisissez les données pour le fournisseur d'identité OIDC." + }, + "JWT": { + "TITLE": "Configuration JWT", + "DESCRIPTION": "Entrez les données pour le fournisseur d'identité JWT.", + "HEADERNAME": "Nom de l'en-tête", + "JWTENDPOINT": "Point de terminaison JWT", + "JWTKEYSENDPOINT": "Point de terminaison des clés JWT" + }, + "TOAST": { + "SAVED": "Enregistré avec succès.", + "REACTIVATED": "Idp réactivé.", + "DEACTIVATED": "Idp désactivé.", + "SELECTEDREACTIVATED": "Idps sélectionnés réactivés.", + "SELECTEDDEACTIVATED": "Idps sélectionné désactivé.", + "SELECTEDKEYSDELETED": "Idps sélectionnés supprimés.", + "DELETED": "Idp supprimé avec succès !", + "ADDED": "Ajouté avec succès.", + "REMOVED": "Suppression réussie." + } + }, + "MFA": { + "LIST": { + "MULTIFACTORTITLE": "Sans mot de passe", + "MULTIFACTORDESCRIPTION": "Définissez ici vos multifacteurs pour votre authentification sans mot de passe.", + "SECONDFACTORTITLE": "Authentification multifactorielle", + "SECONDFACTORDESCRIPTION": "Définissez d'autres facteurs possibles avec lesquels vous pouvez sécuriser votre authentification par mot de passe." + }, + "CREATE": { + "TITLE": "Nouveau facteur", + "DESCRIPTION": "Sélectionnez votre nouveau type de facteur." + }, + "DELETE": { + "TITLE": "Supprimer un facteur", + "DESCRIPTION": "Vous êtes sur le point de supprimer un facteur des paramètres de connexion. Etes-vous sûr ?" + }, + "TOAST": { + "ADDED": "Ajouté avec succès.", + "SAVED": "Sauvegardé avec succès.", + "DELETED": "Supprimé avec succès" + }, + "TYPE": "Type", + "MULTIFACTORTYPES": { + "0": "Inconnu", + "1": "Empreinte digitale, clés de sécurité, Face ID et autres" + }, + "SECONDFACTORTYPES": { + "0": "Inconnu", + "1": "Mot de passe à usage unique (OTP)", + "2": "Empreinte digitale, clés de sécurité, Face ID et autres" + } + }, + "LOGINPOLICY": { + "CREATE": { + "TITLE": "Paramètres de connexion", + "DESCRIPTION": "Définissez comment vos utilisateurs peuvent être authentifiés sur votre organisation." + }, + "IDPS": "Fournisseurs d'identité", + "ADDIDP": { + "TITLE": "Ajouter un fournisseur d'identité", + "DESCRIPTION": "Vous pouvez sélectionner des fournisseurs prédéfinis ou créés par vous-même pour l'authentification.", + "SELECTIDPS": "Fournisseurs d'identité" + }, + "PASSWORDLESS": "Connexion sans mot de passe", + "PASSWORDLESSTYPE": { + "0": "Non autorisé", + "1": "Autorisée" + } + }, + "APP": { + "LIST": "Applications", + "COMPLIANCE": "Conformité à l'OIDC", + "URLS": "Urls", + "CONFIGURATION": "Configuration", + "TOKEN": "Paramètres du jeton", + "PAGES": { + "TITLE": "Application", + "ID": "ID", + "DESCRIPTION": "Ici vous pouvez modifier les données de votre application et sa configuration.", + "CREATE_OIDC": "Application OIDC", + "CREATE_OIDC_DESC_TITLE": "Entrez les détails de votre application étape par étape", + "CREATE_OIDC_DESC_SUB": "Une configuration recommandée sera automatiquement générée.", + "STATE": "Statut", + "DATECREATED": "Créé", + "DATECHANGED": "Modifié", + "URLS": "Urls", + "DELETE": "Supprimer l'application", + "DETAIL": { + "TITLE": "Détail", + "STATE": { + "0": "Non défini", + "1": "Actif", + "2": "Inactif" + } + }, + "DIALOG": { + "CONFIG": { + "TITLE": "Modifier la configuration de l'OIDC" + }, + "DELETE": { + "TITLE": "Supprimer l'application", + "DESCRIPTION": "Voulez-vous vraiment supprimer cette application ?" + } + }, + "NEXTSTEPS": { + "TITLE": "Etapes suivantes", + "0": { + "TITLE": "Ajouter des rôles", + "DESC": "Entrez les rôles de votre projet" + }, + "1": { + "TITLE": "Ajouter des utilisateurs", + "DESC": "Ajoutez les nouveaux utilisateurs de votre organisation" + }, + "2": { + "TITLE": "Aide et support", + "DESC": "Lisez notre documentation sur la création d'applications ou contactez notre assistance" + } + } + }, + "NAMEDIALOG": { + "TITLE": "Renommer l'application", + "DESCRIPTION": "Entrez le nouveau nom de votre application", + "NAME": "Nouveau nom" + }, + "NAME": "Nom", + "TYPE": "Type d'application", + "AUTHMETHOD": "Méthode d'authentification", + "AUTHMETHODSECTION": "Méthode d'authentification", + "GRANT": "Types de subventions", + "ADDITIONALORIGINS": "Origines supplémentaires", + "ADDITIONALORIGINSDESC": "Si vous voulez ajouter des origines supplémentaires à votre application qui n'est pas utilisée comme une redirection, vous pouvez le faire ici.", + "ORIGINS": "Origines", + "NOTANORIGIN": "La valeur saisie n'est pas une origine", + "OIDC": { + "INFO": { + "ISSUER": "Émetteur", + "CLIENTID": "Id client" + }, + "CURRENT": "Current Config", + "TOKENSECTIONTITLE": "Options AuthToken", + "REDIRECTSECTIONTITLE": "Paramètres de redirection", + "PROSWITCH": "Je suis un pro. Sautez cet assistant.", + "NAMEANDTYPESECTION": "Nom et type", + "TITLEFIRST": "Commencez par insérer un nom.", + "TYPETITLE": "Quel type d'application voulez-vous créer ?", + "REDIRECTTITLE": "Indiquez les URI vers lesquels le login sera redirigé.", + "POSTREDIRECTTITLE": "Il s'agit de l'URI de redirection après la déconnexion.", + "REDIRECTDESCRIPTIONWEB": "Les URI de redirection doivent commencer par https.", + "REDIRECTDESCRIPTIONNATIVE": "Les URI de redirection doivent commencer par votre propre protocole, http.", + "REDIRECTNOTVALID": "Cet URI de redirection n'est pas valide.", + "COMMAORENTERSEPERATION": "séparer par ↵", + "TYPEREQUIRED": "Le type est obligatoire.", + "TITLE": "Configuration de l'OIDC", + "CLIENTID": "ID client", + "CLIENTSECRET": "Secret du client", + "CLIENTSECRET_NOSECRET": "Avec le flux d'authentification que vous avez choisi, aucun secret n'est requis et n'est donc pas disponible.", + "CLIENTSECRET_DESCRIPTION": "Conservez votre secret client dans un endroit sûr car il disparaîtra une fois la boîte de dialogue fermée.", + "REGENERATESECRET": "Régénérer le secret du client", + "DEVMODE": "Mode développement", + "DEVMODEDESC": "Attention", + "REDIRECT": "Rediriger les URI", + "REDIRECTSECTION": "URI de redirection", + "POSTLOGOUTREDIRECT": "URIs de post-déconnexion", + "RESPONSESECTION": "Types de réponses", + "GRANTSECTION": "Types de subventions", + "GRANTTITLE": "Sélectionnez vos types de subventions. Note", + "APPTYPE": { + "0": "Web", + "1": "Agent utilisateur", + "2": "Natif" + }, + "RESPONSETYPE": "Types de réponse", + "RESPONSE": { + "0": "Code", + "1": "ID-Jeton", + "2": "ID-Jeton Jeton" + }, + "REFRESHTOKEN": "Jeton de rafraîchissement", + "GRANTTYPE": "Types d'octroi", + "GRANT": { + "0": "Code d'autorisation", + "1": "Implicite", + "2": "Rafraîchir le jeton" + }, + "AUTHMETHOD": { + "0": "Basic", + "1": "Post", + "2": "Aucun", + "3": "Clé privée JWT" + }, + "TOKENTYPE": "Type de jeton d'authentification", + "TOKENTYPE0": "Jeton porteur", + "TOKENTYPE1": "JWT", + "UNSECUREREDIRECT": "J'espère que vous savez ce que vous faites.", + "OVERVIEWSECTION": "Vue d'ensemble", + "OVERVIEWTITLE": "Vous avez maintenant terminé. Revoyez votre configuration.", + "ACCESSTOKENROLEASSERTION": "Ajouter les rôles des utilisateurs au jeton d'accès", + "ACCESSTOKENROLEASSERTION_DESCRIPTION": "Si cette option est sélectionnée, les rôles demandés de l'utilisateur authentifié sont ajoutés au jeton d'accès.", + "IDTOKENROLEASSERTION": "Rôles de l'utilisateur dans le jeton d'identification", + "IDTOKENROLEASSERTION_DESCRIPTION": "Si sélectionné, les rôles demandés à l'utilisateur authentifié sont ajoutés au jeton d'identification.", + "IDTOKENUSERINFOASSERTION": "Informations sur l'utilisateur dans le jeton d'identification", + "IDTOKENUSERINFOASSERTION_DESCRIPTION": "Permet aux clients de récupérer le profil, l'email, le téléphone et l'adresse à partir du jeton d'identification.", + "CLOCKSKEW": "Permet aux clients de gérer le décalage d'horloge de l'OP et du client. La durée (0-5s) sera ajoutée à la réclamation exp et soustraite de iats, auth_time et nbf.", + "RECOMMENDED": "recommandé", + "NOTRECOMMENDED": "non recommandé", + "SELECTION": { + "APPTYPE": { + "WEB": { + "TITLE": "Web", + "DESCRIPTION": "Applications Web ordinaires comme .net, PHP, Node.js, Java, etc." + }, + "NATIVE": { + "TITLE": "Native", + "DESCRIPTION": "Applications mobiles, ordinateurs de bureau, appareils intelligents, etc." + }, + "USERAGENT": { + "TITLE": "Agent utilisateur", + "DESCRIPTION": "Single Page Applications (SPA) et en général tous les frameworks JS exécutés dans les navigateurs" + } + } + } + }, + "API": { + "INFO": { + "CLIENTID": "Id. du client" + }, + "REGENERATESECRET": "Regénérer le secret du client", + "SELECTION": { + "TITLE": "API", + "DESCRIPTION": "API en général" + }, + "AUTHMETHOD": { + "0": "Base", + "1": "Clé privée JWT" + } + }, + "AUTHMETHODS": { + "CODE": { + "TITLE": "Code", + "DESCRIPTION": "Echanger le code d'autorisation pour les jetons" + }, + "PKCE": { + "TITLE": "PKCE", + "DESCRIPTION": "Utiliser un hachage aléatoire au lieu d'un secret client statique pour plus de sécurité" + }, + "POST": { + "TITLE": "POST", + "DESCRIPTION": "Envoyer client_id et client_secret comme partie du formulaire" + }, + "PK_JWT": { + "TITLE": "Clé privée JWT", + "DESCRIPTION": "Utilisez une clé privée pour autoriser votre application" + }, + "BASIC": { + "TITLE": "Basique", + "DESCRIPTION": "Authentification avec nom d'utilisateur et mot de passe" + }, + "IMPLICIT": { + "TITLE": "Implicite", + "DESCRIPTION": "Obtenir les jetons directement à partir du point final d'autorisation" + }, + "CUSTOM": { + "TITLE": "Personnalisé", + "DESCRIPTION": "Votre paramètre ne correspond à aucune autre option." + } + }, + "TOAST": { + "REACTIVATED": "Application réactivée.", + "DEACTIVATED": "Application désactivée.", + "OIDCUPDATED": "Application mise à jour.", + "APIUPDATED": "Application mise à jour", + "UPDATED": "Application mise à jour.", + "CREATED": "Application créée.", + "CLIENTSECRETREGENERATED": "secret client généré.", + "DELETED": "Application supprimée.", + "CONFIGCHANGED": "Changements détectés !" + } + }, + "GENDERS": { + "0": "Inconnu", + "1": "Femme", + "2": "Homme", + "3": "Autre" + }, + "LANGUAGES": { + "de": "Deutsch", + "it": "Italiano", + "en": "English" + }, + "MEMBER": { + "ADD": "Ajouter un manager", + "CREATIONTYPE": "Type de création", + "CREATIONTYPES": { + "3": "IAM", + "2": "Organisation", + "0": "Projet Détenu", + "1": "Projet Concédé", + "4": "Projet" + }, + "EDITROLE": "Modifier les rôles", + "EDITFOR": "Modifier les rôles de l'utilisateur", + "DIALOG": { + "DELETE_TITLE": "Supprimer un manager", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer un manager. Vous êtes sûr ?" + } + }, + "ROLESLABEL": "Rôles", + "GRANTS": { + "TITLE": "Autorisations", + "DESC": "Ce sont toutes les autorisations sur votre organisation.", + "DELETE": "Supprimer une autorisation", + "EMPTY": "Aucune autorisation trouvée", + "ADD": "Créer une autorisation", + "ADD_BTN": "Nouveau", + "PROJECT": { + "TITLE": "Autorisation", + "DESCRIPTION": "Définit les autorisations pour le projet spécifié. Notez que vous ne pouvez voir que les entrées des projets et des utilisateurs pour lesquels vous avez les autorisations." + }, + "USER": { + "TITLE": "Autorisation", + "DESCRIPTION": "Définit les autorisations pour l'utilisateur spécifié. Notez que vous pouvez seulement voir les entrées des projets et des utilisateurs pour lesquels vous avez les permissions." + }, + "CREATE": { + "TITLE": "Créer une autorisation", + "DESCRIPTION": "Rechercher l'organisation, le projet et les rôles correspondants." + }, + "EDIT": { + "TITLE": "Modifier l'autorisation" + }, + "DETAIL": { + "TITLE": "Détail de l'autorisation", + "DESCRIPTION": "Vous pouvez voir ici tous les détails de l'autorisation." + }, + "TOAST": { + "UPDATED": "Autorisation mise à jour.", + "REMOVED": "Autorisation supprimée", + "BULKREMOVED": "Autorisations supprimées." + }, + "DIALOG": { + "DELETE_TITLE": "Supprimer une autorisation", + "DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer une autorisation. Voulez-vous continuer ?", + "BULK_DELETE_TITLE": "Supprimer des autorisations", + "BULK_DELETE_DESCRIPTION": "Vous êtes sur le point de supprimer plusieurs autorisations. Voulez-vous continuer ?" + } + }, + "CHANGES": { + "LISTTITLE": "Dernières modifications", + "BOTTOM": "Vous avez atteint la fin de la liste.", + "LOADMORE": "Charger plus", + "ORG": { + "TITLE": "Activité", + "DESCRIPTION": "Vous pouvez voir ici les derniers événements qui ont généré un changement d'organisation." + }, + "PROJECT": { + "TITLE": "Activité", + "DESCRIPTION": "Vous pouvez voir ici les derniers événements qui ont généré un changement de projet." + }, + "USER": { + "TITLE": "Activité", + "DESCRIPTION": "Vous pouvez voir ici les derniers événements qui ont généré un changement d'utilisateur." + } + } +} diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 62821e1bd0..f865736e82 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -22,16 +22,16 @@ "DISCLAIMERLINK": "Ulteriori informazioni", "DOCUMENTATION": { "TITLE": "Documentazione", - "DESCRIPTION": "Mit ZITADEL schnell durchstarten." + "DESCRIPTION": "Inizia con ZITADEL." }, "GETSTARTED": { "TITLE": "Come iniziare con ZITADEL", - "DESCRIPTION": "Mit ZITADEL schnell durchstarten." + "DESCRIPTION": "Inizia con ZITADEL." }, "QUICKSTARTS": { "LABEL": "Primi passi", "TITLE": "Quickstarts", - "DESCRIPTION": "Iniziare rapidamente con ZITADEL." + "DESCRIPTION": "Inizia con ZITADEL." }, "SHORTCUTS": { "SHORTCUTS": "Scorciatoie", diff --git a/docs/docs/guides/customization/texts.md b/docs/docs/guides/customization/texts.md index 654d2df0d4..9902ebe493 100644 --- a/docs/docs/guides/customization/texts.md +++ b/docs/docs/guides/customization/texts.md @@ -36,6 +36,7 @@ ZITADEL is available in the following languages - English (en) - German (de) - Italian (it) +- French (fr) A language is displayed based on your agent's language header. The default language is English. diff --git a/internal/api/ui/login/static/i18n/fr.yaml b/internal/api/ui/login/static/i18n/fr.yaml new file mode 100644 index 0000000000..b53e61dc31 --- /dev/null +++ b/internal/api/ui/login/static/i18n/fr.yaml @@ -0,0 +1,372 @@ +Login: + Title: Bienvenue! + Description: Entrez vos données de connexion. + TitleLinking: Login pour la liaison des utilisateurs + DescriptionLinking: Entrez vos données de connexion pour lier votre utilisateur externe avec un utilisateur ZITADEL. + LoginNameLabel: Identifiant + UsernamePlaceHolder: nom d'utilisateur + LoginnamePlaceHolder: nom d'utilisateur@domaine + ExternalUserDescription: Se connecter avec un utilisateur externe. + MustBeMemberOfOrg: L'utilisateur doit être membre de l'organisation {{.OrgName}} . + RegisterButtonText: s'inscrire + NextButtonText: suivant + +SelectAccount: + Title: Select account + Description: Use your ZITADEL-Account + TitleLinking: Select account for user linking + DescriptionLinking: Select your account to link with your external user. + OtherUser: Other User + SessionState0: active + SessionState1: inactive + MustBeMemberOfOrg: The user must be member of the {{.OrgName}} organisation. + +Password: + Title: Mot de passe + Description: Entrez vos données de connexion. + PasswordLabel: Mot de passe + MinLength: Longueur minimale + HasUppercase: Lettre majuscule + HasLowercase: Lettre minuscule + HasNumber: Numéro + HasSymbol: Symbole + Confirmation: Correspondance de confirmation + ResetLinkText: réinitialiser le mot de passe + BackButtonText: retour + NextButtonText: suivant + +UsernameChange: + Title: Modifier le nom d'utilisateur + Description: Définissez votre nouveau nom d'utilisateur + UsernameLabel: Nom d'utilisateur : + CancelButtonText: annuler + NextButtonText: suivant + +UsernameChangeDone: + Title: Nom d'utilisateur modifié + Description: Votre nom d'utilisateur a été changé avec succès. + NextButtonText: suivant + +InitPassword: + Title: Définir un mot de passe + Description: Vous avez reçu un code, que vous devez saisir dans le formulaire ci-dessous, pour définir votre nouveau mot de passe. + CodeLabel: Code + NewPasswordLabel: Nouveau mot de passe + NewPasswordConfirmLabel: Confirmer le mot de passe + ResendButtonText: envoyer à nouveau + NextButtonText: suivant + +InitPasswordDone: + Title: Mot de passe défini + Description: Mot de passe défini avec succès + NextButtonText: Suivant + CancelButtonText: Annuler + +InitUser: + Title: Activer l'utilisateur + Description: Vous avez reçu un code, que vous devez entrer dans le formulaire ci-dessous, pour vérifier votre e-mail et définir votre nouveau mot de passe. + CodeLabel: Code + NewPasswordLabel: Nouveau mot de passe + NewPasswordConfirmLabel: Confirmer le mot de passe + NextButtonText: Suivant + ResendButtonText: envoyer à nouveau + +InitUserDone: + Title: User Utilisateur activé + Description: Email vérifié et mot de passe défini avec succès + NextButtonText: Suivant + CancelButtonText: annuler + +InitMFAPrompt: + Title: Configuration multifactorielle + Description: Voulez-vous configurer l'authentification multifactorielle ? + Provider0: OTP (mot de passe à usage unique) + Provider1: U2F (2e facteur universel) + NextButtonText: Suivant + SkipButtonText: Passer + +InitMFAOTP: + Title: Vérification multifactorielle + Description: Vérifier votre multifacteur. + OTPDescription: Scannez le code avec votre application d'authentification (par exemple Google Authenticator) ou copiez le secret et insérez le code généré ci-dessous. + SecretLabel: Secret + CodeLabel: Code + NextButtonText: Suivant + CancelButtonText: Annuler + +InitMFAU2F: + Title: Configuration multifactorielle U2F / WebAuthN + Description: Ajoutez votre Token en fournissant un nom et en cliquant sur le bouton "Enregistrer un Token" ci-dessous. + TokenNameLabel: Nom du jeton / de la machine + NotSupported: WebAuthN n'est pas pris en charge par votre navigateur. Veuillez vous assurer qu'il est à jour ou utiliser un autre navigateur (par exemple Chrome, Safari, Firefox). + RegisterTokenButtonText: Enregistrer le jeton + ErrorRetry: Réessayez, créez un nouveau défi ou choisissez une autre méthode. + +InitMFADone: + Title: Vérification multifactorielle effectuée + Description: La vérification multifactorielle a été effectuée avec succès. Le multifacteur doit être saisi à chaque connexion. + NextButtonText: Suivant + CancelButtonText: Annuler +MFAProvider: + Provider0: OTP (Mot de passe à usage unique) + Provider1: U2F (2ne facteur universel) + ChooseOther: ou choisissez une autre option + +VerifyMFAOTP: + Title: Vérifier le multifacteur + Description: Vérifier votre multifacteur + CodeLabel: Code + NextButtonText: Suivant + +VerifyMFAU2F: + Title: Vérification multifactorielle + Description: Vérifiez votre jeton multifactoriel U2F / WebAuthN. + NotSupported: WebAuthN n'est pas pris en charge par votre navigateur. Assurez-vous que vous utilisez la dernière version ou changez votre navigateur pour un navigateur pris en charge (Chrome, Safari, Firefox). + ErrorRetry: Réessayer, créer une nouvelle demande ou choisir une autre méthode. + ValidateTokenButtonText: Valider le jeton + +Passwordless: + Title: Connexion sans mot de passe + Description: Vérifiez votre jeton + NotSupported: WebAuthN n'est pas pris en charge par votre navigateur. Veuillez vous assurer qu'il est à jour ou utiliser un autre navigateur (par exemple Chrome, Safari, Firefox). + ErrorRetry: Réessayez, créez un nouveau défi ou choisissez une autre méthode. + LoginWithPwButtonText: Connectez-vous avec le mot de passe + ValidateTokenButtonText: Valider le jeton + +PasswordlessPrompt: + Title: Configuration sans mot de passe + Description: Souhaitez-vous configurer une connexion sans mot de passe ? + DescriptionInit: Vous devez configurer la connexion sans mot de passe. Utilisez le lien qui vous a été donné pour enregistrer votre appareil. + PasswordlessButtonText : Aller sans mot de passe + NextButtonText : suivant + SkipButtonText : Passer + +PasswordlessRegistration: + Title : Configuration sans mot de passe + Description : Ajoutez votre Token en fournissant un nom et en cliquant sur le bouton 'Enregistrer le jeton' ci-dessous. + TokenNameLabel : Nom du jeton / de la machine + NotSupported : WebAuthN n'est pas pris en charge par votre navigateur. Veuillez vous assurer qu'il est à jour ou utiliser un autre navigateur (par exemple Chrome, Safari, Firefox). + RegisterTokenButtonText : Register Token + ErrorRetry : Réessayer, créer un nouveau défi ou choisir une autre méthode. + +PasswordlessRegistrationDone: + Title : Configuration sans mot de passe + Description : Le jeton pour le système sans mot de passe a été ajouté avec succès. + DescriptionClose : Vous pouvez maintenant fermer cette fenêtre. + NextButtonText : suivant + CancelButtonText : annuler + +PasswordChange: + Title : Changer le mot de passe + Description : Changez votre mot de passe. Entrez votre ancien et votre nouveau mot de passe. + OldPasswordLabel : Ancien mot de passe + NewPasswordLabel : Nouveau mot de passe + NewPasswordConfirmLabel : Confirmation du mot de passe + CancelButtonText : annuler + NextButtonText : suivant + +PasswordChangeDone: + Title : Changer le mot de passe + Description : Votre mot de passe a été modifié avec succès. + NextButtonText : suivant + +PasswordResetDone : + Title : Réinitialisation du jeu de liens + Description : Vérifiez votre e-mail pour réinitialiser votre mot de passe. + NextButtonText : suivant + +EmailVerification : + Title : Vérification de l'email + Description : Nous vous avons envoyé un e-mail pour vérifier votre adresse. Veuillez saisir le code dans le formulaire ci-dessous. + CodeLabel : Code + NextButtonText : suivant + ResendButtonText : envoyer à nouveau + +EmailVerificationDone : + Title : E-Mail Verification + Description : Votre adresse électronique a été vérifiée avec succès. + NextButtonText : suivant + CancelButtonText : annuler + LoginButtonText : connexion + +RegisterOption : + Title : Options d'enregistrement + Description : Choisissez comment vous souhaitez vous enregistrer + RegisterUsernamePasswordButtonText: Avec nom d'utilisateur et mot de passe + ExternalLoginDescription : ou s'enregistrer avec un utilisateur externe + + +RegistrationUser: + Title : Inscription + Description : Entrez vos données d'utilisateur. Votre adresse e-mail sera utilisée comme nom de connexion. + DescriptionOrgRegister : Entrez vos données d'utilisateur. + EmailLabel : E-Mail + UsernameLabel : Username + FirstnameLabel : Firstname + LastnameLabel : Nom de famille + LangueLabel : Language : Langue + German : Deutsch + English : English + Italian : Italiano + GenderLabel : Genre + Female : Femme + Male : Homme + Diverse : divers / X + PasswordLabel : Mot de passe + PasswordConfirmLabel : Confirmation du mot de passe + TosAndPrivacyLabel : Termes et conditions + TosConfirm : J'accepte les + TosLinkText : TOS + TosConfirmAnd : et la + PrivacyLinkText : politique de confidentialité + ExternalLogin : ou m'inscrire avec un utilisateur externe + BackButtonText : retour + NextButtonText : suivant + + +ExternalRegistrationUserOverview: + Title : Enregistrement des utilisateurs externes + Description : Nous avons pris vos coordonnées d'utilisateur auprès du fournisseur sélectionné. Vous pouvez maintenant les modifier ou les compléter. + EmailLabel : E-Mail + UsernameLabel : Identifiant + FirstnameLabel : Prénom + LastnameLabel : Nom + NicknameLabel : Surnom + PhoneLabel : Numéro de téléphone + LangueLabel : Language : Langue + German : Deutsch + English : English + Italian : Italiano + TosAndPrivacyLabel : Termes et conditions + TosConfirm : J'accepte les + TosLinkText : TOS + TosConfirmAnd : et la + PrivacyLinkText : politique de confidentialité + ExternalLogin : ou m'inscrire avec un utilisateur externe + BackButtonText : retour + NextButtonText : enregistrer + +RegistrationOrg: + Title : Enregistrement de l'organisation + Description : Entrez le nom de votre organisation et vos données d'utilisateur. + OrgNameLabel : Nom de l'organisation + EmailLabel : E-Mail + UsernameLabel : Nom d'utilisateur + FirstnameLabel : Prénom + LastnameLabel : Nom de famille + PasswordLabel : Password : Mot de passe + PasswordConfirmLabel : Confirmation du mot de passe + TosAndPrivacyLabel : Termes et conditions + TosConfirm : J'accepte les + TosLinkText : TOS + TosConfirmAnd : et la + PrivacyLinkText : politique de confidentialité + SaveButtonText : Créer une organisation + +LoginSuccess: + Title : Connexion réussie + AutoRedirectDescription : Vous serez automatiquement redirigé vers votre application. Si ce n'est pas le cas, cliquez sur le bouton ci-dessous. Vous pouvez ensuite fermer la fenêtre. + RedirectedDescription : Vous pouvez maintenant fermer cette fenêtre. + NextButtonText : suivant + +LogoutDone: + Title : Déconnecté + Description : Vous vous êtes déconnecté avec succès. + LoginButtonText : connexion + +LinkingUsersDone: + Title : Userlinking + Description : Le lien avec l'utilisateur est terminé. + CancelButtonText : annuler + NextButtonText : suivant + +ExternalNotFoundOption: + Title : Utilisateur externe + Description : Utilisateur externe non trouvé. Voulez-vous lier votre utilisateur ou enregistrer automatiquement un nouvel utilisateur. + LinkButtonText : Lier + AutoRegisterButtonText : enregistrer + TosAndPrivacyLabel : Termes et conditions + TosConfirm : J'accepte les + TosLinkText : TOS + TosConfirmAnd : et la + PrivacyLinkText : politique de confidentialité + Allemand : Deutsch + English : English + Italian : Italiano + +Footer: + PoweredBy: Promulgué par + Tos: TOS + PrivacyPolicy: Politique de confidentialité + Help: Aide + +Errors: +Internal : Une erreur interne s'est produite + AuthRequest : + NotFound : Impossible de trouver l'authrequest + UserAgentNotCorresponding : L'agent utilisateur ne correspond pas + UserAgentNotFound : L'ID de l'agent utilisateur n'a pas été trouvé + TokenNotFound : Token non trouvé + RequestTypeNotSupported : Le type de demande n'est pas pris en charge + MissingParameters : Paramètres requis manquants + User: + NotFound : L'utilisateur n'a pas pu être trouvé + Inactive : L'utilisateur est inactif + NotFoundOnOrg : L'utilisateur n'a pas été trouvé dans l'organisation choisie + NotAllowedOrg : L'utilisateur n'est pas membre de l'organisation requise + NotMatchingUserID : L'utilisateur et l'utilisateur dans l'authrequest ne correspondent pas. + UserIDMissing : UserID est vide + Invalide : Données utilisateur non valides + DomainNotAllowedAsUsername : Le domaine est déjà réservé et ne peut pas être utilisé. + NotAllowedToLink : L'utilisateur n'est pas autorisé à établir un lien avec un fournisseur de connexion externe + Password: + ConfirmationWrong : La confirmation du mot de passe est erronée + Empty : Le mot de passe est vide + Invalid : Le mot de passe n'est pas valide + InvalidAndLocked : Le mot de passe n'est pas valide et l'utilisateur est verrouillé, contactez votre administrateur. + UsernameOrPassword: + Invalid : Le nom d'utilisateur ou le mot de passe n'est pas valide + PasswordComplexityPolicy : + NotFound : Politique de mot de passe non trouvée + MinLength : Le mot de passe est trop court + HasLower : Le mot de passe doit contenir une lettre minuscule + HasUpper : Le mot de passe doit contenir une lettre majuscule + HasNumber : Le mot de passe doit contenir un numéro + HasSymbol : Le mot de passe doit contenir un symbole + Code: + Expired : Le code est expiré + Invalid : Le code n'est pas valide + Empty : Le code est vide + CryptoCodeNil : Le code cryptographique est nul + NotFound : Impossible de trouver le code + GeneratorAlgNotSupported : Algorithme de générateur non pris en charge + EmailVerify: + UserIDEmpty: L'ID utilisateur est vide + ExternalData: + CouldNotRead: Les données externes n'ont pas pu être lues correctement + MFA: + NoProviders: Aucun fournisseur multifactoriel disponible + OTP: + AlreadyReady : L'OTP multifactoriel (Mot de passe à usage unique) est déjà configuré. + NotExisting : OTP multifactoriel (Mot de passe à usage unique) n'existe pas. + InvalidCode : Code invalide + NotReady : Le système OTP multifactoriel (Mot de passe à usage unique) n'est pas prêt. + Locked: L'utilisateur est verrouillé + SomethingWentWrong: Il y a eu un problème + NotActive: L'utilisateur est inactif + ExternalIDP: + IDPTypeNotImplemented : Le type d'IDP n'est pas implémenté + NotAllowed : Le fournisseur de connexion externe n'est pas autorisé + IDPConfigIDEmpty : L'ID du fournisseur d'identité est vide + ExternalUserIDEmpty : L'ID de l'utilisateur externe est vide + UserDisplayNameEmpty : Le nom d'affichage de l'utilisateur est vide + NoExternalUserData : Aucune donnée d'utilisateur externe reçue + GrantRequired : Connexion impossible. L'utilisateur doit avoir au moins une subvention sur l'application. Veuillez contacter votre administrateur. + ProjectRequired : Connexion impossible. L'organisation de l'utilisateur doit être accordée au projet. Veuillez contacter votre administrateur. + IdentityProvider: + InvalidConfig: La configuration du fournisseur d'identité n'est pas valide + IAM: + LockoutPolicy: + NotExisting: Politique de cadenassage non existante + +optional: (facultatif) diff --git a/internal/notification/static/i18n/fr.yaml b/internal/notification/static/i18n/fr.yaml new file mode 100644 index 0000000000..80d6c1dd93 --- /dev/null +++ b/internal/notification/static/i18n/fr.yaml @@ -0,0 +1,42 @@ +InitCode: + Title: ZITADEL - Initialiser l'utilisateur + PreHeader: Initialiser l'utilisateur + Subject: Initialiser l'utilisateur + Greeting: Bonjour {{.FirstName}} {{.LastName}}, + Text: Cet utilisateur a été créé dans ZITADEL. Utilisez le nom d'utilisateur {{.PreferredLoginName}} pour vous connecter. Veuillez cliquer sur le bouton ci-dessous pour terminer le processus d'initialisation. (Code {{.Code}}) Si vous n'avez pas demandé ce courrier, veuillez l'ignorer. + ButtonText: Terminer l'initialisation +PasswordReset: + Title: ZITADEL - Réinitialiser le mot de passe + PreHeader: Réinitialiser le mot de passe + Subject: Réinitialiser le mot de passe + Greeting: Bonjour {{.FirstName}} {{.LastName}}, + Text: Nous avons reçu une demande de réinitialisation du mot de passe. Veuillez utiliser le bouton ci-dessous pour réinitialiser votre mot de passe. (Code {{.Code}}) Si vous n'avez pas demandé cet e-mail, veuillez l'ignorer. + ButtonText: Réinitialiser le mot de passe +VerifyEmail: + Title: ZITADEL - Vérifier l'email + PreHeader: Vérifier l'email + Subject: Vérifier l'email + Greeting: Bonjour {{.FirstName}} {{.LastName}}, + Text: Un nouveau courriel a été ajouté. Veuillez utiliser le bouton ci-dessous pour vérifier votre e-mail. (Code {{.Code}}) Si vous n'avez pas ajouté de nouvelle adresse e-mail, veuillez ignorer cet e-mail. + ButtonText: Vérifier l'email +VerifyPhone: + Title: ZITADEL - Vérifier le téléphone + PreHeader: Vérifier le téléphone + Subject: Vérifier le téléphone + Greeting: Bonjour {{.FirstName}} {{.LastName}}, + Text: Un nouveau numéro de téléphone a été ajouté. Veuillez utiliser le code suivant pour le vérifier {{.Code}} + ButtonText: Vérifier le téléphone +DomainClaimed: + Title: ZITADEL - Le domaine a été réclamé + PreHeader: Modifier l'email / le nom d'utilisateur + Subject: Le domaine a été réclamé + Greeting: Bonjour {{.FirstName}} {{.LastName}}, + Text: Le domaine {{.Domaine}} a été revendiqué par une organisation. Votre utilisateur actuel {{.Username}} ne fait pas partie de cette organisation. Par conséquent, vous devrez changer votre adresse électronique lors de votre connexion. Nous avons créé un nom d'utilisateur temporaire ({{.TempUsername}}) pour cette connexion. + ButtonText: Connexion +PasswordlessRegistration: + Title: ZITADEL - Ajouter une connexion sans mot de passe + PreHeader: Ajouter une connexion sans mot de passe + Subject: Ajouter une connexion sans mot de passe + Greeting: Bonjour {{.FirstName}} {{.LastName}}, + Text: Nous avons reçu une demande d'ajout d'un jeton pour la connexion sans mot de passe. Veuillez utiliser le bouton ci-dessous pour ajouter votre jeton ou dispositif pour la connexion sans mot de passe. + ButtonText: Ajouter une connexion sans mot de passe diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 4e8eba4a6f..3400a0ac2e 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -70,7 +70,7 @@ Errors: Profile: NotFound: Profile not found NotChanged: Profile not changed - Invalid: Profildata invalid + Invalid: Profile data invalid Email: NotFound: Email not found Invalid: Email is invalid @@ -156,7 +156,7 @@ Errors: DomainNotVerified: Domain is not verified DomainAlreadyVerified: Domain is already verified DomainVerificationTypeInvalid: Domain verification type is invalid - DomainVerificationMissing: Domain verification not yet startet + DomainVerificationMissing: Domain verification not yet started DomainVerificationFailed: Domain verification failed PrimaryDomainNotDeletable: Primary domain must not be deleted DomainNotFound: Domain not found @@ -173,7 +173,7 @@ Errors: Domain: AlreadyExists: Domain already exists IDP: - InvalidSearchQuery: Ungültiger Suchparameter + InvalidSearchQuery: Invalid search query LoginPolicy: NotFound: Login Policy not found Invalid: Login Policy is invalid @@ -266,7 +266,7 @@ Errors: UserIDMisisng: User ID missing IAM: Member: - RolesNotChanged: Roles habe not been changed + RolesNotChanged: Roles have not been changed MemberInvalid: Member is invalid MemberAlreadyExisting: Member already exists MemberNotExisting: Member does not exist @@ -882,7 +882,7 @@ Application: Implicit: RedirectUris: CustomNotAllowed: Grant type implicit doesn't allow custom redirect uris - HttpNotAllowed: Grant tpye implicit doesn't allow http redirect uris + HttpNotAllowed: Grant type implicit doesn't allow http redirect uris HttpLocalhostOnlyForNative: Http://localhost redirect uri is only allowed for native applications. Native: AuthMethodType: diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml new file mode 100644 index 0000000000..1fe8fc24e4 --- /dev/null +++ b/internal/static/i18n/fr.yaml @@ -0,0 +1,928 @@ +Errors: + Internal : Une erreur interne s'est produite + NoChangesFound : Aucun changement + OriginNotAllowed : Cette "Origine" n'est pas autorisée + IDMissing : ID manquant + ResourceOwnerMissing : Organisation du propriétaire de la ressource manquante + RemoveFailed : N'a pas pu être supprimé + ProjectionName : + Invalid : Nom de projection non valide + Assets: + EmptyKey: La clé de l'actif est vide + Store: + NotInitialized : Le stockage des actifs n'est pas initialisé + NotConfigured : Le stockage des actifs n'est pas configuré + Bucket: + Internal : Erreur interne lors de la création d'un bucket + AlreadyExists : Bucket déjà existant + CreateFailed : Bucket non créé + ListFailed : Les buckets n'ont pas pu être lus + RemoveFailed : Bucket non supprimé + SetPublicFailed : Impossible de définir le bucket comme public + Object: + PutFailed : Objet non créé + GetFailed : L'objet n'a pas pu être lu + NotFound : L'objet n'a pas pu être trouvé + PresignedTokenFailed : Le jeton signé n'a pas pu être créé + ListFailed : Objectlist n'a pas pu être lu + RemoveFailed : L'objet n'a pas pu être retiré + Limit : + ExceedsDefault : La limite dépasse la limite par défaut + Language : + NotParsed : Impossible d'analyser la langue + OIDCSettings : + NotFound : Configuration OIDC non trouvée + AlreadyExists : La configuration OIDC existe déjà + SecretGenerator : + AlreadyExists : Le générateur de secrets existe déjà + TypeMissing : Type de générateur de secret manquant + NotFound : Générateur de secret non trouvé + SMSConfig: + NotFound : Configuration SMS non trouvée + AlreadyActive : Configuration SMS déjà active + AlreadyDeactivated : Configuration SMS déjà désactivée + SMTPConfig : + NotFound : Configuration SMTP non trouvée + AlreadyExists : La configuration SMTP existe déjà + SenderAdressNotCustomDomain : L'adresse de l'expéditeur doit être configurée comme un domaine personnalisé sur l'instance. + Notification : + NoDomain : Aucun domaine trouvé pour le message + User : + NotFound : L'utilisateur n'a pas été trouvé + AlreadyExists : L'utilisateur existe déjà + NotFoundOnOrg : L'utilisateur n'a pas été trouvé dans l'organisation choisie + NotAllowedOrg : L'utilisateur n'est pas membre de l'organisation requise + UserIDMissing : L'ID de l'utilisateur est manquant + DomainPolicyNil : La politique de l'organisation est vide + EmailAsUsernameNotAllowed : L'email n'est pas autorisé comme nom d'utilisateur + Invalid : Les données de l'utilisateur ne sont pas valides + DomainNotAllowedAsUsername : Le domaine est déjà réservé et ne peut être utilisé. + AlreadyInactive : L'utilisateur est déjà inactif + NotInactive : L'utilisateur n'est pas inactif + CantDeactivateInitial : L'utilisateur avec l'état initial peut seulement être supprimé, pas désactivé. + ShouldBeActiveOrInitial : L'utilisateur n'est pas actif ou initial + AlreadyInitialised : L'utilisateur est déjà initialisé + NotInitialised : L'utilisateur n'est pas encore initialisé + NotLocked : L'utilisateur n'est pas verrouillé + NoChanges : Aucun changement trouvé + InitCodeNotFound : Code d'initialisation non trouvé + UsernameNotChanged : Nom d'utilisateur non modifié + Profile : + NotFound : Profil non trouvé + NotChanged : Le profil n'a pas changé + Invalid : Données de profil non valides + Email : + NotFound : Email non trouvé + Invalide : L'email n'est pas valide + AlreadyVerified : L'adresse électronique est déjà vérifiée + NotChanged : L'adresse électronique n'a pas changé + Phone : + Notfound : Téléphone non trouvé +Invalid : Le téléphone n'est pas valide + AlreadyVerified : Téléphone déjà vérifié + Adress : + NotFound : Adresse non trouvée + NotChanged : L'adresse n'a pas changé + Machine : + Key : + NotFound : Clé de la machine non trouvée + PAT : + NotFound : Token d'accès personnel non trouvé + NotHuman : L'utilisateur doit être personnel + NotMachine : L'utilisateur doit être technique + WrongType : Non autorisé pour ce type d'utilisateur + NotAllowedToLink : L'utilisateur n'est pas autorisé à établir un lien avec un fournisseur de connexion externe. + Username : + AlreadyExists : Nom d'utilisateur déjà pris + Reservied : Le nom d'utilisateur est déjà pris + Code : + Empty : Le code est vide + NotFound : Code non trouvé + Expired : Le code est expiré + GeneratorAlgNotSupported : Algorithme de générateur non pris en charge + Password : + NotFound : Mot de passe non trouvé + Empty : Le mot de passe est vide + Invalid : Le mot de passe n'est pas valide + NotSet : L'utilisateur n'a pas défini de mot de passe + PasswordComplexityPolicy : + NotFound : Politique de mot de passe non trouvée + MinLength : Le mot de passe est trop court + MinLengthNotAllowed : La longueur minimale indiquée n'est pas autorisée + HasLower : Le mot de passe doit contenir des minuscules + HasUpper : Le mot de passe doit contenir des majuscules + HasNumber : Le mot de passe doit contenir un numéro + HasSymbol : Le mot de passe doit contenir un symbole + ExternalIDP: + Invalid: IDP Externer invalide + IDPConfigNotExisting : Le fournisseur IDP n'est pas valide pour cette organisation + NotAllowed : IDP externe non autorisé pour cette organisation + MinimumExternalIDPNeeded : Au moins un IDP doit être ajouté + AlreadyExists : External IDP déjà pris + NotFound : IDP externe non trouvé + MFA : + OTP : + AlreadyReady : L'OTP (mot de passe à usage unique) multifactoriel est déjà configuré. + NotExisting : OTP multifactoriel (mot de passe à usage unique) n'existe pas. + NotReady : OTP multifactoriel (mot de passe à usage unique) n'est pas prêt. + InvalidCode : Code invalide + U2F : + NotExisting : L'U2F n'existe pas + Sans mot de passe : + NotExisting : Passwordless n'existe pas + WebAuthN : + NotFound : Le token WebAuthN n'a pas été trouvé + BeginRegisterFailed : L'enregistrement de WebAuthN a échoué + MarshalError : Erreur sur les données marshal + ErrorOnParseCredential : Erreur lors de l'analyse des données d'identification + CreateCredentialFailed : Erreur lors de la création d'informations d'identification + BeginLoginFailed : Echec de la connexion WebAuthN + ValidateLoginFailed : Erreur lors de la validation des informations d'identification + CloneWarning : Les informations d'identification peuvent être clonées + RefreshToken : + Invalid : Le jeton de rafraîchissement n'est pas valide + NotFound : Jeton de rafraîchissement non trouvé + Org: + AlreadyExists : Le nom de l'organisation est déjà pris + Invalid : L'organisation n'est pas valide + AlreadyDeactivated : L'organisation est déjà désactivée + AlreadyActive : L'organisation est déjà active + Empty : L'organisation est vide + NotFound : Organisation non trouvée + NotChanged : L'organisation n'a pas changé + InvalidDomain : Domaine non valide + DomainMissing : Domaine manquant + DomainNotOnOrg : Le domaine n'existe pas dans l'organisation + DomainNotVerified : Le domaine n'est pas vérifié + DomainAlreadyVerified : Le domaine est déjà vérifié + DomainVerificationTypeInvalid : Le type de vérification du domaine n'est pas valide + DomainVerificationMissing : La vérification du domaine n'a pas encore commencé + DomainVerificationFailed : La vérification du domaine a échoué + PrimaryDomainNotDeletable : Le domaine primaire ne doit pas être supprimé + DomainNotFound : Domaine non trouvé + MemberIDMissing : ID du membre manquant + MemberNotFound : Membre de l'organisation non trouvé + InvalidMember : Le membre de l'organisation n'est pas valide + UserIDMissing : ID utilisateur manquant + PolicyAlreadyExists : La politique existe déjà + PolicyNotExisting : La politique n'existe pas + IdpInvalid : La configuration IDP n'est pas valide + IdpNotExisting : La configuration IDP n'existe pas + OIDCConfigInvalid : La configuration IDP de l'OIDC n'est pas valide + IdpIsNotOIDC : La configuration IDP n'est pas de type oidc + Domain: + AlreadyExists: Le domaine existe déjà + IDP: +InvalidSearchQuery : Paramètre de recherche non valide + LoginPolicy : + NotFound : Politique de connexion non trouvée + Invalid : La politique de connexion n'est pas valide + RedirectURIInvalid : L'URI de redirection par défaut n'est pas valide + NotExisting : La politique de connexion n'existe pas + AlreadyExists : La politique de connexion existe déjà + IdpProviderAlreadyExisting : Idp Provider existe déjà + IdpProviderNotExisting : Idp Provider non existant + RegistrationNotAllowed : L'enregistrement n'est pas autorisé + UsernamePasswordNotAllowed : La connexion avec le nom d'utilisateur et le mot de passe n'est pas autorisée + MFA: + AlreadyExists : Le multifacteur existe déjà + NotExisting : Multifacteur non existant + Non spécifié : Multifacteur non valide + MailTemplate : + NotFound : Default Mail Template not found + NotChanged : Default Mail Template n'a pas été modifié + AlreadyExists : Default Mail Template existe déjà + Invalid : Le modèle de courrier par défaut n'est pas valide + CustomMessageText : + NotFound : Le texte du message par défaut n'a pas été trouvé + NotChanged : Le texte du message par défaut n'a pas été modifié + AlreadyExists : Le texte du message par défaut existe déjà + Invalid : Le texte du message par défaut n'est pas valide + PasswordComplexityPolicy : + NotFound : Politique de complexité des mots de passe non trouvée + Empty : La politique de complexité des mots de passe est vide + NotExisting : La politique de complexité des mots de passe n'existe pas + AlreadyExists : La politique de complexité des mots de passe existe déjà + PasswordLockoutPolicy : + NotFound : La politique de verrouillage du mot de passe n'a pas été trouvée + Empty : La politique de verrouillage des mots de passe est vide + NotExisting : La politique de verrouillage du mot de passe n'existe pas + AlreadyExists : La politique de verrouillage du mot de passe existe déjà + PasswordAgePolicy : + NotFound : La politique d'âge du mot de passe n'a pas été trouvée + Empty : La politique d'âge du mot de passe est vide + NotExisting : La politique d'âge des mots de passe n'existe pas + AlreadyExists : La politique relative à l'âge du mot de passe existe déjà + OrgIAMPolicy: + Empty : La politique IAM d'Org est vide + NotExisting : La politique Org IAM n'existe pas + AlreadyExists : La politique IAM d'Org existe déjà + Project : + ProjectIDMissing : Id de projet manquant + AlreadyExists : Le projet existe déjà dans l'organisation + OrgNotExisting : L'organisation n'existe pas + UserNotExisting : L'utilisateur n'existe pas + CouldNotGenerateClientSecret : Impossible de générer le secret du client. + Invalid : Le projet n'est pas valide + NotActive : Le projet n'est pas actif + NotInactive : Le projet n'est pas désactivé + NotFound : Projet non trouvé + UserIDMissing : ID utilisateur manquant + Member: + Notfound : Membre du projet non trouvé + Invalide : Le membre du projet n'est pas valide + AlreadyExists : Le membre du projet existe déjà + NotExisting : Le membre du projet n'existe pas + MinimumOneRoleNeeded : Au moins un rôle doit être ajouté + Role : + AlreadyExists : Le rôle existe déjà + Invalide : Le rôle n'est pas valide + NotExisting : Le rôle n'existe pas + IDMissing : ID manquant + App : + AlreadyExists : L'application existe déjà + NotFound : Application non trouvée + Invalid : Application invalide + NotExisting : L'application n'existe pas + NotActive : L'application n'est pas active + NotInactive : L'application n'est pas inactive + OIDCConfigInvalid : La configuration de l'OIDC n'est pas valide + APIConfigInvalid : La configuration de l'API n'est pas valide + IsNotOIDC : L'application n'est pas de type oidc + IsNotAPI : L'application n'est pas de type API + OIDCAuthMethodNoSecret : La méthode d'authentification OIDC choisie ne nécessite pas de secret. + APIAuthMethodNoSecret : La méthode d'authentification API choisie ne nécessite pas de secret. + AuthMethodNoPrivateKeyJWT : La méthode d'authentification choisie ne nécessite pas de clé. + ClientSecretInvalid : Le secret du client n'est pas valide + RequiredFieldsMissing : Certains champs obligatoires sont manquants + Grant : + AlreadyExists : La subvention du projet existe déjà + NotFound : Subvention non trouvée + Invalide : La subvention du projet n'est pas valide + NotExisting : La subvention de projet n'existe pas + HasNotExistingRole : Un rôle n'existe pas sur le projet + NotActive : La subvention de projet n'est pas active + NotInactive : La subvention du projet n'est pas inactive + UserIDMisisng : ID utilisateur manquant + IAM: + Member: + RolesNotChanged : Les rôles n'ont pas été modifiés + MemberInvalid : Le membre n'est pas valide + MemberAlreadyExisting : Le membre existe déjà + MemberNotExisting : Le membre n'existe pas + IDMissing : Id manquant + IAMProjectIDMissing : Id de projet IAM manquant + IamProjectAlreadySet : L'identifiant du projet IAM a déjà été défini + IdpInvalid : La configuration IDP n'est pas valide + IdpNotExisting : La configuration IDP n'existe pas + OIDCConfigInvalid : La configuration IDP de l'OIDC n'est pas valide + IdpIsNotOIDC : La configuration IDP n'est pas de type oidc + LoginPolicyInvalid : La politique de connexion n'est pas valide + LoginPolicyNotExisting : La politique de connexion n'existe pas + IdpProviderInvalid : Idp Provider est invalide + LoginPolicy : + NotFound : La politique de connexion par défaut n'a pas été trouvée + NotChanged : La politique de connexion par défaut n'a pas été modifiée + NotExisting : La politique de connexion par défaut n'existe pas + AlreadyExists : La politique de connexion par défaut existe déjà + RedirectURIInvalid : L'URI de redirection par défaut n'est pas valide + MFA: + AlreadyExists : Le multifacteur existe déjà + NotExisting : Multifacteur non existant + Non spécifié : Multifacteur invalide + IDP : + AlreadyExists : Le fournisseur d'identité existe déjà + NotExisting : Le fournisseur d'identité n'existe pas + Invalid : Le fournisseur d'identité n'est pas valide + IDPConfig : + AlreadyExists : La configuration du fournisseur d'identité existe déjà + NotInactive : La configuration du fournisseur d'identité n'est pas inactive + NotActive : La configuration du fournisseur d'identité n'est pas active + LabelPolicy : + NotFound : Politique d'étiquetage privé par défaut non trouvée + NotChanged : La politique de label privé par défaut n'a pas été modifiée + MailTemplate : + NotFound : Default Mail Template not found + NotChanged : Le modèle de courrier par défaut n'a pas été modifié + AlreadyExists : Default Mail Template existe déjà + Invalid : Le modèle de courrier par défaut n'est pas valide + CustomMessageText : + NotFound : Le texte du message par défaut n'a pas été trouvé + NotChanged : Le texte du message par défaut n'a pas été modifié + AlreadyExists : Le texte du message par défaut existe déjà + Invalid : Le texte du message par défaut n'est pas valide + PasswordComplexityPolicy : + NotFound : Politique de complexité des mots de passe par défaut non trouvée + NotExisting : La politique de complexité des mots de passe par défaut n'existe pas + AlreadyExists : La politique de complexité des mots de passe par défaut existe déjà + Empty : Politique de complexité des mots de passe par défaut vide + NotChanged : La politique de complexité des mots de passe par défaut n'a pas été modifiée. + PasswordAgePolicy : + NotFound : La politique d'âge du mot de passe par défaut n'a pas été trouvée + NotExisting : La politique d'âge des mots de passe par défaut n'existe pas + AlreadyExists : La politique d'âge du mot de passe par défaut existe déjà + Empty : Politique d'âge des mots de passe par défaut vide + NotChanged : La politique d'âge du mot de passe par défaut n'a pas été modifiée + PasswordLockoutPolicy : + NotFound : La politique de verrouillage du mot de passe par défaut n'a pas été trouvée + NotExisting : La politique de verrouillage du mot de passe par défaut n'existe pas + AlreadyExists : La politique de verrouillage de mot de passe par défaut existe déjà + Empty : Politique de verrouillage par mot de passe par défaut vide + NotChanged : La politique de verrouillage par mot de passe par défaut n'a pas été modifiée. + DomainPolicy : + NotFound : Politique IAM Org non trouvée + Empty : La politique Org IAM est vide + NotExisting : La politique IAM d'Org n'existe pas + AlreadyExists : La politique IAM d'Org existe déjà + NotChanged : La politique IAM d'Org n'a pas été modifiée + Policy: + AlreadyExists : La politique existe déjà + Label : + Invalid : + PrimaryColor : La couleur primaire n'est pas une valeur de couleur hexadécimale valide. + BackgroundColor : La couleur d'arrière-plan n'a pas de valeur de couleur hexadécimale valide. + WarnColor : La couleur d'avertissement n'a pas de valeur de couleur hexadécimale valide. + FontColor : La couleur de la police n'a pas de valeur de couleur Hex valide. + PrimaryColorDark : La couleur primaire (mode foncé) n'a pas de valeur de couleur Hex valide. + BackgroundColorDark : La couleur d'arrière-plan (mode foncé) n'a pas de valeur de couleur Hex valide. + WarnColorDark : La couleur d'avertissement (mode sombre) n'a pas de valeur de couleur hexadécimale valide. + FontColorDark : La couleur de la police (mode foncé) n'a pas de valeur de couleur hexadécimale valide. + UserGrant : + AlreadyExists : L'autorisation de l'utilisateur existe déjà + NotFound : Subvention d'utilisateur non trouvée + Invalid : La subvention d'utilisateur n'est pas valide + NotChanged : L'autorisation de l'utilisateur n'a pas été modifiée. + IDMissing : Id manquant + NotActive : La subvention de l'utilisateur n'est pas active + NotInactive : La subvention à l'utilisateur n'est pas désactivée + NoPermissionForProject : L'utilisateur n'a aucune autorisation pour ce projet + RoleKeyNotFound : Rôle non trouvé + Membre : + AlreadyExists : Le membre existe déjà + IDPConfig : + AlreadyExists : La configuration IDP portant ce nom existe déjà + NotExisting : La configuration du fournisseur d'identité n'existe pas + Changements : + NotFound : Aucun historique trouvé + AuditRetention : L'historique est en dehors de la rétention du journal d'audit + Token : + NotFound : Token non trouvé + UserSession : + NotFound : UserSession non trouvé + Key : + ExpireBeforeNow : La date d'expiration est dans le passé + Login : + LoginPolicy : + MFA : + ForceAndNotConfigured : Multifacteur configuré comme requis, mais aucun fournisseur possible n'est configuré. Veuillez contacter votre administrateur système. + Step : + Started : + AlreadyExists : L'étape commencée existe déjà + Done : + AlreadyExists : L'étape terminée existe déjà + CustomText : + Existe déjà : Le texte personnalisé existe déjà + Invalid : Le texte personnalisé n'est pas valide + NotFound : Le texte personnalisé n'a pas été trouvé + TranslationFile : + ReadError : Erreur de lecture du fichier de traduction + MergeError : Le fichier de traduction n'a pas pu être fusionné avec les traductions personnalisées. + NotFound : Le fichier de traduction n'existe pas + MetaData : + NotFound : Métadonnées non trouvées + NoData : La liste des métadonnées est vide + Invalid : Les métadonnées ne sont pas valides + KeyNotExisting : Une ou plusieurs clés n'existent pas + Action : + Invalid : L'action n'est pas valide + NotFound : Action non trouvée + NotActive : L'action n'est pas active + NotInactive : L'action n'est pas inactive + MaxAllowed : Aucune action active supplémentaire n'est autorisée + Flow : + FlowTypeMissing : FlowType missing + Empty : Le flux est déjà vide + WrongTriggerType : TriggerType est invalide + NoChanges : No Changes : Aucun changement + ActionIDsNotExist : Les ActionIDs n'existent pas + Query : + CloseRows : L'instruction SQL n'a pas pu être terminée + SQLStatement : L'instruction SQL n'a pas pu être créée + InvalidRequest : La requête n'est pas valide +EventTypes : + user : + added : Utilisateur ajouté + selfregistered : L'utilisateur s'est enregistré lui-même + initialization : + code : + added : Code d'initialisation généré + sent : Code d'initialisation envoyé + check : + succeeded : Vérification de l'initialisation réussie + failed : La vérification de l'initialisation a échoué + token : + added : Jeton d'accès créé + username : + reserved : Nom d'utilisateur réservé + released : Nom d'utilisateur libéré + email : + reserved : Adresse e-mail réservée + released : Adresse email libérée + changed : Adresse e-mail modifiée + verified : Adresse e-mail vérifiée + verification : + failed : La vérification de l'adresse e-mail a échoué + code : + added : Code de vérification de l'adresse e-mail généré + sent : Code de vérification de l'adresse e-mail envoyé + machine : + added : Utilisateur technique ajouté + changed : Changement d'utilisateur technique + key : + added : Clé ajoutée + removed : Clé supprimée + human : + added : Personne ajoutée + selfregistered : La personne s'est enregistrée elle-même + avatar : + added : Avatar ajouté + removed : Avatar supprimé + initialization : + code : + added : Code d'initialisation généré + sent : Code d'initialisation envoyé + check : + succeeded : Vérification de l'initialisation réussie + failed : La vérification de l'initialisation a échoué + username : + reserved : Nom d'utilisateur réservé + released : Nom d'utilisateur libéré + email : + changed : Adresse e-mail modifiée + verified : Adresse e-mail vérifiée + verification : + failed : La vérification de l'adresse e-mail a échoué + code: + added : Code de vérification de l'adresse e-mail généré + sent : Code de vérification de l'adresse e-mail envoyé + machine : + added : Utilisateur technique ajouté + changed : Changement d'utilisateur technique + key : + added : Clé ajoutée + removed : Clé supprimée + humain : + added : Personne ajoutée + selfregistered : La personne s'est enregistrée elle-même + avatar : + added : Avatar ajouté + removed : Avatar supprimé + initialization : + code : + added : Code d'initialisation généré + sent : Code d'initialisation envoyé + check : + succeeded : Vérification de l'initialisation réussie + failed : La vérification de l'initialisation a échoué + username : + reserved : Nom d'utilisateur réservé + released : Nom d'utilisateur libéré + email : + changed : Adresse e-mail modifiée + verified : Adresse e-mail vérifiée + verification : + failed : La vérification de l'adresse e-mail a échoué + code : + added : Code de vérification de l'adresse e-mail généré + sent : Code de vérification de l'adresse e-mail envoyé + password : + changed : Mot de passe modifié + code : + added : Code de mot de passe généré + sent : Code du mot de passe envoyé + verified : + succeeded : Vérification du mot de passe réussie + failed : La vérification du mot de passe a échoué + external login : + verification : + succeeded : Connexion externe réussie + externalidp : + added : Externer IDP ajouté + removed : Externer IDP supprimé + cascade : + removed : Externer IDP cascade supprimé + Phone : + changed : Le numéro de téléphone a changé + verified : Numéro de téléphone vérifié + verification : + failed : La vérification du numéro de téléphone a échoué + code : + added : Code du numéro de téléphone généré + sent : Code du numéro de téléphone envoyé + removed : Numéro de téléphone supprimé + profile : + changed : Profil de l'utilisateur modifié + adresse : + changed : L'adresse de l'utilisateur a changé + mfa : + otp : + added : OTP multifacteur ajouté + verfied : OTP multifactoriel vérifié + removed : OTP multifactorielle supprimée + verified : + succeeded : Vérification de l'OTP multifactorielle réussie + failed : La vérification de l'OTP multifactorielle a échoué + u2f : + jeton : + added : Ajout d'un jeton U2F multifacteur + verified : Jeton U2F multifactor vérifié + removed : Jeton U2F multifactoriel retiré + start : + login : Vérification U2F multifactoriel commencée + verified : + succeeded : Vérification multifactorielle U2F réussie + failed : La vérification multifactorielle U2F a échoué + signcount : + changed : La somme de contrôle du jeton Multifactor U2F a été modifiée. + init : + skipped : L'initialisation du multifacteur a été ignorée + passwordless : + token : + added : Jeton pour la connexion sans mot de passe ajouté + verified : Jeton pour la connexion sans mot de passe vérifié + removed : Jeton de connexion sans mot de passe supprimé + start : + login : Vérification de la connexion sans mot de passe commencée + verification : + succeeded : Vérification de la connexion sans mot de passe réussie + failed : La vérification de la connexion sans mot de passe a échoué + signcount : + changed : La somme de contrôle du jeton de connexion sans mot de passe a été modifiée. + initialization : + code : + added : Ajout du code d'initialisation sans mot de passe + sent : Code d'initialisation sans mot de passe envoyé + requested : Code d'initialisation sans mot de passe demandé + check : + succeeded : Code d'initialisation sans mot de passe vérifié avec succès + failed : La vérification du code d'initialisation sans mot de passe a échoué + signed : + out : L'utilisateur s'est déconnecté + refresh : + token : + added : Création d'un jeton de rafraîchissement + renewed : Rafraîchissement d'un jeton renouvelé + removed : Jeton d'actualisation supprimé + locked : Utilisateur verrouillé + unlocked : Utilisateur déverrouillé + deactivated : Utilisateur désactivé + reactivated : Utilisateur réactivé + removed : Utilisateur supprimé + password : + changed : Mot de passe modifié + code : + added : Code du mot de passe généré + sent : Code du mot de passe envoyé + check : + succeeded : Vérification du mot de passe réussie + failed : La vérification du mot de passe a échoué + phone: + changed : Le numéro de téléphone a changé + verified : Numéro de téléphone vérifié + verification : + failed : La vérification du numéro de téléphone a échoué + code : + added : Code du numéro de téléphone généré + sent : Code du numéro de téléphone envoyé + profil : + changed : Profil de l'utilisateur modifié + adresse : + changed : L'adresse de l'utilisateur a changé + mfa : + otp : + added : OTP multifacteur ajouté + verified : OTP multifactoriel vérifié + removed : OTP multifactorielle supprimée + verified : + succeeded : Vérification de l'OTP multifactorielle réussie + failed : Échec de la vérification de l'OTP multifactorielle + init : + skipped : L'initialisation du multifacteur a été ignorée + signed : + out : L'utilisateur s'est déconnecté + grant : + added : Autorisation ajoutée + changed : Autorisation modifiée + removed : Autorisation supprimée + deactivated : Autorisation désactivée + reactivated : Autorisation réactivée + reserved : Autorisation réservée + released : Autorisation validée + cascade : + removed : Autorisation supprimée + changed : Autorisation modifiée + MetaData : + set : Ensemble de métadonnées de l'utilisateur + removed : Métadonnées de l'utilisateur supprimées + removed.all : Suppression de toutes les métadonnées utilisateur + org : + added : Organisation ajoutée + changed : Organisation modifiée + deactivated : Organisation désactivée + reactivated : Organisation réactivée + removed : Organisation supprimée + domain : + added : Domaine ajouté + verification : + added : Vérification du domaine ajoutée + failed : La vérification du domaine a échoué + verified : Domaine vérifié + removed : Domaine supprimé + primary : + set : Domaine primaire défini + reserved : Domaine réservé + released : Domaine libéré + name : + reserved : Nom de l'organisation réservé + released: Nom de l'organisation libéré + membre : + added : Membre de l'organisation ajouté + changed : Le membre de l'organisation a changé + removed : Membre de l'organisation supprimé + cascade : + removed : Membre de l'organisation supprimé en cascade + iam : + policy : + added : Politique système ajoutée + changed : Modification de la politique système + removed : Politique système supprimée + idp : + config : + added : Ajout de la configuration IDP + changed : Modification de la configuration IDP + removed : Suppression de la configuration IDP + deactivated : Configuration IDP désactivée + reactivated : Configuration IDP réactivée + oidc : + config : + added : Ajout de la configuration IDP de l'OIDC + changed : Modification de la configuration de l'OIDC IDP + saml : + config : + added : Configuration IDP SAML ajoutée + changed : Modification de la configuration IDP SAML + customtext : + set : Jeu de texte personnalisé + removed : Texte personnalisé supprimé + template : + removed : Modèle de texte personnalisé supprimé + policy : + login : + added : Politique de connexion ajoutée + changed : Politique de connexion modifiée + removed : Politique de connexion supprimée + idpprovider : + added : Fournisseur d'Idp ajouté à la politique de connexion + removed : Idp Provider supprimé de la politique de connexion + secondfactor : + added : Second factor ajouté à la politique de connexion + removed : Second facteur supprimé de la politique de connexion + multifactor : + added : Facteur multiple ajouté à la politique de connexion + removed : Facteur multiple supprimé de la politique de connexion + password : + complexity : + added : Ajout de la politique de complexité des mots de passe + changed : Modification de la politique de complexité des mots de passe + removed : Suppression de la politique de complexité des mots de passe + age : + added : Ajout de la politique d'ancienneté des mots de passe + changed : Modification de la politique d'ancienneté des mots de passe + removed : Suppression de la politique d'âge du mot de passe + lockout : + added : Ajout de la politique de verrouillage des mots de passe + changed : Modification de la politique de verrouillage des mots de passe + removed : Suppression de la politique de verrouillage du mot de passe + label: + added : Politique d'étiquetage ajoutée + changed : Politique d'étiquetage modifiée + activated : Label Policy activated : Politique d'étiquetage activée + removed : Politique d'étiquetage supprimée + logo : + added : Logo ajouté à la politique d'étiquetage + removed : Logo retiré de la politique d'étiquetage + sombre : + added : Logo (mode sombre) ajouté à la politique d'étiquetage + removed : Le logo (mode sombre) a été retiré de la politique d'étiquetage + icon : + added : Icône ajoutée à la politique d'étiquetage + removed : Icône supprimée de la politique d'étiquetage + dark : + added : Icône (mode sombre) ajoutée à la politique d'étiquetage + removed : Icône (mode sombre) supprimée de la politique d'étiquetage + font : + added : Police ajoutée à la politique d'étiquetage + removed : Police supprimée de la politique d'étiquetage + assets : + removed : Actifs supprimés de la politique d'étiquetage + privacy : + added : Politique de confidentialité et CGU ajoutés + changed : Politique de confidentialité et CGU modifiées + removed : Politique de confidentialité et conditions d'utilisation supprimées + flow : + trigger_actions : + set : Action set + cascade : + removed : Cascade d'actions supprimée + removed : Actions supprimées + projet : + added : Projet ajouté + changed : Projet modifié + deactivated : Projet désactivé + reactivated : Projet réactivé + removed : Projet supprimé + membre : + added : Membre du projet ajouté + changed : Membre du projet modifié + removed : Membre du projet supprimé + cascade : + removed : Membre du projet supprimé en cascade + role : + added : Rôle de projet ajouté + changed : Rôle de projet modifié + removed : Rôle du projet supprimé + grant : + added : Accès à la gestion ajouté + changed : Accès de gestion modifié + removed : Accès de gestion supprimé + deactivated : Accès de gestion désactivé + reactivated : Accès de gestion réactivé + cascade : + changed : Accès de gestion modifié + membre : + added : Membre de l'accès de gestion ajouté + changed : Membre d'accès de gestion modifié + removed : Membre d'accès de gestion supprimé + cascade : + removed : Cascade d'accès de gestion supprimée + application : + added : Application ajoutée + changed : Application modifiée + removed : Application supprimée + deactivated : Application désactivée + reactivated : Application réactivée + oidc : + secret : + verified : + check : Vérification du secret du client OIDC réussie + failed : La vérification du secret du client OIDC a échoué + key : + added : Clé d'application ajoutée + removed : Clé d'application supprimée + config : + oidc : + added : Configuration OIDC ajoutée + changed : Modification de la configuration de l'OIDC + secret : + changed : Le secret de l'OIDC a été modifié + api : + added : Configuration API ajoutée + chaged : La configuration de l'API a été modifiée + secret : + changed : Le secret de l'API a été modifié + policy : + password : + complexity : + added : Ajout de la politique de complexité des mots de passe + changed : Modification de la politique de complexité des mots de passe + age : + added : Ajout de la politique d'ancienneté des mots de passe + changed : Modification de la politique relative à l'âge du mot de passe + verrouillage : + added : Ajout de la politique de verrouillage des mots de passe + changed : Modification de la politique de verrouillage des mots de passe + iam : + setup : + started : L'installation de ZITADEL a commencé + done : Installation de ZITADEL terminée + global : + org : + set : Global org set + projet : + iam : + set : set du projet ZITADEL + membre : + added : ZITADEL membre ajouté + changed : membre de ZITADEL modifié + removed : membre ZITADEL supprimé + cascade : + removed : Membre ZITADEL supprimé en cascade + idp : + config : + added : Ajout de la configuration IDP + changed : Modification de la configuration IDP + removed : Suppression de la configuration IDP + deactivated : Configuration IDP désactivée + reactivated : Configuration IDP réactivée + oidc : + config : + added : Ajout de la configuration IDP de l'OIDC + changed : Modification de la configuration de l'OIDC IDP + saml: + config : + added : Ajout de la configuration SAML IDP + changed : Modification de la configuration de SAML IDP + policy : + login : + added : Politique de connexion par défaut ajoutée + changed : La politique de connexion par défaut a été modifiée + idpprovider : + added : Idp Provider ajouté à la politique de connexion par défaut + removed : Idp Provider supprimé de la politique de connexion par défaut + label : + added : Ajout d'une politique d'étiquetage + modifié : La politique d'étiquetage a été modifiée + activé : Politique d'étiquetage activée + logo : + added : Logo ajouté à la politique d'étiquetage + removed : Logo retiré de la politique d'étiquetage + sombre : + added : Logo (mode sombre) ajouté à la politique d'étiquetage + removed : Le logo (mode sombre) a été retiré de la politique d'étiquetage + icon : + added : Icône ajoutée à la politique d'étiquetage + removed : Icône supprimée de la politique d'étiquetage + sombre : + added : Icône (mode sombre) ajoutée à la politique d'étiquetage + removed : Icône (mode sombre) supprimée de la politique d'étiquetage + font : + added : Police ajoutée à la politique d'étiquetage + removed : Police supprimée de la politique d'étiquetage + actifs : + removed : Actifs supprimés de la politique d'étiquetage + default : + langue : + set : Langue par défaut + oidc : + settings : + added : Ajout de la configuration de l'OIDC + changed : Modification de la configuration de l'OIDC + removed : Suppression de la configuration de l'OIDC + secret : + generator : + added : Générateur de secret ajouté + changed : Générateur de secret modifié + removed : Générateur secret supprimé + smtp : + config : + added : Ajout de la configuration SMTP + changed : Modification de la configuration SMTP + password : + changed : Modification du secret de la configuration SMTP + sms : + config : + twilio : + added : ajout du fournisseur de SMS Twilio + changed : modification du fournisseur de SMS Twilio + token : + changed : Changement du jeton du fournisseur de SMS Twilio + removed : Suppression du fournisseur de SMS Twilio + activated : Activation du fournisseur de SMS Twilio + deactivated : Fournisseur de SMS Twilio désactivé + key_pair : + added : Paire de clés ajoutée + action : + added : Action ajoutée + changed : Action modifiée + deactivated : Action désactivée + reactivated : Action réactivée + removed : Action supprimée + +Application: + OIDC: + UnsupportedVersion: Votre version de l'OIDC n'est pas prise en charge + V1: + NotCompliant: Votre configuration n'est pas conforme et diffère de la norme OIDC 1.0. + NoRedirectUris: Au moins une uri de redirection doit être enregistrée. + NotAllCombinationsAreAllowed: La configuration est conforme, mais toutes les combinaisons possibles ne sont pas autorisées. + Code: + RedirectUris: + HttpOnlyForWeb: Le code de type de subvention n'autorise que les uris de redirection http pour le type d'application web. + CustomOnlyForNative: Le code du type de subvention n'autorise que les uris de redirection personnalisées pour le type d'application natif. (exemple: appname:// ) + + Implicit: + RedirectUris: + CustomNotAllowed: Le type de subvention implicite n'autorise pas les uris de redirection personnalisées + HttpNotAllowed: Grant type implicite n'autorise pas les uris de redirection http + HttpLocalhostOnlyForNative: Http://localhost redirect uri n'est autorisé que pour les applications natives. + Native: + AuthMethodType: + NotNone: Les applications natives doivent avoir authmethodtype none. + RedirectUris: + MustBeHttpLocalhost: Les URI de redirection doivent commencer par votre propre protocole, http://127.0.0.1, http://[::1] ou http://localhost. + UserAgent: + AuthMethodType: + NotNone: L'agent utilisateur doit avoir authmethodtype none. + GrantType: + Refresh: + NoAuthCode: Le jeton de rafraîchissement n'est autorisé qu'en combinaison avec le code d'autorisation. From f4ae4523fa0c541f90897c8b521956af5b298d41 Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Thu, 7 Jul 2022 09:20:51 +0200 Subject: [PATCH 006/116] docs: improve eventstore docs (#3905) * docs: improve eventstore docs * docs: fix broken link * docs(installation): fix broken link --- docs/docs/concepts/eventstore/overview.md | 7 ++++--- docs/docs/guides/installation/configure/configure.mdx | 2 +- docs/docs/guides/installation/run/compose.mdx | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/docs/concepts/eventstore/overview.md b/docs/docs/concepts/eventstore/overview.md index a11e288b06..8a7c9a22bd 100644 --- a/docs/docs/concepts/eventstore/overview.md +++ b/docs/docs/concepts/eventstore/overview.md @@ -22,8 +22,9 @@ The data is stored as events in an append-only log. ## Benefits -Audit: You have a built-in audit trail that tracks all changes over an unlimited period of time. -Travel back in time: With our way of storing data we can show you all of your resources at a given point in time. +- Audit: You have a built-in audit trail that tracks all changes over an unlimited period of time. +- Travel back in time: With our way of storing data we can show you all of your resources at a given point in time. +- Future Projections: It is easy to compute projections with new business logic by replaying all events since installation. ## Definitions @@ -43,7 +44,7 @@ Possible Events: ### Aggregate An aggregate consist of multiple events. All events together in will lead to the current state of the aggregate. -The aggregate can be compared with an object or a resources. +The aggregate can be compared with an object or a resources. Aggregates define transaction boundaries. ### Projections diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/installation/configure/configure.mdx index 08ebf4130c..33b9384f05 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/installation/configure/configure.mdx @@ -68,7 +68,7 @@ This is the IAM admin users login according to your configuration in the [exampl - Read more about [the login process](../../manuals/user-login). - If you want to run ZITADEL in production, you most certainly need to [customize your own domain](./custom-domain). - Check out all possible [runtime configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml) -- Check out all possible [setup step configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/adminn/setup/steps.yaml) +- Check out all possible [setup step configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/setup/steps.yaml) :::caution diff --git a/docs/docs/guides/installation/run/compose.mdx b/docs/docs/guides/installation/run/compose.mdx index 5337960fbe..86b63263f9 100644 --- a/docs/docs/guides/installation/run/compose.mdx +++ b/docs/docs/guides/installation/run/compose.mdx @@ -4,7 +4,7 @@ By executing the commands below, you will download the file [docker-compose.yaml ```bash # Download the docker compose example configuration. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/get-started/docker-compose.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/run/docker-compose.yaml # Run the database and application containers docker compose up --detach From 427d21ad45e7819494cdb252c2d2a0525561be3d Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 7 Jul 2022 12:58:24 +0200 Subject: [PATCH 007/116] fix: (french) translations (#3922) --- console/src/assets/i18n/de.json | 14 +- console/src/assets/i18n/en.json | 13 +- console/src/assets/i18n/fr.json | 9 +- console/src/assets/i18n/it.json | 14 +- internal/api/ui/login/renderer.go | 3 +- internal/api/ui/login/static/i18n/de.yaml | 4 + internal/api/ui/login/static/i18n/en.yaml | 3 + internal/api/ui/login/static/i18n/fr.yaml | 362 ++-- internal/api/ui/login/static/i18n/it.yaml | 3 + .../templates/external_not_found_option.html | 2 + .../templates/external_register_overview.html | 2 + .../ui/login/static/templates/register.html | 2 + internal/i18n/i18n.go | 6 +- internal/notification/static/i18n/fr.yaml | 2 +- internal/static/i18n/de.yaml | 4 +- internal/static/i18n/en.yaml | 8 +- internal/static/i18n/fr.yaml | 1725 ++++++++--------- internal/static/i18n/it.yaml | 11 +- 18 files changed, 1096 insertions(+), 1091 deletions(-) diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index a5559b61ac..0d54b2f0e8 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -861,8 +861,9 @@ "DEFAULTLANGUAGE": "Standardsprache", "LANGUAGE": { "de": "Deutsch", + "en": "English", "it": "Italiano", - "en": "English" + "fr": "Français" }, "SMTP": { "TITLE": "SMTP Einstellungen", @@ -1028,10 +1029,10 @@ "UNSAVED_DESCRIPTION": "Sie haben Änderungen vorgenommen ohne zu speichern. Möchten Sie jetzt speichern?", "LOCALE": "Sprachcode", "LOCALES": { - "de": "German", + "de": "Deutsch", "en": "English", - "it": "Italian", - "fr": "French" + "it": "Italiano", + "fr": "Français" }, "KEYS": { "emailVerificationDoneText": "Email Verification erfolgreich", @@ -1774,8 +1775,9 @@ }, "LANGUAGES": { "de": "Deutsch", - "it": "Italienisch", - "en": "Englisch" + "en": "English", + "it": "Italiano", + "fr": "Français" }, "MEMBER": { "ADD": "Manager hinzufügen", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index da399ec73a..62482e686c 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -1028,10 +1028,10 @@ "UNSAVED_DESCRIPTION": "Your have made changes without saving. Do you want to save now?", "LOCALE": "Locale Code", "LOCALES": { - "de": "German", + "de": "Deutsch", "en": "English", - "it": "Italian", - "fr": "French" + "it": "Italiano", + "fr": "Français" }, "KEYS": { "emailVerificationDoneText": "Email verification done", @@ -1773,9 +1773,10 @@ "3": "Other" }, "LANGUAGES": { - "de": "German", - "it": "Italian", - "en": "English" + "de": "Deutsch", + "en": "English", + "it": "Italiano", + "fr": "Français" }, "MEMBER": { "ADD": "Add a Manager", diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index eaf75d891b..70ab9a6231 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -68,7 +68,8 @@ "PRIVACY": "Vie privée", "TOS": "Conditions de service", "OPENSHORTCUTSTOOLTIP": "Tapez ? pour afficher les raccourcis clavier", - "SETTINGS": "Paramètres" + "SETTINGS": "Paramètres", + "CUSTOMERPORTAL": "Customer Portal" }, "ACTIONS": { "ACTIONS": "Actions", @@ -860,8 +861,9 @@ "DEFAULTLANGUAGE": "Langue par défaut", "LANGUAGE": { "de": "Deutsch", + "en": "English", "it": "Italiano", - "en": "English" + "fr": "Français" }, "SMTP": { "TITLE": "Paramètres SMTP", @@ -1773,8 +1775,9 @@ }, "LANGUAGES": { "de": "Deutsch", + "en": "English", "it": "Italiano", - "en": "English" + "fr": "Français" }, "MEMBER": { "ADD": "Ajouter un manager", diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index f865736e82..28bd39d403 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -861,8 +861,9 @@ "DEFAULTLANGUAGE": "Lingua standard", "LANGUAGE": { "de": "Deutsch", + "en": "English", "it": "Italiano", - "en": "English" + "fr": "Français" }, "SMTP": { "TITLE": "Impostazioni SMTP", @@ -1028,10 +1029,10 @@ "UNSAVED_DESCRIPTION": "Hai fatto delle modifiche senza salvare. Vuoi salvare ora?", "LOCALE": "Codice locale", "LOCALES": { - "de": "Tedesco", - "en": "Inglese", + "de": "Deutsch", + "en": "English", "it": "Italiano", - "fr": "Francese" + "fr": "Français" }, "KEYS": { "emailVerificationDoneText": "Verifica dell'e-mail terminata con successo.", @@ -1773,9 +1774,10 @@ "3": "Altro" }, "LANGUAGES": { - "de": "Tedesco", + "de": "Deutsch", + "en": "English", "it": "Italiano", - "en": "Inglese" + "fr": "Français" }, "MEMBER": { "ADD": "Aggiungi un manager", diff --git a/internal/api/ui/login/renderer.go b/internal/api/ui/login/renderer.go index 981df771f5..2de8692f7d 100644 --- a/internal/api/ui/login/renderer.go +++ b/internal/api/ui/login/renderer.go @@ -380,7 +380,8 @@ func (l *Login) getBaseData(r *http.Request, authReq *domain.AuthRequest, title } func (l *Login) getTranslator(ctx context.Context, authReq *domain.AuthRequest) *i18n.Translator { - translator, _ := l.renderer.NewTranslator(ctx) + translator, err := l.renderer.NewTranslator(ctx) + logging.OnError(err).Warn("cannot load translator") if authReq != nil { l.addLoginTranslations(translator, authReq.DefaultTranslations) l.addLoginTranslations(translator, authReq.OrgTranslations) diff --git a/internal/api/ui/login/static/i18n/de.yaml b/internal/api/ui/login/static/i18n/de.yaml index 58963d0996..0845b0f813 100644 --- a/internal/api/ui/login/static/i18n/de.yaml +++ b/internal/api/ui/login/static/i18n/de.yaml @@ -208,6 +208,7 @@ RegistrationUser: German: Deutsch English: English Italian: Italiano + French: Français GenderLabel: Geschlecht Female: weiblich Male: männlich @@ -236,11 +237,13 @@ ExternalRegistrationUserOverview: German: Deutsch English: English Italian: Italiano + French: Français TosAndPrivacyLabel: Allgemeine Geschäftsbedingungen und Datenschutz TosConfirm: Ich akzeptiere die TosLinkText: AGBs TosConfirmAnd: und die PrivacyLinkText: Datenschutzerklärung + ExternalLogin: oder registriere dich mit einem externen Benutzer BackButtonText: zurück NextButtonText: speichern @@ -291,6 +294,7 @@ ExternalNotFoundOption: German: Deutsch English: English Italian: Italiano + French: Français Footer: PoweredBy: Powered By diff --git a/internal/api/ui/login/static/i18n/en.yaml b/internal/api/ui/login/static/i18n/en.yaml index 1649524476..0f97caee77 100644 --- a/internal/api/ui/login/static/i18n/en.yaml +++ b/internal/api/ui/login/static/i18n/en.yaml @@ -208,6 +208,7 @@ RegistrationUser: German: Deutsch English: English Italian: Italiano + French: Français GenderLabel: Gender Female: Female Male: Male @@ -236,6 +237,7 @@ ExternalRegistrationUserOverview: German: Deutsch English: English Italian: Italiano + French: Français TosAndPrivacyLabel: Terms and conditions TosConfirm: I accept the TosLinkText: TOS @@ -292,6 +294,7 @@ ExternalNotFoundOption: German: Deutsch English: English Italian: Italiano + French: Français Footer: PoweredBy: Powered By diff --git a/internal/api/ui/login/static/i18n/fr.yaml b/internal/api/ui/login/static/i18n/fr.yaml index b53e61dc31..a1671a8086 100644 --- a/internal/api/ui/login/static/i18n/fr.yaml +++ b/internal/api/ui/login/static/i18n/fr.yaml @@ -8,7 +8,7 @@ Login: LoginnamePlaceHolder: nom d'utilisateur@domaine ExternalUserDescription: Se connecter avec un utilisateur externe. MustBeMemberOfOrg: L'utilisateur doit être membre de l'organisation {{.OrgName}} . - RegisterButtonText: s'inscrire + RegisterButtonText: s'inscrire NextButtonText: suivant SelectAccount: @@ -38,7 +38,7 @@ Password: UsernameChange: Title: Modifier le nom d'utilisateur Description: Définissez votre nouveau nom d'utilisateur - UsernameLabel: Nom d'utilisateur : + UsernameLabel: Nom d'utilisateur CancelButtonText: annuler NextButtonText: suivant @@ -47,7 +47,7 @@ UsernameChangeDone: Description: Votre nom d'utilisateur a été changé avec succès. NextButtonText: suivant -InitPassword: +InitPassword: Title: Définir un mot de passe Description: Vous avez reçu un code, que vous devez saisir dans le formulaire ci-dessous, pour définir votre nouveau mot de passe. CodeLabel: Code @@ -107,6 +107,7 @@ InitMFADone: Description: La vérification multifactorielle a été effectuée avec succès. Le multifacteur doit être saisi à chaque connexion. NextButtonText: Suivant CancelButtonText: Annuler + MFAProvider: Provider0: OTP (Mot de passe à usage unique) Provider1: U2F (2ne facteur universel) @@ -137,162 +138,163 @@ PasswordlessPrompt: Title: Configuration sans mot de passe Description: Souhaitez-vous configurer une connexion sans mot de passe ? DescriptionInit: Vous devez configurer la connexion sans mot de passe. Utilisez le lien qui vous a été donné pour enregistrer votre appareil. - PasswordlessButtonText : Aller sans mot de passe - NextButtonText : suivant - SkipButtonText : Passer + PasswordlessButtonText: Aller sans mot de passe + NextButtonText: suivant + SkipButtonText: Passer PasswordlessRegistration: - Title : Configuration sans mot de passe - Description : Ajoutez votre Token en fournissant un nom et en cliquant sur le bouton 'Enregistrer le jeton' ci-dessous. - TokenNameLabel : Nom du jeton / de la machine - NotSupported : WebAuthN n'est pas pris en charge par votre navigateur. Veuillez vous assurer qu'il est à jour ou utiliser un autre navigateur (par exemple Chrome, Safari, Firefox). - RegisterTokenButtonText : Register Token - ErrorRetry : Réessayer, créer un nouveau défi ou choisir une autre méthode. + Title: Configuration sans mot de passe + Description: Ajoutez votre Token en fournissant un nom et en cliquant sur le bouton 'Enregistrer le jeton' ci-dessous. + TokenNameLabel: Nom du jeton / de la machine + NotSupported: WebAuthN n'est pas pris en charge par votre navigateur. Veuillez vous assurer qu'il est à jour ou utiliser un autre navigateur (par exemple Chrome, Safari, Firefox). + RegisterTokenButtonText: Register Token + ErrorRetry: Réessayer, créer un nouveau défi ou choisir une autre méthode. PasswordlessRegistrationDone: - Title : Configuration sans mot de passe - Description : Le jeton pour le système sans mot de passe a été ajouté avec succès. - DescriptionClose : Vous pouvez maintenant fermer cette fenêtre. - NextButtonText : suivant - CancelButtonText : annuler + Title: Configuration sans mot de passe + Description: Le jeton pour le système sans mot de passe a été ajouté avec succès. + DescriptionClose: Vous pouvez maintenant fermer cette fenêtre. + NextButtonText: suivant + CancelButtonText: annuler PasswordChange: - Title : Changer le mot de passe - Description : Changez votre mot de passe. Entrez votre ancien et votre nouveau mot de passe. - OldPasswordLabel : Ancien mot de passe - NewPasswordLabel : Nouveau mot de passe - NewPasswordConfirmLabel : Confirmation du mot de passe - CancelButtonText : annuler - NextButtonText : suivant + Title: Changer le mot de passe + Description: Changez votre mot de passe. Entrez votre ancien et votre nouveau mot de passe. + OldPasswordLabel: Ancien mot de passe + NewPasswordLabel: Nouveau mot de passe + NewPasswordConfirmLabel: Confirmation du mot de passe + CancelButtonText: annuler + NextButtonText: suivant PasswordChangeDone: - Title : Changer le mot de passe - Description : Votre mot de passe a été modifié avec succès. - NextButtonText : suivant + Title: Changer le mot de passe + Description: Votre mot de passe a été modifié avec succès. + NextButtonText: suivant -PasswordResetDone : - Title : Réinitialisation du jeu de liens - Description : Vérifiez votre e-mail pour réinitialiser votre mot de passe. - NextButtonText : suivant +PasswordResetDone: + Title: Réinitialisation du jeu de liens + Description: Vérifiez votre e-mail pour réinitialiser votre mot de passe. + NextButtonText: suivant -EmailVerification : - Title : Vérification de l'email - Description : Nous vous avons envoyé un e-mail pour vérifier votre adresse. Veuillez saisir le code dans le formulaire ci-dessous. - CodeLabel : Code - NextButtonText : suivant - ResendButtonText : envoyer à nouveau +EmailVerification: + Title: Vérification de l'email + Description: Nous vous avons envoyé un e-mail pour vérifier votre adresse. Veuillez saisir le code dans le formulaire ci-dessous. + CodeLabel: Code + NextButtonText: suivant + ResendButtonText: envoyer à nouveau -EmailVerificationDone : - Title : E-Mail Verification - Description : Votre adresse électronique a été vérifiée avec succès. - NextButtonText : suivant - CancelButtonText : annuler - LoginButtonText : connexion - -RegisterOption : - Title : Options d'enregistrement - Description : Choisissez comment vous souhaitez vous enregistrer - RegisterUsernamePasswordButtonText: Avec nom d'utilisateur et mot de passe - ExternalLoginDescription : ou s'enregistrer avec un utilisateur externe +EmailVerificationDone: + Title: E-Mail Verification + Description: Votre adresse électronique a été vérifiée avec succès. + NextButtonText: suivant + CancelButtonText: annuler + LoginButtonText: connexion +RegisterOption: + Title: Options d'enregistrement + Description: Choisissez comment vous souhaitez vous enregistrer + RegisterUsernamePasswordButtonText: Avec nom d'utilisateur et mot de passe + ExternalLoginDescription: ou s'enregistrer avec un utilisateur externe RegistrationUser: - Title : Inscription - Description : Entrez vos données d'utilisateur. Votre adresse e-mail sera utilisée comme nom de connexion. - DescriptionOrgRegister : Entrez vos données d'utilisateur. - EmailLabel : E-Mail - UsernameLabel : Username - FirstnameLabel : Firstname - LastnameLabel : Nom de famille - LangueLabel : Language : Langue - German : Deutsch - English : English - Italian : Italiano - GenderLabel : Genre - Female : Femme - Male : Homme - Diverse : divers / X - PasswordLabel : Mot de passe - PasswordConfirmLabel : Confirmation du mot de passe - TosAndPrivacyLabel : Termes et conditions - TosConfirm : J'accepte les - TosLinkText : TOS - TosConfirmAnd : et la - PrivacyLinkText : politique de confidentialité - ExternalLogin : ou m'inscrire avec un utilisateur externe - BackButtonText : retour - NextButtonText : suivant - + Title: Inscription + Description: Entrez vos données d'utilisateur. Votre adresse e-mail sera utilisée comme nom de connexion. + DescriptionOrgRegister: Entrez vos données d'utilisateur. + EmailLabel: E-Mail + UsernameLabel: Identifiant + FirstnameLabel: Prénom + LastnameLabel: Nom de famille + LanguageLabel: Langue + German: Deutsch + English: English + Italian: Italiano + French: Français + GenderLabel: Genre + Female: Femme + Male: Homme + Diverse: divers / X + PasswordLabel: Mot de passe + PasswordConfirmLabel: Confirmation du mot de passe + TosAndPrivacyLabel: Termes et conditions + TosConfirm: J'accepte les + TosLinkText: TOS + TosConfirmAnd: et la + PrivacyLinkText: politique de confidentialité + ExternalLogin: ou m'inscrire avec un utilisateur externe + BackButtonText: retour + NextButtonText: suivant ExternalRegistrationUserOverview: - Title : Enregistrement des utilisateurs externes - Description : Nous avons pris vos coordonnées d'utilisateur auprès du fournisseur sélectionné. Vous pouvez maintenant les modifier ou les compléter. - EmailLabel : E-Mail - UsernameLabel : Identifiant - FirstnameLabel : Prénom - LastnameLabel : Nom - NicknameLabel : Surnom - PhoneLabel : Numéro de téléphone - LangueLabel : Language : Langue - German : Deutsch - English : English - Italian : Italiano - TosAndPrivacyLabel : Termes et conditions - TosConfirm : J'accepte les - TosLinkText : TOS - TosConfirmAnd : et la - PrivacyLinkText : politique de confidentialité - ExternalLogin : ou m'inscrire avec un utilisateur externe - BackButtonText : retour - NextButtonText : enregistrer + Title: Enregistrement des utilisateurs externes + Description: Nous avons pris vos coordonnées d'utilisateur auprès du fournisseur sélectionné. Vous pouvez maintenant les modifier ou les compléter. + EmailLabel: E-Mail + UsernameLabel: Identifiant + FirstnameLabel: Prénom + LastnameLabel: Nom de famille + NicknameLabel: Surnom + PhoneLabel: Numéro de téléphone + LanguageLabel: Langue + German: Deutsch + English: English + Italian: Italiano + French: Français + TosAndPrivacyLabel: Termes et conditions + TosConfirm: J'accepte les + TosLinkText: TOS + TosConfirmAnd: et la + PrivacyLinkText: politique de confidentialité + ExternalLogin: ou m'inscrire avec un utilisateur externe + BackButtonText: retour + NextButtonText: enregistrer RegistrationOrg: - Title : Enregistrement de l'organisation - Description : Entrez le nom de votre organisation et vos données d'utilisateur. - OrgNameLabel : Nom de l'organisation - EmailLabel : E-Mail - UsernameLabel : Nom d'utilisateur - FirstnameLabel : Prénom - LastnameLabel : Nom de famille - PasswordLabel : Password : Mot de passe - PasswordConfirmLabel : Confirmation du mot de passe - TosAndPrivacyLabel : Termes et conditions - TosConfirm : J'accepte les - TosLinkText : TOS - TosConfirmAnd : et la - PrivacyLinkText : politique de confidentialité - SaveButtonText : Créer une organisation + Title: Enregistrement de l'organisation + Description: Entrez le nom de votre organisation et vos données d'utilisateur. + OrgNameLabel: Nom de l'organisation + EmailLabel: E-Mail + UsernameLabel: Nom d'utilisateur + FirstnameLabel: Prénom + LastnameLabel: Nom de famille + PasswordLabel: Mot de passe + PasswordConfirmLabel: Confirmation du mot de passe + TosAndPrivacyLabel: Termes et conditions + TosConfirm: J'accepte les + TosLinkText: TOS + TosConfirmAnd: et la + PrivacyLinkText: politique de confidentialité + SaveButtonText: Créer une organisation LoginSuccess: - Title : Connexion réussie - AutoRedirectDescription : Vous serez automatiquement redirigé vers votre application. Si ce n'est pas le cas, cliquez sur le bouton ci-dessous. Vous pouvez ensuite fermer la fenêtre. - RedirectedDescription : Vous pouvez maintenant fermer cette fenêtre. - NextButtonText : suivant + Title: Connexion réussie + AutoRedirectDescription: Vous serez automatiquement redirigé vers votre application. Si ce n'est pas le cas, cliquez sur le bouton ci-dessous. Vous pouvez ensuite fermer la fenêtre. + RedirectedDescription: Vous pouvez maintenant fermer cette fenêtre. + NextButtonText: suivant LogoutDone: - Title : Déconnecté - Description : Vous vous êtes déconnecté avec succès. - LoginButtonText : connexion + Title: Déconnecté + Description: Vous vous êtes déconnecté avec succès. + LoginButtonText: connexion LinkingUsersDone: - Title : Userlinking - Description : Le lien avec l'utilisateur est terminé. - CancelButtonText : annuler - NextButtonText : suivant + Title: Userlinking + Description: Le lien avec l'utilisateur est terminé. + CancelButtonText: annuler + NextButtonText: suivant ExternalNotFoundOption: - Title : Utilisateur externe - Description : Utilisateur externe non trouvé. Voulez-vous lier votre utilisateur ou enregistrer automatiquement un nouvel utilisateur. - LinkButtonText : Lier - AutoRegisterButtonText : enregistrer - TosAndPrivacyLabel : Termes et conditions - TosConfirm : J'accepte les - TosLinkText : TOS - TosConfirmAnd : et la - PrivacyLinkText : politique de confidentialité - Allemand : Deutsch - English : English - Italian : Italiano + Title: Utilisateur externe + Description: Utilisateur externe non trouvé. Voulez-vous lier votre utilisateur ou enregistrer automatiquement un nouvel utilisateur. + LinkButtonText: Lier + AutoRegisterButtonText: enregistrer + TosAndPrivacyLabel: Termes et conditions + TosConfirm: J'accepte les + TosLinkText: TOS + TosConfirmAnd: et la + PrivacyLinkText: politique de confidentialité + German: Deutsch + English: English + Italian: Italiano + French: Français Footer: PoweredBy: Promulgué par @@ -301,45 +303,45 @@ Footer: Help: Aide Errors: -Internal : Une erreur interne s'est produite - AuthRequest : - NotFound : Impossible de trouver l'authrequest - UserAgentNotCorresponding : L'agent utilisateur ne correspond pas - UserAgentNotFound : L'ID de l'agent utilisateur n'a pas été trouvé - TokenNotFound : Token non trouvé - RequestTypeNotSupported : Le type de demande n'est pas pris en charge - MissingParameters : Paramètres requis manquants + Internal: Une erreur interne s'est produite + AuthRequest: + NotFound: Impossible de trouver l'authrequest + UserAgentNotCorresponding: L'agent utilisateur ne correspond pas + UserAgentNotFound: L'ID de l'agent utilisateur n'a pas été trouvé + TokenNotFound: Token non trouvé + RequestTypeNotSupported: Le type de demande n'est pas pris en charge + MissingParameters: Paramètres requis manquants User: - NotFound : L'utilisateur n'a pas pu être trouvé - Inactive : L'utilisateur est inactif - NotFoundOnOrg : L'utilisateur n'a pas été trouvé dans l'organisation choisie - NotAllowedOrg : L'utilisateur n'est pas membre de l'organisation requise - NotMatchingUserID : L'utilisateur et l'utilisateur dans l'authrequest ne correspondent pas. - UserIDMissing : UserID est vide - Invalide : Données utilisateur non valides - DomainNotAllowedAsUsername : Le domaine est déjà réservé et ne peut pas être utilisé. - NotAllowedToLink : L'utilisateur n'est pas autorisé à établir un lien avec un fournisseur de connexion externe + NotFound: L'utilisateur n'a pas pu être trouvé + Inactive: L'utilisateur est inactif + NotFoundOnOrg: L'utilisateur n'a pas été trouvé dans l'organisation choisie + NotAllowedOrg: L'utilisateur n'est pas membre de l'organisation requise + NotMatchingUserID: L'utilisateur et l'utilisateur dans l'authrequest ne correspondent pas. + UserIDMissing: UserID est vide + Invalid: Données utilisateur non valides + DomainNotAllowedAsUsername: Le domaine est déjà réservé et ne peut pas être utilisé. + NotAllowedToLink: L'utilisateur n'est pas autorisé à établir un lien avec un fournisseur de connexion externe Password: - ConfirmationWrong : La confirmation du mot de passe est erronée - Empty : Le mot de passe est vide - Invalid : Le mot de passe n'est pas valide - InvalidAndLocked : Le mot de passe n'est pas valide et l'utilisateur est verrouillé, contactez votre administrateur. + ConfirmationWrong: La confirmation du mot de passe est erronée + Empty: Le mot de passe est vide + Invalid: Le mot de passe n'est pas valide + InvalidAndLocked: Le mot de passe n'est pas valide et l'utilisateur est verrouillé, contactez votre administrateur. UsernameOrPassword: - Invalid : Le nom d'utilisateur ou le mot de passe n'est pas valide - PasswordComplexityPolicy : - NotFound : Politique de mot de passe non trouvée - MinLength : Le mot de passe est trop court - HasLower : Le mot de passe doit contenir une lettre minuscule - HasUpper : Le mot de passe doit contenir une lettre majuscule - HasNumber : Le mot de passe doit contenir un numéro - HasSymbol : Le mot de passe doit contenir un symbole + Invalid: Le nom d'utilisateur ou le mot de passe n'est pas valide + PasswordComplexityPolicy: + NotFound: Politique de mot de passe non trouvée + MinLength: Le mot de passe est trop court + HasLower: Le mot de passe doit contenir une lettre minuscule + HasUpper: Le mot de passe doit contenir une lettre majuscule + HasNumber: Le mot de passe doit contenir un numéro + HasSymbol: Le mot de passe doit contenir un symbole Code: - Expired : Le code est expiré - Invalid : Le code n'est pas valide - Empty : Le code est vide - CryptoCodeNil : Le code cryptographique est nul - NotFound : Impossible de trouver le code - GeneratorAlgNotSupported : Algorithme de générateur non pris en charge + Expired: Le code est expiré + Invalid: Le code n'est pas valide + Empty: Le code est vide + CryptoCodeNil: Le code cryptographique est nul + NotFound: Impossible de trouver le code + GeneratorAlgNotSupported: Algorithme de générateur non pris en charge EmailVerify: UserIDEmpty: L'ID utilisateur est vide ExternalData: @@ -347,22 +349,22 @@ Internal : Une erreur interne s'est produite MFA: NoProviders: Aucun fournisseur multifactoriel disponible OTP: - AlreadyReady : L'OTP multifactoriel (Mot de passe à usage unique) est déjà configuré. - NotExisting : OTP multifactoriel (Mot de passe à usage unique) n'existe pas. - InvalidCode : Code invalide - NotReady : Le système OTP multifactoriel (Mot de passe à usage unique) n'est pas prêt. + AlreadyReady: L'OTP multifactoriel (Mot de passe à usage unique) est déjà configuré. + NotExisting: OTP multifactoriel (Mot de passe à usage unique) n'existe pas. + InvalidCode: Code invalide + NotReady: Le système OTP multifactoriel (Mot de passe à usage unique) n'est pas prêt. Locked: L'utilisateur est verrouillé SomethingWentWrong: Il y a eu un problème NotActive: L'utilisateur est inactif ExternalIDP: - IDPTypeNotImplemented : Le type d'IDP n'est pas implémenté - NotAllowed : Le fournisseur de connexion externe n'est pas autorisé - IDPConfigIDEmpty : L'ID du fournisseur d'identité est vide - ExternalUserIDEmpty : L'ID de l'utilisateur externe est vide - UserDisplayNameEmpty : Le nom d'affichage de l'utilisateur est vide - NoExternalUserData : Aucune donnée d'utilisateur externe reçue - GrantRequired : Connexion impossible. L'utilisateur doit avoir au moins une subvention sur l'application. Veuillez contacter votre administrateur. - ProjectRequired : Connexion impossible. L'organisation de l'utilisateur doit être accordée au projet. Veuillez contacter votre administrateur. + IDPTypeNotImplemented: Le type d'IDP n'est pas implémenté + NotAllowed: Le fournisseur de connexion externe n'est pas autorisé + IDPConfigIDEmpty: L'ID du fournisseur d'identité est vide + ExternalUserIDEmpty: L'ID de l'utilisateur externe est vide + UserDisplayNameEmpty: Le nom d'affichage de l'utilisateur est vide + NoExternalUserData: Aucune donnée d'utilisateur externe reçue + GrantRequired: Connexion impossible. L'utilisateur doit avoir au moins une subvention sur l'application. Veuillez contacter votre administrateur. + ProjectRequired: Connexion impossible. L'organisation de l'utilisateur doit être accordée au projet. Veuillez contacter votre administrateur. IdentityProvider: InvalidConfig: La configuration du fournisseur d'identité n'est pas valide IAM: diff --git a/internal/api/ui/login/static/i18n/it.yaml b/internal/api/ui/login/static/i18n/it.yaml index d38a804148..16ad382267 100644 --- a/internal/api/ui/login/static/i18n/it.yaml +++ b/internal/api/ui/login/static/i18n/it.yaml @@ -208,6 +208,7 @@ RegistrationUser: German: Deutsch English: English Italian: Italiano + French: Français GenderLabel: Genere Female: Femminile Male: Maschile @@ -236,6 +237,7 @@ ExternalRegistrationUserOverview: German: Deutsch English: English Italian: Italiano + French: Français TosAndPrivacyLabel: Termini di servizio TosConfirm: Accetto i TosLinkText: Termini di servizio @@ -292,6 +294,7 @@ ExternalNotFoundOption: German: Deutsch English: English Italian: Italiano + French: Français Footer: PoweredBy: Alimentato da diff --git a/internal/api/ui/login/static/templates/external_not_found_option.html b/internal/api/ui/login/static/templates/external_not_found_option.html index 837d804f22..7c4c16b747 100644 --- a/internal/api/ui/login/static/templates/external_not_found_option.html +++ b/internal/api/ui/login/static/templates/external_not_found_option.html @@ -66,6 +66,8 @@ + diff --git a/internal/api/ui/login/static/templates/external_register_overview.html b/internal/api/ui/login/static/templates/external_register_overview.html index c572cd7e94..3ee0690f78 100644 --- a/internal/api/ui/login/static/templates/external_register_overview.html +++ b/internal/api/ui/login/static/templates/external_register_overview.html @@ -66,6 +66,8 @@ + diff --git a/internal/api/ui/login/static/templates/register.html b/internal/api/ui/login/static/templates/register.html index e905f68eeb..0c709aa34f 100644 --- a/internal/api/ui/login/static/templates/register.html +++ b/internal/api/ui/login/static/templates/register.html @@ -60,6 +60,8 @@ +
diff --git a/internal/i18n/i18n.go b/internal/i18n/i18n.go index a77f3a9dda..415197a53e 100644 --- a/internal/i18n/i18n.go +++ b/internal/i18n/i18n.go @@ -69,7 +69,7 @@ func newBundle(dir http.FileSystem, defaultLanguage language.Tag) (*i18n.Bundle, } for _, file := range files { if err := addFileFromFileSystemToBundle(dir, bundle, file); err != nil { - return nil, errors.ThrowNotFound(err, "I18N-ZS2AW", "cannot append file to Bundle") + return nil, errors.ThrowNotFoundf(err, "I18N-ZS2AW", "cannot append file %s to Bundle", file.Name()) } } return bundle, nil @@ -85,8 +85,8 @@ func addFileFromFileSystemToBundle(dir http.FileSystem, bundle *i18n.Bundle, fil if err != nil { return err } - bundle.MustParseMessageFileBytes(content, file.Name()) - return nil + _, err = bundle.ParseMessageFileBytes(content, file.Name()) + return err } func SupportedLanguages(dir http.FileSystem) ([]language.Tag, error) { diff --git a/internal/notification/static/i18n/fr.yaml b/internal/notification/static/i18n/fr.yaml index 80d6c1dd93..243ef64932 100644 --- a/internal/notification/static/i18n/fr.yaml +++ b/internal/notification/static/i18n/fr.yaml @@ -31,7 +31,7 @@ DomainClaimed: PreHeader: Modifier l'email / le nom d'utilisateur Subject: Le domaine a été réclamé Greeting: Bonjour {{.FirstName}} {{.LastName}}, - Text: Le domaine {{.Domaine}} a été revendiqué par une organisation. Votre utilisateur actuel {{.Username}} ne fait pas partie de cette organisation. Par conséquent, vous devrez changer votre adresse électronique lors de votre connexion. Nous avons créé un nom d'utilisateur temporaire ({{.TempUsername}}) pour cette connexion. + Text: Le domaine {{.Domain}} a été revendiqué par une organisation. Votre utilisateur actuel {{.Username}} ne fait pas partie de cette organisation. Par conséquent, vous devrez changer votre adresse électronique lors de votre connexion. Nous avons créé un nom d'utilisateur temporaire ({{.TempUsername}}) pour cette connexion. ButtonText: Connexion PasswordlessRegistration: Title: ZITADEL - Ajouter une connexion sans mot de passe diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index c4db789bec..e25aed47e9 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -94,7 +94,7 @@ Errors: NotAllowedToLink: Der Benutzer darf nicht mit einem externen Login Provider verlinkt werden Username: AlreadyExists: Benutzername ist bereits vergeben - Reservied: Benutzername ist bereits vergeben + Reserved: Benutzername ist bereits vergeben Code: Empty: Code ist leer NotFound: Code konnte nicht gefunden werden @@ -263,7 +263,6 @@ Errors: HasNotExistingRole: Eine der Rollen existiert nicht auf dem Projekt NotActive: Projekt Grant ist nicht aktiv NotInactive: Projekt Grant ist nicht inaktiv - UserIDMisisng: User ID fehlt IAM: Member: RolesNotChanged: Rollen wurden nicht verändert @@ -870,6 +869,7 @@ EventTypes: deactivated: Aktion deaktiviert reactivated: Aktion reaktiviert removed: Aktion gelöscht + Application: OIDC: UnsupportedVersion: Deine OIDC Version wird nicht unterstützt diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 3400a0ac2e..ebd1482ddb 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -94,7 +94,7 @@ Errors: NotAllowedToLink: User is not allowed to link with external login provider Username: AlreadyExists: Username already taken - Reservied: Username is already taken + Reserved: Username is already taken Code: Empty: Code is empty NotFound: Code not found @@ -263,7 +263,6 @@ Errors: HasNotExistingRole: One role doesn't exist on project NotActive: Project grant is not active NotInactive: Project grant is not inactive - UserIDMisisng: User ID missing IAM: Member: RolesNotChanged: Roles have not been changed @@ -786,7 +785,7 @@ EventTypes: changed: ZITADEL member changed removed: ZITADEL member removed cascade: - removeD: ZITADEL member cascade removed + removed: ZITADEL member cascade removed idp: config: added: IDP configuration added @@ -802,6 +801,9 @@ EventTypes: config: added: SAML IDP configuration added changed: SAML IDP configuration changed + customtext: + set: Text was set + removed: Text was removed policy: login: added: Default Login Policy added diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml index 1fe8fc24e4..3678cfe2ab 100644 --- a/internal/static/i18n/fr.yaml +++ b/internal/static/i18n/fr.yaml @@ -1,902 +1,874 @@ Errors: - Internal : Une erreur interne s'est produite - NoChangesFound : Aucun changement - OriginNotAllowed : Cette "Origine" n'est pas autorisée - IDMissing : ID manquant - ResourceOwnerMissing : Organisation du propriétaire de la ressource manquante - RemoveFailed : N'a pas pu être supprimé - ProjectionName : - Invalid : Nom de projection non valide + Internal: Une erreur interne s'est produite + NoChangesFound: Aucun changement + OriginNotAllowed: Cette "Origine" n'est pas autorisée + IDMissing: ID manquant + ResourceOwnerMissing: Organisation du propriétaire de la ressource manquante + RemoveFailed: N'a pas pu être supprimé + ProjectionName: + Invalid: Nom de projection non valide Assets: EmptyKey: La clé de l'actif est vide Store: - NotInitialized : Le stockage des actifs n'est pas initialisé - NotConfigured : Le stockage des actifs n'est pas configuré + NotInitialized: Le stockage des actifs n'est pas initialisé + NotConfigured: Le stockage des actifs n'est pas configuré Bucket: - Internal : Erreur interne lors de la création d'un bucket - AlreadyExists : Bucket déjà existant - CreateFailed : Bucket non créé - ListFailed : Les buckets n'ont pas pu être lus - RemoveFailed : Bucket non supprimé - SetPublicFailed : Impossible de définir le bucket comme public + Internal: Erreur interne lors de la création d'un bucket + AlreadyExists: Bucket déjà existant + CreateFailed: Bucket non créé + ListFailed: Les buckets n'ont pas pu être lus + RemoveFailed: Bucket non supprimé + SetPublicFailed: Impossible de définir le bucket comme public Object: - PutFailed : Objet non créé - GetFailed : L'objet n'a pas pu être lu - NotFound : L'objet n'a pas pu être trouvé - PresignedTokenFailed : Le jeton signé n'a pas pu être créé - ListFailed : Objectlist n'a pas pu être lu - RemoveFailed : L'objet n'a pas pu être retiré - Limit : - ExceedsDefault : La limite dépasse la limite par défaut - Language : - NotParsed : Impossible d'analyser la langue - OIDCSettings : - NotFound : Configuration OIDC non trouvée - AlreadyExists : La configuration OIDC existe déjà - SecretGenerator : - AlreadyExists : Le générateur de secrets existe déjà - TypeMissing : Type de générateur de secret manquant - NotFound : Générateur de secret non trouvé + PutFailed: Objet non créé + GetFailed: L'objet n'a pas pu être lu + NotFound: L'objet n'a pas pu être trouvé + PresignedTokenFailed: Le jeton signé n'a pas pu être créé + ListFailed: Objectlist n'a pas pu être lu + RemoveFailed: L'objet n'a pas pu être retiré + Limit: + ExceedsDefault: La limite dépasse la limite par défaut + Language: + NotParsed: Impossible d'analyser la langue + OIDCSettings: + NotFound: Configuration OIDC non trouvée + AlreadyExists: La configuration OIDC existe déjà + SecretGenerator: + AlreadyExists: Le générateur de secrets existe déjà + TypeMissing: Type de générateur de secret manquant + NotFound: Générateur de secret non trouvé SMSConfig: - NotFound : Configuration SMS non trouvée - AlreadyActive : Configuration SMS déjà active - AlreadyDeactivated : Configuration SMS déjà désactivée - SMTPConfig : - NotFound : Configuration SMTP non trouvée - AlreadyExists : La configuration SMTP existe déjà - SenderAdressNotCustomDomain : L'adresse de l'expéditeur doit être configurée comme un domaine personnalisé sur l'instance. - Notification : - NoDomain : Aucun domaine trouvé pour le message - User : - NotFound : L'utilisateur n'a pas été trouvé - AlreadyExists : L'utilisateur existe déjà - NotFoundOnOrg : L'utilisateur n'a pas été trouvé dans l'organisation choisie - NotAllowedOrg : L'utilisateur n'est pas membre de l'organisation requise - UserIDMissing : L'ID de l'utilisateur est manquant - DomainPolicyNil : La politique de l'organisation est vide - EmailAsUsernameNotAllowed : L'email n'est pas autorisé comme nom d'utilisateur - Invalid : Les données de l'utilisateur ne sont pas valides - DomainNotAllowedAsUsername : Le domaine est déjà réservé et ne peut être utilisé. - AlreadyInactive : L'utilisateur est déjà inactif - NotInactive : L'utilisateur n'est pas inactif - CantDeactivateInitial : L'utilisateur avec l'état initial peut seulement être supprimé, pas désactivé. - ShouldBeActiveOrInitial : L'utilisateur n'est pas actif ou initial - AlreadyInitialised : L'utilisateur est déjà initialisé - NotInitialised : L'utilisateur n'est pas encore initialisé - NotLocked : L'utilisateur n'est pas verrouillé - NoChanges : Aucun changement trouvé - InitCodeNotFound : Code d'initialisation non trouvé - UsernameNotChanged : Nom d'utilisateur non modifié - Profile : - NotFound : Profil non trouvé - NotChanged : Le profil n'a pas changé - Invalid : Données de profil non valides - Email : - NotFound : Email non trouvé - Invalide : L'email n'est pas valide - AlreadyVerified : L'adresse électronique est déjà vérifiée - NotChanged : L'adresse électronique n'a pas changé - Phone : - Notfound : Téléphone non trouvé -Invalid : Le téléphone n'est pas valide - AlreadyVerified : Téléphone déjà vérifié - Adress : - NotFound : Adresse non trouvée - NotChanged : L'adresse n'a pas changé - Machine : - Key : - NotFound : Clé de la machine non trouvée - PAT : - NotFound : Token d'accès personnel non trouvé - NotHuman : L'utilisateur doit être personnel - NotMachine : L'utilisateur doit être technique - WrongType : Non autorisé pour ce type d'utilisateur - NotAllowedToLink : L'utilisateur n'est pas autorisé à établir un lien avec un fournisseur de connexion externe. - Username : - AlreadyExists : Nom d'utilisateur déjà pris - Reservied : Le nom d'utilisateur est déjà pris - Code : - Empty : Le code est vide - NotFound : Code non trouvé - Expired : Le code est expiré - GeneratorAlgNotSupported : Algorithme de générateur non pris en charge - Password : - NotFound : Mot de passe non trouvé - Empty : Le mot de passe est vide - Invalid : Le mot de passe n'est pas valide - NotSet : L'utilisateur n'a pas défini de mot de passe - PasswordComplexityPolicy : - NotFound : Politique de mot de passe non trouvée - MinLength : Le mot de passe est trop court - MinLengthNotAllowed : La longueur minimale indiquée n'est pas autorisée - HasLower : Le mot de passe doit contenir des minuscules - HasUpper : Le mot de passe doit contenir des majuscules - HasNumber : Le mot de passe doit contenir un numéro - HasSymbol : Le mot de passe doit contenir un symbole + NotFound: Configuration SMS non trouvée + AlreadyActive: Configuration SMS déjà active + AlreadyDeactivated: Configuration SMS déjà désactivée + SMTPConfig: + NotFound: Configuration SMTP non trouvée + AlreadyExists: La configuration SMTP existe déjà + SenderAdressNotCustomDomain: L'adresse de l'expéditeur doit être configurée comme un domaine personnalisé sur l'instance. + Notification: + NoDomain: Aucun domaine trouvé pour le message + User: + NotFound: L'utilisateur n'a pas été trouvé + AlreadyExists: L'utilisateur existe déjà + NotFoundOnOrg: L'utilisateur n'a pas été trouvé dans l'organisation choisie + NotAllowedOrg: L'utilisateur n'est pas membre de l'organisation requise + UserIDMissing: L'ID de l'utilisateur est manquant + DomainPolicyNil: La politique de l'organisation est vide + EmailAsUsernameNotAllowed: L'email n'est pas autorisé comme nom d'utilisateur + Invalid: Les données de l'utilisateur ne sont pas valides + DomainNotAllowedAsUsername: Le domaine est déjà réservé et ne peut être utilisé. + AlreadyInactive: L'utilisateur est déjà inactif + NotInactive: L'utilisateur n'est pas inactif + CantDeactivateInitial: L'utilisateur avec l'état initial peut seulement être supprimé, pas désactivé. + ShouldBeActiveOrInitial: L'utilisateur n'est pas actif ou initial + AlreadyInitialised: L'utilisateur est déjà initialisé + NotInitialised: L'utilisateur n'est pas encore initialisé + NotLocked: L'utilisateur n'est pas verrouillé + NoChanges: Aucun changement trouvé + InitCodeNotFound: Code d'initialisation non trouvé + UsernameNotChanged: Nom d'utilisateur non modifié + Profile: + NotFound: Profil non trouvé + NotChanged: Le profil n'a pas changé + Invalid: Données de profil non valides + Email: + NotFound: Email non trouvé + Invalid: L'email n'est pas valide + AlreadyVerified: L'adresse électronique est déjà vérifiée + NotChanged: L'adresse électronique n'a pas changé + Phone: + Notfound: Téléphone non trouvé + Invalid: Le téléphone n'est pas valide + AlreadyVerified: Téléphone déjà vérifié + Address: + NotFound: Adresse non trouvée + NotChanged: L'adresse n'a pas changé + Machine: + Key: + NotFound: Clé de la machine non trouvée + PAT: + NotFound: Token d'accès personnel non trouvé + NotHuman: L'utilisateur doit être personnel + NotMachine: L'utilisateur doit être technique + WrongType: Non autorisé pour ce type d'utilisateur + NotAllowedToLink: L'utilisateur n'est pas autorisé à établir un lien avec un fournisseur de connexion externe. + Username: + AlreadyExists: Nom d'utilisateur déjà pris + Reserved: Le nom d'utilisateur est déjà pris + Code: + Empty: Le code est vide + NotFound: Code non trouvé + Expired: Le code est expiré + GeneratorAlgNotSupported: Algorithme de générateur non pris en charge + Password: + NotFound: Mot de passe non trouvé + Empty: Le mot de passe est vide + Invalid: Le mot de passe n'est pas valide + NotSet: L'utilisateur n'a pas défini de mot de passe + PasswordComplexityPolicy: + NotFound: Politique de mot de passe non trouvée + MinLength: Le mot de passe est trop court + MinLengthNotAllowed: La longueur minimale indiquée n'est pas autorisée + HasLower: Le mot de passe doit contenir des minuscules + HasUpper: Le mot de passe doit contenir des majuscules + HasNumber: Le mot de passe doit contenir un numéro + HasSymbol: Le mot de passe doit contenir un symbole ExternalIDP: Invalid: IDP Externer invalide - IDPConfigNotExisting : Le fournisseur IDP n'est pas valide pour cette organisation - NotAllowed : IDP externe non autorisé pour cette organisation - MinimumExternalIDPNeeded : Au moins un IDP doit être ajouté - AlreadyExists : External IDP déjà pris - NotFound : IDP externe non trouvé - MFA : - OTP : - AlreadyReady : L'OTP (mot de passe à usage unique) multifactoriel est déjà configuré. - NotExisting : OTP multifactoriel (mot de passe à usage unique) n'existe pas. - NotReady : OTP multifactoriel (mot de passe à usage unique) n'est pas prêt. - InvalidCode : Code invalide - U2F : - NotExisting : L'U2F n'existe pas - Sans mot de passe : - NotExisting : Passwordless n'existe pas - WebAuthN : - NotFound : Le token WebAuthN n'a pas été trouvé - BeginRegisterFailed : L'enregistrement de WebAuthN a échoué - MarshalError : Erreur sur les données marshal - ErrorOnParseCredential : Erreur lors de l'analyse des données d'identification - CreateCredentialFailed : Erreur lors de la création d'informations d'identification - BeginLoginFailed : Echec de la connexion WebAuthN - ValidateLoginFailed : Erreur lors de la validation des informations d'identification - CloneWarning : Les informations d'identification peuvent être clonées - RefreshToken : - Invalid : Le jeton de rafraîchissement n'est pas valide - NotFound : Jeton de rafraîchissement non trouvé + IDPConfigNotExisting: Le fournisseur IDP n'est pas valide pour cette organisation + NotAllowed: IDP externe non autorisé pour cette organisation + MinimumExternalIDPNeeded: Au moins un IDP doit être ajouté + AlreadyExists: External IDP déjà pris + NotFound: IDP externe non trouvé + MFA: + OTP: + AlreadyReady: L'OTP (mot de passe à usage unique) multifactoriel est déjà configuré. + NotExisting: OTP multifactoriel (mot de passe à usage unique) n'existe pas. + NotReady: OTP multifactoriel (mot de passe à usage unique) n'est pas prêt. + InvalidCode: Code invalide + U2F: + NotExisting: L'U2F n'existe pas + Passwordless: + NotExisting: Passwordless n'existe pas + WebAuthN: + NotFound: Le token WebAuthN n'a pas été trouvé + BeginRegisterFailed: L'enregistrement de WebAuthN a échoué + MarshalError: Erreur sur les données marshal + ErrorOnParseCredential: Erreur lors de l'analyse des données d'identification + CreateCredentialFailed: Erreur lors de la création d'informations d'identification + BeginLoginFailed: Echec de la connexion WebAuthN + ValidateLoginFailed: Erreur lors de la validation des informations d'identification + CloneWarning: Les informations d'identification peuvent être clonées + RefreshToken: + Invalid: Le jeton de rafraîchissement n'est pas valide + NotFound: Jeton de rafraîchissement non trouvé Org: - AlreadyExists : Le nom de l'organisation est déjà pris - Invalid : L'organisation n'est pas valide - AlreadyDeactivated : L'organisation est déjà désactivée - AlreadyActive : L'organisation est déjà active - Empty : L'organisation est vide - NotFound : Organisation non trouvée - NotChanged : L'organisation n'a pas changé - InvalidDomain : Domaine non valide - DomainMissing : Domaine manquant - DomainNotOnOrg : Le domaine n'existe pas dans l'organisation - DomainNotVerified : Le domaine n'est pas vérifié - DomainAlreadyVerified : Le domaine est déjà vérifié - DomainVerificationTypeInvalid : Le type de vérification du domaine n'est pas valide - DomainVerificationMissing : La vérification du domaine n'a pas encore commencé - DomainVerificationFailed : La vérification du domaine a échoué - PrimaryDomainNotDeletable : Le domaine primaire ne doit pas être supprimé - DomainNotFound : Domaine non trouvé - MemberIDMissing : ID du membre manquant - MemberNotFound : Membre de l'organisation non trouvé - InvalidMember : Le membre de l'organisation n'est pas valide - UserIDMissing : ID utilisateur manquant - PolicyAlreadyExists : La politique existe déjà - PolicyNotExisting : La politique n'existe pas - IdpInvalid : La configuration IDP n'est pas valide - IdpNotExisting : La configuration IDP n'existe pas - OIDCConfigInvalid : La configuration IDP de l'OIDC n'est pas valide - IdpIsNotOIDC : La configuration IDP n'est pas de type oidc + AlreadyExists: Le nom de l'organisation est déjà pris + Invalid: L'organisation n'est pas valide + AlreadyDeactivated: L'organisation est déjà désactivée + AlreadyActive: L'organisation est déjà active + Empty: L'organisation est vide + NotFound: Organisation non trouvée + NotChanged: L'organisation n'a pas changé + InvalidDomain: Domaine non valide + DomainMissing: Domaine manquant + DomainNotOnOrg: Le domaine n'existe pas dans l'organisation + DomainNotVerified: Le domaine n'est pas vérifié + DomainAlreadyVerified: Le domaine est déjà vérifié + DomainVerificationTypeInvalid: Le type de vérification du domaine n'est pas valide + DomainVerificationMissing: La vérification du domaine n'a pas encore commencé + DomainVerificationFailed: La vérification du domaine a échoué + PrimaryDomainNotDeletable: Le domaine primaire ne doit pas être supprimé + DomainNotFound: Domaine non trouvé + MemberIDMissing: ID du membre manquant + MemberNotFound: Membre de l'organisation non trouvé + InvalidMember: Le membre de l'organisation n'est pas valide + UserIDMissing: ID utilisateur manquant + PolicyAlreadyExists: La politique existe déjà + PolicyNotExisting: La politique n'existe pas + IdpInvalid: La configuration IDP n'est pas valide + IdpNotExisting: La configuration IDP n'existe pas + OIDCConfigInvalid: La configuration IDP de l'OIDC n'est pas valide + IdpIsNotOIDC: La configuration IDP n'est pas de type oidc Domain: AlreadyExists: Le domaine existe déjà IDP: -InvalidSearchQuery : Paramètre de recherche non valide - LoginPolicy : - NotFound : Politique de connexion non trouvée - Invalid : La politique de connexion n'est pas valide - RedirectURIInvalid : L'URI de redirection par défaut n'est pas valide - NotExisting : La politique de connexion n'existe pas - AlreadyExists : La politique de connexion existe déjà - IdpProviderAlreadyExisting : Idp Provider existe déjà - IdpProviderNotExisting : Idp Provider non existant - RegistrationNotAllowed : L'enregistrement n'est pas autorisé - UsernamePasswordNotAllowed : La connexion avec le nom d'utilisateur et le mot de passe n'est pas autorisée + InvalidSearchQuery: Paramètre de recherche non valide + LoginPolicy: + NotFound: Politique de connexion non trouvée + Invalid: La politique de connexion n'est pas valide + RedirectURIInvalid: L'URI de redirection par défaut n'est pas valide + NotExisting: La politique de connexion n'existe pas + AlreadyExists: La politique de connexion existe déjà + IdpProviderAlreadyExisting: Idp Provider existe déjà + IdpProviderNotExisting: Idp Provider non existant + RegistrationNotAllowed: L'enregistrement n'est pas autorisé + UsernamePasswordNotAllowed: La connexion avec le nom d'utilisateur et le mot de passe n'est pas autorisée MFA: - AlreadyExists : Le multifacteur existe déjà - NotExisting : Multifacteur non existant - Non spécifié : Multifacteur non valide - MailTemplate : - NotFound : Default Mail Template not found - NotChanged : Default Mail Template n'a pas été modifié - AlreadyExists : Default Mail Template existe déjà - Invalid : Le modèle de courrier par défaut n'est pas valide - CustomMessageText : - NotFound : Le texte du message par défaut n'a pas été trouvé - NotChanged : Le texte du message par défaut n'a pas été modifié - AlreadyExists : Le texte du message par défaut existe déjà - Invalid : Le texte du message par défaut n'est pas valide - PasswordComplexityPolicy : - NotFound : Politique de complexité des mots de passe non trouvée - Empty : La politique de complexité des mots de passe est vide - NotExisting : La politique de complexité des mots de passe n'existe pas - AlreadyExists : La politique de complexité des mots de passe existe déjà - PasswordLockoutPolicy : - NotFound : La politique de verrouillage du mot de passe n'a pas été trouvée - Empty : La politique de verrouillage des mots de passe est vide - NotExisting : La politique de verrouillage du mot de passe n'existe pas - AlreadyExists : La politique de verrouillage du mot de passe existe déjà - PasswordAgePolicy : - NotFound : La politique d'âge du mot de passe n'a pas été trouvée - Empty : La politique d'âge du mot de passe est vide - NotExisting : La politique d'âge des mots de passe n'existe pas - AlreadyExists : La politique relative à l'âge du mot de passe existe déjà + AlreadyExists: Le multifacteur existe déjà + NotExisting: Multifacteur non existant + Unspecified: Multifacteur non valide + MailTemplate: + NotFound: Default Mail Template not found + NotChanged: Default Mail Template n'a pas été modifié + AlreadyExists: Default Mail Template existe déjà + Invalid: Le modèle de courrier par défaut n'est pas valide + CustomMessageText: + NotFound: Le texte du message par défaut n'a pas été trouvé + NotChanged: Le texte du message par défaut n'a pas été modifié + AlreadyExists: Le texte du message par défaut existe déjà + Invalid: Le texte du message par défaut n'est pas valide + PasswordComplexityPolicy: + NotFound: Politique de complexité des mots de passe non trouvée + Empty: La politique de complexité des mots de passe est vide + NotExisting: La politique de complexité des mots de passe n'existe pas + AlreadyExists: La politique de complexité des mots de passe existe déjà + PasswordLockoutPolicy: + NotFound: La politique de verrouillage du mot de passe n'a pas été trouvée + Empty: La politique de verrouillage des mots de passe est vide + NotExisting: La politique de verrouillage du mot de passe n'existe pas + AlreadyExists: La politique de verrouillage du mot de passe existe déjà + PasswordAgePolicy: + NotFound: La politique d'âge du mot de passe n'a pas été trouvée + Empty: La politique d'âge du mot de passe est vide + NotExisting: La politique d'âge des mots de passe n'existe pas + AlreadyExists: La politique relative à l'âge du mot de passe existe déjà OrgIAMPolicy: - Empty : La politique IAM d'Org est vide - NotExisting : La politique Org IAM n'existe pas - AlreadyExists : La politique IAM d'Org existe déjà - Project : - ProjectIDMissing : Id de projet manquant - AlreadyExists : Le projet existe déjà dans l'organisation - OrgNotExisting : L'organisation n'existe pas - UserNotExisting : L'utilisateur n'existe pas - CouldNotGenerateClientSecret : Impossible de générer le secret du client. - Invalid : Le projet n'est pas valide - NotActive : Le projet n'est pas actif - NotInactive : Le projet n'est pas désactivé - NotFound : Projet non trouvé - UserIDMissing : ID utilisateur manquant + Empty: La politique IAM d'Org est vide + NotExisting: La politique Org IAM n'existe pas + AlreadyExists: La politique IAM d'Org existe déjà + Project: + ProjectIDMissing: Id de projet manquant + AlreadyExists: Le projet existe déjà dans l'organisation + OrgNotExisting: L'organisation n'existe pas + UserNotExisting: L'utilisateur n'existe pas + CouldNotGenerateClientSecret: Impossible de générer le secret du client. + Invalid: Le projet n'est pas valide + NotActive: Le projet n'est pas actif + NotInactive: Le projet n'est pas désactivé + NotFound: Projet non trouvé + UserIDMissing: ID utilisateur manquant Member: - Notfound : Membre du projet non trouvé - Invalide : Le membre du projet n'est pas valide - AlreadyExists : Le membre du projet existe déjà - NotExisting : Le membre du projet n'existe pas - MinimumOneRoleNeeded : Au moins un rôle doit être ajouté - Role : - AlreadyExists : Le rôle existe déjà - Invalide : Le rôle n'est pas valide - NotExisting : Le rôle n'existe pas - IDMissing : ID manquant - App : - AlreadyExists : L'application existe déjà - NotFound : Application non trouvée - Invalid : Application invalide - NotExisting : L'application n'existe pas - NotActive : L'application n'est pas active - NotInactive : L'application n'est pas inactive - OIDCConfigInvalid : La configuration de l'OIDC n'est pas valide - APIConfigInvalid : La configuration de l'API n'est pas valide - IsNotOIDC : L'application n'est pas de type oidc - IsNotAPI : L'application n'est pas de type API - OIDCAuthMethodNoSecret : La méthode d'authentification OIDC choisie ne nécessite pas de secret. - APIAuthMethodNoSecret : La méthode d'authentification API choisie ne nécessite pas de secret. - AuthMethodNoPrivateKeyJWT : La méthode d'authentification choisie ne nécessite pas de clé. - ClientSecretInvalid : Le secret du client n'est pas valide - RequiredFieldsMissing : Certains champs obligatoires sont manquants - Grant : - AlreadyExists : La subvention du projet existe déjà - NotFound : Subvention non trouvée - Invalide : La subvention du projet n'est pas valide - NotExisting : La subvention de projet n'existe pas - HasNotExistingRole : Un rôle n'existe pas sur le projet - NotActive : La subvention de projet n'est pas active - NotInactive : La subvention du projet n'est pas inactive - UserIDMisisng : ID utilisateur manquant + Notfound: Membre du projet non trouvé + Invalid: Le membre du projet n'est pas valide + AlreadyExists: Le membre du projet existe déjà + NotExisting: Le membre du projet n'existe pas + MinimumOneRoleNeeded: Au moins un rôle doit être ajouté + Role: + AlreadyExists: Le rôle existe déjà + Invalid: Le rôle n'est pas valide + NotExisting: Le rôle n'existe pas + IDMissing: ID manquant + App: + AlreadyExists: L'application existe déjà + NotFound: Application non trouvée + Invalid: Application invalide + NotExisting: L'application n'existe pas + NotActive: L'application n'est pas active + NotInactive: L'application n'est pas inactive + OIDCConfigInvalid: La configuration de l'OIDC n'est pas valide + APIConfigInvalid: La configuration de l'API n'est pas valide + IsNotOIDC: L'application n'est pas de type oidc + IsNotAPI: L'application n'est pas de type API + OIDCAuthMethodNoSecret: La méthode d'authentification OIDC choisie ne nécessite pas de secret. + APIAuthMethodNoSecret: La méthode d'authentification API choisie ne nécessite pas de secret. + AuthMethodNoPrivateKeyJWT: La méthode d'authentification choisie ne nécessite pas de clé. + ClientSecretInvalid: Le secret du client n'est pas valide + RequiredFieldsMissing: Certains champs obligatoires sont manquants + Grant: + AlreadyExists: La subvention du projet existe déjà + NotFound: Subvention non trouvée + Invalid: La subvention du projet n'est pas valide + NotExisting: La subvention de projet n'existe pas + HasNotExistingRole: Un rôle n'existe pas sur le projet + NotActive: La subvention de projet n'est pas active + NotInactive: La subvention du projet n'est pas inactive IAM: Member: - RolesNotChanged : Les rôles n'ont pas été modifiés - MemberInvalid : Le membre n'est pas valide - MemberAlreadyExisting : Le membre existe déjà - MemberNotExisting : Le membre n'existe pas - IDMissing : Id manquant - IAMProjectIDMissing : Id de projet IAM manquant - IamProjectAlreadySet : L'identifiant du projet IAM a déjà été défini - IdpInvalid : La configuration IDP n'est pas valide - IdpNotExisting : La configuration IDP n'existe pas - OIDCConfigInvalid : La configuration IDP de l'OIDC n'est pas valide - IdpIsNotOIDC : La configuration IDP n'est pas de type oidc - LoginPolicyInvalid : La politique de connexion n'est pas valide - LoginPolicyNotExisting : La politique de connexion n'existe pas - IdpProviderInvalid : Idp Provider est invalide - LoginPolicy : - NotFound : La politique de connexion par défaut n'a pas été trouvée - NotChanged : La politique de connexion par défaut n'a pas été modifiée - NotExisting : La politique de connexion par défaut n'existe pas - AlreadyExists : La politique de connexion par défaut existe déjà - RedirectURIInvalid : L'URI de redirection par défaut n'est pas valide + RolesNotChanged: Les rôles n'ont pas été modifiés + MemberInvalid: Le membre n'est pas valide + MemberAlreadyExisting: Le membre existe déjà + MemberNotExisting: Le membre n'existe pas + IDMissing: Id manquant + IAMProjectIDMissing: Id de projet IAM manquant + IamProjectAlreadySet: L'identifiant du projet IAM a déjà été défini + IdpInvalid: La configuration IDP n'est pas valide + IdpNotExisting: La configuration IDP n'existe pas + OIDCConfigInvalid: La configuration IDP de l'OIDC n'est pas valide + IdpIsNotOIDC: La configuration IDP n'est pas de type oidc + LoginPolicyInvalid: La politique de connexion n'est pas valide + LoginPolicyNotExisting: La politique de connexion n'existe pas + IdpProviderInvalid: Idp Provider est invalide + LoginPolicy: + NotFound: La politique de connexion par défaut n'a pas été trouvée + NotChanged: La politique de connexion par défaut n'a pas été modifiée + NotExisting: La politique de connexion par défaut n'existe pas + AlreadyExists: La politique de connexion par défaut existe déjà + RedirectURIInvalid: L'URI de redirection par défaut n'est pas valide MFA: - AlreadyExists : Le multifacteur existe déjà - NotExisting : Multifacteur non existant - Non spécifié : Multifacteur invalide - IDP : - AlreadyExists : Le fournisseur d'identité existe déjà - NotExisting : Le fournisseur d'identité n'existe pas - Invalid : Le fournisseur d'identité n'est pas valide - IDPConfig : - AlreadyExists : La configuration du fournisseur d'identité existe déjà - NotInactive : La configuration du fournisseur d'identité n'est pas inactive - NotActive : La configuration du fournisseur d'identité n'est pas active - LabelPolicy : - NotFound : Politique d'étiquetage privé par défaut non trouvée - NotChanged : La politique de label privé par défaut n'a pas été modifiée - MailTemplate : - NotFound : Default Mail Template not found - NotChanged : Le modèle de courrier par défaut n'a pas été modifié - AlreadyExists : Default Mail Template existe déjà - Invalid : Le modèle de courrier par défaut n'est pas valide - CustomMessageText : - NotFound : Le texte du message par défaut n'a pas été trouvé - NotChanged : Le texte du message par défaut n'a pas été modifié - AlreadyExists : Le texte du message par défaut existe déjà - Invalid : Le texte du message par défaut n'est pas valide - PasswordComplexityPolicy : - NotFound : Politique de complexité des mots de passe par défaut non trouvée - NotExisting : La politique de complexité des mots de passe par défaut n'existe pas - AlreadyExists : La politique de complexité des mots de passe par défaut existe déjà - Empty : Politique de complexité des mots de passe par défaut vide - NotChanged : La politique de complexité des mots de passe par défaut n'a pas été modifiée. - PasswordAgePolicy : - NotFound : La politique d'âge du mot de passe par défaut n'a pas été trouvée - NotExisting : La politique d'âge des mots de passe par défaut n'existe pas - AlreadyExists : La politique d'âge du mot de passe par défaut existe déjà - Empty : Politique d'âge des mots de passe par défaut vide - NotChanged : La politique d'âge du mot de passe par défaut n'a pas été modifiée - PasswordLockoutPolicy : - NotFound : La politique de verrouillage du mot de passe par défaut n'a pas été trouvée - NotExisting : La politique de verrouillage du mot de passe par défaut n'existe pas - AlreadyExists : La politique de verrouillage de mot de passe par défaut existe déjà - Empty : Politique de verrouillage par mot de passe par défaut vide - NotChanged : La politique de verrouillage par mot de passe par défaut n'a pas été modifiée. - DomainPolicy : - NotFound : Politique IAM Org non trouvée - Empty : La politique Org IAM est vide - NotExisting : La politique IAM d'Org n'existe pas - AlreadyExists : La politique IAM d'Org existe déjà - NotChanged : La politique IAM d'Org n'a pas été modifiée + AlreadyExists: Le multifacteur existe déjà + NotExisting: Multifacteur non existant + Unspecified: Multifacteur invalide + IDP: + AlreadyExists: Le fournisseur d'identité existe déjà + NotExisting: Le fournisseur d'identité n'existe pas + Invalid: Le fournisseur d'identité n'est pas valide + IDPConfig: + AlreadyExists: La configuration du fournisseur d'identité existe déjà + NotInactive: La configuration du fournisseur d'identité n'est pas inactive + NotActive: La configuration du fournisseur d'identité n'est pas active + LabelPolicy: + NotFound: Politique d'étiquetage privé par défaut non trouvée + NotChanged: La politique de label privé par défaut n'a pas été modifiée + MailTemplate: + NotFound: Default Mail Template not found + NotChanged: Le modèle de courrier par défaut n'a pas été modifié + AlreadyExists: Default Mail Template existe déjà + Invalid: Le modèle de courrier par défaut n'est pas valide + CustomMessageText: + NotFound: Le texte du message par défaut n'a pas été trouvé + NotChanged: Le texte du message par défaut n'a pas été modifié + AlreadyExists: Le texte du message par défaut existe déjà + Invalid: Le texte du message par défaut n'est pas valide + PasswordComplexityPolicy: + NotFound: Politique de complexité des mots de passe par défaut non trouvée + NotExisting: La politique de complexité des mots de passe par défaut n'existe pas + AlreadyExists: La politique de complexité des mots de passe par défaut existe déjà + Empty: Politique de complexité des mots de passe par défaut vide + NotChanged: La politique de complexité des mots de passe par défaut n'a pas été modifiée. + PasswordAgePolicy: + NotFound: La politique d'âge du mot de passe par défaut n'a pas été trouvée + NotExisting: La politique d'âge des mots de passe par défaut n'existe pas + AlreadyExists: La politique d'âge du mot de passe par défaut existe déjà + Empty: Politique d'âge des mots de passe par défaut vide + NotChanged: La politique d'âge du mot de passe par défaut n'a pas été modifiée + PasswordLockoutPolicy: + NotFound: La politique de verrouillage du mot de passe par défaut n'a pas été trouvée + NotExisting: La politique de verrouillage du mot de passe par défaut n'existe pas + AlreadyExists: La politique de verrouillage de mot de passe par défaut existe déjà + Empty: Politique de verrouillage par mot de passe par défaut vide + NotChanged: La politique de verrouillage par mot de passe par défaut n'a pas été modifiée. + DomainPolicy: + NotFound: Politique IAM Org non trouvée + Empty: La politique Org IAM est vide + NotExisting: La politique IAM d'Org n'existe pas + AlreadyExists: La politique IAM d'Org existe déjà + NotChanged: La politique IAM d'Org n'a pas été modifiée Policy: - AlreadyExists : La politique existe déjà - Label : - Invalid : - PrimaryColor : La couleur primaire n'est pas une valeur de couleur hexadécimale valide. - BackgroundColor : La couleur d'arrière-plan n'a pas de valeur de couleur hexadécimale valide. - WarnColor : La couleur d'avertissement n'a pas de valeur de couleur hexadécimale valide. - FontColor : La couleur de la police n'a pas de valeur de couleur Hex valide. - PrimaryColorDark : La couleur primaire (mode foncé) n'a pas de valeur de couleur Hex valide. - BackgroundColorDark : La couleur d'arrière-plan (mode foncé) n'a pas de valeur de couleur Hex valide. - WarnColorDark : La couleur d'avertissement (mode sombre) n'a pas de valeur de couleur hexadécimale valide. - FontColorDark : La couleur de la police (mode foncé) n'a pas de valeur de couleur hexadécimale valide. - UserGrant : - AlreadyExists : L'autorisation de l'utilisateur existe déjà - NotFound : Subvention d'utilisateur non trouvée - Invalid : La subvention d'utilisateur n'est pas valide - NotChanged : L'autorisation de l'utilisateur n'a pas été modifiée. - IDMissing : Id manquant - NotActive : La subvention de l'utilisateur n'est pas active - NotInactive : La subvention à l'utilisateur n'est pas désactivée - NoPermissionForProject : L'utilisateur n'a aucune autorisation pour ce projet - RoleKeyNotFound : Rôle non trouvé - Membre : - AlreadyExists : Le membre existe déjà - IDPConfig : - AlreadyExists : La configuration IDP portant ce nom existe déjà - NotExisting : La configuration du fournisseur d'identité n'existe pas - Changements : - NotFound : Aucun historique trouvé - AuditRetention : L'historique est en dehors de la rétention du journal d'audit - Token : - NotFound : Token non trouvé - UserSession : - NotFound : UserSession non trouvé - Key : - ExpireBeforeNow : La date d'expiration est dans le passé - Login : - LoginPolicy : - MFA : - ForceAndNotConfigured : Multifacteur configuré comme requis, mais aucun fournisseur possible n'est configuré. Veuillez contacter votre administrateur système. - Step : - Started : - AlreadyExists : L'étape commencée existe déjà - Done : - AlreadyExists : L'étape terminée existe déjà - CustomText : - Existe déjà : Le texte personnalisé existe déjà - Invalid : Le texte personnalisé n'est pas valide - NotFound : Le texte personnalisé n'a pas été trouvé - TranslationFile : - ReadError : Erreur de lecture du fichier de traduction - MergeError : Le fichier de traduction n'a pas pu être fusionné avec les traductions personnalisées. - NotFound : Le fichier de traduction n'existe pas - MetaData : - NotFound : Métadonnées non trouvées - NoData : La liste des métadonnées est vide - Invalid : Les métadonnées ne sont pas valides - KeyNotExisting : Une ou plusieurs clés n'existent pas - Action : - Invalid : L'action n'est pas valide - NotFound : Action non trouvée - NotActive : L'action n'est pas active - NotInactive : L'action n'est pas inactive - MaxAllowed : Aucune action active supplémentaire n'est autorisée - Flow : - FlowTypeMissing : FlowType missing - Empty : Le flux est déjà vide - WrongTriggerType : TriggerType est invalide - NoChanges : No Changes : Aucun changement - ActionIDsNotExist : Les ActionIDs n'existent pas - Query : - CloseRows : L'instruction SQL n'a pas pu être terminée - SQLStatement : L'instruction SQL n'a pas pu être créée - InvalidRequest : La requête n'est pas valide -EventTypes : - user : - added : Utilisateur ajouté - selfregistered : L'utilisateur s'est enregistré lui-même - initialization : - code : - added : Code d'initialisation généré - sent : Code d'initialisation envoyé - check : - succeeded : Vérification de l'initialisation réussie - failed : La vérification de l'initialisation a échoué - token : - added : Jeton d'accès créé - username : - reserved : Nom d'utilisateur réservé - released : Nom d'utilisateur libéré - email : - reserved : Adresse e-mail réservée - released : Adresse email libérée - changed : Adresse e-mail modifiée - verified : Adresse e-mail vérifiée - verification : - failed : La vérification de l'adresse e-mail a échoué - code : - added : Code de vérification de l'adresse e-mail généré - sent : Code de vérification de l'adresse e-mail envoyé - machine : - added : Utilisateur technique ajouté - changed : Changement d'utilisateur technique - key : - added : Clé ajoutée - removed : Clé supprimée - human : - added : Personne ajoutée - selfregistered : La personne s'est enregistrée elle-même - avatar : - added : Avatar ajouté - removed : Avatar supprimé - initialization : - code : - added : Code d'initialisation généré - sent : Code d'initialisation envoyé - check : - succeeded : Vérification de l'initialisation réussie - failed : La vérification de l'initialisation a échoué - username : - reserved : Nom d'utilisateur réservé - released : Nom d'utilisateur libéré - email : - changed : Adresse e-mail modifiée - verified : Adresse e-mail vérifiée - verification : - failed : La vérification de l'adresse e-mail a échoué + AlreadyExists: La politique existe déjà + Label: + Invalid: + PrimaryColor: La couleur primaire n'est pas une valeur de couleur hexadécimale valide. + BackgroundColor: La couleur d'arrière-plan n'a pas de valeur de couleur hexadécimale valide. + WarnColor: La couleur d'avertissement n'a pas de valeur de couleur hexadécimale valide. + FontColor: La couleur de la police n'a pas de valeur de couleur Hex valide. + PrimaryColorDark: La couleur primaire (mode foncé) n'a pas de valeur de couleur Hex valide. + BackgroundColorDark: La couleur d'arrière-plan (mode foncé) n'a pas de valeur de couleur Hex valide. + WarnColorDark: La couleur d'avertissement (mode sombre) n'a pas de valeur de couleur hexadécimale valide. + FontColorDark: La couleur de la police (mode foncé) n'a pas de valeur de couleur hexadécimale valide. + UserGrant: + AlreadyExists: L'autorisation de l'utilisateur existe déjà + NotFound: Subvention d'utilisateur non trouvée + Invalid: La subvention d'utilisateur n'est pas valide + NotChanged: L'autorisation de l'utilisateur n'a pas été modifiée. + IDMissing: Id manquant + NotActive: La subvention de l'utilisateur n'est pas active + NotInactive: La subvention à l'utilisateur n'est pas désactivée + NoPermissionForProject: L'utilisateur n'a aucune autorisation pour ce projet + RoleKeyNotFound: Rôle non trouvé + Member: + AlreadyExists: Le membre existe déjà + IDPConfig: + AlreadyExists: La configuration IDP portant ce nom existe déjà + NotExisting: La configuration du fournisseur d'identité n'existe pas + Changes: + NotFound: Aucun historique trouvé + AuditRetention: L'historique est en dehors de la rétention du journal d'audit + Token: + NotFound: Token non trouvé + UserSession: + NotFound: UserSession non trouvé + Key: + ExpireBeforeNow: La date d'expiration est dans le passé + Login: + LoginPolicy: + MFA: + ForceAndNotConfigured: Multifacteur configuré comme requis, mais aucun fournisseur possible n'est configuré. Veuillez contacter votre administrateur système. + Step: + Started: + AlreadyExists: L'étape commencée existe déjà + Done: + AlreadyExists: L'étape terminée existe déjà + CustomText: + AlreadyExists: Le texte personnalisé existe déjà + Invalid: Le texte personnalisé n'est pas valide + NotFound: Le texte personnalisé n'a pas été trouvé + TranslationFile: + ReadError: Erreur de lecture du fichier de traduction + MergeError: Le fichier de traduction n'a pas pu être fusionné avec les traductions personnalisées. + NotFound: Le fichier de traduction n'existe pas + MetaData: + NotFound: Métadonnées non trouvées + NoData: La liste des métadonnées est vide + Invalid: Les métadonnées ne sont pas valides + KeyNotExisting: Une ou plusieurs clés n'existent pas + Action: + Invalid: L'action n'est pas valide + NotFound: Action non trouvée + NotActive: L'action n'est pas active + NotInactive: L'action n'est pas inactive + MaxAllowed: Aucune action active supplémentaire n'est autorisée + Flow: + FlowTypeMissing: FlowType missing + Empty: Le flux est déjà vide + WrongTriggerType: TriggerType est invalide + NoChanges: Aucun changement + ActionIDsNotExist: Les ActionIDs n'existent pas + Query: + CloseRows: L'instruction SQL n'a pas pu être terminée + SQLStatement: L'instruction SQL n'a pas pu être créée + InvalidRequest: La requête n'est pas valide +EventTypes: + user: + added: Utilisateur ajouté + selfregistered: L'utilisateur s'est enregistré lui-même + initialization: code: - added : Code de vérification de l'adresse e-mail généré - sent : Code de vérification de l'adresse e-mail envoyé - machine : - added : Utilisateur technique ajouté - changed : Changement d'utilisateur technique - key : - added : Clé ajoutée - removed : Clé supprimée - humain : - added : Personne ajoutée - selfregistered : La personne s'est enregistrée elle-même - avatar : - added : Avatar ajouté - removed : Avatar supprimé - initialization : - code : - added : Code d'initialisation généré - sent : Code d'initialisation envoyé - check : - succeeded : Vérification de l'initialisation réussie - failed : La vérification de l'initialisation a échoué - username : - reserved : Nom d'utilisateur réservé - released : Nom d'utilisateur libéré - email : - changed : Adresse e-mail modifiée - verified : Adresse e-mail vérifiée - verification : - failed : La vérification de l'adresse e-mail a échoué - code : - added : Code de vérification de l'adresse e-mail généré - sent : Code de vérification de l'adresse e-mail envoyé - password : - changed : Mot de passe modifié - code : - added : Code de mot de passe généré - sent : Code du mot de passe envoyé - verified : - succeeded : Vérification du mot de passe réussie - failed : La vérification du mot de passe a échoué - external login : - verification : - succeeded : Connexion externe réussie - externalidp : - added : Externer IDP ajouté - removed : Externer IDP supprimé - cascade : - removed : Externer IDP cascade supprimé - Phone : - changed : Le numéro de téléphone a changé - verified : Numéro de téléphone vérifié - verification : - failed : La vérification du numéro de téléphone a échoué - code : - added : Code du numéro de téléphone généré - sent : Code du numéro de téléphone envoyé - removed : Numéro de téléphone supprimé - profile : - changed : Profil de l'utilisateur modifié - adresse : - changed : L'adresse de l'utilisateur a changé - mfa : - otp : - added : OTP multifacteur ajouté - verfied : OTP multifactoriel vérifié - removed : OTP multifactorielle supprimée - verified : - succeeded : Vérification de l'OTP multifactorielle réussie - failed : La vérification de l'OTP multifactorielle a échoué - u2f : - jeton : - added : Ajout d'un jeton U2F multifacteur - verified : Jeton U2F multifactor vérifié - removed : Jeton U2F multifactoriel retiré - start : - login : Vérification U2F multifactoriel commencée - verified : - succeeded : Vérification multifactorielle U2F réussie - failed : La vérification multifactorielle U2F a échoué - signcount : - changed : La somme de contrôle du jeton Multifactor U2F a été modifiée. - init : - skipped : L'initialisation du multifacteur a été ignorée - passwordless : - token : - added : Jeton pour la connexion sans mot de passe ajouté - verified : Jeton pour la connexion sans mot de passe vérifié - removed : Jeton de connexion sans mot de passe supprimé - start : - login : Vérification de la connexion sans mot de passe commencée - verification : - succeeded : Vérification de la connexion sans mot de passe réussie - failed : La vérification de la connexion sans mot de passe a échoué - signcount : - changed : La somme de contrôle du jeton de connexion sans mot de passe a été modifiée. - initialization : - code : - added : Ajout du code d'initialisation sans mot de passe - sent : Code d'initialisation sans mot de passe envoyé - requested : Code d'initialisation sans mot de passe demandé - check : - succeeded : Code d'initialisation sans mot de passe vérifié avec succès - failed : La vérification du code d'initialisation sans mot de passe a échoué - signed : - out : L'utilisateur s'est déconnecté - refresh : - token : - added : Création d'un jeton de rafraîchissement - renewed : Rafraîchissement d'un jeton renouvelé - removed : Jeton d'actualisation supprimé - locked : Utilisateur verrouillé - unlocked : Utilisateur déverrouillé - deactivated : Utilisateur désactivé - reactivated : Utilisateur réactivé - removed : Utilisateur supprimé - password : - changed : Mot de passe modifié - code : - added : Code du mot de passe généré - sent : Code du mot de passe envoyé - check : - succeeded : Vérification du mot de passe réussie - failed : La vérification du mot de passe a échoué + added: Code d'initialisation généré + sent: Code d'initialisation envoyé + check: + succeeded: Vérification de l'initialisation réussie + failed: La vérification de l'initialisation a échoué + token: + added: Jeton d'accès créé + username: + reserved: Nom d'utilisateur réservé + released: Nom d'utilisateur libéré + email: + reserved: Adresse e-mail réservée + released: Adresse email libérée + changed: Adresse e-mail modifiée + verified: Adresse e-mail vérifiée + verification: + failed: La vérification de l'adresse e-mail a échoué + code: + added: Code de vérification de l'adresse e-mail généré + sent: Code de vérification de l'adresse e-mail envoyé + machine: + added: Utilisateur technique ajouté + changed: Changement d'utilisateur technique + key: + added: Clé ajoutée + removed: Clé supprimée + human: + added: Personne ajoutée + selfregistered: La personne s'est enregistrée elle-même + avatar: + added: Avatar ajouté + removed: Avatar supprimé + initialization: + code: + added: Code d'initialisation généré + sent: Code d'initialisation envoyé + check: + succeeded: Vérification de l'initialisation réussie + failed: La vérification de l'initialisation a échoué + username: + reserved: Nom d'utilisateur réservé + released: Nom d'utilisateur libéré + email: + changed: Adresse e-mail modifiée + verified: Adresse e-mail vérifiée + verification: + failed: La vérification de l'adresse e-mail a échoué + code: + added: Code de vérification de l'adresse e-mail généré + sent: Code de vérification de l'adresse e-mail envoyé + password: + changed: Mot de passe modifié + code: + added: Code de mot de passe généré + sent: Code du mot de passe envoyé + check: + succeeded: Vérification du mot de passe réussie + failed: La vérification du mot de passe a échoué + externallogin: + check: + succeeded: Connexion externe réussie + externalidp: + added: Externer IDP ajouté + removed: Externer IDP supprimé + cascade: + removed: Externer IDP cascade supprimé + phone: + changed: Le numéro de téléphone a changé + verified: Numéro de téléphone vérifié + verification: + failed: La vérification du numéro de téléphone a échoué + code: + added: Code du numéro de téléphone généré + sent: Code du numéro de téléphone envoyé + removed: Numéro de téléphone supprimé + profile: + changed: Profil de l'utilisateur modifié + address: + changed: L'adresse de l'utilisateur a changé + mfa: + otp: + added: OTP multifacteur ajouté + verified: OTP multifactoriel vérifié + removed: OTP multifactorielle supprimée + check: + succeeded: Vérification de l'OTP multifactorielle réussie + failed: La vérification de l'OTP multifactorielle a échoué + u2f: + token: + added: Ajout d'un jeton U2F multifacteur + verified: Jeton U2F multifactor vérifié + removed: Jeton U2F multifactoriel retiré + begin: + login: Vérification U2F multifactoriel commencée + check: + succeeded: Vérification multifactorielle U2F réussie + failed: La vérification multifactorielle U2F a échoué + signcount: + changed: La somme de contrôle du jeton Multifactor U2F a été modifiée. + init: + skipped: L'initialisation du multifacteur a été ignorée + passwordless: + token: + added: Jeton pour la connexion sans mot de passe ajouté + verified: Jeton pour la connexion sans mot de passe vérifié + removed: Jeton de connexion sans mot de passe supprimé + begin: + login: Vérification de la connexion sans mot de passe commencée + check: + succeeded: Vérification de la connexion sans mot de passe réussie + failed: La vérification de la connexion sans mot de passe a échoué + signcount: + changed: La somme de contrôle du jeton de connexion sans mot de passe a été modifiée. + initialization: + code: + added: Ajout du code d'initialisation sans mot de passe + sent: Code d'initialisation sans mot de passe envoyé + requested: Code d'initialisation sans mot de passe demandé + check: + succeeded: Code d'initialisation sans mot de passe vérifié avec succès + failed: La vérification du code d'initialisation sans mot de passe a échoué + signed: + out: L'utilisateur s'est déconnecté + refresh: + token: + added: Création d'un jeton de rafraîchissement + renewed: Rafraîchissement d'un jeton renouvelé + removed: Jeton d'actualisation supprimé + locked: Utilisateur verrouillé + unlocked: Utilisateur déverrouillé + deactivated: Utilisateur désactivé + reactivated: Utilisateur réactivé + removed: Utilisateur supprimé + password: + changed: Mot de passe modifié + code: + added: Code du mot de passe généré + sent: Code du mot de passe envoyé + check: + succeeded: Vérification du mot de passe réussie + failed: La vérification du mot de passe a échoué phone: - changed : Le numéro de téléphone a changé - verified : Numéro de téléphone vérifié - verification : - failed : La vérification du numéro de téléphone a échoué - code : - added : Code du numéro de téléphone généré - sent : Code du numéro de téléphone envoyé - profil : - changed : Profil de l'utilisateur modifié - adresse : - changed : L'adresse de l'utilisateur a changé - mfa : - otp : - added : OTP multifacteur ajouté - verified : OTP multifactoriel vérifié - removed : OTP multifactorielle supprimée - verified : - succeeded : Vérification de l'OTP multifactorielle réussie - failed : Échec de la vérification de l'OTP multifactorielle - init : - skipped : L'initialisation du multifacteur a été ignorée - signed : - out : L'utilisateur s'est déconnecté - grant : - added : Autorisation ajoutée - changed : Autorisation modifiée - removed : Autorisation supprimée - deactivated : Autorisation désactivée - reactivated : Autorisation réactivée - reserved : Autorisation réservée - released : Autorisation validée - cascade : - removed : Autorisation supprimée - changed : Autorisation modifiée - MetaData : - set : Ensemble de métadonnées de l'utilisateur - removed : Métadonnées de l'utilisateur supprimées - removed.all : Suppression de toutes les métadonnées utilisateur - org : - added : Organisation ajoutée - changed : Organisation modifiée - deactivated : Organisation désactivée - reactivated : Organisation réactivée - removed : Organisation supprimée - domain : - added : Domaine ajouté - verification : - added : Vérification du domaine ajoutée - failed : La vérification du domaine a échoué - verified : Domaine vérifié - removed : Domaine supprimé - primary : - set : Domaine primaire défini - reserved : Domaine réservé - released : Domaine libéré - name : - reserved : Nom de l'organisation réservé + changed: Le numéro de téléphone a changé + verified: Numéro de téléphone vérifié + verification: + failed: La vérification du numéro de téléphone a échoué + code: + added: Code du numéro de téléphone généré + sent: Code du numéro de téléphone envoyé + profile: + changed: Profil de l'utilisateur modifié + address: + changed: L'adresse de l'utilisateur a changé + mfa: + otp: + added: OTP multifacteur ajouté + verified: OTP multifactoriel vérifié + removed: OTP multifactorielle supprimée + check: + succeeded: Vérification de l'OTP multifactorielle réussie + failed: Échec de la vérification de l'OTP multifactorielle + init: + skipped: L'initialisation du multifacteur a été ignorée + signed: + out: L'utilisateur s'est déconnecté + grant: + added: Autorisation ajoutée + changed: Autorisation modifiée + removed: Autorisation supprimée + deactivated: Autorisation désactivée + reactivated: Autorisation réactivée + reserved: Autorisation réservée + released: Autorisation validée + cascade: + removed: Autorisation supprimée + changed: Autorisation modifiée + metadata: + set: Ensemble de métadonnées de l'utilisateur + removed: Métadonnées de l'utilisateur supprimées + removed.all: Suppression de toutes les métadonnées utilisateur + org: + added: Organisation ajoutée + changed: Organisation modifiée + deactivated: Organisation désactivée + reactivated: Organisation réactivée + removed: Organisation supprimée + domain: + added: Domaine ajouté + verification: + added: Vérification du domaine ajoutée + failed: La vérification du domaine a échoué + verified: Domaine vérifié + removed: Domaine supprimé + primary: + set: Domaine primaire défini + reserved: Domaine réservé + released: Domaine libéré + name: + reserved: Nom de l'organisation réservé released: Nom de l'organisation libéré - membre : - added : Membre de l'organisation ajouté - changed : Le membre de l'organisation a changé - removed : Membre de l'organisation supprimé - cascade : - removed : Membre de l'organisation supprimé en cascade - iam : - policy : - added : Politique système ajoutée - changed : Modification de la politique système - removed : Politique système supprimée - idp : - config : - added : Ajout de la configuration IDP - changed : Modification de la configuration IDP - removed : Suppression de la configuration IDP - deactivated : Configuration IDP désactivée - reactivated : Configuration IDP réactivée - oidc : - config : - added : Ajout de la configuration IDP de l'OIDC - changed : Modification de la configuration de l'OIDC IDP - saml : - config : - added : Configuration IDP SAML ajoutée - changed : Modification de la configuration IDP SAML - customtext : - set : Jeu de texte personnalisé - removed : Texte personnalisé supprimé - template : - removed : Modèle de texte personnalisé supprimé - policy : - login : - added : Politique de connexion ajoutée - changed : Politique de connexion modifiée - removed : Politique de connexion supprimée - idpprovider : - added : Fournisseur d'Idp ajouté à la politique de connexion - removed : Idp Provider supprimé de la politique de connexion - secondfactor : - added : Second factor ajouté à la politique de connexion - removed : Second facteur supprimé de la politique de connexion - multifactor : - added : Facteur multiple ajouté à la politique de connexion - removed : Facteur multiple supprimé de la politique de connexion - password : - complexity : - added : Ajout de la politique de complexité des mots de passe - changed : Modification de la politique de complexité des mots de passe - removed : Suppression de la politique de complexité des mots de passe - age : - added : Ajout de la politique d'ancienneté des mots de passe - changed : Modification de la politique d'ancienneté des mots de passe - removed : Suppression de la politique d'âge du mot de passe - lockout : - added : Ajout de la politique de verrouillage des mots de passe - changed : Modification de la politique de verrouillage des mots de passe - removed : Suppression de la politique de verrouillage du mot de passe - label: - added : Politique d'étiquetage ajoutée - changed : Politique d'étiquetage modifiée - activated : Label Policy activated : Politique d'étiquetage activée - removed : Politique d'étiquetage supprimée - logo : - added : Logo ajouté à la politique d'étiquetage - removed : Logo retiré de la politique d'étiquetage - sombre : - added : Logo (mode sombre) ajouté à la politique d'étiquetage - removed : Le logo (mode sombre) a été retiré de la politique d'étiquetage - icon : - added : Icône ajoutée à la politique d'étiquetage - removed : Icône supprimée de la politique d'étiquetage - dark : - added : Icône (mode sombre) ajoutée à la politique d'étiquetage - removed : Icône (mode sombre) supprimée de la politique d'étiquetage - font : - added : Police ajoutée à la politique d'étiquetage - removed : Police supprimée de la politique d'étiquetage - assets : - removed : Actifs supprimés de la politique d'étiquetage - privacy : - added : Politique de confidentialité et CGU ajoutés - changed : Politique de confidentialité et CGU modifiées - removed : Politique de confidentialité et conditions d'utilisation supprimées - flow : - trigger_actions : - set : Action set - cascade : - removed : Cascade d'actions supprimée - removed : Actions supprimées - projet : - added : Projet ajouté - changed : Projet modifié - deactivated : Projet désactivé - reactivated : Projet réactivé - removed : Projet supprimé - membre : - added : Membre du projet ajouté - changed : Membre du projet modifié - removed : Membre du projet supprimé - cascade : - removed : Membre du projet supprimé en cascade - role : - added : Rôle de projet ajouté - changed : Rôle de projet modifié - removed : Rôle du projet supprimé - grant : - added : Accès à la gestion ajouté - changed : Accès de gestion modifié - removed : Accès de gestion supprimé - deactivated : Accès de gestion désactivé - reactivated : Accès de gestion réactivé - cascade : - changed : Accès de gestion modifié - membre : - added : Membre de l'accès de gestion ajouté - changed : Membre d'accès de gestion modifié - removed : Membre d'accès de gestion supprimé - cascade : - removed : Cascade d'accès de gestion supprimée - application : - added : Application ajoutée - changed : Application modifiée - removed : Application supprimée - deactivated : Application désactivée - reactivated : Application réactivée - oidc : - secret : - verified : - check : Vérification du secret du client OIDC réussie - failed : La vérification du secret du client OIDC a échoué - key : - added : Clé d'application ajoutée - removed : Clé d'application supprimée - config : - oidc : - added : Configuration OIDC ajoutée - changed : Modification de la configuration de l'OIDC - secret : - changed : Le secret de l'OIDC a été modifié - api : - added : Configuration API ajoutée - chaged : La configuration de l'API a été modifiée - secret : - changed : Le secret de l'API a été modifié - policy : - password : - complexity : - added : Ajout de la politique de complexité des mots de passe - changed : Modification de la politique de complexité des mots de passe - age : - added : Ajout de la politique d'ancienneté des mots de passe - changed : Modification de la politique relative à l'âge du mot de passe - verrouillage : - added : Ajout de la politique de verrouillage des mots de passe - changed : Modification de la politique de verrouillage des mots de passe - iam : - setup : - started : L'installation de ZITADEL a commencé - done : Installation de ZITADEL terminée - global : - org : - set : Global org set - projet : - iam : - set : set du projet ZITADEL - membre : - added : ZITADEL membre ajouté - changed : membre de ZITADEL modifié - removed : membre ZITADEL supprimé - cascade : - removed : Membre ZITADEL supprimé en cascade - idp : - config : - added : Ajout de la configuration IDP - changed : Modification de la configuration IDP - removed : Suppression de la configuration IDP - deactivated : Configuration IDP désactivée - reactivated : Configuration IDP réactivée - oidc : - config : - added : Ajout de la configuration IDP de l'OIDC - changed : Modification de la configuration de l'OIDC IDP + member: + added: Membre de l'organisation ajouté + changed: Le membre de l'organisation a changé + removed: Membre de l'organisation supprimé + cascade: + removed: Membre de l'organisation supprimé en cascade + iam: + policy: + added: Politique système ajoutée + changed: Modification de la politique système + removed: Politique système supprimée + idp: + config: + added: Ajout de la configuration IDP + changed: Modification de la configuration IDP + removed: Suppression de la configuration IDP + deactivated: Configuration IDP désactivée + reactivated: Configuration IDP réactivée + oidc: + config: + added: Ajout de la configuration IDP de l'OIDC + changed: Modification de la configuration de l'OIDC IDP saml: - config : - added : Ajout de la configuration SAML IDP - changed : Modification de la configuration de SAML IDP - policy : - login : - added : Politique de connexion par défaut ajoutée - changed : La politique de connexion par défaut a été modifiée - idpprovider : - added : Idp Provider ajouté à la politique de connexion par défaut - removed : Idp Provider supprimé de la politique de connexion par défaut - label : - added : Ajout d'une politique d'étiquetage - modifié : La politique d'étiquetage a été modifiée - activé : Politique d'étiquetage activée - logo : - added : Logo ajouté à la politique d'étiquetage - removed : Logo retiré de la politique d'étiquetage - sombre : - added : Logo (mode sombre) ajouté à la politique d'étiquetage - removed : Le logo (mode sombre) a été retiré de la politique d'étiquetage - icon : - added : Icône ajoutée à la politique d'étiquetage - removed : Icône supprimée de la politique d'étiquetage - sombre : - added : Icône (mode sombre) ajoutée à la politique d'étiquetage - removed : Icône (mode sombre) supprimée de la politique d'étiquetage - font : - added : Police ajoutée à la politique d'étiquetage - removed : Police supprimée de la politique d'étiquetage - actifs : - removed : Actifs supprimés de la politique d'étiquetage - default : - langue : - set : Langue par défaut - oidc : - settings : - added : Ajout de la configuration de l'OIDC - changed : Modification de la configuration de l'OIDC - removed : Suppression de la configuration de l'OIDC - secret : - generator : - added : Générateur de secret ajouté - changed : Générateur de secret modifié - removed : Générateur secret supprimé - smtp : - config : - added : Ajout de la configuration SMTP - changed : Modification de la configuration SMTP - password : - changed : Modification du secret de la configuration SMTP - sms : - config : - twilio : - added : ajout du fournisseur de SMS Twilio - changed : modification du fournisseur de SMS Twilio - token : - changed : Changement du jeton du fournisseur de SMS Twilio - removed : Suppression du fournisseur de SMS Twilio - activated : Activation du fournisseur de SMS Twilio - deactivated : Fournisseur de SMS Twilio désactivé - key_pair : - added : Paire de clés ajoutée - action : - added : Action ajoutée - changed : Action modifiée - deactivated : Action désactivée - reactivated : Action réactivée - removed : Action supprimée + config: + added: Configuration IDP SAML ajoutée + changed: Modification de la configuration IDP SAML + customtext: + set: Jeu de texte personnalisé + removed: Texte personnalisé supprimé + template: + removed: Modèle de texte personnalisé supprimé + policy: + login: + added: Politique de connexion ajoutée + changed: Politique de connexion modifiée + removed: Politique de connexion supprimée + idpprovider: + added: Fournisseur d'Idp ajouté à la politique de connexion + removed: Idp Provider supprimé de la politique de connexion + secondfactor: + added: Second factor ajouté à la politique de connexion + removed: Second facteur supprimé de la politique de connexion + multifactor: + added: Facteur multiple ajouté à la politique de connexion + removed: Facteur multiple supprimé de la politique de connexion + password: + complexity: + added: Ajout de la politique de complexité des mots de passe + changed: Modification de la politique de complexité des mots de passe + removed: Suppression de la politique de complexité des mots de passe + age: + added: Ajout de la politique d'ancienneté des mots de passe + changed: Modification de la politique d'ancienneté des mots de passe + removed: Suppression de la politique d'âge du mot de passe + lockout: + added: Ajout de la politique de verrouillage des mots de passe + changed: Modification de la politique de verrouillage des mots de passe + removed: Suppression de la politique de verrouillage du mot de passe + label: + added: Politique d'étiquetage ajoutée + changed: Politique d'étiquetage modifiée + activated: Politique d'étiquetage activée + removed: Politique d'étiquetage supprimée + logo: + added: Logo ajouté à la politique d'étiquetage + removed: Logo retiré de la politique d'étiquetage + dark: + added: Logo (mode sombre) ajouté à la politique d'étiquetage + removed: Le logo (mode sombre) a été retiré de la politique d'étiquetage + icon: + added: Icône ajoutée à la politique d'étiquetage + removed: Icône supprimée de la politique d'étiquetage + dark: + added: Icône (mode sombre) ajoutée à la politique d'étiquetage + removed: Icône (mode sombre) supprimée de la politique d'étiquetage + font: + added: Police ajoutée à la politique d'étiquetage + removed: Police supprimée de la politique d'étiquetage + assets: + removed: Actifs supprimés de la politique d'étiquetage + privacy: + added: Politique de confidentialité et CGU ajoutés + changed: Politique de confidentialité et CGU modifiées + removed: Politique de confidentialité et conditions d'utilisation supprimées + flow: + trigger_actions: + set: Action set + cascade: + removed: Cascade d'actions supprimée + removed: Actions supprimées + project: + added: Projet ajouté + changed: Projet modifié + deactivated: Projet désactivé + reactivated: Projet réactivé + removed: Projet supprimé + member: + added: Membre du projet ajouté + changed: Membre du projet modifié + removed: Membre du projet supprimé + cascade: + removed: Membre du projet supprimé en cascade + role: + added: Rôle de projet ajouté + changed: Rôle de projet modifié + removed: Rôle du projet supprimé + grant: + added: Accès à la gestion ajouté + changed: Accès de gestion modifié + removed: Accès de gestion supprimé + deactivated: Accès de gestion désactivé + reactivated: Accès de gestion réactivé + cascade: + changed: Accès de gestion modifié + member: + added: Membre de l'accès de gestion ajouté + changed: Membre d'accès de gestion modifié + removed: Membre d'accès de gestion supprimé + cascade: + removed: Cascade d'accès de gestion supprimée + application: + added: Application ajoutée + changed: Application modifiée + removed: Application supprimée + deactivated: Application désactivée + reactivated: Application réactivée + oidc: + secret: + verified: + check: Vérification du secret du client OIDC réussie + failed: La vérification du secret du client OIDC a échoué + key: + added: Clé d'application ajoutée + removed: Clé d'application supprimée + config: + oidc: + added: Configuration OIDC ajoutée + changed: Modification de la configuration de l'OIDC + secret: + changed: Le secret de l'OIDC a été modifié + api: + added: Configuration API ajoutée + changed: La configuration de l'API a été modifiée + secret: + changed: Le secret de l'API a été modifié + policy: + password: + complexity: + added: Ajout de la politique de complexité des mots de passe + changed: Modification de la politique de complexité des mots de passe + age: + added: Ajout de la politique d'ancienneté des mots de passe + changed: Modification de la politique relative à l'âge du mot de passe + lockout: + added: Ajout de la politique de verrouillage des mots de passe + changed: Modification de la politique de verrouillage des mots de passe + iam: + setup: + started: L'installation de ZITADEL a commencé + done: Installation de ZITADEL terminée + global: + org: + set: Global org set + lockout: + iam: + set: set du projet ZITADEL + member: + added: ZITADEL membre ajouté + changed: membre de ZITADEL modifié + removed: membre ZITADEL supprimé + cascade: + removed: Membre ZITADEL supprimé en cascade + idp: + config: + added: Ajout de la configuration IDP + changed: Modification de la configuration IDP + removed: Suppression de la configuration IDP + deactivated: Configuration IDP désactivée + reactivated: Configuration IDP réactivée + oidc: + config: + added: Ajout de la configuration IDP de l'OIDC + changed: Modification de la configuration de l'OIDC IDP + saml: + config: + added: Ajout de la configuration SAML IDP + changed: Modification de la configuration de SAML IDP + customtext: + set: Le texte a été mis en place + removed: Le texte a été supprimé + policy: + login: + added: Politique de connexion par défaut ajoutée + changed: La politique de connexion par défaut a été modifiée + idpprovider: + added: Idp Provider ajouté à la politique de connexion par défaut + removed: Idp Provider supprimé de la politique de connexion par défaut + label: + added: Ajout d'une politique d'étiquetage + changed: La politique d'étiquetage a été modifiée + activated: Politique d'étiquetage activée + logo: + added: Logo ajouté à la politique d'étiquetage + removed: Logo retiré de la politique d'étiquetage + dark: + added: Logo (mode sombre) ajouté à la politique d'étiquetage + removed: Le logo (mode sombre) a été retiré de la politique d'étiquetage + icon: + added: Icône ajoutée à la politique d'étiquetage + removed: Icône supprimée de la politique d'étiquetage + dark: + added: Icône (mode sombre) ajoutée à la politique d'étiquetage + removed: Icône (mode sombre) supprimée de la politique d'étiquetage + font: + added: Police ajoutée à la politique d'étiquetage + removed: Police supprimée de la politique d'étiquetage + assets: + removed: Actifs supprimés de la politique d'étiquetage + default: + language: + set: Langue par défaut + oidc: + settings: + added: Ajout de la configuration de l'OIDC + changed: Modification de la configuration de l'OIDC + removed: Suppression de la configuration de l'OIDC + secret: + generator: + added: Générateur de secret ajouté + changed: Générateur de secret modifié + removed: Générateur secret supprimé + smtp: + config: + added: Ajout de la configuration SMTP + changed: Modification de la configuration SMTP + password: + changed: Modification du secret de la configuration SMTP + sms: + config: + twilio: + added: ajout du fournisseur de SMS Twilio + changed: modification du fournisseur de SMS Twilio + token: + changed: Changement du jeton du fournisseur de SMS Twilio + removed: Suppression du fournisseur de SMS Twilio + activated: Activation du fournisseur de SMS Twilio + deactivated: Fournisseur de SMS Twilio désactivé + key_pair: + added: Paire de clés ajoutée + action: + added: Action ajoutée + changed: Action modifiée + deactivated: Action désactivée + reactivated: Action réactivée + removed: Action supprimée Application: OIDC: @@ -908,8 +880,7 @@ Application: Code: RedirectUris: HttpOnlyForWeb: Le code de type de subvention n'autorise que les uris de redirection http pour le type d'application web. - CustomOnlyForNative: Le code du type de subvention n'autorise que les uris de redirection personnalisées pour le type d'application natif. (exemple: appname:// ) - + CustomOnlyForNative: Le code du type de subvention n'autorise que les uris de redirection personnalisées pour le type d'application natif. (par exemple appname:// ) Implicit: RedirectUris: CustomNotAllowed: Le type de subvention implicite n'autorise pas les uris de redirection personnalisées diff --git a/internal/static/i18n/it.yaml b/internal/static/i18n/it.yaml index 7fbb46c998..fdd770d103 100644 --- a/internal/static/i18n/it.yaml +++ b/internal/static/i18n/it.yaml @@ -94,7 +94,7 @@ Errors: NotAllowedToLink: L'utente non è autorizzato a collegarsi con un provider di accesso esterno Username: AlreadyExists: Nome utente già preso - Reservied: Il nome utente è già preso + Reserved: Il nome utente è già preso Code: Empty: Il codice è vuoto NotFound: Codice non trovato @@ -182,6 +182,8 @@ Errors: AlreadyExists: Impostazioni di accesso già esistenti IdpProviderAlreadyExisting: IDP già esistente IdpProviderNotExisting: IDP non esistente + RegistrationNotAllowed: la registrazione non è consentita. + UsernamePasswordNotAllowed: l'accesso con nome utente e password non è consentito. MFA: AlreadyExists: Multifactor già esistente NotExisting: Multifattore non esistente @@ -261,7 +263,6 @@ Errors: HasNotExistingRole: Uno dei ruoli assegnati non è esistente nel progetto NotActive: Grant del progetto non è attivo NotInactive: Grant del progetto non è inattivo - UserIDMisisng: ID utente mancante IAM: Member: RolesNotChanged: I ruoli non sono stati cambiati @@ -784,7 +785,7 @@ EventTypes: changed: ZITADEL membro cambiato removed: ZITADEL membro rimosso cascade: - removeD: Membro ZITADEL rimosso a cascata + removed: Membro ZITADEL rimosso a cascata idp: config: added: Configurazione IDP aggiunta @@ -800,6 +801,9 @@ EventTypes: config: added: Aggiunta la configurazione IDP SAML changed: Configurazione IDP SAML modificata + customtext: + set: Il testo è stato impostato + removed: Il testo è stato rimosso policy: login: added: Le impostazioni di accesso predefinite sono state aggiunte. @@ -865,6 +869,7 @@ EventTypes: deactivated: Azione disattivata reactivated: Azione riattivata removed: Azione rimossa + Application: OIDC: UnsupportedVersion: La tua versione di OIDC non è supportata From d5a8dd47fdd46147a9ee86bd7be912b8aff0a680 Mon Sep 17 00:00:00 2001 From: Christian Jakob <47860090+thesephirot@users.noreply.github.com> Date: Thu, 7 Jul 2022 13:33:49 +0200 Subject: [PATCH 008/116] docs: fix tls description and limitations (#3884) * docs: fix tls description and limitations * cleanup doku * fixed knative link * added loadbalancing link as example * relative links --- .../guides/installation/run/defaultuser.mdx | 4 ++++ docs/docs/guides/installation/run/knative.mdx | 23 +++---------------- .../installation/run/nextselfhosted.mdx | 4 ---- docs/docs/guides/installation/run/run.mdx | 16 +++++++++++++ 4 files changed, 23 insertions(+), 24 deletions(-) create mode 100644 docs/docs/guides/installation/run/defaultuser.mdx diff --git a/docs/docs/guides/installation/run/defaultuser.mdx b/docs/docs/guides/installation/run/defaultuser.mdx new file mode 100644 index 0000000000..1459ff3e24 --- /dev/null +++ b/docs/docs/guides/installation/run/defaultuser.mdx @@ -0,0 +1,4 @@ +Open your favorite internet browser and navigate to [http://localhost:8080/ui/console](http://localhost:8080/ui/console). +This is the default IAM admin users login: +- **username**: *zitadel-admin@zitadel.localhost* +- **password**: *Password1!* \ No newline at end of file diff --git a/docs/docs/guides/installation/run/knative.mdx b/docs/docs/guides/installation/run/knative.mdx index 401100c179..fe16b2da13 100644 --- a/docs/docs/guides/installation/run/knative.mdx +++ b/docs/docs/guides/installation/run/knative.mdx @@ -1,10 +1,7 @@ -## Disclaimer -This guide is for development / demonstration purpose only and does NOT reflect a production setup. - ## New Knative environment ### Download and run Knative quickstart -Follow the Knative quickstart guide to get a local kind/minikube environment with Knative capabilities. +Follow the [Knative quickstart guide](https://knative.dev/docs/getting-started/quickstart-install/) to get a local kind/minikube environment with Knative capabilities. It is basically 4 commands on Mac: @@ -24,10 +21,6 @@ kn quickstart kind That will get you a ready to go knative/kubernetes environment. -See Knative documentation here: -https://knative.dev/docs/install/quickstart-install/ - - ## Database start a single-node cockroachdb as statefulset @@ -35,14 +28,6 @@ start a single-node cockroachdb as statefulset kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/deploy/knative/cockroachdb-statefulset-single-node.yaml ``` -## Secret for TLS termination -create a secret with your certificates for TLS termination - -```bash -#describe happy path -kubectl apply secret -f certs.yaml -``` - ## Start ZITADEL with Knative ```bash @@ -58,9 +43,7 @@ kn service create zitadel \ --env ZITADEL_TLS_ENABLED=false \ --env ZITADEL_EXTERNALDOMAIN=zitadel.default.127.0.0.1.sslip.io \ --env ZITADEL_S3DEFAULTINSTANCE_CUSTOMDOMAIN=zitadel.default.127.0.0.1.sslip.io \ ---arg "admin" --arg "start-from-init" --arg "--masterkey" --arg "MasterkeyNeedsToHave32Characters" \ ---mount /tls.secret=secret:certs/tls.secret \ ---mount /tls.key=secret:certs/tls.key +--arg "start-from-init" --arg "--masterkey" --arg "MasterkeyNeedsToHave32Characters" ``` or use the knative service yaml @@ -83,6 +66,6 @@ http://zitadel.default.127.0.0.1.sslip.io/ui/console If you didn't configure something else, this is the default IAM admin users login: -* username: zitadel-admin@zitadel.zitadel.default.127.0.0.1.sslip.io +* username: zitadel-admin@zitadel.zitadel.default.127.0.0.1.sslip.io * password: Password1! diff --git a/docs/docs/guides/installation/run/nextselfhosted.mdx b/docs/docs/guides/installation/run/nextselfhosted.mdx index d79a8b2ae4..e6afca72d3 100644 --- a/docs/docs/guides/installation/run/nextselfhosted.mdx +++ b/docs/docs/guides/installation/run/nextselfhosted.mdx @@ -1,7 +1,3 @@ -Open your favorite internet browser and navigate to [http://localhost:8080/ui/console](http://localhost:8080/ui/console). -This is the default IAM admin users login: -- **username**: *zitadel-admin@zitadel.localhost* -- **password**: *Password1!* ## What's next diff --git a/docs/docs/guides/installation/run/run.mdx b/docs/docs/guides/installation/run/run.mdx index 8c6cb16c89..c0aa876468 100644 --- a/docs/docs/guides/installation/run/run.mdx +++ b/docs/docs/guides/installation/run/run.mdx @@ -11,6 +11,7 @@ import Compose from './compose.mdx' import Helm from './helm.mdx' import Knative from './knative.mdx' import NextSelfHosted from './nextselfhosted.mdx' +import DefaultUser from './defaultuser.mdx' # Run ZITADEL @@ -18,6 +19,16 @@ Choose your platform and run ZITADEL with the most minimal configuration possibl For an easy self-hosted production setup, we recommend running ZITADEL on [Kubernetes](https://kubernetes.io/docs/home/), using our official [Helm](https://helm.sh/docs/) chart. By default, it runs a highly available ZITADEL instance along with a secure and highly available [CockroachDB](https://www.cockroachlabs.com/docs/stable/) instance. +## Disclaimer +This guide is for development / demonstration purpose only and does NOT reflect a production setup. + +Things such as TLS termination and email verification will not be available unless you + +- use an API gateway with valid certificates in front of the service +- configure an appropriate email server + +see loadbalancing example [here](/docs/guides/installation/loadbalancing-example) + + + + + + From 9271623ec9c819984e418b1315499fc9774465a0 Mon Sep 17 00:00:00 2001 From: Silvan Date: Thu, 7 Jul 2022 14:58:00 +0200 Subject: [PATCH 009/116] fix: load auth users (#3907) * fix: load auth users * fix: add triggerbulk * fix: build pre-release * fix even more french translations * fix: build version Co-authored-by: Livio Spring --- .releaserc.js | 2 +- internal/api/grpc/management/user.go | 2 +- .../middleware/translation_interceptor.go | 7 +- .../api/grpc/server/middleware/translator.go | 11 ++- .../api/ui/login/init_password_handler.go | 2 +- .../api/ui/login/password_reset_handler.go | 2 +- internal/api/ui/login/static/i18n/fr.yaml | 16 ++--- .../repository/eventsourcing/repository.go | 2 +- .../repository/eventsourcing/view/user.go | 72 ++++++++++++++++++- .../repository/eventsourcing/view/view.go | 5 +- internal/query/user.go | 10 ++- internal/static/i18n/fr.yaml | 4 +- 12 files changed, 105 insertions(+), 30 deletions(-) diff --git a/.releaserc.js b/.releaserc.js index 5c4725f1cc..a7df798669 100644 --- a/.releaserc.js +++ b/.releaserc.js @@ -3,7 +3,7 @@ module.exports = { {name: 'main'}, {name: '1.x.x', range: '1.x.x', channel: '1.x.x'}, {name: 'v2-alpha', prerelease: true}, - {name: 'notify-users', prerelease: true}, + {name: 'auth-users', prerelease: true}, ], plugins: [ "@semantic-release/commit-analyzer" diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go index 5fd3bc7822..7aa0e1a3e0 100644 --- a/internal/api/grpc/management/user.go +++ b/internal/api/grpc/management/user.go @@ -44,7 +44,7 @@ func (s *Server) GetUserByLoginNameGlobal(ctx context.Context, req *mgmt_pb.GetU if err != nil { return nil, err } - user, err := s.query.GetUser(ctx, loginName) + user, err := s.query.GetUser(ctx, true, loginName) if err != nil { return nil, err } diff --git a/internal/api/grpc/server/middleware/translation_interceptor.go b/internal/api/grpc/server/middleware/translation_interceptor.go index 6380c3e382..7761e94b2c 100644 --- a/internal/api/grpc/server/middleware/translation_interceptor.go +++ b/internal/api/grpc/server/middleware/translation_interceptor.go @@ -3,6 +3,7 @@ package middleware import ( "context" + "github.com/zitadel/logging" "google.golang.org/grpc" "github.com/zitadel/zitadel/internal/api/authz" @@ -13,7 +14,11 @@ import ( func TranslationHandler() func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { resp, err := handler(ctx, req) - translator := newZitadelTranslator(authz.GetInstance(ctx).DefaultLanguage()) + translator, translatorError := newZitadelTranslator(authz.GetInstance(ctx).DefaultLanguage()) + if translatorError != nil { + logging.New().WithError(translatorError).Error("could not load translator") + return resp, err + } if loc, ok := resp.(localizers); ok && resp != nil { translateFields(ctx, loc, translator) } diff --git a/internal/api/grpc/server/middleware/translator.go b/internal/api/grpc/server/middleware/translator.go index 6d5b1dd669..f42741db0b 100644 --- a/internal/api/grpc/server/middleware/translator.go +++ b/internal/api/grpc/server/middleware/translator.go @@ -40,16 +40,13 @@ func translateError(ctx context.Context, err error, translator *i18n.Translator) return err } -func newZitadelTranslator(defaultLanguage language.Tag) *i18n.Translator { +func newZitadelTranslator(defaultLanguage language.Tag) (*i18n.Translator, error) { return translatorFromNamespace("zitadel", defaultLanguage) } -func translatorFromNamespace(namespace string, defaultLanguage language.Tag) *i18n.Translator { +func translatorFromNamespace(namespace string, defaultLanguage language.Tag) (*i18n.Translator, error) { dir, err := fs.NewWithNamespace(namespace) - logging.LogWithFields("ERROR-7usEW", "namespace", namespace).OnError(err).Panic("unable to get namespace") + logging.WithFields("namespace", namespace).OnError(err).Panic("unable to get namespace") - translator, err := i18n.NewTranslator(dir, defaultLanguage, "") - logging.Log("ERROR-Sk8sf").OnError(err).Panic("unable to get i18n translator") - - return translator + return i18n.NewTranslator(dir, defaultLanguage, "") } diff --git a/internal/api/ui/login/init_password_handler.go b/internal/api/ui/login/init_password_handler.go index b2fc4ee6c8..0b88afd224 100644 --- a/internal/api/ui/login/init_password_handler.go +++ b/internal/api/ui/login/init_password_handler.go @@ -107,7 +107,7 @@ func (l *Login) resendPasswordSet(w http.ResponseWriter, r *http.Request, authRe l.renderInitPassword(w, r, authReq, authReq.UserID, "", err) return } - user, err := l.query.GetUser(setContext(r.Context(), userOrg), loginName) + user, err := l.query.GetUser(setContext(r.Context(), userOrg), false, loginName) if err != nil { l.renderInitPassword(w, r, authReq, authReq.UserID, "", err) return diff --git a/internal/api/ui/login/password_reset_handler.go b/internal/api/ui/login/password_reset_handler.go index d022db316c..ef567732a9 100644 --- a/internal/api/ui/login/password_reset_handler.go +++ b/internal/api/ui/login/password_reset_handler.go @@ -23,7 +23,7 @@ func (l *Login) handlePasswordReset(w http.ResponseWriter, r *http.Request) { l.renderInitPassword(w, r, authReq, authReq.UserID, "", err) return } - user, err := l.query.GetUser(setContext(r.Context(), authReq.UserOrgID), loginName) + user, err := l.query.GetUser(setContext(r.Context(), authReq.UserOrgID), false, loginName) if err != nil { l.renderPasswordResetDone(w, r, authReq, err) return diff --git a/internal/api/ui/login/static/i18n/fr.yaml b/internal/api/ui/login/static/i18n/fr.yaml index a1671a8086..10022d80e0 100644 --- a/internal/api/ui/login/static/i18n/fr.yaml +++ b/internal/api/ui/login/static/i18n/fr.yaml @@ -12,14 +12,14 @@ Login: NextButtonText: suivant SelectAccount: - Title: Select account - Description: Use your ZITADEL-Account - TitleLinking: Select account for user linking - DescriptionLinking: Select your account to link with your external user. - OtherUser: Other User - SessionState0: active - SessionState1: inactive - MustBeMemberOfOrg: The user must be member of the {{.OrgName}} organisation. + Title: Sélectionner un compte + Description: Utilisez votre compte ZITADEL + TitleLinking: Sélectionnez le compte pour le lien avec l'utilisateur + DescriptionLinking: Sélectionnez votre compte pour établir un lien avec votre utilisateur externe. + OtherUser: Autre utilisateur + SessionState0: actif + SessionState1: inactif + MustBeMemberOfOrg: L'utilisateur doit être membre de l'organisation {{.OrgName}}. Password: Title: Mot de passe diff --git a/internal/auth/repository/eventsourcing/repository.go b/internal/auth/repository/eventsourcing/repository.go index bd6d0c796e..b21acba79d 100644 --- a/internal/auth/repository/eventsourcing/repository.go +++ b/internal/auth/repository/eventsourcing/repository.go @@ -40,7 +40,7 @@ func Start(conf Config, systemDefaults sd.SystemDefaults, command *command.Comma } idGenerator := id.SonyFlakeGenerator() - view, err := auth_view.StartView(dbClient, oidcEncryption, queries, idGenerator) + view, err := auth_view.StartView(dbClient, oidcEncryption, queries, idGenerator, es) if err != nil { return nil, err } diff --git a/internal/auth/repository/eventsourcing/view/user.go b/internal/auth/repository/eventsourcing/view/user.go index 3c232aba37..bbc5d3e1e5 100644 --- a/internal/auth/repository/eventsourcing/view/user.go +++ b/internal/auth/repository/eventsourcing/view/user.go @@ -1,8 +1,12 @@ package view import ( + "context" + + "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/eventstore/v1/models" + "github.com/zitadel/zitadel/internal/query" usr_model "github.com/zitadel/zitadel/internal/user/model" "github.com/zitadel/zitadel/internal/user/repository/view" "github.com/zitadel/zitadel/internal/user/repository/view/model" @@ -18,15 +22,77 @@ func (v *View) UserByID(userID, instanceID string) (*model.UserView, error) { } func (v *View) UserByUsername(userName, instanceID string) (*model.UserView, error) { - return view.UserByUserName(v.Db, userTable, userName, instanceID) + query, err := query.NewUserUsernameSearchQuery(userName, query.TextEquals) + if err != nil { + return nil, err + } + + return v.userByID(instanceID, query) } func (v *View) UserByLoginName(loginName, instanceID string) (*model.UserView, error) { - return view.UserByLoginName(v.Db, userTable, loginName, instanceID) + loginNameQuery, err := query.NewUserLoginNamesSearchQuery(loginName) + if err != nil { + return nil, err + } + + return v.userByID(instanceID, loginNameQuery) } func (v *View) UserByLoginNameAndResourceOwner(loginName, resourceOwner, instanceID string) (*model.UserView, error) { - return view.UserByLoginNameAndResourceOwner(v.Db, userTable, loginName, resourceOwner, instanceID) + loginNameQuery, err := query.NewUserLoginNamesSearchQuery(loginName) + if err != nil { + return nil, err + } + resourceOwnerQuery, err := query.NewUserResourceOwnerSearchQuery(resourceOwner, query.TextEquals) + if err != nil { + return nil, err + } + + return v.userByID(instanceID, loginNameQuery, resourceOwnerQuery) +} + +func (v *View) userByID(instanceID string, queries ...query.SearchQuery) (*model.UserView, error) { + ctx := authz.WithInstanceID(context.Background(), instanceID) + + queriedUser, err := v.query.GetUser(ctx, true, queries...) + if err != nil { + return nil, err + } + + user, err := view.UserByID(v.Db, userTable, queriedUser.ID, instanceID) + if err != nil && !errors.IsNotFound(err) { + return nil, err + } + + if err != nil { + user = new(model.UserView) + } + + query, err := view.UserByIDQuery(queriedUser.ID, instanceID, user.Sequence) + if err != nil { + return nil, err + } + events, err := v.es.FilterEvents(ctx, query) + if err != nil && user.Sequence == 0 { + return nil, err + } else if err != nil { + return user, nil + } + + userCopy := *user + + for _, event := range events { + if err := user.AppendEvent(event); err != nil { + return &userCopy, nil + } + } + + if user.State == int32(usr_model.UserStateDeleted) { + return nil, errors.ThrowNotFound(nil, "VIEW-r4y8r", "Errors.User.NotFound") + } + + return user, nil } func (v *View) UsersByOrgID(orgID, instanceID string) ([]*model.UserView, error) { diff --git a/internal/auth/repository/eventsourcing/view/view.go b/internal/auth/repository/eventsourcing/view/view.go index 0bb91801e6..54c57e99f7 100644 --- a/internal/auth/repository/eventsourcing/view/view.go +++ b/internal/auth/repository/eventsourcing/view/view.go @@ -6,6 +6,7 @@ import ( "github.com/jinzhu/gorm" "github.com/zitadel/zitadel/internal/crypto" + eventstore "github.com/zitadel/zitadel/internal/eventstore/v1" "github.com/zitadel/zitadel/internal/id" "github.com/zitadel/zitadel/internal/query" ) @@ -15,9 +16,10 @@ type View struct { keyAlgorithm crypto.EncryptionAlgorithm idGenerator id.Generator query *query.Queries + es eventstore.Eventstore } -func StartView(sqlClient *sql.DB, keyAlgorithm crypto.EncryptionAlgorithm, queries *query.Queries, idGenerator id.Generator) (*View, error) { +func StartView(sqlClient *sql.DB, keyAlgorithm crypto.EncryptionAlgorithm, queries *query.Queries, idGenerator id.Generator, es eventstore.Eventstore) (*View, error) { gorm, err := gorm.Open("postgres", sqlClient) if err != nil { return nil, err @@ -27,6 +29,7 @@ func StartView(sqlClient *sql.DB, keyAlgorithm crypto.EncryptionAlgorithm, queri keyAlgorithm: keyAlgorithm, idGenerator: idGenerator, query: queries, + es: es, }, nil } diff --git a/internal/query/user.go b/internal/query/user.go index 1d928f38fe..a4a4bea7d6 100644 --- a/internal/query/user.go +++ b/internal/query/user.go @@ -292,8 +292,8 @@ var ( } ) -func (q *Queries) GetUserByID(ctx context.Context, shouldTriggered bool, userID string, queries ...SearchQuery) (*User, error) { - if shouldTriggered { +func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userID string, queries ...SearchQuery) (*User, error) { + if shouldTriggerBulk { projection.UserProjection.TriggerBulk(ctx) } @@ -314,7 +314,11 @@ func (q *Queries) GetUserByID(ctx context.Context, shouldTriggered bool, userID return scan(row) } -func (q *Queries) GetUser(ctx context.Context, queries ...SearchQuery) (*User, error) { +func (q *Queries) GetUser(ctx context.Context, shouldTriggerBulk bool, queries ...SearchQuery) (*User, error) { + if shouldTriggerBulk { + projection.UserProjection.TriggerBulk(ctx) + } + instanceID := authz.GetInstance(ctx).InstanceID() query, scan := prepareUserQuery(instanceID) for _, q := range queries { diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml index 3678cfe2ab..68684e83d8 100644 --- a/internal/static/i18n/fr.yaml +++ b/internal/static/i18n/fr.yaml @@ -39,8 +39,8 @@ Errors: NotFound: Générateur de secret non trouvé SMSConfig: NotFound: Configuration SMS non trouvée - AlreadyActive: Configuration SMS déjà active - AlreadyDeactivated: Configuration SMS déjà désactivée + AlreadyActive: Configuration SMS déjà active + AlreadyDeactivated: Configuration SMS déjà désactivée SMTPConfig: NotFound: Configuration SMTP non trouvée AlreadyExists: La configuration SMTP existe déjà From 6463b716ce10698c9aeed78990795e60c57fd20b Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 7 Jul 2022 15:13:17 +0200 Subject: [PATCH 010/116] fix: handle org de-/reactivate correctly (#3924) --- internal/command/org_model.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/internal/command/org_model.go b/internal/command/org_model.go index a86a8732e0..d2f2ad3c77 100644 --- a/internal/command/org_model.go +++ b/internal/command/org_model.go @@ -33,6 +33,8 @@ func (wm *OrgWriteModel) Reduce() error { wm.State = domain.OrgStateInactive case *org.OrgReactivatedEvent: wm.State = domain.OrgStateActive + case *org.OrgRemovedEvent: + wm.State = domain.OrgStateRemoved case *org.OrgChangedEvent: wm.Name = e.Name case *org.DomainPrimarySetEvent: @@ -51,6 +53,9 @@ func (wm *OrgWriteModel) Query() *eventstore.SearchQueryBuilder { EventTypes( org.OrgAddedEventType, org.OrgChangedEventType, + org.OrgDeactivatedEventType, + org.OrgReactivatedEventType, + org.OrgRemovedEventType, org.OrgDomainPrimarySetEventType). Builder() } From 252d0fa8b55f567be2c4d6375ad9c3d6f5f2567a Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Thu, 7 Jul 2022 15:42:58 +0200 Subject: [PATCH 011/116] docs: fix issuer (#3925) Co-authored-by: Max Peintner --- docs/docs/quickstarts/login/angular.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/quickstarts/login/angular.md b/docs/docs/quickstarts/login/angular.md index d6635485a0..bd14073de9 100644 --- a/docs/docs/quickstarts/login/angular.md +++ b/docs/docs/quickstarts/login/angular.md @@ -58,7 +58,7 @@ const authConfig: AuthConfig = { responseType: 'code', oidc: true, clientId: 'YOUR-CLIENT-ID', // replace with your appid - issuer: 'https://issuer.zitadel.ch', + issuer: '', // eg. https://acme-jdo9fs.zitadel.cloud redirectUri: 'http://localhost:4200/auth/callback', postLogoutRedirectUri: 'http://localhost:4200/signedout', // optional requireHttps: false // required for running locally From 91771bc49b57bcdff74c9aba6710b6a593964d9c Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Thu, 7 Jul 2022 16:25:56 +0200 Subject: [PATCH 012/116] docs: quickstart changes for v2 (#3906) * docs: v2 quickstarts * flutter div * html * html * common https:/[your-domain]-[random-string].zitadel.cloud --- docs/docs/quickstarts/login/angular.md | 166 ++++++++++--------- docs/docs/quickstarts/login/flutter.md | 15 +- docs/docs/quickstarts/login/nextjs.md | 100 +++++------ docs/docs/quickstarts/login/react.md | 52 +++--- docs/static/img/angular/app-create-light.png | Bin 179619 -> 0 bytes docs/static/img/angular/app-create.png | Bin 0 -> 265575 bytes 6 files changed, 172 insertions(+), 161 deletions(-) delete mode 100644 docs/static/img/angular/app-create-light.png create mode 100644 docs/static/img/angular/app-create.png diff --git a/docs/docs/quickstarts/login/angular.md b/docs/docs/quickstarts/login/angular.md index bd14073de9..43dacb1ec7 100644 --- a/docs/docs/quickstarts/login/angular.md +++ b/docs/docs/quickstarts/login/angular.md @@ -3,32 +3,32 @@ title: Angular --- This integration guide shows you the recommended way to integrate ZITADEL into your Angular application. -It shows how to add user login to your application and fetch some data from the user info endpoint. +It shows how to add user login to your application and fetch some data from the user info endpoint. -At the end of the guide, your application has login functionality and has access to the current user's profile. +At the end of the guide, your application has login functionality and has access to the current user's profile. -> This documentation refers to our [example](https://github.com/zitadel/zitadel-examples/tree/main/angular) in GitHub. Note that we've written ZITADEL Console in Angular, so you can also use that as a reference. +> This documentation refers to our [example](https://github.com/zitadel/zitadel-examples/tree/main/angular) in GitHub. Note that we've written ZITADEL Console in Angular, so you can also use that as a reference. ## Setup Application and Get Keys Before we can start building our application, we have to do a few configuration steps in ZITADEL Console. -You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your [Project](https://console.zitadel.ch/projects), then add a new application at the top of the page. +You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your Project, then add a new application at the top of the page. Select Web application type and continue. -We recommend you use [Authorization Code](../../apis/openidoauth/grant-types#authorization-code) in combination with [Proof Key for Code Exchange (PKCE)](../../apis/openidoauth/grant-types#proof-key-for-code-exchange) for all web applications. +We recommend you use [Authorization Code](../../apis/openidoauth/grant-types#authorization-code) in combination with [Proof Key for Code Exchange (PKCE)](../../apis/openidoauth/grant-types#proof-key-for-code-exchange) for all web applications. -![Create app in console](/img/angular/app-create-light.png) +![Create app in console](/img/angular/app-create.png) ### Redirect URIs -With the Redirect URIs field, you tell ZITADEL where it is allowed to redirect users to after authentication. For development, you can set dev mode to `true` to enable insecure HTTP and redirect to a `localhost` URI. +With the Redirect URIs field, you tell ZITADEL where it is allowed to redirect users to after authentication. For development, you can set dev mode to `true` to enable insecure HTTP and redirect to a `localhost` URI. -> If you are following along with the [example](https://github.com/zitadel/zitadel-examples/tree/main/angular), set dev mode to `true` and the Redirect URIs to . +> If you are following along with the [example](https://github.com/zitadel/zitadel-examples/tree/main/angular), set dev mode to `true` and the Redirect URIs to . -If you want to redirect the users back to a route on your application after they have logged out, add an optional redirect in the Post Logout URIs field. +If you want to redirect the users back to a route on your application after they have logged out, add an optional redirect in the Post Logout URIs field. Continue and create the application. -### Client ID and Secret +### Client ID After successful app creation, a pop-up will appear, showing the app's client ID. Copy the client ID, as you will need it to configure your Angular client. @@ -58,7 +58,7 @@ const authConfig: AuthConfig = { responseType: 'code', oidc: true, clientId: 'YOUR-CLIENT-ID', // replace with your appid - issuer: '', // eg. https://acme-jdo9fs.zitadel.cloud + issuer: 'https:/[your-domain]-[random-string].zitadel.cloud', // replace with your instance redirectUri: 'http://localhost:4200/auth/callback', postLogoutRedirectUri: 'http://localhost:4200/signedout', // optional requireHttps: false // required for running locally @@ -68,14 +68,14 @@ const authConfig: AuthConfig = { ... imports: [ OAuthModule.forRoot(), - HttpClientModule, + HttpClientModule, ... providers: [ { provide: AuthConfig, useValue: authConfig } -... +... ``` Set _openid_, _profile_ and _email_ as scope, _code_ as responseType, and oidc to _true_. Then create an authentication service to provide the functions to authenticate your user. @@ -89,63 +89,62 @@ ng g service services/authentication Copy the following code to your service. This code provides a function `authenticate()` which redirects the user to ZITADEL. After successful login, ZITADEL redirects the user back to the redirect URI configured in _AuthModule_ and ZITADEL Console. Make sure both correspond, otherwise ZITADEL throws an error. ```ts -import { Injectable } from '@angular/core'; -import { AuthConfig, OAuthService } from 'angular-oauth2-oidc'; -import { BehaviorSubject, from, Observable } from 'rxjs'; +import { Injectable } from "@angular/core"; +import { AuthConfig, OAuthService } from "angular-oauth2-oidc"; +import { BehaviorSubject, from, Observable } from "rxjs"; -import { StatehandlerService } from './statehandler.service'; +import { StatehandlerService } from "./statehandler.service"; @Injectable({ - providedIn: 'root' + providedIn: "root", }) export class AuthenticationService { - private _authenticated: boolean = false; - private readonly _authenticationChanged: BehaviorSubject< - boolean - > = new BehaviorSubject(this.authenticated); + private _authenticated: boolean = false; + private readonly _authenticationChanged: BehaviorSubject = + new BehaviorSubject(this.authenticated); - constructor( - private oauthService: OAuthService, - private authConfig: AuthConfig, - private statehandler: StatehandlerService, - ) { } + constructor( + private oauthService: OAuthService, + private authConfig: AuthConfig, + private statehandler: StatehandlerService + ) {} - public get authenticated(): boolean { - return this._authenticated; + public get authenticated(): boolean { + return this._authenticated; + } + + public get authenticationChanged(): Observable { + return this._authenticationChanged; + } + + public getOIDCUser(): Observable { + return from(this.oauthService.loadUserProfile()); + } + + public async authenticate(setState: boolean = true): Promise { + this.oauthService.configure(this.authConfig); + + this.oauthService.strictDiscoveryDocumentValidation = false; + await this.oauthService.loadDiscoveryDocumentAndTryLogin(); + + this._authenticated = this.oauthService.hasValidAccessToken(); + + if (!this.oauthService.hasValidIdToken() || !this.authenticated) { + const newState = setState + ? await this.statehandler.createState().toPromise() + : undefined; + this.oauthService.initCodeFlow(newState); } + this._authenticationChanged.next(this.authenticated); - public get authenticationChanged(): Observable { - return this._authenticationChanged; - } + return this.authenticated; + } - public getOIDCUser(): Observable { - return from(this.oauthService.loadUserProfile()); - } - - public async authenticate( - setState: boolean = true, - ): Promise { - this.oauthService.configure(this.authConfig); - - this.oauthService.strictDiscoveryDocumentValidation = false; - await this.oauthService.loadDiscoveryDocumentAndTryLogin(); - - this._authenticated = this.oauthService.hasValidAccessToken(); - - if (!this.oauthService.hasValidIdToken() || !this.authenticated) { - const newState = setState ? await this.statehandler.createState().toPromise() : undefined; - this.oauthService.initCodeFlow(newState); - } - this._authenticationChanged.next(this.authenticated); - - return this.authenticated; - } - - public signout(): void { - this.oauthService.logOut(); - this._authenticated = false; - this._authenticationChanged.next(false); - } + public signout(): void { + this.oauthService.logOut(); + this._authenticated = false; + this._authenticationChanged.next(false); + } } ``` @@ -215,26 +214,35 @@ ng g guard guards/auth This code shows the _AuthGuard_ used in ZITADEL Console. ```ts -import { Injectable } from '@angular/core'; -import { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot, UrlTree } from '@angular/router'; -import { Observable } from 'rxjs'; -import { AuthenticationService } from '../services/authentication.service'; +import { Injectable } from "@angular/core"; +import { + ActivatedRouteSnapshot, + CanActivate, + RouterStateSnapshot, + UrlTree, +} from "@angular/router"; +import { Observable } from "rxjs"; +import { AuthenticationService } from "../services/authentication.service"; @Injectable({ - providedIn: 'root' + providedIn: "root", }) export class AuthGuard implements CanActivate { + constructor(private auth: AuthenticationService) {} - constructor(private auth: AuthenticationService) { } - canActivate( route: ActivatedRouteSnapshot, - state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { - if (!this.auth.authenticated) { - return this.auth.authenticate(); - } - return this.auth.authenticated; - } + state: RouterStateSnapshot + ): + | Observable + | Promise + | boolean + | UrlTree { + if (!this.auth.authenticated) { + return this.auth.authenticate(); + } + return this.auth.authenticated; + } } ``` @@ -267,14 +275,14 @@ const routes: Routes = [ Call `auth.signout()` for logging the current user out. Note that you can also configure a logout redirect URI if you want your users to be redirected after logout. ```ts -import { AuthenticationService } from 'src/app/services/authentication.service'; +import { AuthenticationService } from "src/app/services/authentication.service"; export class SomeComponentWithLogout { - constructor(private authService: AuthenticationService){} + constructor(private authService: AuthenticationService) {} - public signout(): Promise { - return this.authService.signout(); - } + public signout(): Promise { + return this.authService.signout(); + } } ``` @@ -297,7 +305,7 @@ And in your HTML file: ```html
-

{{user | json}}

+

{{user | json}}

``` diff --git a/docs/docs/quickstarts/login/flutter.md b/docs/docs/quickstarts/login/flutter.md index dbaed185c9..2cc78b1ea9 100644 --- a/docs/docs/quickstarts/login/flutter.md +++ b/docs/docs/quickstarts/login/flutter.md @@ -45,14 +45,14 @@ You may want to change the Flutter SDK version in `pubspec.yaml` from ```yaml environment: - sdk: '>=2.7.0 <3.0.0' + sdk: ">=2.7.0 <3.0.0" ``` to ```yaml environment: - sdk: '>=2.12.0 <3.0.0' + sdk: ">=2.12.0 <3.0.0" ``` With this, you'll enable "nullable by default" mode in Flutter, as well as new language features. @@ -257,7 +257,7 @@ Future _authenticate() async { AuthorizationTokenRequest( '<>', // Client ID of the native application '<>', // The registered url from zitadel (e.g. ch.myexample.app://signin) - issuer: '<>', // most of the cases: https://issuer.zitadel.ch + issuer: '<>', // most of the cases: https:/[your-domain]-[random-string].zitadel.cloud scopes: [ 'openid', 'profile', @@ -268,7 +268,7 @@ Future _authenticate() async { ); final userInfoResponse = await get( - Uri.parse('https://api.zitadel.ch/oauth/v2/userinfo'), + Uri.parse('https://[your-instance].zitadel.cloud/oauth/v2/userinfo'), headers: { HttpHeaders.authorizationHeader: 'Bearer ${result.accessToken}', HttpHeaders.acceptHeader: 'application/json; charset=UTF-8' @@ -333,7 +333,7 @@ class _MyHomePageState extends State { ); final userInfoResponse = await get( - Uri.parse('https://api.zitadel.ch/oauth/v2/userinfo'), + Uri.parse('https:/[your-domain]-[random-string].zitadel.cloud/oauth/v2/userinfo'), // replace with your instance headers: { HttpHeaders.authorizationHeader: 'Bearer ${result.accessToken}', HttpHeaders.acceptHeader: 'application/json; charset=UTF-8' @@ -407,10 +407,7 @@ class _MyHomePageState extends State { If you run this application, you can authenticate with a valid ZITADEL user. -
-
+
Unauthenticated - becomes Flutter Authenticated -
diff --git a/docs/docs/quickstarts/login/nextjs.md b/docs/docs/quickstarts/login/nextjs.md index ea80fa83be..1b34ab03a3 100644 --- a/docs/docs/quickstarts/login/nextjs.md +++ b/docs/docs/quickstarts/login/nextjs.md @@ -40,47 +40,47 @@ NextAuth.js exposes a REST API which is used by your client. To setup your configuration, create a file called [...nextauth].tsx in `pages/api/auth`. ```ts -import NextAuth from 'next-auth'; +import NextAuth from "next-auth"; export const ZITADEL = { - id: "zitadel", - name: "zitadel", - type: "oauth", - version: "2.0", - scope: "openid profile email", - params: { response_type: "code", grant_type: "authorization_code" }, - authorizationParams: { grant_type: "authorization_code", response_type: "code" }, - accessTokenUrl: "https://api.zitadel.dev/oauth/v2/token", - requestTokenUrl: "https://api.zitadel.dev/oauth/v2/token", - authorizationUrl: "https://accounts.zitadel.dev/oauth/v2/authorize", - profileUrl: "https://api.zitadel.dev/oauth/v2/userinfo", - protection: "pkce", - async profile(profile, tokens) { - console.log(profile, tokens); - return { - id: profile.sub, - name: profile.name, - email: profile.email, - image: profile.picture - }; - }, - clientId: process.env.ZITADEL_CLIENT_ID, - session: { - jwt: true, + id: "zitadel", + name: "zitadel", + type: "oauth", + version: "2", + wellKnown: process.env.ZITADEL_ISSUER, + authorization: { + params: { + scope: "openid email profile", }, + }, + idToken: true, + checks: ["pkce", "state"], + client: { + token_endpoint_auth_method: "none", + }, + async profile(profile) { + return { + id: profile.sub, + name: profile.name, + firstName: profile.given_name, + lastName: profile.family_name, + email: profile.email, + loginName: profile.preferred_username, + image: profile.picture, + }; + }, + clientId: process.env.ZITADEL_CLIENT_ID, }; export default NextAuth({ - providers: [ - ZITADEL - ], + providers: [ZITADEL], }); ``` -Replace the endpoints `https://api.zitadel.dev/` with `https://api.zitadel.ch/` if your using a ZITADEL CLOUD tier or your own endpoint if your using a self hosted ENTERPRISE tier respectively. +Replace the endpoints `https:/[your-domain]-[random-string].zitadel.cloud` with your instance or if your using a ZITADEL CLOUD tier or your own endpoint if your using a self hosted ENTERPRISE tier respectively. We recommend using the Authentication Code flow secured by PKCE for the Authentication flow. -To be able to connect to ZITADEL, navigate to your [Console Projects](https://console.zitadel.ch/projects) create or select an existing project and add your app selecting WEB, then PKCE, and then add `http://localhost:3000/api/auth/callback/zitadel` as redirect url to your app. +To be able to connect to ZITADEL, navigate to your Console Projects, create or select an existing project and add your app selecting WEB, then PKCE, and then add `http://localhost:3000/api/auth/callback/zitadel` as redirect url to your app. For simplicity reasons we set the default to the one that next-auth provides us. You'll be able to change the redirect later if you want to. @@ -95,6 +95,7 @@ Create a file `.env` in the root of the project and add the following keys to it ``` NEXTAUTH_URL=http://localhost:3000 ZITADEL_CLIENT_ID=[yourClientId] +ZITADEL_ISSUER=https:/[your-domain]-[random-string].zitadel.cloud ``` # User interface @@ -107,7 +108,7 @@ Note that signIn method requires the id of the provider we provided earlier, and import { signIn, signOut, useSession } from 'next-auth/client'; export default function Page() { - const [session, loading] = useSession(); + const { data: session } = useSession(); ... {!session && <> Not signed in
@@ -129,13 +130,14 @@ To allow session state to be shared between pages - which improves performance, Take a loot at the template `_app.tsx`. ```ts -import { Provider } from 'next-auth/client'; +import { SessionProvider } from "next-auth/react"; function MyApp({ Component, pageProps }) { - return - - ; + return ( + + + + ); } export default MyApp; @@ -143,17 +145,19 @@ export default MyApp; Last thing: create a `profile.tsx` in /pages which renders the callback page. -## Learn More +```ts +import Link from "next/link"; -To learn more about Next.js, take a look at the following resources: +import styles from "../styles/Home.module.css"; -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. +export default function Profile() { + return ( +
+

Login successful

+ + + +
+ ); +} +``` diff --git a/docs/docs/quickstarts/login/react.md b/docs/docs/quickstarts/login/react.md index 69e7f0c2a8..6f9efc546d 100644 --- a/docs/docs/quickstarts/login/react.md +++ b/docs/docs/quickstarts/login/react.md @@ -10,7 +10,7 @@ At the end of the guide you should have an application able to login a user and ## Setup Application and get Keys Before we can start building our application we have to do a few configuration steps in ZITADEL Console. -You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your [Project](https://console.zitadel.ch/projects) and add a new application at the top of the page. +You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your Project and add a new application at the top of the page. Select User Agent and continue. More about the different app types can you find [here](https://docs.zitadel.com/docs/guides/authorization/oauth-recommended-flows#different-client-profiles). We recommend that you use [Authorization Code](../../apis/openidoauth/grant-types#authorization-code) in combination with [Proof Key for Code Exchange](../../apis/openidoauth/grant-types#proof-key-for-code-exchange) for all web applications. @@ -54,38 +54,40 @@ This library helps integrating ZITADEL Authentication in your React Application. With the installed oidc pakage you will need an AuthProvider which should contain the OIDC configuration. The oidc configuration should contain **openid**, **profile** and **email** as scope and **code** as responseType. -In the code below the authority is already set to the issuer of zitadel.ch you can find this in the ZITADEL Console on you application. +In the code below make sure to change the issuer to your instance url. You can find this in the ZITADEL Console on you application. Replace the clientId value 'YOUR-CLIENT-ID' with the generated client id of you application in ZITADEL Console. - ```ts - -import React from 'react'; -import { AuthProvider } from 'oidc-react'; -import './App.css'; +import React from "react"; +import { AuthProvider } from "oidc-react"; +import "./App.css"; const oidcConfig = { - onSignIn: async (response: any) => { - alert('You logged in :' + response.profile.given_name + ' ' + response.profile.family_name); - window.location.hash = ''; - }, - authority: 'https://issuer.zitadel.ch', - clientId: - 'YOUR-CLIENT-ID', - responseType: 'code', - redirectUri: 'http://localhost:3000/', - scope: 'openid profile email' + onSignIn: async (response: any) => { + alert( + "You logged in :" + + response.profile.given_name + + " " + + response.profile.family_name + ); + window.location.hash = ""; + }, + authority: "https:/[your-domain]-[random-string].zitadel.cloud", // replace with your instance + clientId: "YOUR-CLIENT-ID", + responseType: "code", + redirectUri: "http://localhost:3000/", + scope: "openid profile email", }; function App() { - return ( - -
+ return ( + +
-

Hello World

-
-
+

Hello World

+ +
-); + ); } export default App; @@ -100,7 +102,7 @@ npm start ``` Your browser should automatically open the app site or just go to `http://localhost:3000/`. -On opening the app in the browser you will be redirected to the login of zitadel.ch +On opening the app in the browser you will be redirected to the login of your instance. After successfully authenticating your user, you will get back to you application. It should show a popup which says: **You logged in {FirstName} {LastName}** diff --git a/docs/static/img/angular/app-create-light.png b/docs/static/img/angular/app-create-light.png deleted file mode 100644 index 05a22e7fc23aff64ebd1d44ba821e610c00ed1df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179619 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®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%0Ah9mqy+r-q6LIRcX~ksT~l z#(?|)j-aWKqNJ`$_opgsq-3ZA2EM~i;dcATa*zb=7{C0Q8r{u_y67;-3t&+fVZtaS z|950G>W*u5;F=An;uBWNIw7YfKC&xKV_@%3N*0Mpr8!0S9O+@M=EMBy$nLwhmP?!> z>Kg_RZIln|c8#9aPbs!s75cvCL>2N+EC5GwBA5sM~r*j`EOBZ4c-UucEZ}@Rz7`Otb~IQB1dmUJFJ##$wAUe<{7b(y6csfOb}^FJCX9 z(}x>5Vzjykub`-^a~-;|1YNP&px_76w-RsgfwH0$f2YZZWPgttVmP2ZckBHz`cRr# zW`Sx0d#Us=&pUmX=eFkN9tdn#Uni=;2EPwTgl;RC5sZu31HtlW`U3TVqQZc}Dpji) zg>eykMe8?HiqfeEZX>fIN&-qNC$F0$p>n2))Q;{#Sv$;URq~K!=ZA{gASO2m%#U^23Q251S-d!ZZ8gPa=R?Uz)UV+_@jV__x{q9VsP!jvLaHp z$y70& zPolMwzn|~zUQUx33zy*b_~ZFKc>nYYf}Z#uhPIAXrQhQZr%+vk0Ub4z%w+#E$mlQC z)OTfZn3V0zWV*omoxA+@YsMkLpo8%~*LAPqw3Wn=XQ;ZO{hA?u+#k2r;3MeA9FsCsJ8(J_^iJJYOZN+HKC$asdZog44tRCSB#p zXj;$S@yeXOsMDk%W*MryIL@&@84Nv3Eiq4~)I=oUn2uOE>=AJ1bkEa&cC^vpr7^`= zuir6a%mPw(&OUPrYbPNvW4`TXwqm9OpBsTAaJ+hYtUem?Zu9y zw03LuwDXs4XHyx#wrb>rssi#{CBnP|m+RT~gz0uETSD)V|QrV3N2C~Zv$j@2{!^1y$;_|OcE;nY?Y^V6>KcA_8comb?JL#StkJYZn z_+y{+eat|FQtMEM?W5VJxz`5UtwBlLt6bIr9ez~Bx9K)&t8CQM?DWsXJ=0BrIw1R> zFOI}dXfUd)#a(7Phdy@jNU_Q5;0v+ZU?KgulPyW*GYYqc331V-*Pk;~PJU|F00>$~DzHgSyLu21~ zX!5q=H_W`7E}#KaHWmvU`BUgxqYXu*i)jjv6ms|*w!lCTH3^E0YIw9!{+k{tPB~k8 zC`t-RP0Q>b=57Lz85K4M>anypi&{dNHaxvk^#d`$aAS6&67*PKip{c4qndUU$AIwc zhsD8M%?IHx&F(FTtfF+F2+9vOm0ipq6t(VpN0|8|_VWo|Y$E5?QEX&40bsT{wyH-` z

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%0DJ_F;Z1 z@*!eKsTYMUkKvWIZm;j9Ld(ga!5{9U{8V%3My4qlFisl&F0cTa8QbrUI&12m!dDQh zO(dkB^fAq18_f^Dyk@=oPW|ah05A6aRpIy7*|%>uud$mvz-obF2UsVHh)~XAC6S%p0kbd&a-MeIC zhqn&t8aOLWxb3=add1n(kl{s^x`;4fw=dF<(3^>&qunjN4ceRmLMU`qH+oUBMYx(& zz~(bCVyG;#QcDmPPQ~m-r`cf6Z@$t-#x)k6I1GGT@elm0_WK|8H*_&ZijB2dcZhqV zm&&OnWa{ewnP@2?O^H$Kchibin-%W;mpuBi+g)y^GjEO13zt%&aqRvqOOB1Ob58w% z8)cKT;rPb`l{bQk^lR_o&@YEaZUM8{nW1{$K#~}s!v9)DWQ(O)w!XAz7pJ}1=_=*! zVIb89`NjoAg5SskI##c>aL~&7g%B!~^K5T{suG6tyAw{1D)&=ITdtnZ+Y2n}m7PHL z#MbrF4Q7t5Mu}?}X{)tctX$5d8v3(zvSGowtwMq%Re7BH}_X;VZPZ+|} z(%;SAJ|izc$!YW6`bE~~Skzqu zO~l+XKYG@deM-LyTLa^O>FMfckpmBvj^_>_#C3P+zZ>Rs?dT(G{AC*HbmE9!a{k1ir^>A+<+J#k%>rQQ855YYqnb3D*@n%tSN7QJsQ zf4MAp^kWa$NWhUh8dPy+DOq~5My*vEUB01~5Lyh$Bl-*5FL0b`crorGo1J7+pRFD8O&zGUO#a$rxH~ahbuZVsNHFfgT8C2i13;3MTtDy z@Lw_p6R(8HpDn1;+<6KBu9#dl0hZFQxJ0MXo+k9%uRvIY_P@h&3izuTTg$`|f5@E} zpEIu;$gFg(-_GV+!Y)l@0>yr`T67XF5K;~2E zAzEO%^S=-7FB;N?n2{X_)^%v41UtX8+Y-J?X!_6FlvlCu3p;!92{02y5sF=zvg>c6 zxMU_fVC6yl{8XQCEJU?nS&t;j`;AUtsRzIksAfnubUrX}b}U zn=R|N{LV8M*m(v#uTQv~l3%Z3DcMVvq9EO{hvg_{NJ*>_XWoqha+ga$e~}hej^gJgvEr8hOg@_>Urs9*Z`}n zfZ=<nk3cUsDz)I|{FZ8hTsNA;`-%v z5AxdjV1^Qk0z(EHkZzgqPJbr+bnbW~42t6j>{|+p2FRnA5Pnk@71!?g;Qyn_{`mRB zsl$2nYLo$P2b!YXNAIQh?b^EHS$I3|-0^jRDOPq``ftbOvvSS3-2r4zZ>#aXAeB9^ z%hA#5qiYRis9S#R>*8}2_x>w>Ih|d=`awVg>xtNDy90NbJ*U{QIlyEZxIWc0ER(3m z2}yhj_mX%@G!}Atab{kAEjT)q%ub;_jmiYsH=rAkaNM*zsS;WrnEOR)fVRQNqp8`> z3`NZzyEh{bsyF%!5;=4#Poc3g#omfIf1J&MwC-UwWY%9Pmx?*@9%A__2Z_dc6H@C} zSoq?ae$y6K0(sbr<#N<*QX=T13qg&9cDTaym-3nBo|W$Nl$f8GDR~V2hl%%dS-_u# zS2a9e--m1FilVRa--UH?*gw+^0niIS$y!#k6^y>pao$4)6%4Iatx3Vi#biodIyOQh zz2D@zVMmbw`C#pmo1!|aAwz~u$uh^38$0O`*n@0=2_Q1XFL1d4|E~-1+5hsg9oo*)5#;`MNr^ku$~UDy2)= zb9L6Cs#$(k%B&XnYdfIBc211%EbRxfoR!3; zfLeOjoF6Y!00$g~{0P6G{>vfBi88u_1htr&lA#rb9nIhQk)?hOuW03rtwO)v>{-Y= zy(D|vC+xD7EUkDGTk`M|Zsfd$>Aot>N>XKlBoL}WzQbZ!X1^G`|1B9646`okv7QKi zq6kEpZLl#K$|&{y@Fg?CP!9BAEg6(s2nDSz+ZMeo%Pq8I%KfPBW(S;PPGK0gF??OM|8(BVS`xxryC2X63DgtF zh%Qx~lqRpXd8$W6t*Q2&vGfY*_IoH-I~i6>v7&8eS|4{oupSoe1WrgX?&Q*yb$`NzNy8Uv=For;3^xE7e? z>+e#&{`+fHt%mD`#~h9WJ~{+iQs=05QT+SsGx$R-|BLN9UQzydhfzqI6Joz{XZnEs zaAwKl{;bq1NKg-9{FO2G-B{Zvcfj9Mmf&hVO-5^lzo*(|{kq!J!=1HSHUypbO6b1V zswvn$QWH*87DPhi=LKR;Rptpz-HF@ZIn$f&YWVExFaxl=CI{Cv=sVhnB;wtDo%$ z;dmZTP3Sua|QSxiR=0?UodOQ!mbpC9kDYMW)0b;y8CE;8N;K zR)0r!O_bC`E^7kp+NZJNvg2;8)*z`M z9Q+dZyXF7Pys`zA{|H-^`C5pN{aNSIiGR^N%8vM6A(YByrfkdSrjc0V>Q&|5TdEiz zxb*hy4SXAEZS67VEwHMN#a4nbO319;Idt^(t_|dxcN!9#irU>Jb`6o%u;3N~fO%h7OU|=aw@oCp|_Kx zTQPo~I)$Yo!l?e9*Df$;-d+&*Ki11mI#Anp9&BdKP;xwj&O7l~_0mZvx7>G=6Id1? z<+r;#jtOCGGIBV)^i<@@h9;HWOzp$Z43@37*Z+OhSw82u#Vk-}wyIe_F}k>+&^bq@ zEQx!jUzx`YCKN3jmiuqkpQ%@o#rMg_c(QmZc6>I<6lQ%0U-u@3mJZ}Vm$drDK*vJ* zg(fKIPHcK1>U2f^K=S_O%T#p{b~gq!enW;wO*_#Yk^I*%`Q53A7kqH>-8#Xr6hn`_ z_G;HEOL1q|9ITAMCfdu*zH7=^71CyP#|rP;`VVY2wG$t|W6z=F*aPUE!#=FvJMT=8 z5w8ju(T6oLeN7n6#!=T!bd3eWh!Gn7|9D+H0y*vLKU|0pd1SEvzv>igZ8R+NO-P$fH(+z zAz;s*RKZV6)%TUA(q}X)zbW}l{pCri%EowuFC4i)SguMSaT)v?EcQlhj2EL9NiE1m zU&luD_1zoKWW}~dqm(g5)@zg8(0XkvB&ogRN<7m1x`A+4v$4{G4Gk%9u0`tkVkj#ebQ zve6*>p&p~t-KG*YCoAV$GZISF4}mtm`FA;@c$VJ+kEvb?$TBEAJW)lpg0_-SY9Vv! zu+pn(oy48P1(L;Dg`h*!dmw(&!64lduko3^Nzj273Wi}|N5{Vn@grLZZkS(ba=S77 z(xIRqe3C?yE_qjm?|8TT!hcLDWI3HzFi;M2Zc2Q#ejg{+FBaY?NCn8w{-_nH0J;_s zDPN=z(G|@A4B&=%oNXz(?6Du7*R3{(!xhyrS5Y>S#I3J}28QQofF9=Ak6*nXz_*>~ zQ={HW1rC^uI`TL>Tk3xr)$zP894iM>OrR^#u71&3PCMQYxF;_|ePsUc2GQ+=89%4f z_Y^^bJieGbin|Gu6q6Vt=w5c>USf|mpj~b>rhB)MH?JI~r~`n3hcbYyN2)ZZuo5bd zXbN7X0zn#d=)|>hfkN+nBKtQb59=>6Ai_4Dx=pE z1hT*k4XT+gZ){7Q9%Os7nn7y#)|!HV?N1WHex)y@#mVd zm0atXZI*R$O1whvSjjQe5WsSubBStmFCfUypR3uLG%BTZ)+_8CMPZpVIkFSfP#jl7 zJ6)fOb*7^objY#D{k1G;Ts^^K_Z4#eJvtiL;2)d$ZMz$CEPj>YR z=b>XP&+5*Uw#Kw!(qZRq;dT1-_PSs}9oTlUe_OizQK3Ay{#WNk-GOzZXo)7hWw|b@ z8@0c?q9aJ+v&KD?74r^DW!F!iS2x)29(AMYWFoR1-cw*%IZP|MEG?GWfv z2~c+^TLqD&#UpA9#5*#lO-zZ@iY)c1`T=h!(?98?lC9HP za)BJ{`{XnxX*35u7_&J;UbYlK2xs80c8Vn4^1!y^vV;(dcqhZmi1mW4AG`+osnr?{ z-+!4yd`4$J-TLX$e0?+0*?F8l{#rV;&0#^d{Je(36B)WzA-DLiyT0{@@KKoNSCD92 zH3B0@rMkpSiRy3A;|b`c&${)JFE^g^G-J*FIAtHO>eNK@l$`)ifxH#WZTWomF+Ta< zwWeOUDO)9oNB0Yx?Uz^|bBvq~AvU&FOXDXtuiXK)$28~jes8C|nHl~9eb6B9EVic- zsB$I*QRxME88xpxTiyZr^0F8IaT!&m`7B2QZ~+k&Jq^x)<>s=2uvO%%^56Mt03aDZ zD^@?{=VMb2r!)p#(GH-`TOEHnAorsA_}ms*Xecl++n?*b+Mc<)nhFs|3kt4$;E{~^ ziA{L<@Aty@x+l$xgncphU5hCovb34z$6qnmvWtQ0k)!*GHxMSrCnZPtml&Okl4N{* zTX28P)KmJy*vT|MgTQEw)wSm+&{JxuUIiMrU+JR7=?XN1ZM;-0+WY(`CGD@yQd)&~W!@Ev}=k=m)bw-6psNt5=v_I095=KSmBK3M_-__@d0884{H*ud7pK z6j*pUEQrO%`#!FT3?>tK9(U3I85b80Q8vW!2jE(w_^O zANX3Jk%Hx>Pa`?|7=lRPDdoc?EZ)9>1OjO|~;z?PIQeuM4AxvmlfGgQ1*Z3AQq$!abwAxR)P>g=p#h z0*ho@7Lx}VTA3(Q-Bf-0eFnNw_ZH$I&iU&MLZcFe*@{`gBcd5!#b!>w6PHS-45mV` zS+6SaXPUe0iS8Zi^pjWvn9vP<`cDBo{!cPaHPvT(+vr!vA7gCmCZmdodBO`x^P*i6 zXnW}WB%LT_AB`E7wdxmTZa;qUdgN0?bKJJJIb}Pai@mii@VNOaY2e_ddie4JKUgc2 z5?uivaoWPE$;`k7m;&dMIV85G!~+TXXP>hV97U2TyMe@febvNC1N%s&t}JNV(Rr#2 z5A6_HW{}17Rq|e84O$zLWf9!HYKPlb%>!wbA%Q?QNsdMoW)s@KYi^VtcN@{rtTy-~IzU z;mlNCc=VbZ!D z^6f=7947J77^d!a2Z6Q++qjifYgB7#2x$@qbQcRd-}c)Q$CSVA(ZY|NI|ShrQt;~M zK1CJPXQrenfU{hRd(L1}|IAqD1}da+bC;{WG<4q_eL3n=kP&2j6yH=^Arv8)ao*CtDt3XY8cy_Tjg2g zp_izu8hAT2VajUoVt4D`QNIch19b9>4i%6sUlSi{uKCd-YZEMP?A_++X_MvTEqq0m3W+ z<&$9F2bd^ofsc+&9MKn0R;oBo@9pMGt2sfcxXzIw`-j@SN9qQGLubb$iL0SE($*H^ z3ng}Nn!wc=ZYtiLo+0+u4d`fI`>`|`RL+fDa__zH7lnxi<3NG3le3-}C;u<|!Q3$a zCX7N?*_QG7i!PK{R#XtiN!hY~n*p_BGxu&D@(FDT^C{#09XZ!)L^wI*)ZAh&?u zSzEe69>)uKZmzXrrkb*^tG4H>uj{@S^Ncz6ZZ^N%@?72cT;Pq5nF_kO%G5F1tyoxa(J&RI+^nEWhWQ4}E~n_eKcnsp z?7cDT>7-kC`HB0}=;Kk~)giWjXv!wXV+nF~*~%Pi{O1%+{UJEei)Qa0^zEJrH2cF| zdZ2L5?b%N?Ci{LoXLEnvZTdBr)C&Ts);P7j5-WZcm<3%G2GXoI_GgPEcKWT_clXvG zl)_QpQ#RhrFZS$zQ?FGVw7Bd@?g3qjpiQ7-i&+*0DBhiVj z7)1M2YUNA+{P#KIn)uc*)?07qFY&?pNa7xN_9f`j7YuG${Q-B!$sUOf1;yYdF1yQG zoG(sI2@y%jLv-q^5VgreA~yWsE9{sJvRHGPYIvTsMf7i)?m^%PaCJhRQVXNnRN0M_ zYu`i;-|aI~Qdiu->>)28w{h9<^pCG_cEj$Vtp=-;M&`gaj0+qGH!O#D=h(m8dc<|b zpmVj;;@iluYyS5cI+ASn>+S1HO7ngy%@1y{h*eDCHK#d)6sxg;O+ma{UqkWFGG$EUU zBpJUk3eSsMpIX}Qz#mU)`QdDM-3}=gCVb2GYIyTRpP8KUh~3w+0b4W3S_eNx+NkKl zGKWfr}?4Lc7k`3u<1gW5hzgO-YxpxLMq~5{} z(f3F^Wx_}@_4J*lq>IM6N;_}XuKh?^duT1iP^nk6P96ESF7@k!!i~rFI^B95(-KWH*z5JF_=k}% z#>yC;d~F*@?L&63^D)YYW~?9nQe%8MznUjAUd}jxe2EcH$G!(LK{C`(V=u5!!-O>+ zo4!Z;C+Y^ThPW>d4`o`symOd8E6`++!S)~v%82oKZOX6a5(mR7QPD9pKHx`$?U=Fd zwP#Z%cfOWk{2p7dXh|1|fxm@(Ust1&z0NE$m0)q&uV;{2(Jui{0H}o-$81I){{2gR z?!)HPi%zu0T{GlmkTj(b7iwps49rXXOlPB2QlHmcAJ?E>xNQ8OClI;2x5G{4GyP3O zqv_wLPPw*AvCQ9?Wx@E(KQWQ!Og&A6zEav&0iDaB)vLl`=%7zc=810+%8lKY(W|?v zT6rO@E~R^{VZJLZsp?@jL!FXHsrP38YxBbHA@}rEjL!cG$>>E}JEk;So9Qb%YfEdy zaxjK!OX~=E4LqHlWh<+GLi}VHyzIj*U|TSj178vx^CoSSUo+9cr?cTdZ*?PykIh|! z&=7j%h5s^gU4&KFBB0q^#PS>9Wc z@4@17ODL5!1N0h@W{qliWuA{?kKK&d@(OX)0i;OiyPgQw-SdF7!CoDO)ka;{t1 zmW^&Fl;hi%pZFEPwR=;0U)qXxZB4avP4d{)H__DINvqT={N)X{ucJdXBT2#KLBLul zoXtRs~no9LF{0k zYg1cZ+s};D+tUU=7Rtv3Ts1@Yl{4rC%w|7)vZ4)lVf}WjCK(rAspQaclnQBtJC=Wx zYUq=S+;!TTsaX--%f!))w+ih|1>^_5=mJU_BU7MFTA?Ge5BE1>3b(>Hf-eT|_^X1( zs(hkaRrUrrMFh_+hNyZjyrNngn$V_|pYN=L)YyYBPta8vuWVEJ-$drtA2`%dB>rDSeuUV<8X3tRi8sM1VdD(Z&S zh5dW?Q~jl)Q5z8}Pd!__Gxuy(%y}^Dy#=N6%3EofBC*S7*__EkTVw$!D?q6A`K5bX z8=|fssQx1S)TS;OTIMAa0~leYEc5=%mh9ZqYnEwvpVpz~CwKAicL1vfl08>2Bq|gE z+}V{1=F0KQPz`=FN;L||{7tM}iT(T9)xudiwC||v{my8*!37+ZEXs2wvQrSmM zpgd=MNvfy~W{^_X$>&Fm$V+9}7837~;w#x0I{PP&w!zl?iWcq4WYE`p zfBw@XO;S_a72szZ1!pjPc&}a_;7TU=L>hIo^Xq7AI3(b@<6OIBXuBXnE0;&rT$N_C zshRm40}kjso@7Jt54=GhQCbRu6hY%}>S`IMP^CA1Z#sM2?JY8KmDpr*{?wFIK~AG7 zS{~J3!9Nw2x^TEjM1SllmMOuPN224<CWMjizWlqgZc{$9+S%uH?rm-( zwfES>5TFg14fR`QwCq_)PgLDiZqe(UIBMtFRppL7~Ta&+W4cv=4a?-%o9RUp=m( zW-0GwVjmR{!qK{u_3Ec(DDvsX3A#v&0~LqR|vt| zclN=D|EdaOj|-(f3mtwVS~u$_R?(QxMsl+iK4rUq+5C19H-+EBs1cz}7QqJs0Ur`O z9xM(Q1YDc#^v*w(pZ4}tJh_#!(1E?1(edNSqpHyzCKg&JHscXgu`12;qpPuB(+_3! zokEg5UQ*J$3qfLX!?)l&wl`LtYOKX;9z+ejYI=MRRIN8?DnQUW}Qo?SrV*+QX^4n;lsp4&v2pG^I5QB1@W$ zqW;b_veH;22L(wpmvmZ_>HaqcQOzz;ezH39ER93(Lzt#jz%!fRs({j%8q?A!0FJHh z8+=3^Alq^%hh<+Z=qB_f=$o!uT#ll|mZL5PhM+MxMUrlLi&xOf@9bFTK<2#b`aR%N zJ%nx0Mf%(j9bqDRQJt^>KF@bvDx@b|Az%YeXg}TMcign zD3^ST^_jP^gf1==G_49y-Zxyj17(wYQV#3qFEk}~@_+yJZ>(OTLh$eA_G|m@*sIh= z9-lQuS{`Zed;M)N-nHaMx5T)@Y!|tWX zR<^nQ=PbFI1*(SC7ku!EiasgYg*`;s@JX1APR4ca@vlDG_LaH2Z0O478nM+`vm2Yj zfVo(q2wk8!d18Upv{_GnaEu==4feDlr`cET-51byLXOHpC*u*W;W(k#(r41*B*y6)V6b>63|T(gnyYi&<_ z2QE&TD~!_*uqdyiPgZyRSHoacvrnY=XS4#(zan{ zCrEs*c6OjFxES9m`Z;0uD>s$4)Bdy9W&S_rr$5a)(M;ad@e{4(I4b))UH)%MVe99+ z@JjG6)lRkDP0wA5$y=rB_E(e}S{8*ed!Yv5%34drFl*T> zUq+m|69a-ogWPD2<`fW)EARz8nOD-Vl> z+DcX?1LN2jl~2;kQ#;vLU*%#V@iI^+1cc+KF!AM?N0QG?M;3>>ZIcO>K&KtGTkhBM14%YQ4&r1LqItIh1qr8mv0zos? zT1yuRlaX)OtQo$MhZiSeLBHZZP8ldcZ5uIP;YBZtLxb+yocjpe71(Eg1f(I)1&o^I zGd_A-`Iml)e{U5dH77xkYS{%eSHV>X9ia<~yPmvmi(W6T6yD+jR_e=~&^#d|^XNo8 ztPJ0dTD-GCi(3U|mn>r$5r$JDL$` z+npnl+sIAGgY!IZYQfIQt^-N;ODy7HhS&}+zN2eY>X22Zz=4G0$?nzaAAmGO$i-aC zl%bN4T9M9b*_Pg6adws8YT_f_LVLchi_&Z_c@!!>of*rU`we>z-)z`0aQGHc^JfX| z`}%8HM+g}e7M3XW@ni2eUJhz#)(~shz1)5duhbnG7ZT+jy%r@fmt&?GE+RO1ZTm8a zQ3_^D8?a{FxfTX9br+DSu}*LuO4w99)X(jV>X!0TB?u7E@=4r>K}u0 zs#6~3{ZNhS{z#+tdCJMBkVVI02wVIuL>8>s7hU5Qp?1g%O8#V^>%d* zQgVg4&a6w%jm-wkCe6j+@fd$`%VgM&mWEMS-f!!n68tk3R5^gfoTy%Al} z1U|59J(1vD%Ih_o3o#$FF3&#jt|6RG8B{?|;)ks}i)oprabc8W1L-$;;wN0C|4keE zp^3s35Z?ryw%MU6@Y40#f9Yhw|Hsu0>8>m6l>ege<<*@C_9Aj^ly52S$2j2kwYlV0 zkhalDS*@j;aIVy6X!kSmBxu>B`8t)9l*OwV$Z;vj^K%xJNWS2Tw%@uy)PfY(P78!nC z(`MST$xB=OGLZD+zZ+ty7J|bRy|dH z6SOd9Et?g!H?LyldD2~Ya6XYUT!OHC?Mx|O8j>2T=^u8_@umDuAxzh(Dz*8omTy;2(@3-Mb-n*}ukJub&E#dR*Xt+-^_( z{V|vmS2WBgu;%?P!gQDQR`n`Wc*lJ+(puUn*!9C0%^dhcx>lt7?ByTH3=r?#d68$@ zh5Y3RXk#F$5POlk;=8Yo;9=Wv&n)ZYrCL${3x9C`MZL&}U(RwgM_ihEMe>=Vd!a(e zS12r&!lGB=ow2?j{pmIn_uWt+$9b+Ab$(i&xaZKTzE51b8c)F=hTxS~o}Ol&_hwhR z7^PTQj2QO;xzPLCy^_T8YrtA+zd7YG;%MH=uSA97*}t^0z@Wv;vVj)%0NlHP$F&BM zRDs{_MeR>@WkIgq3@Po#Vs80g9%u8rWt83b2p!DFw>e}-x*r}$s2u>c$rRV-|BI-% zjEcg0zj*1Clui*41PKW#DUp`$975^t9zsG=8tDeX&1$zO z=##~gLiniwfMka%Og=7OaDLNS>?GN^5&an|X79JpaSOMtqYlhGZ58Q0gCjakyq1%J zrQ6>?u#RnEkn{Rw&5;h^>fs0gobKdwy?EXw2K`h0Ly|GND}xRAC5+5MyX;Lv5oVm6 zBYFjY%YvZhexY6WZzrxp$H!2!IQz$v*AKculfvhsacNGEw^Lfs`=TG2U}Wmlb^koG zcV*(iNxS^&`!4mpIQjAjD)fHiYq9Sic8hae^~sntG9Y}B3fJ=y&wNmu4Vv%0u-bsCtuTQ?=+Xbe|jnTcZL7&a)mM=m= zmcC_)aveh&zDlGSxxjuX1SD;rB;l#o@=ymVdd_r|%A~c~2={ol>qYE_`@1WyTsFeT zFW93#$jX>IBB$RjLoxX{!Z#APj&!%M6xgZR+t4>Q6~U=%Qh9-nMD;oXvvW_et1KS5 zcvX4fOi)D5N6~|gR{-`!DSN4k-cIB_gbdY1+A?)Nrlg|o4^L@pbeE2Ti+jc?M}@o6 z>{Cm#k+?LGv*j!o0|jVd=;0pGFnZ{FJ}ikZ%O_{AgPT#O+)OZ8FPMuuY&PDfxP5xQ z{+oq-WaMmaui!MX{CDxlWv1dK3Py5Z1AuE8&0DyLSg4-%ot@T#VYDJNeLCplc=Zz5 z=u;*E{U1l68KVcUtm>jp>(9w4Kh~36R-IC|xnf!a>WRemJTaCF2G3eZ2CgSMKK=Yf zaVE2Pj!!1-qStB)*EZk?2+1=k68r^g$mF@T;&|)u83kMU%|(77YIS@SbBperg;8@9bja&7a*;+;(ckfiGiO zp)$P*lW4>8AsfEeN?Ur*2b5!3zBkr|d>!|dt0VTW7#<&~ksgD^kk9l|kADiw%(jrV zk{RCQA5h5FN_5ToXPfxL4n%LUR#)rz!;Tl)F3IDmaz89&C91-~sp7jU$Awx%ziwG9 z|CuV}&{uw{pzwCl((Rdme$uz=d>`#qPnGs^#W?;@x)PS;{C{Rw@hTTk`!vi89Cg&) zQ%0>H9EjwlkEDJ3h!C;!W{*o`=n!8!psm|Q^?N>g#qS-C(%SYHbo3vZqxA+94ICJ^ z$oG&1lhCd^yHErX^6!Mk4DLq_$j?RAB3GXr3Nnbk&)WFWxnT@}&x!Ct^I&x)8Ue!d z^&a)4L^h;9tP~rGG8?pD395Hbi2RO^qma|iaA#h1tbley6yZpZU$k*`?JShr7Oh0Z z6t%%TnMO*T2&S!qj6HIOanYonEwuHpK4FTh8MlqrZungaHP?aG5h-NX8)gE1wr|T365Tw1=syl}kf~DO z|3((-;5XJD*~B-2+eEpW9DirdVaWah5m||LX}Z(_ueV%C>(+R<{V0muRhR%rm({d< z%Du5+(oF&k$rj)w1_3Hnd}spLZmp36hz^H@>xH5qQPJ)x;ob zBtgGhroEOPeku(zL}Uq*{KUE#eg8tukv(wOq`Sep1`Nm8;B*=q(bCQss5l(ke>$N|)98Lwia0PZ%4U!_Y^Djgs zoe+0VWG`L?J$#rE7oe3|N)wXk>SO8VZGD0QL_PQfeUT##=v$F;&Ul_#%ILjI+F4Ur z-kNqDBDQAnm9B&{;Pr|a)oK1L@r096f)sGDJ{qA=0jg!P3Ba(K#IKT%&{Y`?ul4CR zv&iX6R0aHcIb?0ppZ0o@4EXslV*ea_`Io}U(?{wcAMct)@aizB_WCkXOK>;*X;rKf`}$$>Kogw66bI3CFMuk$Qm8Ec12`LFX9Z?+5Gy&ulr?|f2^sl(g1 zZ@xOVyePV}LpTt>rWHatf0SW9bxZs+3td1TDJJw&WL#&x$E)kJlhs$r?_}+GPzqpQ z0IMPk{u(i=uPGWNK4S#twQt$nA!0IDtBb-AVAQ`qm9f?i#7Di+T` zUgy1U#o|a}(~o799gO%)TN!nZzX*3U?d)eT_BLlS~+^5 z`onx!mTSJ7X<0%YDnGgv#Qxbx~v5J}<>f=hfd_Uhc=Y2+YqSW7_(auAbaH6mJn&kd3^2N-$KK8`UJUA#mc{4fkh{|su5qdCXl^iaFb z$m8}?3!bxvCqEF7)Mv6Fo1^1Q$v+{7q`-?hT0QoHKh_2LT_Ifd7`MQ8J_=JVZ+4=N zQGs4BBLPkqF?_XQc!Mh(hNNppEel+!qI2>@9y?Q38roLX7F}6U7yrJA__&ndj2M;!gop)yu`(zy>$nJ|u{}M13bnR4hJ(xD&g`PJVJl+j-e%g@CCd%wopCnqSFY z#)vAv01C*kc!S%?8SKJVx)#YVo#NlAr!6EuE;_8v(b^I4}kmadJQ2$^EI9z>tcfXYeR)GD4amzy59o^;*R#7=V z;VaRy9mgx_o?r_;8dj`rEd0RLOwG`~kh$`}p~JlyV%J)W1fX#7=55F+>WGU)3rX6rMo{txl}n2+GIIiL0fxXtqNdJF-c^iwHJ3?_MFR=b~!KVRl{ zSL7XOJ?tyHVe~*Vd_%=%p%l(*jwg77SiN8LD)nA4)2@dy3Es?{X;g6zNaTBT~Zi=Zbd_lfU@)H^d^^ zYjpUw`o2|8R4B9OU*QJ0heeyQJma~a1ka+drdU5Sg(Jg$3~K8aOw1lhYT z&zbz;DfyXu{u<>^DbJ1FegKziA^<)H`*Fz(t0XoH%#z-GTXsHU;^=j=eAdAlkKSkA7UM14ujIgJufSPfPyhqzcl{t*fysmM^phw56b}PDx6XE`LOBrukE|@ z(NFHhm#j17NM@fX-H*VZ4s0Co^p_w%{J0baa;=_{{3<)A_;?1(lSuP3EBHhtMJw?b z>b}g|U(34;G`-5gS&o=Qe`F9sJ$Fy$zNE+9WN`l@QPTwEHDrE)boj1SLQqd~4l?;N zVrjnrq9K|Q6j4ZC^Y8r$G9Ks`9rEkeIrs)|N*1#jT&ee%Sx>{INnLk?nD^NzI5l0; zSIKWOJiZY03WK8OPT{@Y_wY5{%_Nn}S&Z-;#LzjGM}5|>-qps+7+@5(x~iPxm*GKH z4VE@JQW#%BXKAI>dx-_4>CfMPztn8N2%Rfzo$R_!vY;D9 zHx9M=AYv_`&(j3J+s9WMtMxso)olX5lm zI$gNvhKnWt+5Gh`x$^EyFu-5+nSO=d=#4;CGL3RxCZ6FPvg+H4B-YkB7`Vp>#!H(D zzUaqA^#3Jf8QQg0C4q1gw$XGD4q9@CZulK09i_&=aC#WeLNDOz;sny6STUK?6m*l%Xdc8pA^ThHx*PcVp_m}einS&vqpB8trof@5+n{A&;&w zk%uwoqSnlCC6a>OJLcoZOpzz2X1>&n6gxND3rAwW3~93k@!d;E^2Fy5Rgve#(P8G1 z_V14E={?-wb}H!t_{&P`#~KaC!j6I0+=ji)L1H>x*Y}-xh>5`nJ>t>CNF^$#LU8VD z)rTxa%2(gk+*W2VJyK-+{XCX3&*8FJd+N3eMu}Z;u3BZI^)g-;Pqn5lH76TB}l;;s74LT5nwy>wWp& zi&e8)cR&xng#YAcEdRRue6^7!os#xZa2mC9Cz|BUfZs(GUN!;X-3O!l7rMvl2_KyX z3r3RDqUXKwrAch$&mZjACX+3f;d+_3i~QLlhSB^kkP!(Q+yz(FT524EF>gNkOOcMf zE0D{bGVs(8j_?XVuC%OI?Hxwifc$`YdA*PVi3wWt;V}>DNlM~3`4LUvdo1Sh_T562{5-st?K`tC&6cHc4A#nK1g}3h zRNh>OK=y$i?DeYbp;!ytDBq&qex*J_vO$I&$!BG{VSHD7t~?F#=+A<6SelpK6>L{^ zsEU8(qi>^~MnY575(D9gNrT-YY3poWX@5z>hPdrW3mL_lj6BBMJ8VBNAY7TJg!f|I zd#-S!gb)Z-uxP-Z&^s)BzjPLgawg~>0?E-Vky41mi1!dVWJER>z$j`lHr%maf`b1- zSb)PL5t7ij%+9Zqe*I#6+reUj>P_D!T|yAtF+7NWR6bUUOb0y$@d1PkfP1ZNX1N@F zOhIl()JS2KmW?xV4?!OFs4DY}%oSB_hy0gM^pAp9av`%mlOc&aEydfe4`2-Dv+oka z)}B@(B`3%@>N=KaGS|ef5f(*H;2(O(cLw(*CNBt53nxV3A7L!0TCifOyk4jv zOOOK6KnR<7GZ?b#=Jy?@0Ft(Au{6f7U7qCTrG4Wx@SaI2Io;I``k7&D_6{2nf-j=9 zi}$*N6!$fh>IE=bFQx|(yrQnStn8`Of=y7z`Ovt%_-!p6)JOk#9oJ!nex=&(;!`ao zFCm780V3EU`0g(qo50%qyYSL@_U2m1cF=tA@fA8ND6C{(-52H=vJ5nioa zUf*cKF*%oErS6>5qVyVcJC-gMaoa>`6BKn5)maXd;zD8+ zfo$oI<;76umk{mNtWxktqxm!rQ)}O|Ch^Bm&Pzg*IXr)havEo9+zI@qNk~zQ&*imi zLNw*l8BYr-&iz@qTiSwkq)dn&rmMB`)E;m-Qe3UfazD)>usHO%-zA&(32 z>sq_uHE^m#SBz=eAPuoi;wGZGm!JI0K8O9DN`{XF8v-EK!GAoK-ng#NBLm59vRE;?67QaaYr1!y_O_T?zxr>-#L0kV*y0(Y{fR2_GOP~ZYU%F&Ra9@C^R zMpTX6Sb0%><%vJOVnc%ct!$$HfV{>vs%?zFVc}F+QX9i_X#Wr{?{CWV)B6tVilGfC zhe^@)tAN^Si8o%3bin0bYhKnd9+DfYokuOebg%(z%Zz`iJ`}5w6ziDu{`YIYgqd(Y z)5>_hv$6W8*U}n>yHc2UUPXOn#Sc*q*QDS_L^p30Rb<)+ViPpCg(xiw0;_L8gMgC|+aj=()@X3?-j~shz&Ad zP5A^FVX*Z>KYB7$(FDdCzV+~g^9b}#zuBtdBuct|y5$s?Yf~9;H?VFzbl$zoY*kg> zy#y>FRvITDj!zs4GsVE1w6DfV0Df)pc&zN%$`=#(2$!q40qYbCl}RAKQCnnOnm*hB zy(@HQC59$KEg|6jx8u(Oi$h||Ar$*2xEwg220L_HWZgqpllaN=a; zrb5!cT>Po|%N;Vl?kK$-y!I!|=7^dC@moCH@7(D4_rjebp=izb@S_yjN5XCR@U^#Y zKm5-n;vz|trWLFG>jwyvC{S?0cU$TuHu!}S06qmbXCuXvsF!Ve<&b)27~b_g!r`7) zz;pFc{1Ig_F=sPzzho}i8U9qmJliM}a|e_(GuUlSw?bkm#v-(?lNuhD5JF zZwWl+Pq*F6&PB=p3z@?9LkjyUXCoR zFNO@Qe~@ckW^oWDpz5X9Ya#K5XVL7j^T0Vp10TlsS?9sm$B-kr zg!MYeAIOaL2etQm<=prfRo=VI58sHNj2?!o4p{SMvh!LBTd0oby#-L~=6bgUX%C7v z0bva2uo~fIRsD6|47Zu#c&e`-&@m65-!kgVSF+l-6LV1A3VdiSbf$y-c6PYr3aCdPY+HxBp`brN48 z#3Bd*xr8(#x}8Lw%$MklQiG(vx>)I{cR%b8B*UZvrHo`;mW>iD^_{V&EVEOiKQ>a( zm#izIxgCYhiGF#;J|3neBdQL1D7)wmdQ!8z9(@r$(t2q)C<~PsSxUaa+%=4sExA7x zFkKFwY}m8d?(gmng8w;(&IjPE8~iMKrc3{`dpeHSRA}#xvD;d3g&R;vx$UgYskJRH z2}$o?weP{V3?issz$lZR5_wK@8Nc&4e)j3elx4D|Bodhl6&8-6>PpS8XF6Ly$Jgfm zsdx377b%4b{vOE&(*1@DR(Dl~T_b^21vg*%ANun8*u=a7aEQ`fbTQcc{$b0!R(^-2 zS)9U8-FS^$+0dh9C54U0<1Ca8=Ca>J=bfI1T1wXfZ?krjA2(j)MSrga`%u#wDo-n6 zije1*;FUfoaQK4j_#oE-T7+=XXI&EXFSQUFO!|IUyhjuqlB@*u?SEc|n7q;EC~NDY zUyqdkBNdQjQUJ|ixX}c(O7^!VTU}fB$m10_YC9R6jR^bgi8&d`MhJXU*r)UdciB3A zc56zVe$Go9UWV&cP5Gh`lJf=|IIj9rD!T(f$qQzPppm-KP&|LMYPd5lm3`Ht(P;LO zvHDdViqNaX?^*(Sn;fNDUgE|Y)QOOFcQ!W+eSjf`*xNJwE~cPmWIquHX~tC>pj;h^ zmXReI$QHe*U8@t=a<^}dRdkBqwPnwBdCdX7iS~cNzPdtow@rS>uc&7Dr+Mm`18=p~ zfN5Fg47g?0`h>q-m>|Dw2xc8@bS-u%lMfJ zZFWX$&5EiBJ$bwzRKF5V7XD$n(c<@LORJI8*ndaAIoMkC>+ms?W_TFk_FDdSy0?`i z6l(Yj5adUJceO`)?|ek{d8!jX6mbLj;MEXahvSGJz;6c!GoI_3aO-CBv$vp{;oDiv ze%)bTZ=Hk3s1D++E00N>g(7a;Vh(fK&$sC}c-S!{&g-XrJOww{S?|s)8yaMH*TJ_K zF{QDFIBC?|jzmkJcz!VmO(ieX%ZgDvveuTjJcrbQ_A0p$o0J#6lc*64m0b^ei*IC zJnLTGOC3J!7#r9n?-YBU;&36vVudtQU5wAaGhWMgLI;aH@8l6Zr#gi)LgOHu<`_h+ ztxElLoi&+KUAJsQ-i{NEN$`BaPk!Q1YWe4ddTHPNalhJy^PZcRBAb!4z+a_Tz04m7 zNUF;DmTBj{v1YO+eS3AnW@Ju_To|q80!*!xXme#PhkSp7S4#xo282WYg%wQO5=F)7 z|1%`PkEH)5-PxI6WPcO;%N8>?LLzkhyWB=Ka?|QCKFGOjuX`18Pe9I}mOvb^6|gKN zOXqbZ)aa!-dt1uOD9tWm1@*_|`y$1Ea#t6zJR9U_56BH!;DdOX=EqqpVPUXfJrBp6 zPU1TtSjTTfX5e|>!%a(>I=_#&U!dc#%h$i$8DOynh_HnfmcFgY4A>AKf z%tCVpNKIV6^0CKRXozS4>Lazx>fx$?SMHJ-dND$Pxj9rvq8rulY{ zXmQIv58Ij8PRYy}=!WL8Mo#n`6Hi>{GaF2y{~Oaj0rWuR-h0Yrp0Os{4y5wS{}=$< zRNe4+z7nz4yR;giPuiiYHb2!MCYr$*`>&3GR z(pfTRP0{PBKyC2)<#aqO;zFf2eZyN0Lzh}mzv#a+cs1|1w`9Bm7+vE%yT>8Z)~l#- zUuuR>k-m>PB@g&Pso8@>ljMut^zO&mbL=0W7zTUaaa%BId3~YyDSp!i{AukP)Q~7j z01x9Nz!C@G;X`=mLT8taWh>I7$4?1K4jttwEfdCz{J4~M@gs(WPvPQslv&`OBNyl2 zlV_lX_S@$|J;xNKC&^D*nh`{5s4%|Er8kf4or+4nXV`_E&$FT4?)AS}H{fgIRK;-Z zL;YWLU18;X1xiT1NE~4=meTSsC!nqB6wWbJu@FGuU!zZQp+z4J0QS=_!HLxd2m?T3#;*Vi-)tU&Xj+gPw zp!^DJh-Q^EU&-2xXgReFp3~-de`)y%;nZG25ANr=Rt))QuQ{5B%4hRLN0lAa-bawE zpyATCTc}vnOGYs#-#R?;Ws?iXq~e{ZF6-Vm-w%Qk?tF5zx+849!hMUHj(YaeCOZX# zIZ6Hk{f*`6QE$jMwdg0)R255TpVwdx)fY8)tga)EL4R9P)3gO0Rl-Ippj1Np3MiL; zMu6t)rH4*TY*E5)>-j3Y@I&nw!%T<~AZ%Gqq}0C&@x`gbY$A+A)pW|0Kn!yGqnE9S zJm(VG{9l%OE#ymgH8DIT_d=$vuPpiwoY?9T^I?X~zM$8Rqg!jp6UIA&^KF+V6xBJe z>Z^9wP|Q!G{!;{9u8(DnT}vH-(!2+lH*~8e1@%QA#9yCqqcNY2?ZHL22=R5S(?|>> zE_fEY8T?P-L97@GO`~t?Mmn4x(*|MP4Rp(peTf)s^6LIsLXV>@mXE4IqWMy}hJYUU z9n&wR&e$WBs&c7DPotg0D3}fR6-l*;8I35G5rUS^^5+ymc4MD(pZ+7PMVuI$z-x3WyH^4&6nG~?6LbJ zyc~n}GNL_|$S}=vga$Q{N@u{H6BLcuCx5*}wE5Ewxw%@Hg@5$B{CQk;#FK?N>W-!c zPG((vBugyzcX>nAc+K|K`3EbE41*sWaU*jrA%^3-STX<7{e@6}{SA&;u}lXeEfO#f zdkQQ0dlInsdNtf@ZGW3VXVjkSzVafo{dTAIsJ7^)L<;Nf$gAwI=J7nj5;S>pHme^5ZZj;P2u$3vm^I?+-0{pmL>eq%W-b|C$40@YI%C?!W^bV z#yMo|r*_ZC#;9_17+w7-P>a(A9ZxFNkL6-M;A7xlgXCh6_)??e(dQ6M*6Jh$^yE|I zuK)XP*i zwt4M-@&;l;`w<*6ssnz8j%4234;|&dJ^qpY6Zl3cOSF0v?OGveV=MLBDnf?u7Yoe*0vdLzg{Un?IFx3PKH$d_Aj1frPlkrELz zRcW0(1tv|5k1p6=nS4TZoVqIU3P?ZC`hYG}ll_;q>)#QznNhVl7)4{;B48Npnt5?l zt{>ec=(zP_a>@{MtF`rOti&Uh+TN6WQupM}R=C~Tsd*i=oyGuM1H1I*QEwMyAinwL z$KWwcxomn4xw<`eN;bR;z{#Y8$GBbk80H;kRK0lA{n*4{mnbH^!QR@JXpRKkaQUsR zlXj0}2jfiWZi@YtRrQZ&O%oYQBXFhaVd>pk$XKZ1m%sP@GU;xASj!E46rP2}M57bi z3rrx-BxiQ+5dydY&kZ|Y0vID2L>el`BA2amH1nnWE%?wrWUY+tu~MWG=rwe%(Q&?R zVe>A6XTBL>tT^}Z%^2nw#RY^Px5Ir1Kx=-F;x zw@G)@1=>yG7w0rNlgxTd;eFT>ukYCUv|~1_8oV&j_^K}HILNIE!to$E66p|WpJN{1 za4?^7i$D_|+m6ApWYC)#lPsX-kJi_z@}(WhqtyDAr@#{iLJ7$p(W;Vmq&BZMTSlgW zh;?}8$yc$SOol^1ZQoh-3{|wQfi`?gh>Fy>#BH9+I`XKW@E%#NTa%WQ=I zia=J4bx)ez=#-5hLxA(;$?BsZj(Qr2_7!S4$T2}LjJ~cjJM+cA+q3#Hl?45yI_Iq` zBfiGUp%fuj7wH1g#oV0%QHA+K7F0;WBL1y+1EQ4Audvf{Tj20e)%vF};F>x+*3Kgr z3LXn9*Rjv0hv*Eu>2w>W7>;$TMAuJK`P0?^sy-M|z`%!k(j020i`dg-Pnar5?YgiC0JKXR$2tp^?&br zIRC~E)u-C-vZ?fMq64>tu8XX+`bXXe>#J~_VlEg?wT0yH+Sxjs+!v>kS_G+K7R5f% zCidXQ#VZ1p%&IHiO`%z%CHL^M2cfK_0mE@9=s`|ttE z8r6l>XItvOV@sj#zhlb*RYbSBMVbCw|92QobZwoH#Fv8{BQvXNGA)kZQ;xd`f*SRJ zuq!-tM6&$g<6|+WHlEiG5q25@y8fE0+q(t?tY%0)p?Rq2hBmbt* zxrBcCS{hnDhlHuhjfC@8Dm=f;B^Dnj<)~t}wmMb>pPmcKXe2sUk$ksU7QoKgdj$3qqq;piOii zr=(9=mh2HwE(&e17fTOpep9<9W&Dl5={qe&bot?9>L*;ZcmLjhl%e-m<91Wfck2=Gm$!gY=U4BHcT85GVXcyPfG_T^0$T^HsA_Fj@y6MkcF^q_-FBI;CGl|s&J z1GdY7G}ClKL7iRwm1!_*_<&LpZxAWZUPwhl=0L(jFQWF%yX85o-h9Qk3sw!WjbDi+ z=ej66wWq*FoH*Hq4%!^dnwM!Lxc9;0Fs8&l>S7yQ zoTk;~S`Mj_Lj>uSs8hE7QUT`ZB%Z2;uTGOAKs*>KDh`3GfRg5qHKJDhWU%Y6s<>7c z{wuFZA-HX$Pj=DAz?4sM@s~H#?6t6HuE1t7eRHxY{7~{@8Y(BOblrAxxq9#q6OO&v zkEwrm4{K?p7pxTQ8@*PDe)98bg=tgL+RHFPD$fr4uHsb=HRY_EW+a&afkT+BP4^2K=<|k&Y_%^-fNeBsfSU)y`jEO)YJxBQU3I3O`aKSNU_McEN{;^ z>YBS2_EDhH%&F#(;Rh0qHWBrDT?A%EUcdLG)y(TsC!9NLJ>+W+%)q+VaACb!=qz?g zRLu0*C2wyXPpNFZ9QF)n8Dl~&$3&PUAA_u`)Os)11lvM*x5wAJ>Lt1<&kp#0B7&*j z?8Pl)0CX$XX=wOEiUL~b4dax5I@C;rnRQ1D8~0&onD-skKOCGCU*+C@ExP_AbjdI06g+6FmxI zl^3*f$9Jn%U;*QIQg@XPd~yT8IlIc&%R4QiQ#bti0Y#!Y44G*j;_Ok#L%|$`gt(_I z9=7mG8o2&K;wLQP(nzHtB8B;swy|8fLmMpkDo$9*ImH87;z95Gs*mgCQC9kb7LYIl zV7<5#9!K~jauo)0!hFGvmEgYdI$F`&PCUNKBEmb$j{B0D$l~{l@ss_-r4 zIro)wyQqdBoMH#$Hgz=|3fsM~8TYq2&jlIsQ@Wkg#b*w<_YiPc*M5CgLLU!}nduS4-<$@)8g zdg|8PbtFWH%B?pmCduOZG9j?k~#w9o&9ei&R?GwP-tD6r3P3X}Y3 zKl5>su1Z*<%Z2;-EPBj2nHAfMEcI#=gTCmNuJC>PE6j~|jPC1B*4L-- z>RG?Bcb#_``gUP|?2y?+cAj3~E=P(0=Hd#^~i zmL%I4V&cF;;mP*)J=)zs*qco75-ctaQ!PVnr{tOhiv`z9zk1`(Aozn@l$Nf)ZAOIu z)7$^I3qX1M9{yOPO@1A^b1=N>aqAT6|1Wy+!Ik0u|IJ>MF0ZAh+Zz<>QJJ(nn%`Xo zzAF!D7ugFlw`AAKt<>rdS-7cRl>v;};^Wa33!!edrL+BBP`bb~U3zHd$*sk`3Y!86 zum|3zz-2bEJkPw0{j76wuhj!xIjPvGcalg%-yU=Q18(~MwS$ShMcny!JdOFjH99^c zADg|T_&wA?K=xWuxW-;@hiLT`t`}#6D02L%glQqg%OizwkV&4zrgD2@(z#U}ZJVf7 zcw|D&I`XUjL^BrE44;ZdLGuiiY?B1aV2xj|^3Q4@Hm)Nvslrb`5QUz}IMYeT7PS2= zzW>&H=AyfJ6o5}iLH@R-Zi*WbS@11Nzz4&U_s0As_#aCSIuzFx?A1*Z8+amtxdPUwnyWG z2Q6WHYHM?+wV0d_0%vIj>$hH);On7kUd!3PCfkH^%3KE&_~}v;ebOkJvc$zC+5Mt# z>Zwoh;k6^I+dG+;zZsZbT^T~8i|G~bn>T_AYuRHnG{4>2%O7B@c39*AgTUOrk?a+#DYOyKq z*BNLOMT`K)lWJ%Hbq7CK%G1o3hr{3gJ(VTWwswY(PJO7sMLUc=e?^sP&wP%$;*eVl z?_bW;K7lPGwDP%8PK&D?Qz9mlfG*n!3-ZyyJnOP=4s7MlbLN#2_itGQUw(+vJwyOU z7A#}2Ob}qnAue^7zvGab7cCm}kFQ`dqE}a0x&Y2FX%R}YYvPXB1t0Y(>Ui&tqKFN> z)-YP6MzT=XZPHCwb1a#cfM37{SOT>=V}JlmRT$dqr{t2KWegv!;N@7?aDdk;1q6ei zWEio8+;N|bMVtaWcf=KVLj&PmK@CW3a z^8s}jw9|b+B8GYUM#GZGf+=Ew;H1j_ko5W-;3j z!k2+=uKV3a`Zh#@!!{C&L9>?Kw1&TX(Y(tfeW)*}Xz>VU=Bjo5Q*5gbk1jv5)6rZo zM+PGF&Fq4=O@S6>n0%D`IAX)eYqC~pu(mIZ=gE%^~c93xOVa1)pOVL`K^YaI((i+saz z51%3TCEvgQY|96eEjo=@{Z_-l3}601K3$bnw^mXFpRBCSzJ6z(>j*c%s!Mw!#rEIz zsqR@l***WN|GisgC%}_QV6+%K^F@?3i4}vxQ}$NxI#s>B5B{LemfA;QFNP|W-}0oL zKYnpGQjxlrQCz5{8ZHmyn=#MWEq#*C7^0nDBk<@mtnogGt!-Zz6kTWp54c!Y4qD@t zxm=8BNP(ylGw~=2PZSX&W9SFC-LwWF*-Y2V5DG+Q7F0o6n2uDrg2+oWTC zc|}wdTE~QYym;LHSylm$~BlEaMk!exUM&)oWYMuWt$@hu>-PFr3t5 zG4&Tbbn$W_z-J707|JoTv#FAfYakorfR@q3M%=S)j z4M^h!swM?S^!#<7dbN#3DeOTDa{{cGO3+UdwbYDifYxxu%D#{uVi;Wa?Dw zk$~nn&bRWylH&Cq~<-S1!iFw{9V%}O~*Ildv?vGoc?XfNQ) zORssCrIAwZFSuj*`&D%@HD+0;QNHkWchJ_t(sE>#0CgbW$HEM+4Cpf68#se&byZ+G zHuz4VJV+iKC2ZgSo_R7gAFdnl&Us&Df=!|*?)9Ms zu?{Cq5b!Tw8R;w7kv6@cBcS{=;A$b*myE{F9p{!p=jokz*y}00_?qxyqrxXae#)+l za=5Fr<#dK#$s_l*mjT8rF}&2o8Hb;eI62ZHxD%uXQRW{=dW-Vr8+r49bZ^LY^q;vc zAe&hBebGGow$`xCQ0#;kmmY@9g(W_Ukh=V$g zxXuF78%V_qS#h=*A8k~@6dfxb5e}&aUYE(T_y8hj+aq(m z9V^h;?A?|wB>Z!lX1?{$oqDrL-XoMaCFY`9oETe+>In-`YklNqtu+FiD;aCYEZC8! z_8S(Mz%xRL%(g$=zM^oF-*nFC{@=ufMUba3ZF?z6I;B}ExAp%}_11q)_|fu;!0zrn_ndRj zGrIif)3>T#iB6-uW87RTUyiprhI&J;sJN(-cKWM^XKz7Rj?EhvC_q9ZCEU+CLHbZZ z3BKg0DYMvOs(6;F1(%)MEk6CvCgSR(GlXHrjBQ=!)&BnIGg!FFc5-z>(fA(Jey$9R z%KE{0jqOEX5dBoF<8=C2+ASRLnHMkKwix6=8I=LN%G#lqSJPxiaVPpmT76X=(9 zJ@q9Iok05*dp`_UUHt2xDtj~@Z&uK$(jMp^HHsV0Uh*sxs_o-0vu}GM3yXDN<(~T4 z|Af^n!v6hR&ZB#y8j1Ax6d6d4K>+`A=`ZP6 zhk6LZBvC}FDPevonSlR<7ozj~Z1H71oc+hT9s$ej#D-3Rk?V1|s@j}N1-U(Y0ie0fZkQU4%D zT^^u6eT7O=*TjDL;5w>O%skmLig4i~RIge;nj!!#k_7l$wI@22sJ`P*m#ojLoL5=Z zZuBsJH&&1y&gECJw0INXQF%+I?CN4}y^0NbD({GdNYPvVhMF9Fk$KXoGXWNPj)+Bt zNy3_?E+JxPD;vmrJv`ui=3s+}@H%o3dMsZ_NF;B+%8T7G{`LQJ9qe6)ooVj;NGH69 zr`J!XVR$VZEC2Y|C*V7N3?8q1Gf*sf(&v$|xPwh&_}v<8<2Ri?pDHqz6+mrl>$z>v zu2kD<{{Cg{fHfwW{B+%KUIViIDOOtvTNXKNw12G%iL8*^0uouRe<%VT5-6WMQ+G~4 zX`Al^M*Y4^vLYS`4N-c8%GPrR{@*BD`P-;3SD0P8b+4G5fYt4V%lF;LzrEy|F4z4Y z^#jZCdH6evT;$zX;1JD<9=?S;zl3ln}u>&%%%+9ai%T?$d$DDFM(r=(_+VuM? zDR8U=Q7fkiFGb)G*@P`e}F!3HUw&hsjl+O@7>#eu?!ai=4sU z6ahp*?Za}9Qv!z6g4B5F$|uDC;)eMY3keP=KDW9sFl@!E9bqRXNZ6O$D%Lu8RrSIg z+0walX0sCGO*ohO-yQLTM^^kO=8zZruvFk%VPsy!47_+w*=c}tuw`Nt)pf}GrQcN6 zYmwj8?V5q-9#L1yZbcUIzk_zTXIPha6AgYksXLw6;IDg^02jw6@W>}6FmC3Jx-)M&Eee$o57yxi$lkx6Smx^jJ^Z{zSR<4}Im~2CSV~X3V+Px$2+3oD-?K zMOIw)1X4pTWKU;~hi9GWe!;ap+4Sj!BST!>6Bb{TprKvi>rJE|BpF^g(>NEMJ%}iJ z1-`|tLhb&ka0AERPP8G3NGxebt0^ivv(=_SH`buuAk=pw2O#^ps^;)jm=KUPxUFRT zlmK3IDT}a;T93PY5jXRON6=HftION`AK6Zq6nKhJo~!y*h|Ca@@xvP{8?Qz-Lzr}4 zuL^0e!mmXz^DXD1|8TY39v+U1hNLpzzi-jnej>Aqr}lyBlj8z5X= zIL$z6gF6Am$Wr{L4T66O{W%`Cvf-y$Ln*E8dd)?oBKCl^Dy=fjDCiO+U%82HYU_%U zIxbQ%r0k=$ftyf#G+hJ_5Wo&fo1yLlwD!+q`r#@XgIQP7ciTl~##~;P5hXS1*qzOE zq(*9v0X|T9<|p#>PT;a%1<3#p32w;CTD1%Hp^F+SmYc_SOq|-8pQH!d`qxGr{r*vs zz#9zdW6RsyZ{$&Fi1LURLvlc)o_*AGoi&1GFgN z+!xEI1Z7Ff-5^1j2C?|~)IW1yI28uRH>N)y#s7=S*4>Chn0?*p2>5C63-4%%t)`H0 z+Lok9Cdt`ruJkJ}G8O;jxAhmhZhr^-eFIVhFvHeZr?z=}sy#VqLb4W(Gzy-({j48E zqU9YPMG@ui66wAJm^e`?ZSSESAE-7UpzvG2=iHNpt49u9k~ntkqqo(4i8EcXl^T&1 ztZ7$oWPosUWP^%(%{_6q>LyGV>o0#D_;n}}nOl{Rv)S6UdO({m5dt!w_NQo8sKW88ZXc8ySVG!r}b=d3t#sZ<0=8AW~INy#ZMY(7SVZqAxx*#L! za$o34pj>o$4LQ5v`TL@tc|696^T9tkrJoD5`Qfd>UkDBmLTiZ?{IR5=oqg6R*`m}F z4xi|FdMv2{3IFbHO{it0^#>ZNf7ytWISm`}A+b{}ZHCzNYjhDSt127S7m5CKVTxN62Z&O=g80Q(*_YS}jkGt58<@LNz<0>nn ziHnRPX$ugE-0Xfp!n2Z&#F#C)pI?xbOYjvE6(sQ}o$dzb+>UwBy!b@_laaq}kZtG! zpNUh>^Ls{3e!*yY-tQxkL;qx?P<)alDcd#1Wt`R|+N%Di=5%2E;_6^1$0i^YpCZ2K zP(R!-2j3B~d!s#@l1^&#puC8#`J9|i8uYd>d!P|1?@iO^yjw&^^Ky67nmp8z#5R*h zo`=eN0St#}O}BCz&rUEq*l6lVPiP#)?`iKiAM0}N)YCqLrmk~KQ;mo<6)%GfD;y9? zwX3VlAvG=c6G+tlO1mE-x5oW{-ZHt?&Y~%M(`$kjUM@?f_;*B%Iu-e7h|>oK-(mMi zSMY%#PIaz(#$Sn7p$+QiuPlCz;v6)d z(B^lnlOXf|kP#NHBkg#y11%UvAw)lQwu$DEc`^2(?(9Ac@_>5!C-%5&ZnS%6lUg_6 zR^R&G1#VBPtDa*J2RQdM&-8$_{A18UEK@CccXU-{1bjD``LXJ=n5$!*q(6_aF?)Ab zGujCo-8=>MZ{`@2=UwP3J#y;x)xr5+C?i~DO%vZ(^xnvTQLlYFQ|IKkj#&F~r&dET z&|Nc$x;Glam+j=W{JKG=VC!mEiZH{n5{-uUrpS$t>uys_l8iJyo%8G82i^X{xBzlq zs_Eo(rfmly*RH*6{00H+2-X#0=h`XRO=hX63lN(mN z687MH;M~V;j8o4saP%bu8d%v!JqdBpp_JVfFl$`SJs!FB?m^X!AO)^L|DAHF(0bkJ zI=EojUXdg2gpHNd;A}$-4AY@7840*RBG16-)jjXkW04`u+44A%@sk@}%ENk<{lU*v z`%lxCXSy5He~O!FP96;h>Ze(_zZ`HaFd9sb>e|cKIJ;@DUrDT;J7E;9v6|{UEKLCL z9c`)ynL~t{WubT^R#Z&1FE}%(&PNon_G{_t01OzO6+EeZUUN2M zAu0dJ(pC0_de|_Eo86I3$+$tjzZBNR zv$`_!l^Cd8gTzD2|KXtxNY{2uxbOk26;J>U|M3`m z`$vr$#h27LZ9c(B`)g-Yjm?sY`;^!M-E{Vn2>l#wem4r5UEswI7+l zx_;-QlupBqt2{2jI{TE?fjc0`&2)%yxiBN;w$HrkZlsf9wn;K$@ke4`e{uzsQ>o$3 zrMHi5ipgf}!K&9Rq80asE8Dpg`mg^^n#`lf*w^=g+C|nF4-<~p8IHf9oskoxTKO!R&{SBvQz1^{Gp5Lrf zoZaiMqgLAn(4AI#A+rSXk;|H_tMlaSa!qG$C8D!8erVn9b{-zNd@Q|C;M+CX`RAeJ z-!W>VT0CUaXy4=-U^^}3$ml}M5SX9xM8fe`CNGB`s^tG^ea3rNO#4FN;~ENtbK@Gn z<+F+~5`%E{C{geOqQ}j9xgokI_+hVG02wKS#~|!Sm!)FFll9q4zyoXa-vr%c-A6Vy z^Fb&D-#wm;0MJa~g}Oa8o1*r(j8m;CFB|b`r}H=s7w`KQ_vj(2Q68 zPh+POr(?ej?>hgSuK(%C+PzrGTFaaq^Z)2v`}@x++b1&|nP`?iAZbQ@ik(8`jv6l_ zw7MA!U<4-@cII(>{~5zZJDn)g1sZYt)0J{Sm&uFXDu&B5_pW9>TH1_Y#I7^bd}$1x z8ISxf1@qCm=F7&0kjeJ#eUx~gkxza9BA6;PKim~bnStZJOyOD>3wkiO+a5%@ z{^+1^8pQksJMjVhl{PeXA$@b|dezGt{%xI{UEAp=(I>d^=x{JFkY+7X{wV{cb3z&) zk|Fa_O@XN*^0uJjZ5Ld_yhB-T8oyiSFw^9dVf}bx4evdO)W7OsNNJMY6~6F{e@bZG zqb03eq1A9y^Jp4RNs@Q*!Y0$>gXoCtIS1`GW&K63Z=LY@`v6rGpBo*Ynpc_ST=&e7Qp%h7*!6t`t%^{sF{UbJ!;7EY zbNL)Ui1nxEyv%q^WeW9lb0taH)QXu=Lyn5bd1Ew#auw&Ia^5%Z}M_9Cc1*D-9VZMM5=T$e!A5t;J4fbH!mFo4MB+_5W;C- zj9!(2nNLrM+JGL{*{Vq*6t)Sf&s@xz#BUZ_7Uj_exS47bY54}**`*}{im@}b zUVIg4u!gDtlwl{~+&Pik)u@vE7BF;`n!*Rp-3#ic+qhka-YvZ)6Z9b5E^@?MV8QdB z?y$L2GrtQRG(ukSGBTYUg35{>_t=1M&O9mGj6!doV@F&lQS`HqFNRC7f~gqd_Z8F+ z`uS=|D!s8p)mnmNDV9{N-#+33u_Kp0it>G{^4qZKc71&jHqNxYZltk_A8p7{@Tq*7 zZ~nmTc_A59#U-(cAa|(u=Q{dYi?Gs*`fMIHU$sQEA^1?v?>8lh9^Q$-DULz7X1mrW z1JQvWG+ss*2On{woLSb{ZYrFytEikuxl0WQnpwo@q2e;e=!$j#3s${GZ`~lgg_t?} zsmeOC>?!o_V2D@;wu}KdRggGxZAzmIeqy24M(nmOfeRy!;Nij23wo+B+6XHFFFBNl zU*3MiGg+%mWX9m(~*J3AD}D zFg~FH-_4GUNWrf_!11I}eoMf|czF79Ed*^#7|kYP?q%61ls3zxWH02tpQfFa$2A=A zMR)8OSgPkDIByVqFtmu$6>VFuTe>19PNQ)&LI^Dij*PhWf<`?g-a+m;d%8rv3oq4O z)T4`-BhI(d2LLuY)DHB*L=r3 zAxe}PT8;#F$w@2*c5Wu=fM2n0c!?sKoX5gu+xf~KNx_7A_pk=Y%E?Wa^ico>hB$3% zuDF=4yxPw$*YJz!M`htAoQ9>z(68<#nHXVY$IMqx=O9Xl&#M44$ z+&#x{%oy)?!RVKe8)eEn)u_LP>r-pV1+V!Z>lmR-q8wiPg^nxwASA43DjW77wM#=SQf zmDAlbn{JxtzaPt?lWvB+pxVN7AN7AjeuUFskFcQ?s7$|%tg-Ct3B4D;XV7eM{8dwW zQlwlxe@iDDd9M(3FAiO4+;+@7#{xd!0xhzBP-Z&4HRL7J2APUceOvUo!LEMW9Zk{= z?lVTquMQibz=nJC(4@C%hD}x1*r$4n;{%Mns7y8IMzq%^=gyX+=sml6ZuG0U%C}7c zKC^s_V#+o1{dyGV!4%Zx=(?885|28EwN6oJv47sX7;n4QUC__Jm&0v^Mxmwn)8mnq z%|FWY^6Ylf)dALOS~JN5zp_3Szdiy1pO8rnBY}*9pE8DryO3m+Y zF?m8rA!9R`O5~n%_|5Chi0c)qf_PoV-s;zKXc)POM=pt!ZFu%}_-PGxXzPn6qpU$- z7uir^A5a=5wsAr)S-mw)*o2V5xD|CM(Rgy)NO;QvfFv!YE4oP=2 zhNM~Zzbs_8NQb}pB+~_>R|^+BQ$6SuUrleN;$HeG5(*^e-l%q~9<;QpwZtgo+i?3- zy=aNgD0M>G&_(H)9jr5IO0-P!@WwYD@{lZXIPcb1Ir^;-Y~1$XbEJ-OC6Y9iB7=DC zm;WWzT6EL)uSzDHPBiiZKD3B7OH(I1sNtNsD19ILZpPNQ6DfR0ghI?L$h_~3Dp1x@ zWVoLuq^HhR#THT#cqjP(rd28Edx=}}U3E6v=#XRKN`L6JzhOzulee*RFx{Soy zZ&E+6T-rmQ;2*S7GShZpje@dlk4tc2wD9vCF@96PZ4I&)u|d!-h0*$A0To>J2Rv&kQQankTE7_Td@& zQuj8fXbUC%M@kc+@Zyk_C2Hl%XE~%ow%gizfx zcq!#Y`&VLeSc>kL$t&GC+Ph+Lc!Yn?s-mM`{x80~#joe{LSgcvihCPM(s?h zIwtS-Rc>*EZv14Rmnw+iY&f=et#oa0;H-=#F6a)9@hQ60((Hbt1+Yod{3}mfTx&s1 z?d~kJl0dAnQqeL;Ro0uz^c}L{yd4X?{gZ+5)RTKVgE}<`vouc9z_z>bqItb9m*H7L z0TnJAY`-m?>;!eOJz!PQA@3ucqGgxf+{k%i07*btx_1#k%@b|`9L-ZzOtJ=_X{!He zHv^;p+D+gW(F(?=?+da&WMF$y1U~7iS>{DxIUD>D>R}CL(gN~7Dd$Bp7-Fr1SX3&p zy!gx$8H4b*y{9gpEu}Fpbc)g4oL;X3ii0)vm>T{4YB0TQrczUUhn3m`3HKCXXMRlZ z(jXLQ$DSd*$Q}q?N_Si%;p0|_3yU?thkp}dDCtBdC1>_Emmm*XM$a|)V5fKY##LR| zY(2ThFLke)l%yp@OHp8*UKlYCYfd<87`#iCbfT0O-zu}%NJT}v4@tO3!F$;H>U6G= zGfjr~Yt~J|kw=29puGY0p+5mj(3PQ&&v{Jp`2lgsrFeuF{fiu$|wvUps&yuYUt-psVvp zs;xUF1qZkBk6J=0YJ{PVQ>@#56%SxZHv7?l;yL5IvA+-OsG|8nv{h$sz+V=R5FFe& zMiqp!n^YBcT`CXy9iuRy7AgmE&FdjEYFJ5Ye z){5RxT4#?GMsohCEGntFi(oGR^AGy{d5Y0w5O?T1Vo}2Z?sb zCZ6Z%41SJl(dX*JH74{f@h>tgvzPud2+Y|o+uppMZ~P#B@g}!tt`oOqpcW-XTeo`V znwCV8$rH6-b#2RyYF}wwo<>TbfLApNUy7~XZR#`ltEID*jdwPhBp=?NEUJ(2V#-aw zpkS2-{+&GBy~T5R|5tcEEbq6{g}#M8*l(mR9|$ANX+I{yM;|;;X;Lty4*01~YpJlF zvCT3{F`NdreFtIpY(LtHUm=&JY58dK$)Aa8nofO_4`#mKU=Y12Tk@b0SHfeK*$XBr z{DK@QdNufEwIn(`a;sH$;&WQLN_s8CSV#O_#N8BpXuytk{=$#{c)IV$_gh7KF*f2( z^G~_TNG0LcoP*Wtor;%6Nw3&JNM#c<$flcp&#%E@-XZfED=1g?${f7qjoO&2XlZO0 z$C-tRK2=Evh0LOBj^;tsSv;^w{Iv4MIYCqb?S?B2qaF`asY>>z@_(P}>3b-YnDA^E z7fICWt>yxR#_T;lrMNG(RH&8=4%n-8{yg!w%`He>82XNz&Eu~4n8;Pv z@cok;Qx5`+ns(}|hHNh!%at`S1@gcSd6F@$}ec)~|?=`vGKtI44=RBsxhq#~| zE2Dlb_8XS*Hvf(Pfdn z#&`13g4xo}#nxoiqy@*9Y*pcfWYMQ(PT&i6G&!RQ%cY6?b}EecG$p?sVK}fck?j-9 z_$*Pc($P=nQsvZT`mkTN#?nHIsaepyw1;H~>e1Iw-XF~3!HwWO+Far*Q8bP$;{(&l?WpGj@eRJD;&-w-c(_IkOgZD}KAr}1Rq&-m;roze!rA;-Z*rSljHU>^Jdc@G$* zRrM1;a^sq9vQ+($!Tpk^e|a&!akg+xm|@F-Q182?m@oT<+=Ka|mC5x1OP8qjDhb!rUQSJs<>@= z9qWz-542b&;;NB5)a4z80Ap^vt6Weod)b;yzGhh!=Mzf)_dtDQrSKe(5*s%ADV@9! z$Ye*Y4-qrGMS>jD^_m4^O)uT4Cz+$Pr!at6$}yW*?%7CKDoM_7X#P6)8|X{C1rrSk z?dz9^Q;C780c1Qr0XNKOVh7h1qP&2YstBdHH1NM~M1tSx9eFGHy{KyF)QaD73Zvw_ z3u-wXQ;pTOyK0vS&jAi}a~lnhdBjx5$)X<~#(=d-of?(RPT&Ng?GYJ}+6j%G#Uxm* ze6}x7gUQcUIaQqo7%o zi_rrTj;}%komfHTqYAh8Lx79?s}Fk-5wiJZ;$u1@&QW*l#^EelEsQ&g%Z$45{+iE( zz4Bv!9rRPjOyXF4zN&#=y~6W%mBhUI+Md4}_Wu4k*_eTbzZ?PlthJkV47XhyHf%y` zvWr4^r#*ZwPtn7Dpy&TacpsQ>rG)qW^=j8vTHoNJBAjn!6!A^HbkDZ(1-j@V5y~bd zO4tvw)X@f*ld|N9X~Mp*kz2M+{p#s<4wk2vCn(vXLsTeY-{EUW*(N|!UH zTE$i{HmQ!N)JC+0gMd;NM9Vj(7agY6Efd+XV1!NI!v$g(aKcX0UQmP1qVFb~#A(sn zgoRmrXjydicDg%pb|#4p#(I=iAmMN6D8cC)QDW7dYS-p|?(vilr=EH=Hy%^;nAfhJ znB+RV&p~KRnA!ofTi_)h9+Zt`o$iRRWA0M|*)L&vN&zya(mjTs>iGaKO%O`Bb6}JU zN)(U484Ql}AW5MBPEOjdy~2Wlx#VQ`Rhh0LP-!RUseK9wK-Cw6epDPP08pg!m~&6L zV|@ouAf(-giv4mk(471SPX(wOOnn$l;hBq{SWMBxhO16lVHuV9{X_iA^gv^3RiQn* zmPF@QVPmQT`(gt^gX6d*A}rh=vpZW!Z-`BK-t>b?K2#3qczrP~%RyiTtsOakQ>&Ll zKnaG8@r@?nbjBm?`*2LI3kwLdo~3fX`f!8unpJE#DE%1p%5W) zXI@*@7xH8Q>ff9~BPiz;zM3o(S2i>POcsPem!E;?cz-Cl%QaT#V%aiu6Co^tx;~BS zw}p;m`0x53G=4JprQ-ENwfL45D0YOexpC;mSe-@`(!=o+DrcRAs)VN|Q@|+l#y-Z> zq3I4N=+|D0e1hufg~~6{4^5p8FMO7puERGz{M4l0lig;dWT&a1L`|ssi{MHy{{8h? z?QhQP6YsOx-?cY?Ehw}=35YaG?RL*bn&s`^Z$wf;kkQefQOr73z7PxF{p8z47HMJ6 zhNub4;ZXTgIW-@5<3O52h5(Ke2MCp!L~q%up*p&nWFsh1dlLqh?E1)h{dX~G`p#U3 z%TfE#Bs0sun_lPm54WJ$b3BJBORdlPW1Mk#32Cip!~>0DU%#fd$MU0?69_^}#p(rw zNBy)AquvZy8`2XGrF!E zTcm*8ws3zcML;zi)r(Npl>&!%^orHt9do3N=3xk?z&xD1PMc?=qQHSh_!9Rda)B@) zECrj-^i@|NeYplb2I!u-f*o98;f+#t$5O~<=idK{E~H#YD-Q&tIuDDRsl_5%E=Og> zYt2hWV1nam*}Q-!!ehZYvb+%76Ef9CT0ZfPs6dWUC4j|D(3_m-U(1#^<$oO$Crp-=eRjtw4E{~0a6%-Zn764YsIFtotyy6hP*&; z`{3qfV?9QPS1;ek-9^(ll=8eo>1E}o5qkB!FUb5s$!9`G)Rc1oa<}`S+`OYI_xaT| zYEaa6MK$Y-0f)C&t}UC+hnbN-qC(x6 zOxKVM)&-diPC`#86?TtE8CzGzvZhOGgWdlQs70C@kb3iP;);X(z=I+~ly{_RZ^zWR zI9r+4KkcaQ&-kZ4`i{wpZ`2u8ca)sdF_I=*P7qhwnG5cvp`%V^AN#O>8{oV*6P~-j8J%PX?=eSrjFMl|cv5aKxTyL*soY z0^GF|bpVm{S79++;ATl&oI6FqvE@;rH#@4BNWy5ukI>h1cGwkX_HpPk=YlQYhFXk$C6&w_vcgH6lm8G(4i51tR?BeEA9%5f258H(Po z7TxA#Bo2*6iH%sDdkfuq>UTei+X@%cP&+c%e_WmN&*PC|1t_{Azqs$a2wGL7u;c;k z~jQd^WH>|1%7@0SX}ZS{Q?+&mBq=;C_&XF zy)$c7ZfT%L?_8(&p1*t^zMA6&@-=qo(vl;GQ7w_{tM50<5_@&ARXJT5%k!2{d44iX zfMa89>(O1DVQIVL|*T_c!DHiD}!WnYY$u(IK3l1ojv z_+zGDmPMQ}ZN$8ZNyLjqqagUT0g*OD*oMcaqX} zHzsoB7C*Hdq+E{IIwJo?ymUE=1wljp8uD1bD#YSX;k+cfE|dt=@RqI`%U3jjoLJP5 zggVe;qtWXwceuo`Vg`JYA;Bk}5`eb!m2u?hqp{5U7PY^m^q0T*MdTleVeX`3Uwde4 zSJgC@nXkq9vr&L7aJ^v;OYNBA`v=*MdRQBRb0b~m8{+Cpr3x~9$xTd3!ekm75r?ns zn6S8O>H0`b>B!RrU(|Fe{y=mJjNqcgzw_&+x^j3eC+7f_*H{ks zDW;!p-8AzmSz#x@SbOss!1>IR{hgOwd*0jw<6NWZhq48rsBchQZ0<<0&q8d!VoECx zgstbo@SJZ0GXYM`dNuBi@j$~*O6CluR;>xc-703x-Vu%KrKsVnZe#XETf^jekPpKj zMyUA-Kn>%!O*PMxuAxxr9(09j5<9 z^mXH%?~@i7z%~xEaT{w*Ob6*8a)h<#?;BVq1Mt))*GCM zf!=}L-||gMPZl`+##`Q9A4Pzwkr?-q+kqWi=D2T=p&uMPT56w-QO9m)S$V7EsvEDN zm*9QQjj-jG0MKjn2Bc@^tH?EyOR@KRqY8>?;Hpu~nZ4GUzmbG*F9K7axB^gHBM@nZ zDB2gHS6XDWc|r~WtV6v`k4uJs!e0vP=eXbU+&rIM{%<`-m-v6{@pUkgX%D2W7*ST@ z|7A5is`ec(qd3iRlY{t6u5ei(>$mYD?d=~+SLW!Nj&2f>7y-OZ=fJmt+JVI@(yH?d z5%x6%F5bX6$R0tZUPYr8*0bg}ibtU0u-t;FkQ`!JdGwwTN#RoM@YMzhqt1YF15nE(9Nzg5bAd6b1B(MJ8JZHNeaf!(JMF-0hJbOFLpYD}o*nccbTm*E+i zau!3m@GtStGdYd;NVfM46O;NV{RaO}dj7Z0(tu#6DJB09>DNP)K=kW_o>)`f1l#2V z?7zZjOFWwo$*sJ9W=lR_L{K?U?cE-_DaBt^H!S+}RdW5PX{jwkNS!>95)0brV>kom5J**M_IN}Vb;nydeR8yNjBrVbWE1|ffu(^Yj z6z}w3OMaGW=rql|Sjndlf!g`Q-?cmawVN>XgLmoO-`CiF)WD0cq#YS8Mqz4XY_IZ; z!X?jDtMOWPRatOuD6a@l znz`iBg~Vv*68_^>f-pcFLdi3DN8UZS_lAX_yke1=N<0^@*E~#(&8ZkTAEA!ZwMNh7 z{H=OYM3f_8Y^Eb-pV^^6$PN5^g&bA5bV8d3HMI`H^n!u)8oyuK8#pu`66Y7lH9w$@ zl&nLKa=h#ihA0EPIY=T3iL*0$zq}sYo74keJ(}Ts;MnRFR4tm8%-JYa$MI=+GOhla z_hJ&i={1+7e|1<))#49Amt+${7$2I14_^>MJ^m!rz~G#Ai{&Nf_h#Ft_?8Dn#(T^5 zaA{F0+rV0B@Cz#hT#@mn4=RsX{goJ&{H2yOK!i>V5#A)*Va!ASC>MW%gN~qeOS~t? zFjqt}DZHC^UN|Wiq@Qdu#gS!D8%A?#L-9lP^s*Qj{#zvd#B<4n+%d1hsx^g3l zW>Y~_#d-@4(UtcVJzlvzE|*{A7FVH8NYnErYDAJK?T4N8dAS6b+bdRL)Wrt(`A58vw_XV~pmjYVtB+iLfblJrOWwPEHv_; zLj4usaNCaK>I#T3&rWzrM6p9OfHz+B8sorRs|gK{`!sM|>mOt(Tl|jq%cg&y#A6Rl z9Qy5(Os}+AR#rqs1(eKVa{%7*DXJ9qzJM~uS?oL-`UdLxm9_sfN`k5d+4urkJ9$A( zac~>(fs}KeH;Oi>77d`E%Z%m)uCr!6bW84#s zbM869c|4v1Is{8Gw(Mj?>oUY#VWzg=C1Vh9@mb!2Z92QB8bP?kXz>S2;Cul{qeFhA zP54T<;wk4`R-Axe=kwbQ!8xb$Y1W&J#d$;(SB@4}pC@i}o_E`mo1X=zaj{f5vCs+S zy~oG5et~xBCdk5Z_-lRIiYVFKL{<#6xzfoB-PAcMpghS(nhwbo#xr}+xsV^AtP4@n z-oDY{XOm)}L|1&dE=A~*8eWErfv3k%bOZ>zz)@JOoSTEZHql4U&s>wV%T?>^Pr4S(T zcwal#$$DFPgk@)}|2BKX?=b9Tm`qL=4c#4A&7M$ zGU$ZEfg?bGg9U>ADHyE*fuXBL*#x`3yV60w;oqU)Hv`;OAUz3{|5@pbA}aW{XU2Z$ zUGgE?@G|6L9P_&qiNcGlHsuB4QJ*VX(436N!h%u1KzHKv1GKsnam<>&L|})Na(W3K zxbwzyX+49J(zJmDtcS%mz8{eVvP{WDGZQ4ifg~iwiKr+#1c~kDWWSQq(R#LrtZ{mz z-4Ci0hCs6%m>c3p!{h*T7q8MH=dN%fe=?XCW6p6>=g^%~GP{jxm-zFN!3TB0J+p8$ zn8*8!MXeQ%N59uOxAo_az_MBsN6q}u+e4iNGW}o-nt*mQqa0%0(AxV*x;wjs+>22! z!R->60mz@2`Fx3JZa!pyEIwizK^kA1`kEupZb+$NcL1_>fbW+i1AYe`dc4z@f{af#bKh{@LQkov2#<1hCs_nKqz7=efzRn}QOo&x$ zRI)}%seu>>cP0PWphmkQ?^UF;Q>K$Hj~LIFeLjJbMJ+MmOA}1Z<_&$am zy|)4o8_syEZ-C9fp=3t#2vnK$T^s*~hyg&J*?1C)(h+l8R_2}fYTZ>IY|g)hE)hnb=c$%{M_8*omlXzacYZ@u{b9%Y-c1bsidO2;i8~1*#-nhf$gh26Zq*fIx$3nM1F1st zxD9{|?R_B0^;A2*C8C{v&YShZ@k+*OgaL=AqVlQ=mon6MX^xiU770R1yUp8W7RMFh z8A02QnpjkeS4df*PkyZ`PY%IZUPt>vpY%f?Tc>m%v~@ThzJ5?l3j1GmxCK94T;4A&pa(q)hsH{k_v2^W4X$ za9Xybi_(wy(@ux!`qsc?ent~DBgS`&e+lxlb*6zzX;NzhCF?&F9&KMGW?wzx9lNW~ z{|$!9MM1_s1DCS4P3$@i{~^MIOh+d^9DFibkAge{=TrVw(=K3EC6RyMt~|vaRt)3~ zVqVn4lz-e{mBgq9kW_-IIno!@u~b*>fENBt0}qQ;lnokdH{RtnJuL z0d2=5em0n9!k~J%uTUarH$3M|q}qnRwG=B zTAZyzRDBuSN@YMF)5cjmJpIG%Qebl3iqZ}=jBAKXV27RT5DTM4_~@_9i9iT`I}G=0-Tihf{v{e_<6 zXkz5SI`|bma(EDg^N+S+RS=;0*XE7gS!&0lLZkJ6R`}MyI<&;Gx!{n;28d-B1N)cM zbd9O^oqLbIh^TG3C_d-;Jp>1T&L2xl`$F`(2C)&QE}1_N8wQt1CMdl%-;JLzI8_@>0A-4L^CQa5wwOCMh7Kn(NaL-6Au@8_77FYg4llCa z55p5D=)nU1v)K+*X0{c)AlYJs+pdN@Tlo0GiH5imMGt$P7=8Cy?n=mOo7}mnnQJgg z#Ez@-gY@?Dt_bZ|7=BC0ROEp8bII)Ts*!Dx(g)G?q2#{`LelNo&9I%aURoHiMoK1| z95{6T{}PV;BNx3oc81X{omRuE2# z5DrbVN$ZEn2W%-oh@0}1F)xfi=S}~)PQ^hQ%N9pxUI^nc7uF9j8ctM3FybS zp#WO0g(jROk;gn4g;cS3^hE9LHk1ZP)2s~8NJPC8U=AwX*6RqKj?`#ifScnPbYRM~ zspcIM@~f^h4Io+5D=wIT%Kd{bROv-TK?OzW5Q<7s z2)#q-AV^WFbfhX^5a}&+q&JaHfY56ol!TV=;PZU%{qDHqj{Eoiczzy8PWD-AoxSIp zYp%Vii0Vd7fW<)6_;N95Iq5&2sCEAoqT1O2joqzr42rukHDl^R&P+A@($i4w?WcVC+9OfrBU_f>F-i8H_he()%J*;h@n5gk(Y{Mj1fG@|4#|7XFR}eoCH9;^exIGVXs<|q^L>D> zP!!)LMVlrRz#zgQP;xY(sVv)CN3Nc&RAtPno|aK>jRnDX%H|h7cWk0;gH4lF0xGXY zDmA{gjk3{)XPdhBB+BvgV<204z+#|WX%qNj_anBf+rK5u=ObOigG-4K`PVM__S`cD zyFMX;g&gBGvFdN#A{j`L_G-`sM@~^bMj_MVr26a;5y(HQ`TY5*o3Q8|ysE`B6(URd z@y3>;{@T^_M*gAaYtYKWDmlxj|ECh<%lqc#U(GYvY=3ZVx&eyf#*3oKN46kIucl|V z4AYVZk)AfuA-Ei6bWiP#q)O z4;y3+RIVLFSq557=n*_Fl+7kHu@Un4bx_=2k}MrUDH83ZCi%8Xhc>9ZSy}er*=gBV zC4ns@9bLVcTkNV=(!(}3777$I#ycI_`Iy6*S<#-%F2Z`I^e*IwbCgo=S2Ke`a+*kmJlNvg?sJ02cojm z@cl%PE~>Cn{!X>gzYF&DgR#6n?goiu#Bu|UjlcUdWG&12Mg_Al|HaP%&$Cx>YT5k} zjM4SuMKAFH)Qo0b`ZieAbn{uhaP_OHAHPUlN;TYoqDwEF+1PloYI%gVo3>xT@2JSS zf2yuw{*j*+RA_JUpg$JYuEs&ep2W4Hh>$ID(-d9L=ndBzFO1UQU)Qe@; zM9ett+yKy@(FV8WeJUo>8HogWh}ri-S|W{^zFcOWo8JiDsk?XsBp0is-tjZ(=feHB z&|uoyWXZ$9KoEQ$wA38FFEVzAfHf!XjvIx|H(d+2MxhiQ?hz^HUPR6xy;nF9>tLrQ z#;PPG%6MmsA)$kl-Q6+=G9944a`1eK5(8+T=dj7Cg8#PccyWS<*8?bABN!-H6g;nq zGU)eNOBKA~U)pH*{#_L#q0<&MZQ;^C52cJ#_i0lOzJ5dXiiplAyPn=JcIw#lpYmS~ zyAVYkjGFS>9PwqfKK$jh&37URX?X29WBaLoXfW~U?>!8!4DBGZea7iTD3h`99ca{P zuwY@mY5KGr=+cP*XF!?!pUZh-ifjeIe2b#`}P|^hu{M$a{6l z^AYon4?mdNB}J6;g?670mvRPGEDpNa^3DX1H7!PCCpb$-L)*@cy|;bEGJodmzeC?T z3zS_|65-C<|8UE(23bNc9g_J?>pB;tiZmfrrepU2NtYe4X0zq|suh?0>^6>{H*Mva z!25DeC4;Dk^0uEhUU)U-7W7bnqlP*1v$ctq3QQKML|YUWv;lF}H!SxG9Vfp|N-c|btV$w3r2Y!Zdtnag!|R1tUXlulmSzN`|@S)hZb}0h6{{* zX|QS2`&aS|ugvFGz5}wOSZ-A&2U>DM7P|L4D6R<0hB}^uEZmo`WJj`m`B&(S+h@@l( z+8nS43QUz0`FxYO>?g2ncsFv>A$XKAk{mWBq;&z+ll#N9@H~o?EFRJG7sj+hjIoKN zKVuq3vGI)0zLgj+mc3JBB`c!rvHw~U#vXO!Lt!pqEtAwf_6pWeZ4qsmBNAGYwCD2v z#f|s+X{&FatN7}2XYgN1`0Rqo)?xhhyyzBCh3)x8BqtZJ4peIZB}a;{=ZgEYw&&P} z^n=+Z*WIvHz7LLP;coJYll8=7N%CtQglf`t)D@nA&q{tX{bZS!#s(5T;yX$aNvb=q zL^{Tr)vRuLD9=cUw1X&X&6TC+KxRyOtH~ld{J*Zdw~I`@T|3;XTmwXhRjvME98VOz zbTVhMNz>ixlz5a)Je%gI%W&!;Usi7m#g_|1L>j((7SUpI_C7|BDSkuYR>pGK?>AI_ z>@v7gI62~<>TV@u26nWsQv`Onjz#}^x{_p;9$M(DN}wdrhx#;g@NkCCwwXasOt|)% zwnmUqps^Wr=^K={)aj=Dh)kib%U9a=FGU!y9Zo<2U-YW# zIt>f8OSXb6IxCG#pLewo9IOPbRMyF81;6>t)|&rPh_q&ChtcL@=^iU+Lh?vsBEbc* zEF0oxos1`0q#|lBSQWP>I7-4Mdk+1TcS%(eXn3!<8p>OdQ5$056Wv&PMa*r9yf}j3 z&+i8n1VHa!Y5rj#uG0_BakdI_>i9hnp%lU_>YxzBHYe*zKa~!(OVQB@vMY3JW@OTY z{5B+tC1bm`cT=gAdQW|kHk$OdpVsM+f>{>*?qB}MX#`;*-jm~)h<{hz_Ow6I0|O;5 z`P7L^!4MW3nLhRG)k|?q%%lTxZi{qcNfj;zyn(9fJu zAZ4j*c?UGUye`m54MR9vU2`y3tMKGi8-!1N{L}(5dl>wUh4e=QKO{SA>QdVU$Up`lZ&ogz%%bjofGX~Y zivaVwljo@1303UdT;_ssI_AX|e=x0Qx|4>`>06;Lj+8A4&UIZcpC-g9$h*Q7?U4mk0IbbuOBvK(yszM{YK?`v0UpwZxea7X+ zHy>05Skm8%&sR@=MZ?7rUIEF+b7JVgGD~*n7x`gvGD8G)c5Z%u^xu-hj0|)drQqku z#Z)r1pn{adW$o&;ugCVCINp&qASOqLakUb1ztRF~E9zWkE|3*syLGD9#Q_9azc)IU4LhIzwYHLROG+iZj`gdUvEI=2ko0=m&uA* zsKpA4;_+;Km1f(VF*X5GiNc%8+plXr%xd`G9whlJsz>!$yZQe-F@s0PALN&~X zYSD_??TgB>Ck1$2a}2ZHQ{xFqM}fcUoS5XH{~S{gMn#}CiPUC`_9p@M{f*76t|$K2Q%RVr0Dz#a-V?9gsgAda|V+rG-Xn%gBGsW}&h?`Wng0oqB2 zmgG8P{PU>8Am#I&w=O}U9HYIXIDYi)fhcQkk6mG9f=nESaKs|6g67bKVejB$ ztUf!omTmEu^iXy#I?UC&Cv3{TB%5KRgp|D&-$K$W7eAk`*!tRpfTEHbvZ$B(qmD1& zU80iZ!$rFnxAu$TaNStducp7SUc|06{w%_K4#Bss&HL>0k+{p)_Q)(8?)RYbX>OalvMOCS{5pHd$yWPCpJjm3iMn?tWLW7e{3873 zN-XsdRC8N;MuqSIn-7{?^3^%>Y-?O*J|%fIpW;uW5R`2qtW%`V{_)B(saY}d)o7Rg zXYJ?Bf?I}MawAy3)ZqSQvScigqMT{I^wEx#o4B=J+A&! ziCO`bhj1K?Q$U-$$hKrCKkJV;?>_w%h-aK?EMiFK&9h?6&sNV1)2TM4sR(+xLLUK&afTb_jN!u;K#_#2&`gPe)O-~vF*SOt0F9tSZbe`Dj8a=xGTR(A zG38?TsZ%{2k~z^qYl$!c_|uI~+q59!?*ct5PHLPwmOn$D{9(?2JWu(%>3ON$;a=vw zt>L9HfHg`Nf%3eoNa9-X!UEZ#LqfK-g&ke2^Mu^XCFK>LGqE@9}<=! zZeuY=r8pdPPM7;Cwd3;1Vipp-n2wWWhiUxxyIg+LW?JCSt!m2P+v*g@X$~Yyd?d;R z>^*A!?_(~|iIQsw$w0&j2YyXs)^isXbuEC?IyKU3u1kMjZqQ?9Wa0s=Btu5r5@wy* z9C9j7mrdS9OmMTw3O1cez*YQ=Ln`+nMhx|N-SA<&;^meSbhBEsTea7YwtbtiVdugA zlaPb5hApY>Wg{q{ci~9Ny272g~fWGXxzh&m?B{Ujxb6-Q;{&(*8#EtbNqO13*@gx zCT>3IsdaH_^(_5u^b&OmA+cz}BBb@xUzx+wqd_I%UQAXkMg?_$$*!}LS5)g;mEz1B zx9{BqHb3)InY(r#0ecCPsG9j!o@YKOga+Oc zxk1qAOi1dJN&fH`6*}|+;dA2p4?p0E@tbBfh$FnVt2eT2bc-Fp36(>-r&a;K{VQgc zJ;*tyj8p2UmmTB{qoiGB%9AKcFRKcjSW!lw5nkWVP~S!&<}=@NfTHIkxjrsK3uss7MiZF6L1~qCvr4etE{?85|PhM zboHO!BA~2b&$~>iqIdkL=bE-sH*|n77YGT)m~573RFD74r-Z`pv<}=dUg01Ga)?tB zc+v1jJA&D4TC1hTqpm@WAinrOpNyAq+j9aNw~^DDMOS2a_{s1tfse+SR%!Cz48m{T z_4AWb(Kl1rfNv6eMr1lJ`X~)=T@}Wv#lpx?;)hsPW?EOr&L8_8GrA3TGqF(;*<_KD zKCgJ3CBW}dI))j?DCcVt1TYA?iV_saFfGf`{owq_)0&U+1%AodRqi;2!l8+QW)!$q99x3k0xt_(P%5HRc1zgZr6-;`xQOayqk96}< z4G7a1c(0U{922+@p;0JvXWF@lGqW5bN)hlY4$grv<(f9 zEMo^UhvDZ#3WC(Kp$&54_*t7I{8Q%g=bvMDAUJWk0Cj`nsGoA8aLE*}##*~W(7EwN zom@rC=ft7I$i7J#Gb>nxZwC9jU2XC*MRflp5CHmTTGVTxKr9WRZ0ja*#N{3x+3Dc! z@J3^?R!4IXk^Pf9{ZnNhaf};=Y6(ngh9&vF^MNvJ4^sb#E%ykC@K@)zQ;-wn=vgn4 zR-nX)*KdxD4^naD5JnJ-noKQ?wFn%5Cv~4r-B}GQsd@JR)a~&BvF7>?C^HiFxXA;I z!aK7+Rw~(m_~4Lu*CCSG1s*%QdDiZ9hmTfDd0$z~gN%QPVrv4}fTNkZLjGdv{Fceg zg3_RuQ$-H(jlH0dHcO7+SJ zp|9vr>6vw7(hWw9S8suK)MZ{ejJ2?ivci$}hcqcs{cd!j1Q8OMfzE9O`to-Oll40T z#O8?OgvalCjV>F_{qn9r>9UKCZ;#$x-*8SCCx!!k9c>LUA`gnERivBPa&^+5>R9K5meG;ih>wSqQviJo3aZ%nwgBXr#i7G?6 zuSv(^3xHyF3S45-e||+Y=i9YnUADzbwjbEj=rvYZX`Nk6_~-0f9)HKV3heLYBx!%fD$qO#^3lrbEm}n%8wMp=BPtw{j+5 zgQM&Gt&b49r_NQjIJvu#KNQTh-%l~W3Y!)v#D@4O%_U*@0NLWWGzq^$kGN919DS?H zbGXZH%I$)mNXMQsku&Q;`HtFc`4@N?GpkQf;F# z?P{nk8_JXh&mYDC+G@RE-bTH5uPvd-&knE6_~e%|@h;kgQsy9!U^Zfv@5m4iZHt)x zP}ad^I`T?7Li)x_|LssfN)-cQeWN(R9ZB%>=M@4lLC%^EJq#tkDy@x?gou5^7?k1=QDw$DihC- ze%5v zWZ!m-g|aE7q-C;{x=_iT;Et=_mEF)^`b*l}fPkI|A)mKtoS{W6*erQ;Spx9KKhM=& zY`!WbUQ}$07xq%n6(wjiBz6b%iX9>uP!A&NJ-D0fD=)6RzODw7lyMrmu_($JaAj7V z(9-;17M(%D%W-5LkOk7=pPw#WN}!b=b2I}7$m_@@#Fn2%Fp%?i;t=9L*!4p3?ok2Y zu?Y5DLE{%!O1zxpOujxk*<;?^Z`Mng&=XXI2ap4zqY~V+m9wx+8?Mk#DB;TT@vGe6 z08v@z?@xV`iJ?o6QgZ7D+KEYh9Jx`Y)AaM6;w1j2d#$sDeya0lkPFTGOF`oE)H1|r ziGlXt-J*w)-I3a6xQ04IjkxMwR!33^Vnw*!0~2@BbV6%$H|ob?@bAK{?wh4mbM9Sp z#sb?bW+-Y$Qgi+e#EYW84FKWn0j^x57*C~fueBu}kG!_fnR9lS$KWv{n_wz;uP1b3?MnzV}7so`=EG)U{)vlz?W}&rn!P90(9E zd(V=xNYu+rA~hVaS0F%G{p>5#v(gW6L;MD5sh^->%*eyZm+0js{t#-X?BQrk_9C4?%&3?)B1BtSMr| zz@Jb9#|6L;n~VM(O0IiO@a6R>f?^eixn2d~W|sqR4NSSqPF{*LMcVU~V!iJJVi%K@V={T`$KNre1E z$JQMuKNa(&*_~*2(l>p;g4kDsXzHMXJd702QNVEX1T zYx77iw>zJJ2fg#g`aMuR|GDK3tq>QrA_e}`nX&uCgET$x8S6hDd$6rac6oi%s(E$n z<|ZAu3mBu6Jh5(HvDL>VDk3W}IV}?iUCQffpWKWU0b`;Wy!5TX4d6))`Ub9yGn2fT+@7jybx+74j$+`FP3pd`RxQ=zn%*IJ!`SGE4|aK->*dgn=6kfPspy_=b&)6zYu1{iIx z!|?+-V(~Z4!0l#mbFP5dSrY$^jNihpj=;6ST~c2&({kE9$IExI?Vr$i^j~QF7aISC z#@~7VzggqIS>wM2<-Y~xKdkW|*7y&G{s%+{5?$Z)@JW*YHdf^i;lj*ZooQfGllu6!7hnXGsAfUn?wY^e&{wE15!CkQO zmmY?K7dx!5>8-MJ8a2;B@44QzD3Oc)@~{mjdm;eX&yr-w#NV1(ZLXI(-Sr6{nzBM3 z=B)f49awvZi!wtWtV~Ut{T#tf4h}+__DXjp3IopJ!Zk(Tx`NcQJRDsbHyx(aG3Q*8 zBCx}c1u@LB#P*j-TNTdCzE*_1BuS;(8c0tFc-y2e6B^RXRE1jBiz5vi(xq7AH6YH# zb-kJ0R9k7OBV)MXpv+nl?A09DpPy_tHRD*QAm?@}AmTIGD-|w(?$kdBbMklTlT$SK zidfx-zddT0-N`xYT0JkRJRgBm*+lBvQUbS6uA%<|2V)J-R8NFrr1 zTY4HWr`%0xh|Hc}&IP8>_p8^h+^pem^&c3=n~tRV*C8^B;YTqZup+NH3;4kPgQ+#S zH}CSQ-mMt;na%b!*4IuQ&B8N&o2+ZgGVr=wq;xjS^6%YT)MX21ebhhBVBJw4aR*d~}x7zJd=FMD^55`dJ>sBDep zJ&+5cbB6kxrKU|9z1DLEsWtr&OLb?7`rqlY0#EC-LwXBI$!D!-2@OiWhHIT4XV^w|HYrB!sE^= z=2>#HP4`xQ=}RF_#?<>As_QkDG0|{^lG@eTohvG#+D8cEc2{oIZ^ti3R}6dfO+2)p?E7)jQ1{u#15>d*;L%`; zIjTMjwi&YDsmaH%WigSUJMrKF1(Au1+cVlVQ)Az!O!g>YnLmVs3d_(1N*A7CK(dDqz@9?CEGihNy5sOWQi|ngTVX!dfNi}wazXptXY)XUBT#R_oiSO78lD**e`~( zE`^Q2oHeT~`C6~D7T92M$I(6Hg^8yTi{uF_Hf5JnQaXv&h0QZ}na{f*ygVU9d7zvZhA3ln;$=plOs1_!lFP3!-WQH{! zHnc%zPgtrL3zP2=tNly&gdMb3$hsKOWn=UQ(7gDg$^Js^i|Zm&bklxaA83XnSV`6~ z8$j?gNbE6i$rjX3K7rmbaz4{|YL~g+*LI(kdClkoak2SnfcAX0*CKobm zawvcoNr27Q#7Yl(4ru+15g~si;A;i?ONw!qsN4cl@rYacY@GlpLXEPWGlGO^J?Rb+w3xTkuh+!%i}=a+gdB*Asl9(;wl6c zBG2xJ?39_h?DNfW^bLl)tQ*f=WU}@!liX!&`ayKbaOl(h;bs7+mizI7G*-Y{5Vj`) zEp5YJ*!J^s?n?)TR2?@uP;rsSq7oQLo*g&rTBX8a7`ZRhq2mpUxPHG~4hZwX#yHn( z!wwC!*fs3x(4|$VEqdJ|0IP7{lIIF0Y~ps@iS-|O=h3zalFkbDc&+r?Q{NpK)GXvt zZ;Mr)7IN^{#lFTfrtW5*pRZ)i9W|}=?fQy@ngzS_=hXgQcI~-6baDnwI!?oNMPa)aLWLBWk9E_%mI?L$cXC{2 z*8uz%z{TG*ZMr)#Gk-E}@9%X1PlfxT`c~Ggl!ng6VP?-I&)^RG$rkiiSG#*nj_&qP ziYhf>{P>#Xy<&zs#vzKkhT0(>PawY=)|R0*7uV(t&*R8u>T8b`j%l=unvQ6?Bs~46 zlNFD@9!tobbkI<%TBEl1v0X>Yj$U5W()2>4d2A7 zV-{ll9yHWBtckTz_fhd#1N>e0ZI5uOy8&Ee{@CDMhLX&K12v1CNil@v{5tIT(@HSc zNm-iF!2jM0AmshS@qK$LBAXDXK(jQ{JVUi~UAGx)*Z)^oZ9?!<{kB=>tIDl69qE6L z_M_yA?g@q~;J?zC#i0+rYQu88`WUi$qgs!~wNGtaqTjybsPd>iB+OveNfZ;zjwgrE zndf2Ohycv$kk&`RlAz1j>P0kJr^xNSR7gSl+&-~F00Z-E+bD$sej*nIQ$Qa88nQXW zy3j6V2cO@;#L6w{xxnHGd++kM$HqG&zT^((7Ty;YaN8KaW2gRJ$idc%3fZh+LZ#pC z{JOUP3rq!H7X+cWB{oRS<=NKNiaf1?Q8U}Nq?`xudN<TSP3-MKKhpzO@g9J zI)Vs<<^7rbDeBInfv!BX2jbKe)3@4Gf*T6g?sJ3tPr9U?&aOHb7SN<~IW6qp6XD-2 z?*s)i%)wsh)Q%E@?G)Wwr`gYT81sR3=oNNO>-4Sgvsl>UlqS>AC}xd@lTgBfZB%Ow z%id%xLJ)BjhL=Om_JiIWD}b*aj@PXG=|A7`Q~udi>TdtN z>F{M5*BQED1;yw8{ocBGA*I6AwHrZ9Bu9kS-;aQ*~%T{oDd-_Ch#ZMLb?U)XU%1OsDrb?uDl=65YSV!xx{ zukd!O9BGJ&os*WUKOAaT8(TdH&|&8av^BavIewcS-A$%I=$$Jz#6*weW}-bTge#dy zs^(4vES`2oRqZyz?T+hL+kV|yt%!)y<~(CO6JUZmE-+YN1$93VLwJv)p?=IvH><#i znvVS_*m>HUWChw^EKOqI|Cw8~-u~cjR{C=ae3CEyc;PMoE-hSTnl018d--h)C8DV7 z56~p0l}db6Z^cct+J#c`evXmDGK~S4wy^eDDlgdULNN8%cb-=zT!ehScAe3@g^}Un z*YY5KOPl=+wCTjxzWX|q62;~FlCJ44`DktyI(?;mF#Sr^dK!^Eyhr|UbQi4cu%HSW zIM0$_r|RE!aEV&^Q;(GI8z&Fq3hMGY@CtAAR>uemk%t7#b2Zc+RYKFpOpfcOBSB0? zLmb|H-139t$v`1uJQ;R8*H3^?L2D>pd|r94?PDQ|U7~;n^XYg{Pup`b7rez)fe3vm zw{*GueVVbCAlbn$+$Y@r?EiJ%n2&wJfd6#Dl?HAQY@#Hf;@k`I3u~$QQ(#R1BMe1^ zv>pr`Uqi|t59u#UL5^j|?V1j7U=S`^qw#0$A|r654f~8UzDwHLciY%7SR&0c8VVnMVh&5Bg78rSU0UShR?k9n73nd4P9cb_4;>*x(fle=E09 zx@-S5Ak8!(6I&B50XzPHpt-KdgD%(afSg$o`t5?C!rSikK5>r*N9WC`Vxv;9 zMpX*O_a3f|SPI~uQ3AO4wXf-5{DN9C0^0#|;Jhk^`e{%|pO7Pbx1 zj(#o77?wvbXwyt%2X!;i=oLe4zsGUMp`ixe{ll6o`c2&EAKIBS@)z^_6>W+hb$%{= zAK}#g1K5q~R3WgZ??fl;B!<;+So%-mWz;14d(5>F^w$=-pVrS*vSEhPg6M#|~ha)=!(% zuK)}~dPUMl(qH!>d^Yd8@bvRx}^U$}HZhdd`SWIm=Tw!weMwcWZ{0m;*Bod19v$mLmY_ zcdsexC2TZ*cjf7H5CPsT*$nN6lr!U6F*mu>?C}QW(*Qez;;*deZ{8N6#<^tqdKhGP zgc6yEq9wTgXV%aLW({=dsM4^>_BVYB?c|->!Sj8h0Eg{O$YCq`#+4+cqep`@h?-Sd zPlokez>8u|11H*^G!O(OUGd1nNkV(y} zpx|L~umA0t+uOX|TJfPSV0p2FPz#nGg8~!puDX)~i@bT1c6t0!y?st*xTGXYUi2`O`Lz+x!kDf=MDMFc#-arLmLZgWWE5@8(cwD2u&&fRIqX@aIbT;`ZsrOC; z>DS7j^gMH!e%%P88jD5)Zek@7?$_H&MTDKI6oFk}N%yd=L_tThGq%Qb%EsOrg0O8+ zlhr8_;pUw3b3Hj9yEzlTpnyz46YUatvZ?T${gQ90`&Ab(S|dHcr2>0FLi zFS{9=`A!+~yzT9*o-AS{h@kOLbXVAPVaC~D{~_FCdu1Gfi(PqBznfJI`1=3$uC@>; zcArFqx2p%VL5@xUu+GG+(H(-Y+g=ZEsKL$eW#xT~!@Tu+_K_rASLqZtnp&uMs!lT} zHxJZNW!Re<`7i6kQJoSmkU*+&ciEem1xQs1Z`5j95^znoLAI=9xANi882{7LH1?T! z*?wjvOpDGDsi*0X;JjLL3Rai+*lV64briAx#53& zReOCBPJ0sGw8WKG&3PKAqsd3V>WiOwvwP0fKGt@`{L~xbiImEGJTu?9cm3z{{h&!P zpf>$;bN>6t^?MVadh>E*?N!uJ6iv< zwzT@4pZYGP_TPukSQ|FkAn_`;Ld+y)==4H~Sg-rOhop_xsfa}yh&VkH2p|B0cTWmJ zwr#YqPlD>_HW%#2%$g|v2Qtp1!Dow`cIZk;`*m8MxjL_LV+g}HT$isC;T4F2iuT7( z3c~V#69ufM=Hml9o|&CgSlLc?xZ=$Q&Il2511=AZlB#y4TOU$Z&zDvcH!3aY51f**X3l6Q!z&{$6faU?`OM=_;zj=`B~e*6W9GS!RKMWW{yU_|(M%XtNk*4JgZeK2z* z-NQ^_^$X`LJ1`H%(P&2j#r1|do5yO0fE0mW_q%iefX-NyKNa5~J*w|D>mP=C8^)nC zE<6x}xoOFWwaNZq+B$vywsFvKeIc9-asNagtA3?GI}6x7-fZl+VcV@gvl^+8um`1* zU;P{lMc-m8h!Vbdf= z;s1&PyiU@tw_udzx!PTS8zV;>u#C{WZvtK5DaGyXSnB0JBAR=WAGQ5k+fo(GY4g&y ziasE0I5%!<TJUJq!+NHq}W#588gme(5q+;hP*NT#rF+kYGH>|KU|t@K|iPwMeq z4t~fWf)iNRFx=s2Zd2;|)h6zMC<6S&c6=LLV~;pVJ6I!M$!T%*r((a~WwJfb<&8{B zn}z<+!j5edbGkbQBf-rFQ@k;@W-jfA{=TK>zX4cay zg-WL&-&a_{e&(m=cfT!FjNrzA1UNL!xovgq$z&;e(=#r)owYaPX|p#fh?(E+Y53_) zEf+{T?08kzhkOJ3VcS>ctvjkg=7br8CqV%n>B-UEe`PCsr~jvHrPxLSFS>#O`#ixc zGAk-%?~Q}#&$PgPZ-7~8PA&qgHNxD;y^-lX#oABI#R=nyN(@)ronLtdu7?cOcMBcU zaFtT44l21`8Lr}P&N7?u!IMb=^Pz@9gqZ@_<#I>c*x+w}t(-dm`Q#qJ^0a#B@jq_@ zKoa}`e3wU|Z=Lid09DKqw!Jq`!b||oC7nmC@%GgGrjY1Dz0sbP6U#Vc$C=M*G+OcE zy|&O65x|jUWTq4TZ@&!uaPR!eCoyfdnaWdxdWwDFx%xBa>L4-K#XPq3E2QOE!@Yi1 zp+fWKs5J4~qx@6k@lL-|!_qw!ZP?Yg1%g|Qu1;9yzS!) z>FDA3)Srms;1!W-gatNq&0V^|j5ZS?dxdIGGFEzO=cFvo(G%M&oV4JzbQ_=-8f3|l zjW8sc5=9hy6E0dr}O=NmJG1Nb4qJ)SCs(RmgdOH^R56K@0`KKA z-G~qSChH>mUS^d{$?m9WlQ>iuzuYr~34k`n? zLf~&@9xHck;xgUUKcFGJ5L=)Ut|_bS*xr4#P`QHj&h1hV$c$||H|>(dx^Ah!T#i>> zibQKmRIo0_zB!sY&Mu1xl8qXG1Ft1e@2Tk6Tpqm(ylWM{_0|5QYgVl_*jh~K(WYNr zmIw=G)BW$u=09L+Wq+yaGo6m0N);i$D(t(7|LMVK?#^J0m2cQdV3VAgHRaUH4o!OQ z;o)&yI{hb9AU}aAd2wfFgvls-?m6XEKj_6|rl@pU+7ox_$(jDoyVH%e-LLLqw0Ay# z#$?^&>mn!TiL)ZNG9VC8*6Fn9j*$SqFsb&X!k z!c6@xOf}m0a7b7X-T1ULtq2A`dQqgKQn%mfeSnIccADCki?G7p*qZamtD*~5pKLqs z&mYOxTKqIu6|=qhiG+}wJ0zfi3^+{uxnTkAI?_<-%ZaW2&6+7EZ{gmD@pQ_HBu-h1 zPUMXIjtOq;Opkdx2eNy*^o9Z_kY2l1-wdmx-8jfZgrXcS2;|p2u&U4gOx63 z7mhba|id@h#pJy79zCHjX~Da%?zsrGJfkF(#{8yePK|5^wsALvz)rz5ut zycwcgfxOw*!ju;~R!_7=dHMwDuPr2ZPsPdRyw&nTr4EG+218kl8Nz;W|=jccx{u7uYlnr7a zh58-$QP*bS(^%)r)wb*ERHI}90isjU29&uYBa*BH`IGbX@wVqbMRak_uO)|_TAg05 zSFw#hJN(wQ(YmEq<-fE!8ha<7LA&UI4{S=KFbf8pA_bhiI4k^_b*7VAJnPyj2hnwX z46Tos^Ba=B*@8g?R#wt(lGo){xOhQ{1#?T*ZB%lrogY{_u`mOc+h*FW?PQ`RcBU2c z(d1E#GK;e$Zq&tHojfpofzN{vaFH_6wfznTqFGr>W) zp6(IJ&EK1Yr9Tp|HMDO=Rm7cO{QD`P2t`t9mp)u|*AHvUe{s%JSgbFn2T<02jgO3v zyuTJMb;HO*el%ZE<#wA(`*btv*`Yw9ZCf?+nO+m7Ur!|vGGCNiLEZK=u;j`sv+l(X zo38J(?cY7h>-auwmJs+H9(sIrKs}9#y&vbkh1F#8;GxE`9i=RghonD_4EQycH}ngn zqD)6eQXYC~24hByV>}%Zr}C#eX7qHb&4SNA?LtV(nos8syACL%Jyd+jPV>TAIa_X9 zG%hEUakD9X6PYzbc?(Jr?zb>@gmd{lRXB;(B&Y5RX-=W|xz^JwoEIf5(>qmgF%2cN z8B5iWBwRSSbB`HvX%Hw<3pj^Bh1-Cn)xeyBhwdGh=6Y>-GrLI1OF7^y%pZEfwFOcZ z4t51qLYt!ja~ub^4JKQs^geN$YbY;$-Q*rh40B_I1&(-C$5_$b(PX-er=&cWQ=m#Ur#B2ZSymd4AT_37lc6IFS^7K=~qcu2tO8o2=S#Py1b7Zc?gfbOJTuh zEqYaM@mtQfrY~=7zqa%M7{tRzfDa#bJH%^J0ZyRg{^wV&deY}bUVis2Fx-Ag{(SDg zthsRM4>6Maz)_HD zd9s)H+rJ!3FwrCO!0fo_*R`tT?d8+?!$Ha)0ON9ZW{5nwd{$-pe`d98Q~uD)QMJ?2 z)w2Dd{kU-%Cq2A$VJ0+`H+V>bRHc%ZDS7C69g-hV5s5ueCJzL*)Riy=-UA|a?hl|O zI-)@LoU51NMX#p3WY;cx{~IrGaXa?Xv;1)(bmWwi21$Y;%6IBb*@Vd3SqOPZEN5^d zuE4{RUkwyxGEgNanF@Vg19<#CHDFTuO}ei!m+qJUYY1iFeg4l7Kt%j!i2owuzgOeG zIpV*`^1oH%zvc5k9PuBZ`VU$D{~2Qcf`>GVz1A94XHEys72IQ1xcH4ZK;UoVc6c&e z{(N*Gk;5WVmhzB(*aC1>}^(;a`$Mb z97Mrwkxl0mH*~~bsQ?Ap>CPTn3xEsh;Y*~S! zzPc5!-?M%KWBeHMbM0F_KSg>qWtwKa1?uyz!0T`5_E%YFLg&dj4UXnii)AO2=c_4x zi{)Zd;g{tHhqX!kpx$>16_AE|!xf))R3?5WI-c@P75XVOQA+tfUnf$#^~t2rYoHdhpl#gY`l+$FPHKGnjj^)s&_6>0n8H2Zg7biBm_0DP>udjCGVx6w3HHt^9nqDa^49_54A@P~%q>$m19rH-f7i3r1H%0|FVgV|?u={mAH zeW^rr;X0E73F0?7y-@P$xbA(L&)Ys@N%uMU@zFsX?O6|pBjMwHg?oQq$R z_}8N@Tv*`-1HCcD`$%C!R)DRS66R@OY8m*7SUhXdU)RQOV&pIm(4w!#0Lt?`H?%}7 z407w1aBv53PXzx5XWN`6*IDt!p^COuam7ho_i80+4RJx-u6Iv{VpsWba=fz5Xhmza z;S}GXg1y^yj-4&zmrE(kx`FG7v)bsXRh@zbhWa1OXd?xs@2Pe|zF z=VQmGa?Cy@8#0Ot52JctTBW)LH8Geg152HCPU`c-g+jnjM~Av|N|M|~2~){Iz#K9w zaLabQ@Elj3Gj+;f4z97+UkoB&{0YUlEA-XxV`IrTF|fh@xK;eG+xidW(bD^luIZZl zCyN}lBVSVq>kcrIG?ChaAT*QwJE924KX`AVgM~{1R*NQu8#mThutSL)Ky}vNGGCO` zc7i!7=Qx@FvzP}#evRywvn}AOo(J606TbZ*i)pQ6+2oJb{MLL8A{`Ps8k{h8=#=Ci z433;U9#^7DHB`TSrN)X+c-#mhyL-MBsFnW1{Phargw3Lu*nOV0r}=xx&kT#kcBGO; z*&v7v@0;X;y{ePnVwnij%4p-h=^)7It&l_J0$rbHCMt1~Y0e>uZHstMnqB8h3Pow* zjws$yCSiy&6sf*#qJ?Q%a_Lri3o=Yurtatxp}H^sMe6PY(K{j`asyzIp!A6=9wyGz@mExio zhZYn9SWx;JLXGN%GQXj3li!WP_$S>z4jFBUQ($z{j%eiVGN7L zG~b>up`0yNq)`rMu4+ZdN?gZ_mrfqHr56H+hvC0mda$*b@)VPQ$-Gze{o@1T&P z#)~u>?b$CKbk=%I^;;_%=PC6puq^T7c?SWg+k+rMVr+)IjTMd=o(J3&b%EOm%CprE z{@_{Lf!nByjq%e6z6xC7j*=F^1sg<0EzXq{ebZF$7X#mZ`zS@>bX2Zwfs79w&pwNK z{I>VmgWP>x0CQF9>aK^&91-ntLuzOu<#D9SPete%ivcA;YNaJkT@b8K0 zP}W}X^GJjyLw?0R)Ncy~mFD>dvM;b3mFMFy|JdOCf&3`10ML-fo5}tn-o?B%WZ=!* zF+C*LctZ9ZCK<5|kDubQLHg><5$G6$4z^YK8waK8E%gtAkJS3_J>QzKSMYy8)YOL{ z2)K$A=OxOkjK&7F3MjF$q?(T#9y-1Vif4u&x?LQR{nlt-S67IiJTEuV8ua|X!xn3w zbDA#;7VBKkTdCWDO@$$nf{kIpCO?B=*}WQl&dyEgj&X_I;L*cH2Z<8S_Z_#fqbp1#=_TPA-wKfTV*iV&gxVo@66 zpOL+COw{Qnc6jm}I`Y(W*t%9da5;VjxoLs-%@4jsi3r3=A>7SL7E}#s3Dd(la{$+{v`sX7oe}e3ewZZ_`mtK$C`Dfuf7b!&UZrSmw1~Xe=AAgUb%XY+ zN(A0%M*Xj=X@(0MhmBn*$sxg?y4m7*nzl#3QC`iy*So8eZ35kl6^I>vezfk@e|=#}RTjtvSkb z-ou0WJ_x^N^AhPgY;Y-Q#%M$zcARlyn|Ws*5ax<0^9I9{dZ(=SIc)B|q_|a|BDcMy z41XjaDL?-EhqT_NV4~QIeV%TZC!*~8?bMe>a(eab29m(_eDi#brDW!O2TLnsqUBm}cj52E}R$xo=xWL4qYF&ifCR%=Md=`l}BkmlgZz(a{*PgA#p704og~9Q6u$ z4$~!4mQ0twYXrN9P%Tl*`-6%u>o!T}SS#A^x@yX<5w`zATOhL=^4=$qyHO7hmiBSg z;`;lsQg>b-97~$uFe{1A)hYM;cogtI{0SsDl={V3ZcMd!-io-#>vR<#l>P*qLw~mOZim@w8!`8oM%uNL*2h~@~PwfS!~p(DPUSOXctI# zW;7yBrA)MY=SJl?hjloE^VCD8s&Fmg8B3QLMJ~GthD)476K}XSVsUqY(Ic0xm)_-t zY+=Q3gHN;0C`Dzj<)N?HgEcDs%ML2!Q^sy5N`gWPnUMWeeRTt~QeoD0t8%E%FNHV+ zNNE>)7Jgsla;Qqn@OH!cuD+kC*Uz$S9~MqaRO@FKThVQT(iU4iD>xcg>pamoY?s6m z_iv)g+PL%*8zCGQ&z)W`k_ku|BO;s$Xfotk&_9cX7?QNp2 zPu*hVle`vh-hg@T!qiuVM#IQiJZt5)R}8#{hWB#OPYsV3lAyHgcxyvc`lXR$u#P?7 zY1)*z{8|KAg1pn|QhnwSz3#5rVLv@;Hw1PlIX?LZ^CO62owDk_e9KIXMdhjODrkkSBp5dzL<{eAFf9k=ed?D_gGEYwq@a<4%v;uK4bMieA(kj5u0fW*;N# z?bf#N_go!`dK;qzo@3GDAa>7*%ZsD4o-CH!v-p{HT4+ZzxF_F39i5J)!7}Vu(Xhum zKeePcyI>iJW}$s%(!Ter=B@yTG3}yUut&hE6k|c8m35Sy3MGHZ@C_TKe!<9)Rd|%S+or^j4F^SSL#4ihYl6LUuiO zw9xIF^Yc;utm@P5{-)p5Ho;2B-sx3c-Ok43uTjuDFUMJi$$OxqA(ngg_%n6NcGjt8 z@RG6QM4|_)1qbOlE|Ot0l*aOhatGp>a$Rs-jkEoP%0WeO}<^jwO;w_N7rvC#)Y9U(jy!&2TNJ%oNd8r zeQt-@L@@t2{K6q5a`boARg9dkm{7c|wVL<(P=~?FeTRO2EoG^5HBcXg2W(d_0w0De zn-+`VN~wlP|CVzi()HrT^N;hsT6CqtSc=ek_0b_MaH7&<$0GPtNVAoyA{F)$1=x2j zV$QbWebN6twWsGNTZ8FJZ@JQUefqax{voWwF#=NU6aag^)GSx__{T#+-U^7@!rxyLIRTfc-lYy2->LV>X4LuTz z8ZViCOk9F-A+9B3&vc>oC3TrufWoM>PFdBHhHKVwt8%moE$2jHQYrc8O*ak;%Pbs_Y=|Gda5AeKk;pO-r_7pzaehsnWI8-QGtWwf>j=bZdWhmKB zK<}8hd%bYdCTi|H4?J`OuMs}m+>m~sO0{hW(^2sL*)by<)B!T)a}GiL5_OB5|c^`b6?}-uPwQh5fl;|tL|MAdm>NZ zEEkdncy^2aZIGy`TXVyMkyhwI_>N0+fdC7kdL-y3Ot(H%xFYBl6|-D9gAetB+Xuxk zg8=CSIm`oO5BqeLQD6yr0mx3uDc`$^OWd`BHBZM|NCR!&Y{owf3{o~d@%YO-4}i}KQlW;4C>luQBcfEx z$N1$>uddW@_trv+3iSPgz-7&h$LO}Z_&^J_7nvmSD6YQ=iQ0v` zxLy^{Q*T2Ga|!F94oMV+e3~KSW_r7{k#F(r$aDO%a91Q8?IJnF*NF7ruJIeZMjvM1 zN2~L;Ur>n1hh*B1S+ShfdK|8x)s2BJjnV(gOnX2YJ{;8H^YD#cf0t;ubR4ZhxsG|q z_)i|90VvSq2l}d)pCmwfm1%s|@g(o06NT_7TdIfhF^Qn3nezsWsXn#StL@dFa;q_D zW;yxWS~xB-U7Qx&|Tp}#}Z5_EK3j{ShN2)~2fO)nb1M1>YmVsI>xfTXsy-MEJ@Rx!2(sS_M=dfni&Uvg|dkvJPCNJ~BE~9us4+=>09#wtdLF z*f{KEdxw=$T3VHM5aMxH)wel_vMRus@@?D*Cp75;b4q&tCHd*bsxPkAuf=>y&aNY`WLBPxyg1OTC80bojk*cc?8I2(bk11kP6Z*pSayzJ`LCc z)2GjzhO3FzVy&2b#qJp!;i6j|Zncd1evXn>u>a?t2u->gA6AjSDTSU*YqQPpq$@i- z)}LW9m5|>rH|t%DVk4rM89#a?(N##!1G**1UBJe;@~+?vD13boV?P~oyX<) zS)Vn&Uz*hV=ckT~bekJit=&|~)v=c;nUxuE_CHrJtdheI&Biy4Z#Apj8cvVH1RY1% z9~X$iN3|(-YVMQD^3SDR!Ux7hG8Qfq8KAad$85Zt^ev4M&j78GiVqpgU)T@a=ChT5 zz&Agdjr+$|4(dOBVd%0SlhC>FjMAoc>mTWn%)r(05NS@*kL}?9)D1EkZ29rfy5our zo=@Q0iG(Y-jm!*9|14|cDh)f!N!T`X(jBQ(CH`TTQS(oPvU781nDfRu@6IEqD6ms`9(3^E3cQaY_vz=dVd;x^(T1Oh60nggl&WUY z^8NH)h`)f9f8p7I|Ms5_QO6of3Q%`ppxytXfVn^;hv;<(Ml{|B>M9$6F#m?B($ed* zMlltMmpX->jfE-ikd?^?RQ7UcEej$*!#->pTQZiosOj#+qn~wC)>I=}2Z$b2d(N2$ zGd_jXaA1@toAWRG(i+DXHTdb8-NnN~LWl~)lbMlL2G#wY8gI=G*OSt46xxE9Qsja{ zYB(8k1_i`#xZ}ZW94<>F_g&u_GWE@8MLAAY<2u_bH1RMEoH3Vb@hW3Mn6do%==ee5 ziXF%F%pR21su8kzZxhZ^&~#t-RTB(%5!l_^F6_TxK#nI_mXUV*)( z7dT8)!w)%aaa*@!6r1n*HNNGTbV2I<>jJ4sBu0-ZVTn@5E~z@sVrZp1=7Be zw=Mn60mq@ipf7I}cEZi=L@ClhOZc=_zI$Br)&A0{MVY|8yDTDGn*jbFFTTBTKqPn{ zjK1FH_da{JjFVRCSgH<_a91W=oW_0sW|bXbh?ztxfmsM?s(*hCa(S~d8~@h^@zSTU zFPlpVeAHDxk|6I;k`S23&z91;9b>>HYb`ePl_Qs4$P1|9POGBByZ2a*Hnb6hbIl_C zf_}RD`DN@8x@wI9pW#|Wa1pJJdW6#n>W<2_S+7qMgiy0j%mVp3VR13F_$pZ=_|V{A zKJIp3J$7%B?J3#lq?5LV-n({t&l^`DWB1qc(!WghU6*yu$p2{g>9vU(I zm41Y`MQPARhJ$iuWXyMQ`FS$|U5(eZY=B^KkKI*-6>a8bLjM@bY#>mn3an3iagOQY2 ze_Z6?10S7d*)o4X9qnm&o?3bHAiw%3@-U3P0lsB9`g0aOM&H-$BbN@p_$4`S8tz5Y zE7QwCPot_Ig#--G+GDXVZhq{$^uE9+`qyzSSpM5_r)gkfoe8ObJSWUd*ROfo8gB## z;;JOmtcL$8|5FP24c&{i8@n@{zHqI_9KW;GArQTi-kfKhJ5`#Ep`_Be`P(o_GLGq= z_g8Z`l2vv~Omq8NpVA*J>tRN6yS33veWKkwNuYRdjyO|BU=bhjMET1TaT$}*{S+!> zyCXHozq3W7M~8Z+*Eq0lNzT3=&l)rYRt;JYueN&Lx>Li9_?7K!@*LtAZ`)NP_hQ%g zCdRSNRB-%S+74lYSlC1_ueE7Bw6Fn=a?*JNz*6rXQhPm0g>E_HA> zZi3tL%7;Pk-b6rOIM9wPO=+g zXWhe)c)(A=<%dD$%t}Sb=C3hnApiS)LuW103|Aif+;tt#*D6T(#j$3um~lFDOwpK* zIW7CDPdco|{1>}H=<9WuAmawjI-1DmKEssM7DHSL;J++gCeS>-4(oD_DfzY+yj&*Y zVl3&hO=mIY_{}jC!UYA5be^dbp8vuG+|PQf0hek8vkIsYml|Mtl zv%dfxikiUPkq8iB7aIfm=wK_x;Zf2c2po8MaXY_{Cb6T;*TeKRY}nz6F++2-G|~zs;;c#Lu|*EHuAb&+-m(E1fi= z?JH#+Cl01j3mgX-MPlYy$k*oxhOHgChhS7bBpvrb-LZo`ZzpInuEEeNMbG+a;eg$S zmvB{Eu{q7a>UhYOhum)sm-MBh?16R<>eX$ucB9)z!#3A}1V6^BjBSJiEZ~4M~LNg{+7W=g*8EghJ|*L6WlUT7>)!rT$KD9@Ch>oy&PAvtF`rnHs{Dru)W#Q?LPj9O z&g`{zBU9to4kr;hNuLb{!!wM6Ao|q>)Abfk<6AVs8}+-9x{fq%xakG!cFMcCzHH&-9tI!S{+@_Bmsg-mVWp!4Tk_eUq`LfFbKvVazbV z$loJHPft4vf*89z{jQB=r{i^Tir;?(^*v!*mN_tqEU?Asbwn1CxnK=<*ohG_rT#cj z%tJOG6UOIg6gF5L^eQWj-E>r5cVK)pBXh4{dafys7*KrvedmgSrc7e5HESOn%QlDRXGf_`=moN_Sk^Qx#(x5B#^N8vxdPbU0O;Bc3w3yZ@Lxo`}f*o{aLhpx9p zJW!u!F*gRNM?CB}@zxT~2dnWMK<9Alel{n!yL#?i zjyl6OXE?;UzU_P*Qd3te@MF$@iJHr%?JsW-td^!qE)ND&8hqvvUB|M%u}*)LcHes1 z|60K>Z#yaVdV5ojaqb>OoiX>jxZU+ZttfkbuZMq^r23nbK0(Iu1|2Isnji>@Sl7%q z<&Fl;|1b?vkX~n-(aV>zyMR3Hnm?^|JkTc^B*?9mLk*$0`f7rLMR4GIP7A`NyCO#{ zsDdhCIvO4rwa$QDlU~Z2t{w^X;Kw*BmG3!x-}&V0B&o_8>fm#?20H-Nn&sMWv*!I( z2=HTPEcW+75G1qZ#TD#T3u1t&oKI=*a;1Kru?v%D`nzAU;Usq!!KtX8=!%}rPii5X zI>0QYxZ?Khc;@Zg-};o?yg7+f`ro?F9jL04K`% z+Y&gHV3b-9!oq7u2tQk8-99 zQI+qcwZxYDc@W(?{U1jgsHjz<>$N>l<~~oWyxe7apDPbrkRY1eC4>euFf5_#l?6Dg zzz9qX4%7j4j`My#EYjmmXIGpefpg!9?X9L_z2YOQ?(AT(ypGy*c|%xtjq{xV;L35y z`sor$vA*8US({u0ot{qqrqgx=Q>jQ3E=R#k4xBdkJ0NYtJcL0vldJT-Ir1*&_^&9* zPsZQ$V81-441;jCC}E}eGiXM>2WE&cKj-JG8=OQXe*56b(cuh^Rdw%Y334Shh6 zK63822|ig5p-sAWtH}=~q{1C2n#?={Zx^E?S8QVt=na%U(v^iwF!Be`E)BH`r z^HXFMuuMEJZB}2k;&L?yhWgn1x<`-lPx@9at zP`|e;H(%0`c(zQX{ManD^~SHL(S__L*$A_Kl_ueoA9ftb2T1w-ss;0xAD-zCwwPIYDOEzt?r;=pG;aJ${IMa;|6Awj_S6Z$A0|7GjUpGKOsQ&pgjuV z^BEMd&`^I`d3Peq7Gg|149$#|3G^>_;_{@8SbPLHK|I|X2K8X#Q9F^_C#ed}OS?W) z$13|FnH5Xh7E|ot8!h_<*pKwq`M*wmj6jG0pVC-2_i@j!We4Ia2{*7O1Tq>ON~IpW zAOr|J3i|*@=RfYm7XxZfSUP&@>&*;OF_Xn_!w2Z=ZhA*QLfYQu8v-FU>9ftwm*Pr; zkQGqUTsqFDo8EL?>f{7v9|TC`FIfGQHVL0rVC`EEm+fm@*t^!w5yFczeP4RH!SGU? z!W~z(D07%ge~xQ2I^kQ~ZVZ@qLQv+C6BKQ*VE<5y5YJa9Cit76D;B^e@4FyC9!oDb z$lP5S;)gu}f4+TI%_c6jl-jY7^j)Z7h%wBAqvl5nTb=yRm{2xuz!9jH#iG1Tzl^0f ziNbK|`|=VhnaEsZ%n;A=9lp~0ky-mA7Svt9)6z_2vB)%3`lSf|WUjKDrGizWf5Z6x zZSbYld4wTtPNf>HLPN9*pP!>`%XP*g#;?L<(RCZO6$-wWTnB+ly7tk*m`Um4fncy&JOe0n{t2Jf>W~$H#LyT`^C4UYXH&Z)*pKOQ`9}A0w zBmd=&#A2nY{ZGg3b)N zSC$s74>q4C_HmA1R!X&e#@KERxSHr0LhvFrtDT*6a3D4d_5?nmL)pw9NWwp{{D*7J zF9A8hud)sxz8nkdd{Q}OJQa41O?+DQRBr2d<@?@c^h1JO%T?h<5Fw#_8}s11t8+mZ z)mcHY>q3r{=5ETL{RBbAvzjORO0_{WtyQJw1w9$0M6rk{2~ZMSNT#VzwI+L7^G4Hf zk@w-(2ezTU&%tXhfHv*pi;Js=7HTu12>RWPcDf<5olfLOZ=ndZeSLl3Fs8Hw}>ioH2!Cur22BUO84hob^+q z^+LGE=YLabC3P?xX1FTjS5GuNOS&VyR)`WgwSsD@0Ni1D-nCJJ;UXKKvZ`fjP8Z=U zrJ_xz8DrduCb8MWThMihLf(5B8NyQB)}s=l-JD++4CEb@za-S$JKGFXzYeiHffp^B zJToKwLK@I0X-nf}M3He2&KP)&uHs=BB&cEZdVNn83e@>`xL*DAu`s{0`rM8ZLoq6* z9iUlWHPu;~^|IF^NY)Po7f8D}lTYf2mQ|lp1nDsrv#}awcQg zc=5`3&Mo}20O)IfhDiDZ28}2vE(ob_s5WTQ&CV7=xb*lPLrg|}csM4kQ-T4i^!$V}x?yaFbX@^=9|{uDh5K`k+pcSDC0~^hSp}e?PxLEPmvDm_2twU6*Yt7p_?s?8CF_*9Xgzt|bDL zo_yC5*Jw7&a90O{GYMcuh7CKEtw$nJ#@4fo)U=uRfk#1p`!DZHvbvHOq$LQAj&}q% ze!VnxH}PE9^q#zRfF=&z4O~~h9~(YaXUA{1?iVY-u)lz-QKGsAItAnXFcQF7`#sQh~$%Bdj+T!;N& z7`&5on2~cgd)3$G);{N7Ua%?x$B)U>g$;~*@Upyr7QqbVj#iYbqwB_2UKs!Ny zlj4}}NUu0V%f)N@V5Z%Wn8c`sL=7W-feYvN!C*@}WgvWwun&Q@G>(b}f6G+5I&t`9 z3SGn;d=OeI1P}Tejq_pJF9y!YteH9Rsw_$1R;7<{9>HQPPYAWcdHIb~xCGb_Et-n0 zG)>QMINN6Mb#0puLSyZ zYAPs0|NXBAoJPEzl9*Up6{T!AA8HDIR#W#jk!_LU905f5j3g__o0cz{>`aIxp7EPB z8q{6nZW9Jn!#G;p$WZYSI+VzRtICOpY&Qk*3hX}80cjl3-HDO@A-oiz+;XoxdAOci zdxxdl*9Edk8wrNEu-|NQs{;5*J6ju#n`~a1yk;zNzm^uYPS(;Vy*dpoCZ#G+KhK2c zx*DIlpEF^bsWE<-!}33x((_5puu;b5D5xX13Oc^4w7Tm~?%~VxAMqctQ*y(V>)o~} z?Tv-`fO!Pw2PY_tA^|)K*ibI7@M!B8ls;1zImZ+T6S3)Y&Qv7~Sss3Mky(#s>Mu}> ztc(zSWG&hy#@K;ALPDi=V^A#@T=TvS6#bQae~)L}^$ffGS187SS_PRrAJL!$CcR}n z%th!o%w*7t%yzAg{N_5}{ms%T)8w>{iOOk)w#{#*N;BilP92gzmfhMU{WX=kob7>b zAu|g*qXH%e6zsY-M1kKsk{YC9!~svxpnZ%^<>sy#J0e<9XPS1PU6%u|8(0=69{w!^@*}#;HBS_&&kThUm-~BW*yM*UKgIu#pYM zg2tMX!KEYFcvfwQ@PfH1{qFF70qK2@1L^p7R#yl9?5*taxXsFkU-}UN%XLwFfOxu7 z5_@>!)c5JPv98KEBtoFJjm|E-7D+_Z5Q*Z~ajdf!u!;krrsE;Lejd#vzSFi_&FPmZ3Q;dujFStD-E=3n7h4W_@cbV@uBn?D=!GiquG0E z+C0yf&o%S|$YLmz5@=zI2?mPa1Q^%&`G5IIY3{d*-&`~4>+WzWFWthNKsmI3o32Pc>eJiRYrE(?w zFpz1ac^cLKNUcJ+Dy3N3fsGL#_mO6KxFdyDT?@|B$7_5@1KIs3jF-{Paj6=2{5($2 z7*T572&cq{NhAkQjWeacKAn-(-Pzx5)5l}3JCHFV>sJp#rn1oHKYN9NW$t%I4mI^*yDE1)m0Ra(D0 z{qnr)I~)I8_Uj&3XFi%?Z~FkO^{-~6qxa96y-kqhe)k_E-u2PnMpU$4``nPmcJlzQ z46wq0T=?4nQjGsZ%bcLxq47 z+lBCV!-5+0Yd(s-yxK&7mRro_Lh!jNZ{J}%#zGB8xeEyqtp#c#Ix(zeFN=)BUPKTC z$?3FBfG+riduOAY8?e)ro~S9T=X6x~@U0Qnko3;x9;|Wl{%=DkvC~*`!6ZXPyGRMC z8>1^y;-uGqa%CXbR)p=Orc3p$k8eukI|Jy+&N3Hay9sT*1?^<|aFSo7#+G>2ZL)t~ zNcgUD6_mIkdY!=-F{0mmOh?PDiL*s+$}DXcwnzEXHhI(hlK*y$Ma6$1 z)L?YG1D6H|p=b%13E_aKQGo<71{^Iqz!5Z)c?-XYLII&I?HYEBUuSu9#s$P~13!cm>fiy0N#)bJ^F&1uq_3NVjVch8V;3yO3`Fw? zwgD^W?=_b<`IfHp9rT}P{w{7R#R2>#**hRNCj_d7_Y3gM20{NKYd-(C8UOzqS(C>` z{uf}>-~6g(hkw%jZ$w;>+7B*}_M-$|a#h#dIGaTWyx+onhTm4!STOJN+vD^7V_*gU zzp{Y{W!fLY!VA@^-uER(bf-7p`~{@xUjZ|#RKBH9W}!wMCV-lRuD-4-YFw^k2?@vo zUmkEEe#_t~0_4Z;4}))J$Tt@yhvgIx!DroQQ}$JMCwx@8c2RsnB+SX2F{n>3 zJS!^=?9ZpZ7C+IeK3aF7(`)2@$dgHy%JjKOFgzw(s(5qy3J(5tU3=|ejY_+U>=@;L9d1g{DCG!w^L*Rr3NCf@I_uLsodCQC*Rpv0xYu$3VR}kl zl=*f@5d7P*AO7b>bwcn5yesAsFeGt-A2Y;Q&LA=nndP{yf}ic@jh@NOWjC0~bvK$+6*YnW1BVXy!dCx6!3@v3ky;()~Q*M@1%+K&2a@LA%ie zT&#!n^J|ve>8^gG~6s0Q&za>qf3{S z460f(6n7H0&j;lqt#6t;pRA|CZ%$Tl|HfV9&nrviPXNADS=VXH#Q)chp@h-PfHs(QKpRhX85D42Cplx&>wq?)pFN--i8n^$x+Q$LUrRNTw%Y9FFi}`FGPIdm8 zAA)SKKA*yKjKE+Va(Q`-XQ>^zX+sp3Mm^JR+jf#HLxzNUADTQSW;F6E9ZYd*u@4p*vl8?@ba z*mD(UE{&R|xnTapORGXZS$0gy@r0;bQucz6^`jM$lS#bc`Os-{e2TTdnI zRC*5}dGwf2cu}m(-O6ZvM!5$TsO%D>`q3t%nzC}V7a3TLX{nrz;nXszw!MUU!Vr?O zk7@955Zc@yr|Lyqt_VJagul;V*nj~+gw{@Zot2q$KmyJDIf+SFQQX+bFkfkImGU}#&qp6d&OU~8lsbB{T!{p{lH*B}1W25i!f>)x$6 zI&wZ0reP~#5M`)1$bWmjXJ1k!2%^$Y!De}&jR0p#VGeU>MbZxim5JllW>HIgruEfQ>Tdj0l+& zp;u%_(_a`9Iw{zYMKRfcZ>DP(*)&UyE(v}na+&{~v0Rl5W{b25^1COhHxzLGFzlbk zvmO2FR?Kta7#D8R=;hUe5lX`mw84A#<@p>wc18+n0XmSZpbFagOWF@;c%N}4C7^8c zBl>?KM?;#gm= zr+9F(+$8^iz=Uq!hSyZf+=Em~J-)YVWR~j5VGBcG3p|b})(&Tdl6d!Bz8|xwjDjYI zi46pDR2{4~oqCY~QAh~Nk)&z5eOO37kh_V1h}9rbQs9F5j&IKZH1x|gp$nylCi3_9 zz>??+PA{oe_=r&$mQuWpY{QC0p_vwI(txfCm(kR{{<0-3FE5e(sYY+CroDigI$zs& zFnOf!!WB&zt6e-gmFIy=SfR#@A(JZtt*6GrX3%;H9=wOEWzHd7FN)FL_@nRd;33ln z)wR)OJQ$JVg+{6bX6;D@ug=^1fm-}pfV@bz_A6JUqSr3YeL{ws=w4Y-H0Q0wT2$B&16kHlU!=pmZbM z-HoCmCEXw*N^QEkySuw#)0^gf@tpI{dE<_I?-}Eb``i5ocC0nmT62CrpZS?8iZ5s* z5P*FsOPk}pqkz<@#qf%P2z;YN?#cWgBPQq_yx~TQdxNF#1EcaEWq~K7HMErZvkWxU zucP?JY(8T5i_rEw2HhJ25QXLDxQN$EO&)%YP7$2+H^1-7R4m{P7d(3HjcI+e8)92( z>z&+KOFHoK=qYKWEzmOVRQdJGV6}>GK<;Ri{BL>niS%9eQTcG7p^uKByzz%h4SkRs z%jZ+S6Ts1Qv|xc@tDZM}8*$#T=Pllr>vl2b`a8vgk6*NJ_9OEapcooCsy2;_wb1p* zAy(KJ5WD;NJ|}q$U)UsO4QNVH{~mSZ5JK=6P$1h7jg!l1A>Sb;QFB@Uct9O^-+Rh$ z-$%I8tG^LG^B)neLb?`2(6~C*rQE(HpxbZoV}ER!Dc2OPDX7CP=#WGJ6Pi>e>X3;Q zgIQ8}JyitgoIhD!!!O={W&cTU5wO2bJ|ho-X^i=9f-g@>;3qfN1I#oL#N*mjqH;1k z>_Xt{Xlqf1DSI1@HjiiE-ZT2#sD)$k=&cGo8$hyZC&?f>QTq@y`R600)@%Bysa!3~ zy;#r&XV~t1UEJH}dh-#OH7tM=*ga5Z^#w}|CpZ`~4=C|Wl)6?)!wFnC)GsvRRp; zf8rQ&m;-+=*1(8J%N_`mw?H9;@H(A&Cd* zfYk3FDy9$uyW&(?DM({}a}ejvpRZVp)t&+F)(L6 zA#r=%(jlwH=6E|N-srrnKo4I0fyO385cCijK-t7yky!)KxPxcPx{-iAa6E}jLvaq1%jv=cIK=*x2%(mpdz!{X@QU6ok8obEOy1MR{s)kXeWyJ zeq1x97--%PSj(jvjXlo;qY)0;Zn`lqda4+Qh8$vHRaS=zGKI|iZISb}=dOn=k4KBG zZ_372YwKMxtkSQNeW2H_301spCqz6jLIBWr>5l_PW04tCMX9{#T(*XYYG;d#wWK-Y zh%X<%5Jjtp?o9kp5W7p9=ifAG)5X7_V!e0p&3Z!9=u2 zuXt4K)fY-oxxXz_w#I+tbG;SE10z#{+H)-7k~d`9cuQ?NR?In2mMI=$MkEJdueb&a zJbmcmWO%z4?cro2o}ELfSlHZAfYPg{Pt)J3oAQaWbU8U@gmEPo&NqxgOh;yHh!^)u zyLibRux+VYoA4eVC45(}ts!USv?ntARJqTgSO(&jA6Qqnn*)hGjhB8(Gfo_iX0^Gj z#&)Dld0hX-qT_+Kg<Hhn=a4L9fWlWU$p~Z7-vjJUV9h%gRwSaE-#=7-3ixL+l%#P|s2}BYwNf ztM#78k*^(A(`9pl74renqWTV_7lsMo_WdRHc{A>wLKz*@x!C6dwTjoth8OoN{0nQ?u0+XOuSjiT4+*Rl-iCQ_ik--ODo^AJtEmCb$uNmuutP#Nwas#^|)2b#jB zwVDv(;ROS0^b*b6uqZ445F_}_=UVx$`bE^LLNk{{W3qDZ4mRsP^bnnq?twon6^?*5 zi=D*#zQMWRjk>>?CxyyNDGX-ZkM~7i1=IX}b zlMd(}hjeQ)Bk)S7`c>?4MfhCX3)vh;_g)w`(5#&H%crsn^_fFMIN}1Id4{-n6G3Dc z+BhbdYl8gZ1SiQYzBiv;FuREPqfq4=O8S+aFq66$)SGQt$bk+^dSY3vt6Y{B`(@c0 z?v}EHPW=)dcf{mU|MDE8HVPA#HwtivyZ1UeJL>N7uq7ZXDX*9YM8#Z~S8XURRU2L|J)rd~JX|RxP5|R(IMIgJj*t^fpHqomNaw8i zZ430xm!8J&jnH-Zc!6_Nf0I`6VcQo17)LpA$S(_QW~*Stylb@a+>1g53~T$3ALVNb z0#BY+=;S_d0!&FPvQz<#e0(4E{2k?JMW!xCQjp(*4^Lti{vI}!DwTx&c)Gh9^J~iM zmVITm*TqC)ApEyd5VxXDW}xSM{xZ~|T`t+$AOKOz!4pX0!9+B(lldJmG=HnGYAvEZ zl=|M!wzGE)n>(7lXJ04V6+D}%ebd;6*BT zNGx%A@i+M24Yqq<#V(lNdLPy?#&tm|{C3rJT~M9Xe6Ay*H8d-|LDfek1hgokZ5gW) zm$$+BrMFXRke5teXP$C5o@JTX17ccYJ?6EH8K7?3vFe)qd66Y42uotrFYm8LNRkg> zKS%G4&hJzDT|8_oBgU|(X9S*QHg*00TcDi(K}vKtY>SV-B|qW~gg>U}aHfw(e2-F7`+j_sXjPJhrzLz*G`|Y{ z2FR`(*9btGR34i&@1)SZTVGhE5+q@HM-g=9?0L=AF3^GNl?DQne$mDZWBXVvxdf}I z?gvB+$U_!qgN7yrl!$|QT$Wip_Ck>qn5ZRbDA#jchMiQB zP@$XO%vRSW>~5NTaOsL!w=(6{n>Vb{TDh}W$$(1(M~)$-pvFm2xIOq}ciJ;3#&u0Z z#Ti<|Fx~(wS!b>2pTSS=F5T$LMMywaiI0Xn3e+SPzhe(%h>A>acO#X+#~XS!g{u#u z&0Qq?v@jP2@@7+izMkBEKFA)8*sH<&Rr4Nd2&OG(UfKOhdh9xykLdi#*1DKRZuIaW zM5p6t`^(A{$wlQ#!<~uTI^*}>uAzLf3s>o3Oe<~;dvxKBmH0>VOc~y_xjmr-`U2n5 zv$01Dc;Ea9`HLXaf+r799BCgjeTdO-!gpm`i^gV;aH=io1iaQfA8z?6I$ls z4Fj;b*}{)KXuy+MWJDkYIFG4`~`0M+1SGFD(yGDmqr9uCWTmSw`$mEVb@dt{= zwujoRs4|tQ{>%eWV{Dwg*-Kpc$VQwAGoQ5|z`|Jr#zY1l?c5yjJDDz>?33S5iN~K$ zxB&ewS1{EIz_+bmbmtv2j8m^ATTcR-y*9PcVWRV$(oq;En-X;9S?I{>ePp-yX;ieL zY$J5~z7J=I@K5-C7z+LaR{rN~0Gr#VV2(HIP(7n);_;nN0|x&HLYt_)4; zE^I-ox5Fl3Oea>$j~>`le)iRpdiK{dvYMKu^wevw+Yb|uCPfDSba3=6e|__yKUhJC zrZLvCa=nZ?azgeD9UtKUqbgnDUUR&X_2He!>N;Yc%kD$_-XQP<0wsvB6 zVVXR^fSXqnQ3DABt1BOjk4|fEA4x#rp3o-)$hVN*Gy$oaqeffQ@%{7UG*MNeyq)(1 zik)S7!+@5!U^&`pcq)+@DHzp`GuZ8>p4hw`9hE}hm)wSjN;k5Gv9U35+%KThaR!@{ zMVfnwOfh`+pLySi#ExF0dldBAMBD!Za>=VgzHbY_t(1%KU4B1?pv@L*G>YQT-AUMe4qx1psv-j8a#LtTSPR`cDq$BC9bQEP)Ooq0JDC&xQa#8p^1N+=Jdbs^tD9#4 z(8yMXrN=4$G|2eUb*;Xp3A(XhqgcZGlUUr^Hhxi1cUxw)apb-u3bH+;{4T}KV0=!o z2D3`WPjis~t~ImRV59c_lhBZlzCcR}3n^7+a0=a}`9#CQgs(e*ffq3eE&W$vH;F zYekfRN9yIuRj)L!)Ja?k<~)weMvKjLSbdk&W^m5;ok{>*#EWA56gLTHJuH=M)6S~e zf1zWtki_xZO{QIx=W1tW(rY$Xs<`)Rh}U){o52JyE4s&>m4q%7g%r-5f!N$lW^nc+ z`|9=XkUxOmtw-ua)kI;C02T9Ii6kW6-=pTYUvtt6>m})Jg;YsnzE3b0SBTy0<8Np( zYI*OAj})azEq&IW4wMu-kbx!qT+JL3AZ{g|ckC7Ko787Wb4vb7SuVDevPv$XUqdGV zd-I5EIonGU@M+Kvo*0RDC0t9|7}cxo)ya-+gSo2|b2PQ{Xb;`Yb?g_1V?j)shzSvb z&c?Db+KY1RFQ#!k)jAja;EonZF5JOrav{xuMgp#q9ob)8 z!wxYSNHKt>T0__g0Yr53@g>ph-4Jxz3qo&Z5gP(U6v4AJ8P zUUJV5o*C9J@@dzs%bo0oz%^HBXLX_c^m%#-im)qq)wZF>?w1Y9IY`2x<{(LH&5}CJ z16U-J!3VAy3$WfbyS3Inbfl?nBp#Wq4%u{Sgl-rMC0EHv!L7*O|T;2h?(Esj)}gEG$!_O_llG2%np@}EnAb(?4OSd(pJ z8+>9KsYSWe^(Ory#gY(|+^bmmiPhD0Rx!rFPfOE&=oF>BJM%cfj+8=KY!;(7ZzF%xc z-xVQU&u< zlAjXh#PJl)ftF?T`5xOl=N(7*A2t9()cio^KnlMAr{?(ER@9v(Lp-`(&gZu{vu*x^ zLBhdnoYSBziXPrvJAu#Odr^yWC;_a)4tfL#@r3r*;e*~WFLKyZ+`M>m7xX&=7I1sg z(Y9UZD~<6jsa61I5dG%!l*ZqU(YE6)cvN;?^xUam-cJP9pzR?SugtTPVRlWQ!M?i- z%(U3oJ~X!c#=!)Qb@_>7Sx@+Mazp&{CgA~uj`~iWocfPm(AWXx;X^}lI+^wUH)0M$ z_%wblv?xLtR>5BAG%A{H7?My=Iy_|r@MepKS)vMaHb}C3<(3y?qKWlOqXbncQHA4o zxj^)N@YU4a(&Q%O=*>Uzqe8J@rS{E2AKH7*rP^jU3vdFInZ9VtWzB!DzL)hp|0`F- z!uaQes&z35{hru-r{vZSN2^# zeFo$mPKXrnuBQ;dG^|9TVovGB;)utr=FmfA7;O~e47!PNKwq13DC_4^9Bn!I_ct_g|PoZk4f_hQl<)OE(X0MWA8Af8Z3FG8f*@{*}0!3&Z+q4e3wzm zCp<46ZP{&cdnvl+sAhe?)u9!8bjn_T{Xj0s8Gk{(FpOdvUJ`4rNJWz&Qh1V*V@TYn zzytYYlcG8Ju^TIzIJ`4hM}M2|QWUrMYuZIi7$%Wm)1 znX<0XhIbew2O^GcB^lJ4MujSDbCw@!n~h%5bRcZRTU?)tW`4D9It(Hofv(qdqokDUsYvQ>7HCL ztI=G!aiXH&1bo!I;ggsT*?2eQwTvn+$5!&p%deEDh{S&v? zMSGC~M--6qjBrwLG?++0rz(Ry`PZb}cP*Zi(KObmUL-uGF4V%QLFo;0eSn~MNu}9; z%EC_^Y*g6#VptOv=5ViUbD1FJTUL8?lAwNiNgO(_rpuTHUd2?Y0Mm8 z;HN`SOiFMp)dByqd|(3TAA`C?{?V^K>if;SukKs2tJL&-rL8OaA*1G+RR)B3*W%9` z6Coj5UWq||6Fw~PS=GZIPiE$YT&Q!>`mmjK4`iPR`Q@nP=FOpb|6qxH1324??Y*oU z3^aBC@V`H`PeFsKbn45_dnxvL3KZ8E3&qlmJ=!cmZjqnQ8m-6A_G+BiO7b-{PVA@R zbiE2Ry~>C5l>P3+Yx?vt`2&exB~0d~rnU03~DagEHK-sc#SvrSI^wLTv(N?T%3r z+HIu2ivS%l4wu8o1zQ;l8XSq@cU=!pLLIEZYhM$fGW+ix)@u61EL>shyxB&KL5sdm zR_4pCg;I*uHzE+h)a4qn1LGfo(X6C?s_!qTI_{!}DIYv=nb?fa3_IMF2NR1w!o`bTj{rP5)3NZZlksI-bn>Z_nX3_Z*A)y z*iGH-m#~{2J3j`mJ6ENzp6-wddydWPjN48^9RsU=6jBR@|B*gw5W@1LyeK2p{d&|_ zAr@_r$zW4)o~a_0q{xp0`%cQ(SsQ;{=aj1UN3$!LHQjM5>~gaq^i(#_xQT3R36*mz zPpHBetEO&uXQ-h<@M<*nl{h1X4ZE=({YBZW?WbGZttrc?fg>4Rw(WrgwM<=_%U~3c zJ&_$Je42}fpzzs_am^4e*g>$FAv^Qk33c#gxV`r*)$X-+bSbSw_>0lZIHwMYp7Oe0 zXR#3x3xJR_#&um*@_dXvd!MtN!sc-%a^rqfa`QK5dD&rNd2dDv-30b1 zY-(Utw`jYL3m>%}bKOLmw!nX0yAVR?(k=^xx)J0t&Y4rS`!obLR_o5A=7Royc&hNK z1^UYRa?$T-sNN}a3JW8&uGBs!0`A*YYA43a_R~xqGP#TEZc9v^)w9^_b%YdC)q?z> z+r(%XtRY&SGRoHFOw+Da)$Nh(84MN}D(}k2D{XErcbee~e%-xu(+yG4&=yaWa{)hSDJ%q*6>|{4>JE{G&;i8Vk)`r{@t6VMH`u^E# z4YV=KZN3FI^*&)-sdtY+y}7S4`UMGL&?t26-rVwQ2-vF2W6H(}4RvOXaZ^dCdPP-% zlr4|8VpzaK1=mUXs#-tW?kJK&O~L_HQDeLl+uCk& zWLksJRoSN;>X@}sv8_%Rk-U>SEk?Vb6tP_ST<i6W9^6u^NV;o9j~*lA6Z`7YKnX|g4vO^;+y*H6JZ-UGd9+46C}N- z@$(}Ev8}(?iU5PkKh#-GEWn@zYXwS~IkSAlwsy2#0>kw?jgz=78=3N_vO(qfHr%|H zGgS>$sjk)N$!-Xk<0n|%r+gz%aAN9^y_#MAVb@5YjGM@faAyj#q*NRL2LaHp})i8SN(psEx!LcHw*BLqsogi1=T z4hBU&7f2CDLG1xTG}hmo3Kd-Y_hylJ_K%wd4APBF5vN@&Lh<+OXfxe}K=t1@wml&6 z_ZxdS%nyRRl=XAxHAK%40zT0bmGn4=l@5feRjgYs16?$pBI5y3VG}^yw7ousp@3BH zZ(2f#Ix9^mtskrv_z$$I1l55kpd!-y%S__w|Dmrm)`Tk7y4hEq{3uyl3_Oc--Wl(T z8mMP+++Zu!WJr6$uJj{lR_s^WBX(8o{q5OsPyScG&o@$z+5dRMpBhOvT(S{~0J!jYg;-)bNmjK|)w# z&V7itoS`z!4e3x<4YJ5&t?OZW?D0 zoNBL&Vuvnt)1F?1hUhfk3to`O5A1pf0pwiSy!{IbsNgc|vUYExrBmH> ze~BIC?Krp>iGutonUBT7M3k$Yt&~>%{myjRSxeX9W#j$tCOK(b7YucsP5TlFV2${H zLR! zJHz%?vz1*Zwx%He+2kW~NAWAI_`N-|v=Zb}A~Rd`r8B#N5W#ELUQKclG${l+0o6^~ z#IwL+Br|;CBkx)5xYDCEPB_U&!JU^V{<0+ZC*+9s-zP)_6o?1M1ejxgL$`5s5b6L{ zza6lP34eDH0#1BUz}`XO9Y30*F*j;5wk>A7H|@NBaWF(=tYJ5IX5Zr3v;3?Nlx-`F zWFK^(-?>WJ5lzbcG;G8A#a=yfGcwQ++tkvLRBoH&nx*Y?SXJzG@wTc=qvODG-8D+f zmOuxoAT|(Lo^qA#HJ)o}DX?4^xO&RB5I2OB<4jBO95*)!cFMBe0Xo*BShP!DUgDB5 zV3V-Odx=pjXd!$aQHbAunI+82mI}34cNAG%ZLqD4TM+@DnDhf3px?cb^W2s4x6}@n zBY5jVrnfsUtIC?3mFvB#S|2yu9g>o9IBDDEUo|}3>APJ`N89O~bDe)amaE1a_9S+5 z&E*p32`exWAgW|Q_*LSZPv&pLAR*D}O}MBWk5Y*VFB$JoPlEI4hjqcNA@Ew_$8m9N zdx>2>&Sx(WJ4n^rqPJ2H_{MKej%^<<~U+tH~nW6mX*_J;e3l}lPs~s}_C2SWS z&8#KW4z7oz_jiSx69p$UeDO!lGL-nHFk5T#U};+SHGOtzybfHVs!HfLg`m?(p(1#%LuDRy3r?y9HclFj3Q4`b~8@;*q1ytVBDE^H9ILk@@KFcl` zf#bCECt@C8Mfq@X@9CZpRGEjm?tAadRt*IVxwCXu6frnS@?~#^(+HFwsC6Q-s z%X@oo;>{j#9;A92%NJ%I&l7t067Dmr-qMWazQ+}dMT(xQw_^x}o;udeMu?8*UC4Al z5b``-(7CKc_>&!_#Vv3Q?C7`x@8Z}i6Uxh~{l&4ArAzIJtJ4ZG`hBBxIIuzH_1QuT zNwZUJ!V}ciS_|~qDPFbi`PQ5AcRBBwlTr$MV&M^=T6Y@F}GN)V2nBktQ#-K);57!k^9MlqZ)r^?~i3 zy$ba_X~8R3-ct^Ll&ijPDO3)Nx9k()DmqmEIS@e;?76+#qn)llbKal*=x}W>{dNM6 zwReJ-V+i(Al01K8V&NK^;)#cwB!6+^YkDV>IIk*Zki)mks#lOaB>-0qO>~YR?zxMw zr}gNes+stHy2IBQT2ao~P?mAn6q;o@mP5GfrpFe#zX>g~M3_*tXy)O8Xm7CpsAtq_ zz#m}QHXy~0wc{v73zGyqUoH&lznS>s|4FocPE1bM%FIz@( za~)x6PsJVx-2~%qem~b5UK`b>J|^9~0aqt&Y+Z}QqX$wi)p4Dag?aB)J3o9Na;dB9 z@ArT;@XF*PFs;xtiH!}&Hb<^+b{r{l$4%!hPnA6;bWT~1-S{DrJOo`q7{?a$?;<&& zez53&JW&74WCDE`jc@MChiqe{vwb2XDzmn#zHA7KL&Z?%Dy;~uR#Ux}i-6aYtfbN= zUif0SXWhj8vYm;6ia|}!JwxEB%pEE`Z70(H(ru}2Vl9F6)-pBQu{25}f*SHj(GQmH zr_TZ;B*18l`-`3k-RJ3X)^sAB#@nM>psln|KGi{SD&l?_ zb<{e--t{e5D&7~Z{&HIAOXdx7#@4nZYKn*8I-chg)BXA5aM4@u%QwS0?vf=&$nI*_ z&WvCRD4ItZciL9uyitb&?|`!xZD8hR?)!X0P=p7rRubh{*UCsri${BlOcT-qOw%2w z=WE-ZC_=DFnH*_18X27ET)x8vwP$CZJIoVG_q{d;Bn1y}S=fXTvhEu<3I014BXO(L z9xrcCFoKgPx5dDw4^OE0HC5rdMiQjF1tkdGqZ|B&*H;B-S(;_t4tJZkCK%yKI}^WD z%HjGM=!Nl&ch#uUK=EVVeVP%MYX8QbJMRu0xXR2ghh@x;RkyD6fNPOWxe{K2!H(mm zhT~Hli1+W0pQMQcB8*Hys5drOHfYB4wXc-3ES`})992Z)!R@lC%!<)aoAu>@x7P)n zP@{r>(BEg#ye9vVBCz6Uw)kNhT``0ij?ns@Y(Af}8|e^2^hMLq?vu{h)zCx0P8SD+ zRPH~?eLUz?s-=ZKE^P3D&pbTnXY>m)qoJ&&zIQxO=!%d~5irLgMBRzI;M=3j| zRN|&A_ndcs=o<}=~%j#C=k11?( zWgc^+cg>|Y#9FL)K{9=xH!hKza`ZJ~EE+JzgX3f$ zJ?D!HhY?)0L}PMZYjyx;mSy=B2O36!-N||Fh4%Gbk*3_)R^=P$9BYS_sW$~9Vng0Isnb;ONlc94_TW`0OJrbjdV-dIieTk>cw)W^&g#OMIO8#nBmkZur@WJUZD)=ee{YJim{X5I8`6$j;zb069 z9#GQvKna1Gxdx>ET$V$$fk2Cc(F>Pm+P;&(;C*2fG0cmqd3aBeVxCC4w!+r^T;4{>0h^BWN)87|^ah=!A>yUX@}5C&+A; zZcR>Td8?Q`OucHh3n12@AY;|Y`<52TaWOeTx&$zrXv}%JYJY9N^|#aH@}O1 z(NqUH$=Lgd(HGAbKz(Uzic28%&3!PLX85*%em%2re#v3Vm(&DGa7!+l(hzJnJ% z@&La^UZr-j4>!F1kLC$6DtH-szhP_t-whMv zGLD{tUSIbtzAhL2BVGJa8e^+W_%t!~62eDNyzow4K}-Q@#(>?D{stcm0Shy7Ndh_Y zQ$hfhSkr<=cn6!RtJjtOnE!n`X@sYs{fqNj);Cz_vm-W`2liO(xg~?soW69mZnl_L zkkDKU3@ZFw$F*fQ4D!S^yq>%sa=>LUam#26(bI?6^8w2P7|Sb4-`&XdT^yYXT^lC2^k(9M2za>agQEB? zRrBfkI|Xw8M$sm@AE(30mr#Pv9rmZEC9;WXD$?!DU;>yvP^#bQ&iUkjJjU~fE%6V3 z1+J|{e1i@2lgk_hk>oPMO14U+$!X^ul_z6K>037-6Q84xCuIEXUa?xxbmZgLNVDwd zm;;bM4>|;}6fxukJ~Z9${+w``cf1!w5_B>V45nOEkEn$AP9!aF^CEn4*rqbWd)P0; zj%zs3{4tF%UWabKUmKfPh#5l4zu4P2&6K$^acC9`i=A>@@6MZQ=$g6{eGg2K6(J+j z9=HW2eMMF``IZiZkg!LN1g0PwdN1EkJ8fDfCQ~GfYcla;-S#b7`5QE8piNPG)ZIF) zbw7xE;K5z_a_|I%4sxBJQxTl^4&JTTl3Q`n3Xx}uJI9>JqG@j1NPD)C>Yb>ex}YHX zRZLsn*V4~!y+QtaTS#2DHLD_(rX^tPT#!_UC*Qh2z|GsMH%Wl?1GVTY6jU(Qb0Feb z&C-T-QejXXrdSzCKNu93j-*REUGwxgm;ElRBsw*$j)`BHDLZ(c=lsuxE+_RG2_$IZ zR(8WIJ9)gx6SB$xyVvEU(E_iG5b$=Pg}`8Rvr7ec>(wHagw}3d(W|rrEtIVv?LWcX zQtpg<)LysH?;YQ)@C#NN*uodv>n?4pczyGUML6hct$xl^xJ|b%F{N$YWZox%Bl`fS zyxMq!jLDLT>&ovF{FTRiv5@4^l{~R%TfZ#-#*JA&*uO2D6{% zi#ztqKAgcFv)<3lcj<5;l?Oea@Ais-i!n@+X(A+&&q9DuAEDyGe(L8}0b;wYv%m(x zn15h%ZW=Dwfq3B#JJUO<(d4CT zVzmDXm}2LrP+#wRMwwb2kxH2^BzpRt&tog;V5mxm`(oozIw|fW8HB>46Lo!9bo$`9 zsfiLPc5YYsR$#MHaQ#;`QMNFBiOEf@o0#xZorTW&7UVtnXA-(?qA|xwHLn0$;6Ds9 z`Uzw<>m_eg(ju}`y{CjHxaERzcMaR~Q9sY8>94fQq2qzq`?TmVb{oQRwkEoEKi{1k z!?R2qB26goF~`vyr9Qx}q?Yiy^3QyX!mu^hsf`7DDpz zU5z2sa^8t2&Z&x3QVdS4ulIVWtSU)*#Gi@+un*T>r0FU!u{CC=pn5W|KxQE0XpB#c zZaWwG%4{wpoJG5`)vLgCb)MoRTXt)h>+JT=dL2ePZp8Lj&ev4q!R39bFWgjTK+icYU0-UGC2O%0gbaJn&+r3VLHL~y0mLeh zc@Yk5J2t-)i8Kl-KDzd`=NJjIzaOgx`^+dh0L!6N zK*vGuxNidDtv)=VZ^mg2H}Me4Vup*|;q>0ghwIF>$HhN%EL_S_cjlbs$f>;5d); z!bcU6gaJ&-rqbQ^Z~Qtnf87<)+NPrUUS#&-L)n<;syzO|Y~1GED_=^qPo0leY8`K% z$=TKn)n>)nX+BJzQv~uqeQ9svk`}F*nySOOFXZ$)BAAJ@Q_qH8R;t{=%Pg~eT3$4% z=XOpm)%C5tC~I%PKt7y&T&k68a@y*NYh!EK?=qNjeB)WpyEDYiMZ$g|!av>c@~NHs z>X!}UOWJ|%Dbv)at}m?h$IYj;%O!w;*wJPRw(pWDAZBJO{R(uQ3J z<6D(fh}uu$o-`?`17nBlHZ{;a9*t4^=Dk?J%wmtw1s=z?v+!vj8#3mS3 zx8(0`Ioqhl{6JfA}m(x)zI_?lN;3x2r5^3EYZqf0kU`kFB5wJ=A&KkSl$S zPbnY{sFx)G^xF|g2NSZhWbWz>3aQ3K4ej_=4%da6>WHM|9_1^9hq-p^mLWM1mY&lC z7uY0SpNpb;MIN7scyIP!vF#Kn8uU|^h_vKdMea9yN!om6< z7y5sqPuPLup&v02PDp9>eRgF&trF1m$8fGX~r!V@5^jm z-(zpbmMW((m&^Og%opx59o?H!0ZXjdGDtl}^S=gi$|Is>$NNO70}MdWMJwBg>34bR zx-PlzC1cSin)S}EzBY&zUgtS&=@=vG&N!qqgE1T@HI1jZva-f)ct7+fyPIT}=AY74 zUudwS);spx(g9J= zZg@jKUz4Ow&(>N{EV}enwu+EQv+uy-BDuAStw-|6{SneBkP6LVT2hqXJJihqsHhwa z`2Fgn5Z@mbD{99pQGb{XS8W3taJ32fwW~Q04&p|-cFrgX=#TLL#iX1g0Sq5#DoR;|ne@Z69`vVZ9&Sd&HbFu*a{qOOm*O@z+_ z1k%Z0z(`8&-?g4l;QzpAuz*l=pZ&B4eo#EHNUc~Bt^_dX*pfVd<|YHOyrJqR~j1u^J$hiU{v%lxFC^X_WsNw@LD51q^!C-2c|- zDG<|95<_x82!-CqG|7Yih-sWBsNp~bB+Mo%2_zl4_ZcGuoEKa8`pEzj0VBXGTFq6z zFSnZduA27z9V0`o8obMX3TSOgK$eNjgzLD@y&8uvL?A4jyps5A`(3N-?nmi#1D@2x z^|BXrJ#1MYT0Vs`Ar7B90)K)#JN6qG0IO*37nE1|KftR03D0T}$&*R}sXaUkb~s(z zkOAh-%0UY)#w^I}2E2~|v+-w_FV_4$f68v@Wcg&i82P+1kvljf6Wvr4y6hwVpU4T;Ufsvvdo0=OH+c1=%JRp+%t7*0%sft-AK31h_uX z{!)Pt{;Q>A#`9lF)t^Dvu!e-g@EHVV~glz7=ApuRQ?ne5B-brU#I%(e7J-13?{Kyx)F$u zu6^A}0vogu4wp${AD^XJj>p^IbAv&IdcMbjPWu8p*H{hQFkq$7zIGA-2Tl3!K|`be zua1fVG@aQOd6U59w2HR=`Pv(q&nkK4%q2AByx}|3eAFjxJZX^hOhn;4LPyDaIWY9vMy6LWTy0jo=QVP)k#0*9sk?vQd=9Bvz^G>q=59L9P-3O zgf^fc7~WjBBoaE{{V)j7RhzR$pS^DO!q?r8!Y#(0_q5t;_&3)P{pteP%9!h-dkw;7 z9ma_R?4IKUev#-_);AJ1?eE3c@dkAPb_RR^`=7yMJ7QFGn9b4~GKmeq>GeT40L1YW zfFyv0`0(E@gvXcU@x7~`CrjrmVY1p((rBo4gtm_%!u)GRi^^i~Uo7xA3XjXkt6t9= zjPMvhGn9H%rHk+dFpKrN8o{#|KsxX~HJP(t+s1VFoayMucY$-_KZWmr>MD1kHqK+l3hck0WtI$|r1Qoe?+o0NUO8K2A@6e!kK^v-f&c#(g;8+@;IT4gy5ezNP0}scvCnG`V1FYkFRx25CVoC1Vj`tU;(KL2-1TBB27Rkk*a_Zr1u(#pa?2mP^k)11d*cjDkw+?rT5-@ zlm6{^#N#>euJx{af81}~1wUBHlU-)do|!!}duE=7@Z*z;9?La&g$gPde_IH?*<~I+ z+xa#0SCCM6$J``kc5A7cAvfPZ!maA$Wt;$r3m_u^bpMwC(EM-ryCG}Y%(~-iML6R^ zYfoF(63=@+s4aGGv9;G(B8RO0)MDgZ#b>&R(@!mOdkV;SB;y2!nyZP%Q3T*ZhsS01 zV}j_)kb6z7uU%;pW!Fhs_K>jL#Uqu#hzkJJte&@8n>VH0X1-ui$k}*#(EGWv{=}1n z;RhN$0rZr9=N=E)(#HB>rWy! z`L7lQ&P)(35(HjsTA6|>et}`IAHz1iujsyW#ciQ(%hKCj2@M;g(-O2`Lq}nPa!vhp zJ4QSEIPu)Rr=S#N$j7;X$1!wjmE)*D+T$q=v_)pbHgF(*Owld;Qc#p>Odte`W*v@x zuu9z^$S;*6oD;PJlCp4DPW;s%Qq^C9iC)`2F~keMq*A|dW2!JAMJHeBro&ipj!N1? zD#6x#)hejlF_)bii(8uze7hvI*q1o%=#JBt)%AuiYGILJsGqR_tUaSwHwm9>4C-B$ z0Y28o!#KV1*!llT^P?od*U8mYM}KWHQWb4$)D_G5?l)tpmyIdx>iS`h$~G??*TY~v zW&)ylZzTc+q2)t12<&RlaFTy5R#;Trx`kQG`T2HT zmuc=;?-l;{f@U43G`bu3=iA9!b=X^V?9x&7{u1?}65E2NF`&pKaP zZvOFYbz5H#QHLPo;B09jRDj5=`7KIpUe~j;v#RP@@`Bi91VeF8%#Q^9NZ?Nj@uWyG zSmy^GrG@V{?@z5)1plA1Gfsc<>~m*uks5IRkvF)Rol6>LQ_t)ZyZq6!pJKkN4&Gp7 z-~J}V)*QUy3Iv>Gmg)48c24$KqeM=~xS zvmLvoMvB0Jt`x)N(H1rP_GSO3y3Sd|>(M7*H>EWUFS16^r{867TcB7k7E;DCrMrt@h zwr?b>3+3R?re^4u4qP(k$(FGdYksR9sCQqUX`EucfXTT9D?U=MXKEf2(VCI#79Vz8 zSbxW@#_0a1YTDr}&e;kLppX@Pj2#84t0GQyeHTa#YYSS=(1GCdRM*8&&1r(jn!y1+ zTPS#W=+AqA5))!$2HX)0%$D@~4UE8SDg0@+fa}8Frucs_TLQj-2<6)#5|oMq)-8#L zZ6n16?J-jwObISn4iI}lJ~-R{fJqLd&w-5Hy;S>Ob&?!XHVDVV6OgznC3)lEAUn_y z4)ma(7vKM@c=UiT5BTzcFAwR|CMU=!4Z9MMF0PCM0X?LFea@`%s8Ku z?F8M3*p`+2Hyi4Dr~4qZ$nZWg6^l%_wDn=_KQ6Kv&Zr@xP(cS=pbv3z93W`qhqq)H z6;j_DTm(2g_v69k^a$Z{A8oX)mk;8%M5Sgs3Bh(Er)wpXLvNDXf_>e z>fFnp*gR1S*0H(W()I1>?ly@zLtt|s{bmz)c5KdS+Mc%u44 z49MlyCe*G?&T{=(!=lr?WgNeMK3PY&ivtAi1T`MrX~0|Si)}4DD2tYwtqaCxl z>}?M5CGr$+E3cE?y&bjV_7K@0$rwZ4+F`)co^~rUMX$It#rp&ZxMr52m{3T4C&^tntCMvAvCH74h$J~LHO$80IFEQ% zx7jF>;V>klf@!02PO|6Ny8zs(|Bp;ao`%0&>>!>btMIDcF9owFKhuG6$Vr*Vc}r6&2sN^6-T z0D%=?KjMZXB_NG9EBvs<3BOg|S&PH4q3N;&!XvWe(4|QSfoWEditx(VxXwc2>TD@j z4u~ewS%ZKY4bn)9GhH92+1edu2^7OXD1-#BwJGc3=4>Xxl2N}dudG&z%00@n>aRmK zbDf_S4PkN25rJGI88)08d75E64`DSh(6#$iBL}iPV1OGQ!=u#zG0KqSL}{2I4#V1% zmy2r65)MHrj!}-GAgg4KayUjXTxybxot>3t>)Yxj#)Fk#Lza1rJk3ANP5Z&9`iSwj ze&6DHiU#I4@sJ0?vSKgo>fKg?X{$AeuGE>cf6p=|1FK~-!K#Abb#^uOubX;kl!OR^ zfn(8xt<(Yvuap8vQAlAoxP*s&O~dBv)cnPf7;2j6+&i*@CXR4xd1mcWW=>2mcD=8k zb#{0`l9&o?3-UYR60c;dUi&GlJ02^mMLvZ?A6ujOb*|Oolk7}+G$dU5T&4QPSrJua z`sOa86x`~5+E>2WM9pxm>2qnJs=6@a;l;Pt&DB9E4nM$4*#PPjkmXu?THsJyD|i$9RUc z-don6(i2$gNMItNi%-3lue;nr=9m{!#c!iOFGv_Jj@0&dZpwgwg4<`6GYpB77$WFn z1gWyzPWE?s0BIE5?*{lI7Vrl{vP?9PUsVv5=NhEnypb{IE*Nu!BPZT?E?pM89%JRn z?NfcoXamB76HAq(V=8N_*Cv9U0V0H#Y49fp8&2L#Zb>|SuVwSJ`#aP5N zf0o8b6huQ0<1!#qCgd8JjSEnfB^e|4I^n)9Zc~pptv{gcF&%wzyjXW5&$@X+HD22Z zRgCd8g>7d#EgrFHDQS7vpE4Q8kpdV5Ua1kInSNW9<>JO$DNC6W?$RxYeYYJQDu3h} zDtFTXy-HU3KDZ`%jd)%N0CW}HoXIuE@BkS^46y>}D0>0WL1TQ95*u+Df9rma>5p>i zy1+6@G0By;ZXP$@YChvTv=A_K5|n@7h(SX((@k<~B3CnA7rPbK?vA)qOM0vrZjd47 z{W|@K?tNp_1W7dkO-3Laz1^PNKI@rn&mr|kxRm0PX-?nH0HIcxqIEo?dueo{5{lox zQCIL%$E)?@% zbHmb&4lkH+as`OVKmQ5gLe@P#X=OpPt`R)KH${Ep24S;V$SUrg^2g=DpL7|gng7w@ zXa5J>NQClO9RKrdWEKoD8|EbVIRX6OA&s53Umo3g__?Qn|KBr#q?koqII)E+smQ4S zE@D~plm7lebb|oj2z^EU{K%cJ_o^1lh6tT-$<_aa5+)@F@|;wM=W_Yt@WeHu(@(<9 z@F5;|TfKYsK!?l&vy987Gwd1U_n7BFQI$tl^JBvQxyd*Q92Up%+4|pr{2l{V4sK5o zUp~i9{^urf97qt3OjErF#@`EsgBmK>qjdhMxMZyT2l_Lf`S02P{Dgc0qDXIRi{|Zv zxL@rKkg^YU50LWz9x2sbsTQ?euZ+4XeT}*v9fj`$5l}+e0Usqjd%Bd<)_-DrfyQJM zMn>{1_zO4^fN1~MzcymPQjsNt$%M4BB#!wB z7xU^asq4lTE3Z=r{KbV0k#CK+eK-;Gr#c8?9QGA0h5;Z`f{2#y=H;v81WPF%0`F$} zO+D_?e!Xh3l!A46n7y`Pij_JN;5ZO>;^!f{7iYad^0@AhrU`7P+=Ci(#-NForiGrJ zD|uWRL9v!nKmgG7|{dJtl93ZXpVM>D=ppM>x7`awKrjg7e( zmsW`(+5&8Tc5(H4I)cIGX~1EC?q=zl{GLg0v#asiw%vp@)eMi0&Dps+7oN&QtH}Fm z)}bEq4lNJ%ncBkxoD_2o%9RlJXhwuqc2#2kPTCe|Ij=^ z#(NNaMS_f((nlir`t0{t{5?AU$e2I%gO3dfkLc!Shhg6 z!5#{G^af1NS$$+!X@?O85)Y)A!dKKnMC5yYk$o?nuMnY$Xee81=poW2_3Zn>|Eo}$ z{X->$e#Hfwo2TKG5jS}c@0kZ^agM}rSb4JU`7tgmlFau;oX#mYn<_?qztihi>9}k@ z5JxGJ`r;cq7CG`gDDcnIZ+B11<-vKZyX@;|k^OSptXZ#=(uNW{-gOx^yZPXT??MI2=Y-P(6LB`}@+>BrXI#L(B; zk%>!BkqGu@F*q}H7oy*viok+@s9Plug1UHB;mn{2nxQN+J<&c}hnxcGW4ARj*c_e% zO}yDht``P79$)B4RJjn z2Vr6Qu1QM@*HiOpE^o&5`f2gZZ6BIG>-M?$o>8lRwn-#d`X} zJ5}-eAv!21Jg9>!Jh*2Ca3dgZ*)&+~-8k})`rUaKtarRp7mEFL1x!FFXD|VUsN71M zfjerW)nskpvBP0z$+CxHL%lmiUwq8#bpc_}*`!e0NK(4GBjiLBB2&?-DVkQ{ z-H&c`;>sc(!j(nbGx3}(2)K*A-Fd>K5emt?<950`U(e#9#(Rv5&`v?PydUO7>8%4OCrU}<8@F;!&DhNHY*!kxKZTu>LYwkB_bdev>; zd4)n^z%X~BYDD$brDx@>QBEu3POFjVIJ@xk3!U$KziL@XoYiw*#*Pj9_zA7p=B8s< zlQh%cqP9PWF$L*i)|!^&doNCZkgwgy59Q_{H=i+yTAl1ghHe!pcR;77>ARLRPY|Li z1bbZ()T}E31QZu<&g2*btYLl(KIZ8S{7Siee(CntIFJwtPx7og0b3i_jWHSP;s`}X1#L$_%Nl{dWVbu5HbkB%Y zcflixt?vt0(iBL{FQrhDLrj`Gv@k#VuQ$eS*o|Tmlqk>Gw_J-Bm(_KhXU^<;EnWPw z{=&KE5<7H@TW+gj3eL;U_q#o0Adxjhf@L;df2KP3Ix`J!Wqv`}?*N7r(knY@W9nN#?aS1_iMmwBV_G0w7KuYk&7YAOEDm%1G1qCIM$lBwp zIhne2CM~9E5sm|dBU{m!bxs&$B7D|~$#xep z*YCX(c;2AnrR8gMy|?Fa?pgGDuH(E#)0^t%GX+QaMk32m6eE{OC16m_n5I*ESsw^V zV_8bwWZcJfrD?5s-d$T%g0{ujcVn-x#b`<+1vWE-u?_+7R^XV4$X5YR=QKW zels;U>y5VaSF^KQ?n8|(Lu;c-cwm2DmvZZ6!kH0eR$A1X(i z{ANjS1Jt*?o!kE~%es`1TveQ73dqsFys3N77g!vwq(>CB{F~E#;_wD@yD`h8Tt9au zk;cUd`yYj&T;A35718M)MiJ_oU z%EvCu#??DdDxxj3LO64)?FX9$>qH0Hg*NAcZ8lTVdca}Ld9`Cd@rI1i2c|dS;_Y!! zLfxVNBsLtRc?cq$_~q%2@eK7j!^+1aBVT>6!k9~lzM~P%`x?_}ia3qu!6h2D zmq^5#IAlkB@|dxujmBBsf^z#oP~g#XbLrct_1LQ&{%EnyIc2B*2R_zSXX(B&I*`es z#Md4<7vj%iHW=x1k$vG7;vx71$6g?YdR!y|4xip;TC92TzN#|t-O!_x*FsmO&pc0G z9(M`G38q|Kma~K<1EdiA$2t7KtF`Bd^FT5IoH+H(sYv2*(x5B8wRF*Gz^5_3?9hn? zN+3b6BNAE1w>s5YFBB)WcvoLRvt`o{ntqETZww-d!T~qR=pgtT{)t+IL zsSqhp(nYP`>qZ&OB*r8#?IlQCH{K-G&NCYOlw0$nNE^L-y0QBwFMp#}o$AVmmC_|DM4Bsv?B$ky|QveY<*p=N?YYzlgow(EFbHBT>}$X4q+t>D8r?N&|ZNzS(} zSyZv*loeX8S--&faz84wNWjbsefc?EC@2Y{dH)S+&jF6p+ZRB!qsl{%{7G4qZL!F< zYS1lcr{LmM%=$bZs>n6nDc^S7+Ip_E;wum^%;-qFY5Oqh^`YR_p|5>Y_j^aSpKIzm zq_*b2a;y5dvPc4rS3JSSQ+QEmIQ~;dTSfGy29vvKT<&;!k@&{cWSn_-)`%%K%Z!Kr z%6!6c*w6<*wdBz1a-VK$k+lnB7l*$;9^PCuCo#`*eZgSar{W_|G`_w(<*l(JqND5N z^j1hjviFJ-a6hu9vKJ%&&+8m#U8t$15qHAd!V-*W%bPmYZ9na!KlT*{)&a zbPas4mQ)>(T67~Y=(PL;3#}cHZXfxa_TP%^Pk|N?3r=l6&VpP6NFxc<-jvL>Ityqp zX16-_vsOSY4?tNFI*tzBKw-9jRGY~|1#?uleE4{ug~91T+sY6YYT--3pR4vk45aXO ze){0QPg4(M9l(K5{@e@&(AlTp;b=V;_*_aK8QorO4vF9eZ3E9rpRx5qBBZsZ z!VgNHc-6GM*SS7hi2&~8$~Fk!x&45x1U9Wy7QfZ>Q7lrMWAtq=6p|W;qTB~oJV+8i zLK0I!hcWg$vakPZG*DYl+vlkrt0cn$CANB5kg*KZa#c~1+0TZ7^MS2-PRqI8tw;`) zp>)4$(%i(5drkWhBSL|j0ZVS4eWkY>FeI^A*6nCgk=|f(@d&L0(dUv_HCrey|39e44&2NaKbfB|uh-m122-{(86Cyr5=21e-X!PsG4f;HHu_ZPPvFa)P_cr?*$A18;8@eEazTZLW6jY zfA}16)^gJdUDf^W3Y>(7!ZPJ%<2n7xv`~=RYC(jCjv3weJ+#%@D@;~Lp-jlM?|?aQ z@bZIKQ-i`w){-L~lE)~<+_PjO-6)?C31)?rQHqpaq2j67tj*>#Y6`*fy7)!W$Dj$J z_{afkNiTfeZIyF(_pBIr1X#dcu<@=d=%qiz6aJEdL}uxT%X(s|?`IM!iLbc|4fVOp zE}P`rv>=JL&W^R?fttl^y*qP0u5+dGrQ}|{3c%4v2#H_}kfcR}^7MN(BrCvmkFI|l zXwk3>{}j~J9QK= zq9ioQ+Doah)$kdED|5yj~4*cGk{~eP%e4#mI=ia?pkd6r!sm3XPwxCbISx0NT6kW^CelC z_@73FP3kBryE^!I_e16{+m^mrP>ch?0KbJ~3(PIvp&+zu9~93J`PE;m`oNG@4(#Z zIjf2lU0obqyA^03{%l_>tq;h14}Udu&3@bU^H~p&z>XT$L{Ii(I^45^A^s-x16=&y z<6crbbO-am*LNkx)& zy%;u+y0F_0?u64s!X8ol)BD&?*ft;i^M-eK5o^FdHDpnK_+R4@rwtZA>O*nuju#LJ z=A}oe6aB+8J%3og!o6TZ+G5wa2O>`ZYiF7-9sBdVxy^;dgHJ9rI_)kF5f4T?&&AM< zix${Dm#`O!;dteL)m#1RS>+9|2!(f?gO~nn#&Tqi6FO&_BfVMidE)oPzqFkquYd6H z&>47{*x>moYxDJjzqPPmew&@%sKS#%6lKbI1v~F_>a@8J1^s~Cw?&JHu!ukP!7FA) zdH|~e3WFn%9wpM)_~Xm*Mmkc{6koQSY_BB^KLmCP_y+*zxRukmd1UA9*}(fIxFNgqA(K2jk!Q1k z?)bay67}-}@m>+vVymP_yL0uWdw7-@2vhFj0W@#Z(jSP&sE%E|waOGb@%smEfFbSp z1?JrezzCx-g`4lZ%N~|R@`*?Oo<{VrCET%mgzArmE+h(?>E4$fewq?GqV^lbAz(2f z=j1Q_v4PImxhl7FU44to5$wA-hqoz}Nb2VYo_)RxG(eCGq_lZMKe2RlwZqS?5Z#=< zLdf!q5*SYPAuJotef)FW1f*r4*in^iiZscjRi|xmHvhq>40s3Y~FhAU4JR@UZ(d;_`_W=^@B=C Ykvv{v%AD)9c;N4 Date: Fri, 8 Jul 2022 08:58:23 +0200 Subject: [PATCH 013/116] feat(console): deactivate, reactivate org, fix signedout route (#3834) * org detail * feat: org deactivate, reactivate * statehandler includes instead of startsWith * fix signout route * Update console/src/assets/i18n/de.json Co-authored-by: Livio Spring * french Co-authored-by: Livio Spring --- console/src/app/app-routing.module.ts | 15 +-- console/src/app/app.component.html | 59 +++++----- console/src/app/app.component.ts | 1 + console/src/app/app.module.ts | 3 +- console/src/app/guards/auth.guard.ts | 3 +- .../app/modules/header/header.component.html | 97 +++++++-------- .../orgs/org-detail/org-detail.component.html | 18 +++ .../orgs/org-detail/org-detail.component.ts | 51 ++++++++ .../signedout/signedout-routing.module.ts | 14 +-- .../pages/signedout/signedout.component.html | 17 ++- .../pages/signedout/signedout.component.scss | 11 +- .../pages/signedout/signedout.component.ts | 5 +- .../app/pages/signedout/signedout.module.ts | 14 +-- .../statehandler/statehandler.service.ts | 4 +- console/src/app/services/theme.service.ts | 110 +++++++++--------- console/src/assets/i18n/de.json | 12 ++ console/src/assets/i18n/en.json | 12 ++ console/src/assets/i18n/fr.json | 12 ++ console/src/assets/i18n/it.json | 12 ++ .../scss/styles/footer/footer_theme.scss | 2 +- .../resources/themes/scss/styles/vars.scss | 22 ++-- .../resources/themes/zitadel/css/zitadel.css | 24 ++-- 22 files changed, 316 insertions(+), 202 deletions(-) diff --git a/console/src/app/app-routing.module.ts b/console/src/app/app-routing.module.ts index 769bfe8513..abda7eff36 100644 --- a/console/src/app/app-routing.module.ts +++ b/console/src/app/app-routing.module.ts @@ -13,6 +13,10 @@ const routes: Routes = [ loadChildren: () => import('./pages/home/home.module').then((m) => m.HomeModule), canActivate: [AuthGuard], }, + { + path: 'signedout', + loadChildren: () => import('./pages/signedout/signedout.module').then((m) => m.SignedoutModule), + }, { path: 'orgs', loadChildren: () => import('./pages/org-list/org-list.module').then((m) => m.OrgListModule), @@ -38,12 +42,7 @@ const routes: Routes = [ { path: 'users', canActivate: [AuthGuard], - children: [ - { - path: '', - loadChildren: () => import('src/app/pages/users/users.module').then((m) => m.UsersModule), - }, - ], + loadChildren: () => import('src/app/pages/users/users.module').then((m) => m.UsersModule), }, { path: 'instance', @@ -170,10 +169,6 @@ const routes: Routes = [ roles: ['policy.read'], }, }, - { - path: 'signedout', - loadChildren: () => import('./pages/signedout/signedout.module').then((m) => m.SignedoutModule), - }, { path: '**', redirectTo: '/', diff --git a/console/src/app/app.component.html b/console/src/app/app.component.html index aad85dc909..4c75d9da99 100644 --- a/console/src/app/app.component.html +++ b/console/src/app/app.component.html @@ -1,32 +1,31 @@ - - -
- +
+ + - -
-
- -
-
- - -
+ - + +
+
+ +
+
+ + +
diff --git a/console/src/app/app.component.ts b/console/src/app/app.component.ts index 3eef1937e8..6ebff5402f 100644 --- a/console/src/app/app.component.ts +++ b/console/src/app/app.component.ts @@ -69,6 +69,7 @@ export class AppComponent implements OnDestroy { private activatedRoute: ActivatedRoute, @Inject(DOCUMENT) private document: Document, ) { + this.themeService.loadPrivateLabelling(true); console.log( '%cWait!', 'text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; color: #5469D4; font-size: 50px', diff --git a/console/src/app/app.module.ts b/console/src/app/app.module.ts index 71e7a1b644..622abcf60f 100644 --- a/console/src/app/app.module.ts +++ b/console/src/app/app.module.ts @@ -26,7 +26,6 @@ import { HeaderModule } from './modules/header/header.module'; import { KeyboardShortcutsModule } from './modules/keyboard-shortcuts/keyboard-shortcuts.module'; import { NavModule } from './modules/nav/nav.module'; import { WarnDialogModule } from './modules/warn-dialog/warn-dialog.module'; -import { SignedoutComponent } from './pages/signedout/signedout.component'; import { HasRolePipeModule } from './pipes/has-role-pipe/has-role-pipe.module'; import { AdminService } from './services/admin.service'; import { AuthenticationService } from './services/authentication.service'; @@ -79,7 +78,7 @@ const authConfig: AuthConfig = { }; @NgModule({ - declarations: [AppComponent, SignedoutComponent], + declarations: [AppComponent], imports: [ AppRoutingModule, CommonModule, diff --git a/console/src/app/guards/auth.guard.ts b/console/src/app/guards/auth.guard.ts index 084475bb97..1b86cbebd8 100644 --- a/console/src/app/guards/auth.guard.ts +++ b/console/src/app/guards/auth.guard.ts @@ -4,13 +4,12 @@ import { AuthConfig } from 'angular-oauth2-oidc'; import { Observable } from 'rxjs'; import { AuthenticationService } from '../services/authentication.service'; -import { GrpcAuthService } from '../services/grpc-auth.service'; @Injectable({ providedIn: 'root', }) export class AuthGuard implements CanActivate { - constructor(private auth: AuthenticationService, private authService: GrpcAuthService) {} + constructor(private auth: AuthenticationService) {} public canActivate( route: ActivatedRouteSnapshot, diff --git a/console/src/app/modules/header/header.component.html b/console/src/app/modules/header/header.component.html index 09a02ca46d..5d3a9f47d7 100644 --- a/console/src/app/modules/header/header.component.html +++ b/console/src/app/modules/header/header.component.html @@ -196,55 +196,56 @@
- - - + +
+ - - + + + + diff --git a/console/src/app/pages/orgs/org-detail/org-detail.component.html b/console/src/app/pages/orgs/org-detail/org-detail.component.html index 3b2641a637..cdc1407c6d 100644 --- a/console/src/app/pages/orgs/org-detail/org-detail.component.html +++ b/console/src/app/pages/orgs/org-detail/org-detail.component.html @@ -5,7 +5,25 @@ [isInactive]="org?.state === OrgState.ORG_STATE_INACTIVE" [hasContributors]="true" stateTooltip="{{ 'ORG.STATE.' + org?.state | translate }}" + [hasActions]="['org.write:' + org?.id, 'org.write$'] | hasRole | async" > + + + + + { + if (resp) { + this.mgmtService + .reactivateOrg() + .then(() => { + this.toast.showInfo('ORG.TOAST.REACTIVATED', true); + this.org.state = OrgState.ORG_STATE_ACTIVE; + }) + .catch((error) => { + this.toast.showError(error); + }); + } + }); + } else if (newState === OrgState.ORG_STATE_INACTIVE) { + const dialogRef = this.dialog.open(WarnDialogComponent, { + data: { + confirmKey: 'ACTIONS.DEACTIVATE', + cancelKey: 'ACTIONS.CANCEL', + titleKey: 'ORG.DIALOG.DEACTIVATE.TITLE', + descriptionKey: 'ORG.DIALOG.DEACTIVATE.DESCRIPTION', + }, + width: '400px', + }); + dialogRef.afterClosed().subscribe((resp) => { + if (resp) { + this.mgmtService + .deactivateOrg() + .then(() => { + this.toast.showInfo('ORG.TOAST.DEACTIVATED', true); + this.org.state = OrgState.ORG_STATE_INACTIVE; + }) + .catch((error) => { + this.toast.showError(error); + }); + } + }); + } + } + private async getData(): Promise { this.mgmtService .getMyOrg() diff --git a/console/src/app/pages/signedout/signedout-routing.module.ts b/console/src/app/pages/signedout/signedout-routing.module.ts index 3ff829d9e2..24071a5df1 100644 --- a/console/src/app/pages/signedout/signedout-routing.module.ts +++ b/console/src/app/pages/signedout/signedout-routing.module.ts @@ -4,14 +4,14 @@ import { RouterModule, Routes } from '@angular/router'; import { SignedoutComponent } from './signedout.component'; const routes: Routes = [ - { - path: '', - component: SignedoutComponent, - }, + { + path: '', + component: SignedoutComponent, + }, ]; @NgModule({ - imports: [RouterModule.forChild(routes)], - exports: [RouterModule], + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], }) -export class SignedoutRoutingModule { } +export class SignedoutRoutingModule {} diff --git a/console/src/app/pages/signedout/signedout.component.html b/console/src/app/pages/signedout/signedout.component.html index 89177b464a..c05e784caa 100644 --- a/console/src/app/pages/signedout/signedout.component.html +++ b/console/src/app/pages/signedout/signedout.component.html @@ -5,11 +5,18 @@ zitadel logo -

{{'USER.SIGNEDOUT' | translate}}

+

{{ 'USER.SIGNEDOUT' | translate }}

- + - \ No newline at end of file + diff --git a/console/src/app/pages/signedout/signedout.component.scss b/console/src/app/pages/signedout/signedout.component.scss index d75c5618ae..aa98536496 100644 --- a/console/src/app/pages/signedout/signedout.component.scss +++ b/console/src/app/pages/signedout/signedout.component.scss @@ -9,6 +9,7 @@ display: flex; flex-direction: column; align-items: center; + margin-top: 50px; h1 { font-size: 3rem; @@ -24,16 +25,6 @@ img { height: 100px; max-width: 170px; - margin-bottom: 2rem; - } - - button { - display: block; - padding: 0.5rem 4rem; - - i { - margin-left: 0.5rem; - } } } } diff --git a/console/src/app/pages/signedout/signedout.component.ts b/console/src/app/pages/signedout/signedout.component.ts index c475679d5a..1e33fef556 100644 --- a/console/src/app/pages/signedout/signedout.component.ts +++ b/console/src/app/pages/signedout/signedout.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; +import { ThemeService } from 'src/app/services/theme.service'; @Component({ selector: 'cnsl-signedout', @@ -8,7 +9,9 @@ import { Component } from '@angular/core'; export class SignedoutComponent { public dark: boolean = true; - constructor() { + constructor(themeService: ThemeService) { + themeService.loadPrivateLabelling(); + const theme = localStorage.getItem('theme'); this.dark = theme === 'dark-theme' ? true : theme === 'light-theme' ? false : true; } diff --git a/console/src/app/pages/signedout/signedout.module.ts b/console/src/app/pages/signedout/signedout.module.ts index 4394648dc5..1fc6a7fb65 100644 --- a/console/src/app/pages/signedout/signedout.module.ts +++ b/console/src/app/pages/signedout/signedout.module.ts @@ -1,15 +1,15 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { TranslateModule } from '@ngx-translate/core'; import { SharedModule } from 'src/app/modules/shared/shared.module'; import { SignedoutRoutingModule } from './signedout-routing.module'; +import { SignedoutComponent } from './signedout.component'; @NgModule({ - declarations: [], - imports: [ - CommonModule, - SignedoutRoutingModule, - SharedModule, - ], + declarations: [SignedoutComponent], + imports: [CommonModule, SignedoutRoutingModule, MatButtonModule, MatTooltipModule, TranslateModule, SharedModule], }) -export class SignedoutModule { } +export class SignedoutModule {} diff --git a/console/src/app/services/statehandler/statehandler.service.ts b/console/src/app/services/statehandler/statehandler.service.ts index 585c4982ab..df9253e4d2 100644 --- a/console/src/app/services/statehandler/statehandler.service.ts +++ b/console/src/app/services/statehandler/statehandler.service.ts @@ -49,10 +49,10 @@ export class StatehandlerServiceImpl implements StatehandlerService, OnDestroy { switchMap((url: string) => { if (url.includes('?login_hint=')) { const newUrl = this.removeParam('login_hint', url); - const urlWithoutBasePath = newUrl.startsWith('/ui/console') ? newUrl.replace('/ui/console', '') : newUrl; + const urlWithoutBasePath = newUrl.includes('/ui/console') ? newUrl.replace('/ui/console', '') : newUrl; return of(this.processor.createState(urlWithoutBasePath)); } else if (url) { - const urlWithoutBasePath = url.startsWith('/ui/console') ? url.replace('/ui/console', '') : url; + const urlWithoutBasePath = url.includes('/ui/console') ? url.replace('/ui/console', '') : url; return of(this.processor.createState(urlWithoutBasePath)); } else { return of(undefined); diff --git a/console/src/app/services/theme.service.ts b/console/src/app/services/theme.service.ts index b53370b1e1..6a5fb73de8 100644 --- a/console/src/app/services/theme.service.ts +++ b/console/src/app/services/theme.service.ts @@ -140,70 +140,72 @@ export class ThemeService { this.saveTextColor(lightText, false); }; - public loadPrivateLabelling(): void { - this.setDefaultColors(); + public loadPrivateLabelling(forceDefault: boolean = false): void { + if (forceDefault) { + this.setDefaultColors(); + } else { + const isDark = (color: string) => this.isDark(color); + const isLight = (color: string) => this.isLight(color); - const isDark = (color: string) => this.isDark(color); - const isLight = (color: string) => this.isLight(color); + this.authService + .getMyLabelPolicy() + .then((lpresp) => { + const labelpolicy = lpresp.policy; - this.authService - .getMyLabelPolicy() - .then((lpresp) => { - const labelpolicy = lpresp.policy; + const darkPrimary = labelpolicy?.primaryColorDark || '#bbbafa'; + const lightPrimary = labelpolicy?.primaryColor || '#5469d4'; - const darkPrimary = labelpolicy?.primaryColorDark || '#bbbafa'; - const lightPrimary = labelpolicy?.primaryColor || '#5469d4'; + const darkWarn = labelpolicy?.warnColorDark || '#ff3b5b'; + const lightWarn = labelpolicy?.warnColor || '#cd3d56'; - const darkWarn = labelpolicy?.warnColorDark || '#ff3b5b'; - const lightWarn = labelpolicy?.warnColor || '#cd3d56'; + let darkBackground = labelpolicy?.backgroundColorDark; + let lightBackground = labelpolicy?.backgroundColor; - let darkBackground = labelpolicy?.backgroundColorDark; - let lightBackground = labelpolicy?.backgroundColor; + let darkText = labelpolicy?.fontColorDark ?? '#ffffff'; + let lightText = labelpolicy?.fontColor ?? '#000000'; - let darkText = labelpolicy?.fontColorDark ?? '#ffffff'; - let lightText = labelpolicy?.fontColor ?? '#000000'; + this.savePrimaryColor(darkPrimary, true); + this.savePrimaryColor(lightPrimary, false); - this.savePrimaryColor(darkPrimary, true); - this.savePrimaryColor(lightPrimary, false); + this.saveWarnColor(darkWarn, true); + this.saveWarnColor(lightWarn, false); - this.saveWarnColor(darkWarn, true); - this.saveWarnColor(lightWarn, false); + if (darkBackground && !isDark(darkBackground)) { + console.info( + `Background (${darkBackground}) is not dark enough for a dark theme. Falling back to zitadel background`, + ); + darkBackground = '#111827'; + } + this.saveBackgroundColor(darkBackground || '#111827', true); - if (darkBackground && !isDark(darkBackground)) { - console.info( - `Background (${darkBackground}) is not dark enough for a dark theme. Falling back to zitadel background`, - ); - darkBackground = '#111827'; - } - this.saveBackgroundColor(darkBackground || '#111827', true); + if (lightBackground && !isLight(lightBackground)) { + console.info( + `Background (${lightBackground}) is not light enough for a light theme. Falling back to zitadel background`, + ); + lightBackground = '#fafafa'; + } + this.saveBackgroundColor(lightBackground || '#fafafa', false); - if (lightBackground && !isLight(lightBackground)) { - console.info( - `Background (${lightBackground}) is not light enough for a light theme. Falling back to zitadel background`, - ); - lightBackground = '#fafafa'; - } - this.saveBackgroundColor(lightBackground || '#fafafa', false); + if (darkText && !isLight(darkText)) { + console.info( + `Text color (${darkText}) is not light enough for a dark theme. Falling back to zitadel's text color`, + ); + darkText = '#ffffff'; + } + this.saveTextColor(darkText || '#ffffff', true); - if (darkText && !isLight(darkText)) { - console.info( - `Text color (${darkText}) is not light enough for a dark theme. Falling back to zitadel's text color`, - ); - darkText = '#ffffff'; - } - this.saveTextColor(darkText || '#ffffff', true); - - if (lightText && !isDark(lightText)) { - console.info( - `Text color (${lightText}) is not dark enough for a light theme. Falling back to zitadel's text color`, - ); - lightText = '#000000'; - } - this.saveTextColor(lightText || '#000000', false); - }) - .catch((error) => { - console.error('could not load private labelling policy!', error); - this.setDefaultColors(); - }); + if (lightText && !isDark(lightText)) { + console.info( + `Text color (${lightText}) is not dark enough for a light theme. Falling back to zitadel's text color`, + ); + lightText = '#000000'; + } + this.saveTextColor(lightText || '#000000', false); + }) + .catch((error) => { + console.error('could not load private labelling policy!', error); + this.setDefaultColors(); + }); + } } } diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index 0d54b2f0e8..37ff10fc84 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -757,6 +757,8 @@ "LISTDESCRIPTION": "Wähle eine Organisation aus.", "ACTIVE": "Aktiv", "CREATE": "Organisation erstellen", + "DEACTIVATE": "Organisation deaktivieren", + "REACTIVATE": "Organisation reaktivieren", "NOPERMISSION": "Sie haben keine Berechtigung, auf Einstellungen der Organisation zuzugreifen.", "USERSELFACCOUNT": "Verwenden Sie Ihr persönliches Konto als Organisationsinhaber", "ORGDETAIL_TITLE": "Gebe den Namen und die Domain für die neue Organisation ein.", @@ -821,6 +823,16 @@ "MEMBERREMOVED": "Manager entfernt.", "MEMBERCHANGED": "Manager geändert.", "SETPRIMARY": "Primäre Domain gesetzt." + }, + "DIALOG": { + "DEACTIVATE": { + "TITLE": "Organisation deaktivieren", + "DESCRIPTION": "Sie sind im Begriff Ihre Organisation zu deaktivieren. User können Sich danach nicht mehr anmelden? Wollen Sie fortfahren?" + }, + "REACTIVATE": { + "TITLE": "Organisation reaktivieren", + "DESCRIPTION": "Sie sind im Begriff Ihre Organisation zu reaktivieren. User können Sich danach wieder anmelden? Wollen Sie fortfahren?" + } } }, "SETTINGS": { diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 62482e686c..fee717fb4c 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -757,6 +757,8 @@ "LISTDESCRIPTION": "Choose an organization.", "ACTIVE": "Active", "CREATE": "Create Organization", + "DEACTIVATE": "Deactivate Organization", + "REACTIVATE": "Reactivate Organization", "NOPERMISSION": "You don't have the permission to access organization settings.", "USERSELFACCOUNT": "Use your personal account as organization owner", "ORGDETAIL_TITLE": "Enter the name and domain of your new organization.", @@ -821,6 +823,16 @@ "MEMBERREMOVED": "Manager removed.", "MEMBERCHANGED": "Manager changed.", "SETPRIMARY": "Primary domain set." + }, + "DIALOG": { + "DEACTIVATE": { + "TITLE": "Deactivate organization", + "DESCRIPTION": "You are about to deactivate your organization. Users won't be able to login afterwards. Are you sure to proceed?" + }, + "REACTIVATE": { + "TITLE": "Reactivate organization", + "DESCRIPTION": "You are about to reactivate your organization. Users will be able to login again. Are you sure to proceed?" + } } }, "SETTINGS": { diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index 70ab9a6231..0bb2e712f6 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -757,6 +757,8 @@ "LISTDESCRIPTION": "Choisissez une organisation.", "ACTIVE": "Actif", "CREATE": "Créer une organisation", + "DEACTIVATE": "Désactiver l'organisation", + "REACTIVATE": "Réactiver l'organisation", "NOPERMISSION": "Vous n'avez pas la permission d'accéder aux paramètres de l'organisation.", "USERSELFACCOUNT": "Utilisez votre compte personnel comme propriétaire de l'organisation", "ORGDETAIL_TITLE": "Saisissez le nom et le domaine de votre nouvelle organisation.", @@ -821,6 +823,16 @@ "MEMBERREMOVED": "Gestionnaire supprimé.", "MEMBERCHANGED": "Gestionnaire modifié.", "SETPRIMARY": "Domaine primaire défini." + }, + "DIALOG": { + "DEACTIVATE": { + "TITLE": "Désactiver l'organisation", + "DESCRIPTION": "Vous êtes sur le point de désactiver votre organisation. Les utilisateurs ne peuvent plus se connecter ? Voulez-vous continuer ?" + }, + "REACTIVATE": { + "TITLE": "Réactiver l'organisation", + "DESCRIPTION": "Vous êtes sur le point de réactiver votre organisation. Les utilisateurs peuvent ensuite se reconnecter ? Voulez-vous continuer ?" + } } }, "SETTINGS": { diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 28bd39d403..09ce165504 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -757,6 +757,8 @@ "LISTDESCRIPTION": "Scegli un'organizzazione.", "ACTIVE": "Attivo", "CREATE": "Creare un'organizzazione", + "DEACTIVATE": "Disattiva organizzazione", + "REACTIVATE": "Riattiva organizzazione", "NOPERMISSION": "Non hai l'autorizzazione per accedere alle impostazioni dell'organizzazione.", "USERSELFACCOUNT": "Usa il tuo account personale come proprietario dell'organizzazione", "ORGDETAIL_TITLE": "Inserisci il nome e il dominio della tua nuova organizzazione.", @@ -821,6 +823,16 @@ "MEMBERREMOVED": "Manager rimosso con successo", "MEMBERCHANGED": "Manager cambiato con successo", "SETPRIMARY": "Dominio primario cambiato con successo" + }, + "DIALOG": { + "DEACTIVATE": { + "TITLE": "Disattivare l'organizzazione", + "DESCRIPTION": "Stai per disattivate la tua organizzazione. Utenti dell' organizzazione non possono più accedere in seguito. Sei sicuro di procedere?" + }, + "REACTIVATE": { + "TITLE": "Riattivare l'organizzazione", + "DESCRIPTION": "Stai per riattivare la tua organizzazione. Utenti dell' organizzazione possono accedere nuovamente dopo l'attivazione. Vuoi procedere?" + } } }, "SETTINGS": { diff --git a/internal/api/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss b/internal/api/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss index 9133524fa2..80e9226a98 100644 --- a/internal/api/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss +++ b/internal/api/ui/login/static/resources/themes/scss/styles/footer/footer_theme.scss @@ -19,7 +19,7 @@ } a { - color: var(--zitadel-color-font-500); + color: var(--zitadel-color-text-500); } .lgn-logo-watermark { diff --git a/internal/api/ui/login/static/resources/themes/scss/styles/vars.scss b/internal/api/ui/login/static/resources/themes/scss/styles/vars.scss index b4986eaed1..6e81533922 100644 --- a/internal/api/ui/login/static/resources/themes/scss/styles/vars.scss +++ b/internal/api/ui/login/static/resources/themes/scss/styles/vars.scss @@ -50,17 +50,17 @@ --zitadel-color-input-border-active: var(--zitadel-color-primary-500); --zitadel-color-input-placeholder: var(--zitadel-color-grey-600); - --zitadel-color-font-50: rgb(0, 0, 0); - --zitadel-color-font-100: rgb(0, 0, 0); - --zitadel-color-font-200: rgb(0, 0, 0); - --zitadel-color-font-300: rgb(0, 0, 0); - --zitadel-color-font-400: rgb(0, 0, 0); - --zitadel-color-font-500: rgb(0, 0, 0); - --zitadel-color-font-600: rgb(0, 0, 0); - --zitadel-color-font-700: rgb(0, 0, 0); - --zitadel-color-font-800: rgb(0, 0, 0); - --zitadel-color-font-900: rgb(0, 0, 0); - --zitadel-color-font-contrast: rgb(255, 255, 255); + --zitadel-color-text-50: rgb(0, 0, 0); + --zitadel-color-text-100: rgb(0, 0, 0); + --zitadel-color-text-200: rgb(0, 0, 0); + --zitadel-color-text-300: rgb(0, 0, 0); + --zitadel-color-text-400: rgb(0, 0, 0); + --zitadel-color-text-500: rgb(0, 0, 0); + --zitadel-color-text-600: rgb(0, 0, 0); + --zitadel-color-text-700: rgb(0, 0, 0); + --zitadel-color-text-800: rgb(0, 0, 0); + --zitadel-color-text-900: rgb(0, 0, 0); + --zitadel-color-text-contrast: rgb(255, 255, 255); --zitadel-color-label: #0000008a; --zitadel-color-account-selector-hover: rgba(0, 0, 0, 0.02); diff --git a/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css b/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css index 6ee5e67814..05d7f50f03 100644 --- a/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css +++ b/internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css @@ -44,17 +44,17 @@ --zitadel-color-input-border-hover: #1a1b1b; --zitadel-color-input-border-active: var(--zitadel-color-primary-500); --zitadel-color-input-placeholder: var(--zitadel-color-grey-600); - --zitadel-color-font-50: rgb(0, 0, 0); - --zitadel-color-font-100: rgb(0, 0, 0); - --zitadel-color-font-200: rgb(0, 0, 0); - --zitadel-color-font-300: rgb(0, 0, 0); - --zitadel-color-font-400: rgb(0, 0, 0); - --zitadel-color-font-500: rgb(0, 0, 0); - --zitadel-color-font-600: rgb(0, 0, 0); - --zitadel-color-font-700: rgb(0, 0, 0); - --zitadel-color-font-800: rgb(0, 0, 0); - --zitadel-color-font-900: rgb(0, 0, 0); - --zitadel-color-font-contrast: rgb(255, 255, 255); + --zitadel-color-text-50: rgb(0, 0, 0); + --zitadel-color-text-100: rgb(0, 0, 0); + --zitadel-color-text-200: rgb(0, 0, 0); + --zitadel-color-text-300: rgb(0, 0, 0); + --zitadel-color-text-400: rgb(0, 0, 0); + --zitadel-color-text-500: rgb(0, 0, 0); + --zitadel-color-text-600: rgb(0, 0, 0); + --zitadel-color-text-700: rgb(0, 0, 0); + --zitadel-color-text-800: rgb(0, 0, 0); + --zitadel-color-text-900: rgb(0, 0, 0); + --zitadel-color-text-contrast: rgb(255, 255, 255); --zitadel-color-label: #0000008a; --zitadel-color-account-selector-hover: rgba(0, 0, 0, 0.02); --zitadel-color-account-selector-active: rgba(0, 0, 0, 0.05); @@ -2819,7 +2819,7 @@ footer { } } footer a { - color: var(--zitadel-color-font-500); + color: var(--zitadel-color-text-500); } footer .lgn-logo-watermark { background: var(--zitadel-logo-powered-by) no-repeat; From dfa07a4cee24c7abe21d8e94567cd2fa015aa308 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Fri, 8 Jul 2022 09:06:38 +0200 Subject: [PATCH 014/116] chore(console): dependencies (#3893) * cli, core * material cdk * schematics * chore(deps-dev): bump karma-jasmine from 5.0.1 to 5.1.0 in /console (#3843) Bumps [karma-jasmine](https://github.com/karma-runner/karma-jasmine) from 5.0.1 to 5.1.0. - [Release notes](https://github.com/karma-runner/karma-jasmine/releases) - [Changelog](https://github.com/karma-runner/karma-jasmine/blob/master/CHANGELOG.md) - [Commits](https://github.com/karma-runner/karma-jasmine/compare/v5.0.1...v5.1.0) --- updated-dependencies: - dependency-name: karma-jasmine dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps): bump google-proto-files from 2.5.2 to 3.0.0 in /console (#3840) Bumps [google-proto-files](https://github.com/googleapis/nodejs-proto-files) from 2.5.2 to 3.0.0. - [Release notes](https://github.com/googleapis/nodejs-proto-files/releases) - [Changelog](https://github.com/googleapis/nodejs-proto-files/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/nodejs-proto-files/compare/v2.5.2...v3.0.0) --- updated-dependencies: - dependency-name: google-proto-files dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * chore(deps-dev): bump karma from 6.3.20 to 6.4.0 in /console (#3839) Bumps [karma](https://github.com/karma-runner/karma) from 6.3.20 to 6.4.0. - [Release notes](https://github.com/karma-runner/karma/releases) - [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md) - [Commits](https://github.com/karma-runner/karma/compare/v6.3.20...v6.4.0) --- updated-dependencies: - dependency-name: karma dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * jasmine * packs * lock * html tags * base / Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Livio Spring --- console/angular.json | 34 +- console/package-lock.json | 11242 ++++++++++++++++++++++++++---------- console/package.json | 56 +- console/src/index.html | 27 +- 4 files changed, 8333 insertions(+), 3026 deletions(-) diff --git a/console/angular.json b/console/angular.json index cf1e105dfb..aae5fe23cb 100644 --- a/console/angular.json +++ b/console/angular.json @@ -22,9 +22,17 @@ "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", - "assets": ["src/favicon.ico", "src/assets", "src/manifest.webmanifest"], - "styles": ["src/styles.scss"], - "scripts": ["./node_modules/tinycolor2/dist/tinycolor-min.js"], + "assets": [ + "src/favicon.ico", + "src/assets", + "src/manifest.webmanifest" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [ + "./node_modules/tinycolor2/dist/tinycolor-min.js" + ], "allowedCommonJsDependencies": [ "@angular/common/locales/de", "codemirror/mode/javascript/javascript", @@ -122,15 +130,27 @@ "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.spec.json", "karmaConfig": "karma.conf.js", - "assets": ["src/favicon.ico", "src/assets", "src/manifest.webmanifest"], - "styles": ["./node_modules/@angular/material/prebuilt-themes/pink-bluegrey.css", "src/styles.scss"], - "scripts": ["./node_modules/tinycolor2/dist/tinycolor-min.js"] + "assets": [ + "src/favicon.ico", + "src/assets", + "src/manifest.webmanifest" + ], + "styles": [ + "./node_modules/@angular/material/prebuilt-themes/pink-bluegrey.css", + "src/styles.scss" + ], + "scripts": [ + "./node_modules/tinycolor2/dist/tinycolor-min.js" + ] } }, "lint": { "builder": "@angular-eslint/builder:lint", "options": { - "lintFilePatterns": ["src/**/*.ts", "src/**/*.html"] + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] } }, "e2e": { diff --git a/console/package-lock.json b/console/package-lock.json index b8a5cfb7a2..72a20673ed 100644 --- a/console/package-lock.json +++ b/console/package-lock.json @@ -8,18 +8,18 @@ "name": "console", "version": "0.0.0", "dependencies": { - "@angular/animations": "^14.0.1", - "@angular/cdk": "^14.0.1", - "@angular/common": "^14.0.1", - "@angular/compiler": "^14.0.1", - "@angular/core": "^14.0.1", - "@angular/forms": "^14.0.1", - "@angular/material": "^14.0.1", - "@angular/material-moment-adapter": "^14.0.1", - "@angular/platform-browser": "^14.0.1", - "@angular/platform-browser-dynamic": "^14.0.1", - "@angular/router": "^14.0.1", - "@angular/service-worker": "^14.0.1", + "@angular/animations": "^14.0.4", + "@angular/cdk": "^14.0.4", + "@angular/common": "^14.0.4", + "@angular/compiler": "^14.0.4", + "@angular/core": "^14.0.4", + "@angular/forms": "^14.0.4", + "@angular/material": "^14.0.4", + "@angular/material-moment-adapter": "^14.0.4", + "@angular/platform-browser": "^14.0.4", + "@angular/platform-browser-dynamic": "^14.0.4", + "@angular/router": "^14.0.4", + "@angular/service-worker": "^14.0.4", "@ctrl/ngx-codemirror": "^5.1.1", "@grpc/grpc-js": "^1.5.7", "@ngx-translate/core": "^14.0.0", @@ -32,7 +32,7 @@ "codemirror": "^5.65.0", "cors": "^2.8.5", "file-saver": "^2.0.5", - "google-proto-files": "^2.5.0", + "google-proto-files": "^3.0.0", "google-protobuf": "^3.19.4", "grpc-web": "^1.3.0", "libphonenumber-js": "^1.10.6", @@ -48,32 +48,32 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^14.0.1", - "@angular-eslint/builder": "^14.0.0-alpha.3", - "@angular-eslint/eslint-plugin": "^14.0.0-alpha.3", - "@angular-eslint/eslint-plugin-template": "^14.0.0-alpha.3", - "@angular-eslint/schematics": "^14.0.0-alpha.3", - "@angular-eslint/template-parser": "^14.0.0-alpha.3", - "@angular/cli": "^14.0.1", - "@angular/compiler-cli": "^14.0.1", - "@angular/language-service": "^14.0.1", + "@angular-devkit/build-angular": "^14.0.4", + "@angular-eslint/builder": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin-template": "^14.0.0", + "@angular-eslint/schematics": "^14.0.0", + "@angular-eslint/template-parser": "^14.0.0", + "@angular/cli": "^14.0.4", + "@angular/compiler-cli": "^14.0.4", + "@angular/language-service": "^14.0.4", "@types/jasmine": "~4.0.3", "@types/jasminewd2": "~2.0.10", "@types/jsonwebtoken": "^8.5.5", "@types/node": "^17.0.42", - "@typescript-eslint/eslint-plugin": "5.25.0", - "@typescript-eslint/parser": "5.27.0", + "@typescript-eslint/eslint-plugin": "5.30.4", + "@typescript-eslint/parser": "5.30.4", "codelyzer": "^6.0.0", "cypress": "^10.1.0", "cypress-terminal-report": "^4.0.1", - "eslint": "^8.17.0", - "jasmine-core": "~4.1.1", + "eslint": "^8.18.0", + "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", "jsonwebtoken": "^8.5.1", - "karma": "~6.3.16", + "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~5.0.1", + "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.0.0", "mochawesome": "^7.1.2", "prettier": "^2.4.1", @@ -86,8 +86,9 @@ }, "node_modules/@ampproject/remapping": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -97,11 +98,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1400.2", + "version": "0.1400.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1400.4.tgz", + "integrity": "sha512-9tjOIRpAPuhsJ5xMVZI/C9qQUaVTF9URFrK4r/b9RO7lRsvMvweReMcOH4/8+veVSTAzAa34B6WNYvvuBZFMOg==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/core": "14.0.2", + "@angular-devkit/core": "14.0.4", "rxjs": "6.6.7" }, "engines": { @@ -112,8 +114,9 @@ }, "node_modules/@angular-devkit/architect/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -123,18 +126,20 @@ }, "node_modules/@angular-devkit/architect/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@angular-devkit/build-angular": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.0.4.tgz", + "integrity": "sha512-VoiDfyKSTBU4LDRwtY8Ga5ZBKsDxTYWNx9aDCoswalMvYREwhEi9+wEcWjF5aMKl4usr6twCPaYqDrbkHYUHqw==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1400.2", - "@angular-devkit/build-webpack": "0.1400.2", - "@angular-devkit/core": "14.0.2", + "@angular-devkit/architect": "0.1400.4", + "@angular-devkit/build-webpack": "0.1400.4", + "@angular-devkit/core": "14.0.4", "@babel/core": "7.17.10", "@babel/generator": "7.17.10", "@babel/helper-annotate-as-pure": "7.16.7", @@ -145,7 +150,7 @@ "@babel/runtime": "7.17.9", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.0.2", + "@ngtools/webpack": "14.0.4", "ansi-colors": "4.1.1", "babel-loader": "8.2.5", "babel-plugin-istanbul": "6.1.1", @@ -235,8 +240,9 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -246,15 +252,17 @@ }, "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1400.2", + "version": "0.1400.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1400.4.tgz", + "integrity": "sha512-eknabzf8lWDidOzeoV7NG3Rrfme/O2REZtranhBGKRfoRNUOCWMYcCfAF1hUEHjgw7zd4pn+3EdMVjhwpG48hA==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1400.2", + "@angular-devkit/architect": "0.1400.4", "rxjs": "6.6.7" }, "engines": { @@ -269,8 +277,9 @@ }, "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -280,13 +289,15 @@ }, "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@angular-devkit/core": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.4.tgz", + "integrity": "sha512-ySQnhu9KhU6vMcFE5jFD93Q2aQ/UJYRZXlvDCve11pp6Lb+llcA7H46lHlBwpxR3jKom+8U4W5vnviqU52zhcg==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "8.11.0", "ajv-formats": "2.1.1", @@ -310,8 +321,9 @@ }, "node_modules/@angular-devkit/core/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -321,15 +333,17 @@ }, "node_modules/@angular-devkit/core/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@angular-devkit/schematics": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.4.tgz", + "integrity": "sha512-dOi843eANcCL/tcSIAaotfLTHZTQLzRrpP2hz/le/vYMcuIfP90auvsWbQVrWbDIxWYl57Lu2UxvITT9gIarnA==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/core": "14.0.2", + "@angular-devkit/core": "14.0.4", "jsonc-parser": "3.0.0", "magic-string": "0.26.1", "ora": "5.4.1", @@ -343,8 +357,9 @@ }, "node_modules/@angular-devkit/schematics/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -354,13 +369,14 @@ }, "node_modules/@angular-devkit/schematics/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@angular-eslint/builder": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.0.0-alpha.3.tgz", - "integrity": "sha512-J3/Pj0erEkmRCSpVcsTWIg4riIADkfbC+Z+iGeS0cN3Ix6pyXk6XPDXoUCHBB0C55RCpeCYuJIFqJuLfEKIfZw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.0.0.tgz", + "integrity": "sha512-91/ZHivDD8ou/vEUsgY3nRv//2Kd0PA+JypI4jVs7nErmFtMkPAbpONn2cIqFlRgPilEm3LA78wemr7HxyxacA==", "dev": true, "dependencies": { "@nrwl/devkit": "13.1.3" @@ -371,18 +387,19 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "14.0.0-alpha.3", - "dev": true, - "license": "MIT" + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.0.0.tgz", + "integrity": "sha512-/rzDy+rVfpVOSAVycYsD15xbDrU54aayI94OT9Rxxl9J4Jp/Hep2FY7JrjvfqpS097qVIgJltEP9xu9OopOz7g==", + "dev": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.0.0-alpha.3.tgz", - "integrity": "sha512-vGKiKoWTZITcj6VMdfEhRpQOgzYX53QXqEfqq1deEybNxJsmSHD5i7niLw6l3AgK8o18j2HZfMyz39MItiQ/Rg==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.0.0.tgz", + "integrity": "sha512-A4oCWgOwiP9aYuuMOyF1iLcjZONMjxuabG+FICLA7LosjIIgIf0Cktp74Ii4itBr2Ka+E5+sCvFBce8r2Cmosg==", "dev": true, "dependencies": { - "@angular-eslint/utils": "14.0.0-alpha.3", - "@typescript-eslint/experimental-utils": "5.27.1" + "@angular-eslint/utils": "14.0.0", + "@typescript-eslint/utils": "5.29.0" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0", @@ -390,13 +407,13 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.0.0-alpha.3.tgz", - "integrity": "sha512-AoOyyLOpRZPph35wwBI1BOmBaI5VIBOdxWmOlCZsP2H5iaBiF+wQTARUu8swQVLKZ2arKKSP0ufAfc5E2FBcZA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.0.0.tgz", + "integrity": "sha512-h+3eL2ovMiBn5EG0DH8/2ikolvUUjSGJFbZenlJwEPGGEHaJoYw6205ZMoRNxKResEbPgEoY1UK+paO8x14z6w==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "14.0.0-alpha.3", - "@typescript-eslint/experimental-utils": "5.27.1", + "@angular-eslint/bundled-angular-compiler": "14.0.0", + "@typescript-eslint/utils": "5.29.0", "aria-query": "5.0.0", "axobject-query": "3.0.1" }, @@ -406,13 +423,13 @@ } }, "node_modules/@angular-eslint/schematics": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-14.0.0-alpha.3.tgz", - "integrity": "sha512-swBkQ4/9itzEPTvPbBw1H02pMrZIPly5d6fPUh71+xhPTTBvjFm525AyVMhg6N6uk9ai3mDgWyek8eaz7NHZgA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-14.0.0.tgz", + "integrity": "sha512-4lOpDECUgcSdlBsMeIq9Sx0FkIZDQZPfmtwNHDl7P7GCA4voqS3GgSX7/azwYrXFchPteQeHrXxB4B8n8AByig==", "dev": true, "dependencies": { - "@angular-eslint/eslint-plugin": "14.0.0-alpha.3", - "@angular-eslint/eslint-plugin-template": "14.0.0-alpha.3", + "@angular-eslint/eslint-plugin": "14.0.0", + "@angular-eslint/eslint-plugin-template": "14.0.0", "ignore": "5.2.0", "strip-json-comments": "3.1.1", "tmp": "0.2.1" @@ -422,12 +439,12 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.0.0-alpha.3.tgz", - "integrity": "sha512-twCZoBFuAgSZK6lKiNRdD738f99OSaQEaykf03QJAjo501Ib/q85cP2D7ZQzk03nT+xSODqUEaEPnuu/kE59nQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.0.0.tgz", + "integrity": "sha512-i0ec0m0hezabVYH9MruxIxLyoQp60VQAy0QvsQlYB6q3nFuJnx9MT+iSN+Now8AhWh2yqbnCxxnhhLFushwBFQ==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "14.0.0-alpha.3", + "@angular-eslint/bundled-angular-compiler": "14.0.0", "eslint-scope": "^5.1.0" }, "peerDependencies": { @@ -436,13 +453,13 @@ } }, "node_modules/@angular-eslint/utils": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.0.0-alpha.3.tgz", - "integrity": "sha512-py2oFSDdiY/QJmBKg0wbbO4Caf18uioHAivMXdXfIyFHM6XGoiI1DBUUCmNrCq6sbYanD1oO0BtRFD+Gv6y+vg==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.0.0.tgz", + "integrity": "sha512-gK8gDzo2MbMXYDqsWqE28rGkqPMMhPG4mIWp+zMsuWYG7oiUlD2TibWerYQCfGa9K2FTF97UGmI21Ckqsgex7w==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "14.0.0-alpha.3", - "@typescript-eslint/experimental-utils": "5.27.1" + "@angular-eslint/bundled-angular-compiler": "14.0.0", + "@typescript-eslint/utils": "5.29.0" }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0", @@ -450,8 +467,9 @@ } }, "node_modules/@angular/animations": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.0.4.tgz", + "integrity": "sha512-+Qe+wLA0DOHlOdFRQSEJoenhFm5zcKwkDItqAFT5NVYOT04yxXq8NFRIHSbqn468qR70EkX514lKi6pr6nxGYQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -459,12 +477,13 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.2" + "@angular/core": "14.0.4" } }, "node_modules/@angular/cdk": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-14.0.4.tgz", + "integrity": "sha512-zPM4VZadoKzTF9TZ7Yx5gJ7GtQpt62f8ofdH/BF2atG+TaNzOEFqtzogP4WuJDFAxJXOPMePobhth4YjUk0Wbw==", "dependencies": { "tslib": "^2.3.0" }, @@ -478,14 +497,15 @@ } }, "node_modules/@angular/cli": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.0.4.tgz", + "integrity": "sha512-hb6mJk6/vJwHCuMaGResQh9aXgoSyfrJ/WuFgLcPspdFRkm4EQcTSx8DwrRo7YawuCa12UJdPoK0dASXYN6JHA==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1400.2", - "@angular-devkit/core": "14.0.2", - "@angular-devkit/schematics": "14.0.2", - "@schematics/angular": "14.0.2", + "@angular-devkit/architect": "0.1400.4", + "@angular-devkit/core": "14.0.4", + "@angular-devkit/schematics": "14.0.4", + "@schematics/angular": "14.0.4", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.4", @@ -513,8 +533,9 @@ } }, "node_modules/@angular/common": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.0.4.tgz", + "integrity": "sha512-CvlFa2lCxen0LB3N45IzZDdMIqpcasXfVUhiAkLxZgT+kSTunc/rg8hMoLHVfmFpkQKCQmPVyuzNXnSwIFhYkQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -522,13 +543,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.2", + "@angular/core": "14.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.0.4.tgz", + "integrity": "sha512-WdRpZFTX2vt71sSfQ89C1K5l2zhYtn8ON+ZlAVxyZ5uT0nA/Z/vuMLfNZB1WmcGVDOc7JmQduSiSaI0hhQqXqw==", "dependencies": { "tslib": "^2.3.0" }, @@ -536,7 +558,7 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "14.0.2" + "@angular/core": "14.0.4" }, "peerDependenciesMeta": { "@angular/core": { @@ -545,9 +567,10 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.0.4.tgz", + "integrity": "sha512-j3T0dOwNov6rKcaxLMSlPLRvrBT6MyBTum18x6XvZRqb75RUAJ/yV+PXgtA//XZ2hjuy87+CvZy3tBKktvY7bA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.17.2", "chokidar": "^3.0.0", @@ -569,13 +592,14 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "14.0.2", + "@angular/compiler": "14.0.4", "typescript": ">=4.6.2 <4.8" } }, "node_modules/@angular/core": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.0.4.tgz", + "integrity": "sha512-uMS/X+/5RokF3uiiD1IAr6Ha9k7QPegHrAB3QW0x6WRUTMq0K+08F+AeF5COmbfYMMaxofD6x8XmM+BLeg/0hw==", "dependencies": { "tslib": "^2.3.0" }, @@ -588,8 +612,9 @@ } }, "node_modules/@angular/forms": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.0.4.tgz", + "integrity": "sha512-u/9y09WQ00y6BQeNo69hMa/Fx+xKHGnmcjMtS3xkZtmoCP+A0ebumG0Y9DfXs2olJY2//O5di7Qu3fwlBg+3Cw==", "dependencies": { "tslib": "^2.3.0" }, @@ -597,29 +622,31 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.2", - "@angular/core": "14.0.2", - "@angular/platform-browser": "14.0.2", + "@angular/common": "14.0.4", + "@angular/core": "14.0.4", + "@angular/platform-browser": "14.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/language-service": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.0.4.tgz", + "integrity": "sha512-5I2k1/EJSBBA3D5jP8Q+Z9paI62t7UUi3NO3o1nJkc9d6/01FGKgilbouSNhdLI6Rn0FeBOwF2h00H9NQ+XHTw==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || >=16.10.0" } }, "node_modules/@angular/material": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.0.4.tgz", + "integrity": "sha512-Ysz6oPbpLH7CvRR6oxQwpUImSbFqxL4+eiH0LPc7vkaOSrvGdZ/7cWhAfT6hVnw3bEY+eq5qBSMgyVUB44z4eg==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/animations": "^14.0.0 || ^15.0.0", - "@angular/cdk": "14.0.2", + "@angular/cdk": "14.0.4", "@angular/common": "^14.0.0 || ^15.0.0", "@angular/core": "^14.0.0 || ^15.0.0", "@angular/forms": "^14.0.0 || ^15.0.0", @@ -628,20 +655,22 @@ } }, "node_modules/@angular/material-moment-adapter": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-14.0.4.tgz", + "integrity": "sha512-RqBtLKzwqO2fRAlwURVfVSXZQ3Qks1k3G5lj4AOZpGnAPBw8DGHI/zroBD/3QzPer8rUsoiVVwdQSXpmWf1mlg==", "dependencies": { "tslib": "^2.3.0" }, "peerDependencies": { "@angular/core": "^14.0.0 || ^15.0.0", - "@angular/material": "14.0.2", + "@angular/material": "14.0.4", "moment": "^2.18.1" } }, "node_modules/@angular/platform-browser": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.0.4.tgz", + "integrity": "sha512-VFeFpQ+248m8GiCqcsHwH4PET7tR1cyXnhsep1EeI4MDaO+aIbsUcESqXzMm5+ChOmNyiCtLQu8QvfHZK0uDVA==", "dependencies": { "tslib": "^2.3.0" }, @@ -649,9 +678,9 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "14.0.2", - "@angular/common": "14.0.2", - "@angular/core": "14.0.2" + "@angular/animations": "14.0.4", + "@angular/common": "14.0.4", + "@angular/core": "14.0.4" }, "peerDependenciesMeta": { "@angular/animations": { @@ -660,8 +689,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.4.tgz", + "integrity": "sha512-snVbAKfnBuCUMgop6ln111B/ouMnDR1ZzMzpiKefdJDGUvASCLbR8XAioY+zXUI82QbNg5masUPia1Fy+yTvGw==", "dependencies": { "tslib": "^2.3.0" }, @@ -669,15 +699,16 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.2", - "@angular/compiler": "14.0.2", - "@angular/core": "14.0.2", - "@angular/platform-browser": "14.0.2" + "@angular/common": "14.0.4", + "@angular/compiler": "14.0.4", + "@angular/core": "14.0.4", + "@angular/platform-browser": "14.0.4" } }, "node_modules/@angular/router": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.0.4.tgz", + "integrity": "sha512-aqtOjIjVNtWbpedDdni0yGfGR6sEb8S3jJB9jf43ththmHKxAlW7PKP2NgEmx0uJ2xY2iGET7Gkpl8RBwvoHgQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -685,15 +716,16 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.2", - "@angular/core": "14.0.2", - "@angular/platform-browser": "14.0.2", + "@angular/common": "14.0.4", + "@angular/core": "14.0.4", + "@angular/platform-browser": "14.0.4", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/service-worker": { - "version": "14.0.2", - "license": "MIT", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-14.0.4.tgz", + "integrity": "sha512-dJzsDTQg6LRNK/wJPi06EdfKCSnvil3DD6HNHDMHNxLE4J5NQmZdd6bCBEkXTOchqpOUjae4ej/ZelEE0te3Bg==", "dependencies": { "tslib": "^2.3.0" }, @@ -704,38 +736,42 @@ "node": "^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "14.0.2", - "@angular/core": "14.0.2" + "@angular/common": "14.0.4", + "@angular/core": "14.0.4" } }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true }, "node_modules/@babel/code-frame": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", "dev": true, - "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.16.7", @@ -763,16 +799,18 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", + "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.17.10", "@jridgewell/gen-mapping": "^0.1.0", @@ -784,8 +822,9 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/types": "^7.16.7" }, @@ -794,24 +833,26 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", + "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" }, @@ -824,24 +865,26 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", + "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -850,13 +893,26 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" }, "engines": { "node": ">=6.9.0" @@ -865,10 +921,23 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-define-polyfill-provider": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", "@babel/helper-module-imports": "^7.12.13", @@ -885,223 +954,315 @@ }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.17.9", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.17.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", + "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", + "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", + "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", + "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", + "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -1110,9 +1271,10 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", "dev": true, - "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -1121,11 +1283,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1135,13 +1298,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", + "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1152,8 +1316,9 @@ }, "node_modules/@babel/plugin-proposal-async-generator-functions": { "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.16.7", "@babel/helper-remap-async-to-generator": "^7.16.8", @@ -1167,12 +1332,13 @@ } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1182,12 +1348,13 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1198,11 +1365,12 @@ } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1213,11 +1381,12 @@ } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", + "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1228,11 +1397,12 @@ } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1243,11 +1413,12 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", + "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1258,11 +1429,12 @@ } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1273,11 +1445,12 @@ } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1288,15 +1461,16 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", + "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" + "@babel/plugin-transform-parameters": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1306,11 +1480,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1321,12 +1496,13 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", + "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1337,12 +1513,13 @@ } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1352,13 +1529,14 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1368,13 +1546,26 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", + "node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=4" @@ -1385,8 +1576,9 @@ }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1396,8 +1588,9 @@ }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1407,8 +1600,9 @@ }, "node_modules/@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1421,8 +1615,9 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1432,8 +1627,9 @@ }, "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1443,8 +1639,9 @@ }, "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1454,8 +1651,9 @@ }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1465,8 +1663,9 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1476,8 +1675,9 @@ }, "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1487,8 +1687,9 @@ }, "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1498,8 +1699,9 @@ }, "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1509,8 +1711,9 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1520,8 +1723,9 @@ }, "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1534,8 +1738,9 @@ }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1547,11 +1752,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1562,8 +1768,9 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -1577,11 +1784,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1591,11 +1799,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.4", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", + "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1605,17 +1814,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.4", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", + "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, "engines": { @@ -1625,12 +1835,25 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.17.12", + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", + "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1640,11 +1863,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", + "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1654,12 +1878,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1669,11 +1894,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", + "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1683,12 +1909,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1698,11 +1925,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.1", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", + "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1712,13 +1940,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", + "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1728,11 +1957,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", + "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1742,11 +1972,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1756,12 +1987,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1772,13 +2004,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1789,14 +2022,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", + "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1807,12 +2041,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1822,12 +2057,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1837,11 +2073,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1851,12 +2088,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1866,11 +2104,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", + "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1880,11 +2119,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1894,11 +2134,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" }, "engines": { @@ -1909,11 +2150,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1924,8 +2166,9 @@ }, "node_modules/@babel/plugin-transform-runtime": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz", + "integrity": "sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -1943,18 +2186,20 @@ }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1964,12 +2209,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", + "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1979,11 +2225,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -1993,11 +2240,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", + "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2007,11 +2255,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", + "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2021,11 +2270,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", + "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2035,12 +2285,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" }, "engines": { "node": ">=6.9.0" @@ -2051,8 +2302,9 @@ }, "node_modules/@babel/preset-env": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", + "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.10", "@babel/helper-compilation-targets": "^7.17.10", @@ -2138,16 +2390,18 @@ }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/preset-modules": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -2161,8 +2415,9 @@ }, "node_modules/@babel/runtime": { "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dev": true, - "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -2172,8 +2427,9 @@ }, "node_modules/@babel/template": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.7", "@babel/parser": "^7.16.7", @@ -2184,18 +2440,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2204,12 +2461,13 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.18.2", + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, "engines": { @@ -2217,11 +2475,12 @@ } }, "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, - "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" }, @@ -2230,11 +2489,12 @@ } }, "node_modules/@babel/types": { - "version": "7.18.4", + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2243,16 +2503,18 @@ }, "node_modules/@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/@csstools/postcss-color-function": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", + "integrity": "sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -2270,8 +2532,9 @@ }, "node_modules/@csstools/postcss-font-format-keywords": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2284,8 +2547,9 @@ }, "node_modules/@csstools/postcss-hwb-function": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz", + "integrity": "sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2302,8 +2566,9 @@ }, "node_modules/@csstools/postcss-ic-unit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz", + "integrity": "sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -2316,9 +2581,10 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.5", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.6.tgz", + "integrity": "sha512-Oqs396oenuyyMdRXOstxXbxei8fYEgToYjmlYHEi5gk0QLk7xQ72LY7NDr7waWAAmdVzRqPpbE26Q7/cUrGu4Q==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/selector-specificity": "^2.0.0", "postcss-selector-parser": "^6.0.10" @@ -2331,13 +2597,14 @@ "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/@csstools/postcss-normalize-display-values": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2350,8 +2617,9 @@ }, "node_modules/@csstools/postcss-oklab-function": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz", + "integrity": "sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -2369,8 +2637,9 @@ }, "node_modules/@csstools/postcss-progressive-custom-properties": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2383,8 +2652,9 @@ }, "node_modules/@csstools/postcss-stepped-value-functions": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz", + "integrity": "sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -2401,8 +2671,9 @@ }, "node_modules/@csstools/postcss-unset-value": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz", + "integrity": "sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg==", "dev": true, - "license": "CC0-1.0", "engines": { "node": "^12 || ^14 || >=16" }, @@ -2416,8 +2687,9 @@ }, "node_modules/@csstools/selector-specificity": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", + "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", "dev": true, - "license": "CC0-1.0", "engines": { "node": "^12 || ^14 || >=16" }, @@ -2432,7 +2704,8 @@ }, "node_modules/@ctrl/ngx-codemirror": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@ctrl/ngx-codemirror/-/ngx-codemirror-5.1.1.tgz", + "integrity": "sha512-MAByA/cJBZY3yv/cpO87mF9Q24/ptCWf2Pr4n4V1w3G0ya5cKAIyHwIfvJ5nJz/4Gj2i2O/pteDWkyxrbyICoA==", "dependencies": { "@types/codemirror": "^5.60.5", "tslib": "^2.3.0" @@ -2445,15 +2718,17 @@ }, "node_modules/@ctrl/tinycolor": { "version": "3.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", + "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==", "engines": { "node": ">=10" } }, "node_modules/@cypress/request": { "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2480,8 +2755,9 @@ }, "node_modules/@cypress/xvfb": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -2489,24 +2765,27 @@ }, "node_modules/@cypress/xvfb/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2524,8 +2803,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2539,22 +2819,25 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.15.0", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -2567,8 +2850,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2578,13 +2862,15 @@ }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2594,8 +2880,9 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -2605,12 +2892,14 @@ }, "node_modules/@gar/promisify": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, "node_modules/@grpc/grpc-js": { "version": "1.6.7", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "dependencies": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -2621,7 +2910,8 @@ }, "node_modules/@grpc/proto-loader": { "version": "0.6.13", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", "dependencies": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -2638,7 +2928,8 @@ }, "node_modules/@grpc/proto-loader/node_modules/yargs": { "version": "16.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -2654,15 +2945,17 @@ }, "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { "version": "20.2.9", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "engines": { "node": ">=10" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", @@ -2674,8 +2967,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2683,8 +2977,9 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2694,13 +2989,15 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.3.1", "find-up": "^4.1.0", @@ -2714,16 +3011,18 @@ }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.0", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2733,30 +3032,34 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "dev": true, - "license": "MIT" + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.13", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2764,13 +3067,15 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true }, "node_modules/@ngtools/webpack": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.0.4.tgz", + "integrity": "sha512-83b/gB4Kna2FhIQj82RNZol+6gq+vLv6+4LUFOGSBb4Xha3RVQGJQpGwqEkXRFziwgTODrPWJAnOup5pzKv9wA==", "dev": true, - "license": "MIT", "engines": { "node": "^14.15.0 || >=16.10.0", "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", @@ -2784,7 +3089,8 @@ }, "node_modules/@ngx-translate/core": { "version": "14.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", + "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", "dependencies": { "tslib": "^2.3.0" }, @@ -2795,7 +3101,8 @@ }, "node_modules/@ngx-translate/http-loader": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz", + "integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==", "dependencies": { "tslib": "^2.3.0" }, @@ -2807,8 +3114,9 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2819,16 +3127,18 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2839,8 +3149,9 @@ }, "node_modules/@npmcli/fs": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, - "license": "ISC", "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -2851,8 +3162,9 @@ }, "node_modules/@npmcli/git": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/promise-spawn": "^3.0.0", "lru-cache": "^7.4.4", @@ -2870,8 +3182,9 @@ }, "node_modules/@npmcli/installed-package-contents": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, - "license": "ISC", "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -2885,8 +3198,9 @@ }, "node_modules/@npmcli/move-file": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, - "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -2897,16 +3211,18 @@ }, "node_modules/@npmcli/node-gyp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true, - "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/@npmcli/promise-spawn": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, - "license": "ISC", "dependencies": { "infer-owner": "^1.0.4" }, @@ -2916,8 +3232,9 @@ }, "node_modules/@npmcli/run-script": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", @@ -2929,19 +3246,21 @@ } }, "node_modules/@nrwl/cli": { - "version": "14.3.6", + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.1.tgz", + "integrity": "sha512-9MHzXneygo1+hYgmBxrxe4L702OikuhcCzbUJ1W0JuvcEk/tbotn/EG/jaJqBzPyCQz1cZYYlJuN7sxg8bdtNw==", "dev": true, - "license": "MIT", "dependencies": { - "nx": "14.3.6" + "nx": "14.4.1" } }, "node_modules/@nrwl/cli/node_modules/@nrwl/tao": { - "version": "14.3.6", + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.1.tgz", + "integrity": "sha512-BLao0kpWFkP38V3Fli2cYmM3Vbjkfu01EKrKULIukPh7VlT8nX0vgUND7LcPg46d+HTlaQG12SGLqiMroB+qwQ==", "dev": true, - "license": "MIT", "dependencies": { - "nx": "14.3.6" + "nx": "14.4.1" }, "bin": { "tao": "index.js" @@ -2949,8 +3268,9 @@ }, "node_modules/@nrwl/cli/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -2963,13 +3283,15 @@ }, "node_modules/@nrwl/cli/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/@nrwl/cli/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2977,8 +3299,9 @@ }, "node_modules/@nrwl/cli/node_modules/chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2992,8 +3315,9 @@ }, "node_modules/@nrwl/cli/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3003,13 +3327,15 @@ }, "node_modules/@nrwl/cli/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@nrwl/cli/node_modules/fast-glob": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3023,8 +3349,9 @@ }, "node_modules/@nrwl/cli/node_modules/fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3036,8 +3363,9 @@ }, "node_modules/@nrwl/cli/node_modules/glob": { "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3052,16 +3380,18 @@ }, "node_modules/@nrwl/cli/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@nrwl/cli/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3071,8 +3401,9 @@ }, "node_modules/@nrwl/cli/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3082,8 +3413,9 @@ }, "node_modules/@nrwl/cli/node_modules/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3092,13 +3424,14 @@ } }, "node_modules/@nrwl/cli/node_modules/nx": { - "version": "14.3.6", + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.1.tgz", + "integrity": "sha512-nXWrvtAe1Lp4IqqrjjhEQ0S3LmrlVLb9vjKkhSeirLOFnECWhf905hR0iQe8p+JDRrlD0zSjo2YiAAF1c6SarQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { - "@nrwl/cli": "14.3.6", - "@nrwl/tao": "14.3.6", + "@nrwl/cli": "14.4.1", + "@nrwl/tao": "14.4.1", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", @@ -3146,8 +3479,9 @@ }, "node_modules/@nrwl/cli/node_modules/semver": { "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3160,8 +3494,9 @@ }, "node_modules/@nrwl/cli/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3171,16 +3506,18 @@ }, "node_modules/@nrwl/cli/node_modules/yargs-parser": { "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/@nrwl/devkit": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-13.1.3.tgz", + "integrity": "sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA==", "dev": true, - "license": "MIT", "dependencies": { "@nrwl/tao": "13.1.3", "ejs": "^3.1.5", @@ -3192,8 +3529,9 @@ }, "node_modules/@nrwl/devkit/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3203,8 +3541,9 @@ }, "node_modules/@nrwl/devkit/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -3214,13 +3553,15 @@ }, "node_modules/@nrwl/devkit/node_modules/rxjs/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@nrwl/devkit/node_modules/semver": { "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3233,8 +3574,9 @@ }, "node_modules/@nrwl/tao": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-13.1.3.tgz", + "integrity": "sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "4.1.0", "enquirer": "~2.3.6", @@ -3254,8 +3596,9 @@ }, "node_modules/@nrwl/tao/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3268,8 +3611,9 @@ }, "node_modules/@nrwl/tao/node_modules/chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3283,8 +3627,9 @@ }, "node_modules/@nrwl/tao/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3294,21 +3639,24 @@ }, "node_modules/@nrwl/tao/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@nrwl/tao/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@nrwl/tao/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3318,8 +3666,9 @@ }, "node_modules/@nrwl/tao/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -3329,21 +3678,24 @@ }, "node_modules/@nrwl/tao/node_modules/rxjs-for-await": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz", + "integrity": "sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw==", "dev": true, - "license": "MIT", "peerDependencies": { "rxjs": "^6.0.0" } }, "node_modules/@nrwl/tao/node_modules/rxjs/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/@nrwl/tao/node_modules/semver": { "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3356,8 +3708,9 @@ }, "node_modules/@nrwl/tao/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3367,9 +3720,10 @@ }, "node_modules/@parcel/watcher": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "node-addon-api": "^3.2.1", "node-gyp-build": "^4.3.0" @@ -3384,23 +3738,28 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -3408,31 +3767,37 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@schematics/angular": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.4.tgz", + "integrity": "sha512-2t7B8ZplJzLfrU7SjciaUquaOAWCi6SD954Q1Ej/SZfWlLjs8k1SvlKb+Syzo9TMByMuzdKTrdnmNRHekvMZEQ==", "dev": true, - "license": "MIT", "dependencies": { - "@angular-devkit/core": "14.0.2", - "@angular-devkit/schematics": "14.0.2", + "@angular-devkit/core": "14.0.4", + "@angular-devkit/schematics": "14.0.4", "jsonc-parser": "3.0.0" }, "engines": { @@ -3443,8 +3808,9 @@ }, "node_modules/@stylelint/postcss-css-in-js": { "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", + "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/core": "^7.17.9" }, @@ -3455,8 +3821,10 @@ }, "node_modules/@stylelint/postcss-markdown": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", + "deprecated": "Use the original unforked package instead: postcss-markdown", "dev": true, - "license": "MIT", "dependencies": { "remark": "^13.0.0", "unist-util-find-all-after": "^3.0.2" @@ -3468,16 +3836,18 @@ }, "node_modules/@tootallnate/once": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/@types/body-parser": { "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, - "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -3485,36 +3855,41 @@ }, "node_modules/@types/bonjour": { "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/codemirror": { "version": "5.60.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", + "integrity": "sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==", "dependencies": { "@types/tern": "*" } }, "node_modules/@types/component-emitter": { "version": "1.2.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", + "dev": true }, "node_modules/@types/connect": { "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, - "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -3522,40 +3897,46 @@ }, "node_modules/@types/cookie": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true }, "node_modules/@types/cors": { "version": "2.8.12", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true }, "node_modules/@types/eslint": { - "version": "8.4.3", + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.3", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "0.0.51", - "license": "MIT" + "version": "0.0.52", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz", + "integrity": "sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==" }, "node_modules/@types/express": { "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, - "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -3565,8 +3946,9 @@ }, "node_modules/@types/express-serve-static-core": { "version": "4.17.29", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", + "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -3575,124 +3957,146 @@ }, "node_modules/@types/file-saver": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==" }, "node_modules/@types/google-protobuf": { "version": "3.15.6", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.6.tgz", + "integrity": "sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==" }, "node_modules/@types/http-proxy": { "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/jasmine": { "version": "4.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", + "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", + "dev": true }, "node_modules/@types/jasminewd2": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.10.tgz", + "integrity": "sha512-J7mDz7ovjwjc+Y9rR9rY53hFWKATcIkrr9DwQWmOas4/pnIPJTXawnzjwpHm3RSxz/e3ZVUvQ7cRbd5UQLo10g==", "dev": true, - "license": "MIT", "dependencies": { "@types/jasmine": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/jsonwebtoken": { "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/long": { "version": "4.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "node_modules/@types/mdast": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/mime": { "version": "1.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true }, "node_modules/@types/node": { "version": "17.0.45", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true }, "node_modules/@types/parse-json": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "node_modules/@types/q": { "version": "0.0.32", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", + "dev": true }, "node_modules/@types/qs": { "version": "6.9.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true }, "node_modules/@types/retry": { "version": "0.12.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true }, "node_modules/@types/selenium-webdriver": { "version": "3.0.20", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", + "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", + "dev": true }, "node_modules/@types/serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, - "license": "MIT", "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -3700,63 +4104,72 @@ }, "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true }, "node_modules/@types/sizzle": { "version": "2.3.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "dev": true }, "node_modules/@types/sockjs": { "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/tern": { "version": "0.23.4", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", + "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", "dependencies": { "@types/estree": "*" } }, "node_modules/@types/unist": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true }, "node_modules/@types/uuid": { "version": "8.3.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "node_modules/@types/ws": { "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz", + "integrity": "sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/type-utils": "5.25.0", - "@typescript-eslint/utils": "5.25.0", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/type-utils": "5.30.4", + "@typescript-eslint/utils": "5.30.4", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -3781,87 +4194,16 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.27.1", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.4.tgz", + "integrity": "sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "5.27.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.27.1", - "@typescript-eslint/visitor-keys": "5.27.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "5.27.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.27.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.27.1", - "@typescript-eslint/visitor-keys": "5.27.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { - "version": "5.27.1", - "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.27.1", - "@typescript-eslint/types": "5.27.1", - "@typescript-eslint/typescript-estree": "5.27.1", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/typescript-estree": "5.30.4", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -3876,30 +4218,15 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.27.1", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "5.27.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.4.tgz", + "integrity": "sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.27.0", - "@typescript-eslint/types": "5.27.0", - "@typescript-eslint/typescript-estree": "5.27.0", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/typescript-estree": "5.30.4", "debug": "^4.3.4" }, "engines": { @@ -3918,45 +4245,14 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "5.27.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.27.0", - "@typescript-eslint/visitor-keys": "5.27.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.27.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.27.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz", + "integrity": "sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0" + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/visitor-keys": "5.30.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3966,24 +4262,13 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/scope-manager/node_modules/@typescript-eslint/types": { - "version": "5.25.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz", + "integrity": "sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.25.0", + "@typescript-eslint/utils": "5.30.4", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4003,69 +4288,16 @@ } } }, - "node_modules/@typescript-eslint/types": { - "version": "5.27.0", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.4.tgz", + "integrity": "sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ==", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.27.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.27.0", - "@typescript-eslint/visitor-keys": "5.27.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.27.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.27.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.25.0", - "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/typescript-estree": "5.25.0", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/typescript-estree": "5.30.4", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -4080,10 +4312,11 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.25.0", + "node_modules/@typescript-eslint/types": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.4.tgz", + "integrity": "sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4092,13 +4325,14 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.25.0", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz", + "integrity": "sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/visitor-keys": "5.30.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4118,12 +4352,94 @@ } } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.25.0", + "node_modules/@typescript-eslint/utils": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", + "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.25.0", + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", + "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", + "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", + "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", + "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.29.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -4134,10 +4450,15 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/@typescript-eslint/types": { - "version": "5.25.0", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz", + "integrity": "sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q==", "dev": true, - "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.30.4", + "eslint-visitor-keys": "^3.3.0" + }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4148,14 +4469,16 @@ }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -4163,23 +4486,27 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4188,13 +4515,15 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4204,29 +4533,33 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4240,8 +4573,9 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -4252,8 +4586,9 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4263,8 +4598,9 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4276,8 +4612,9 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -4285,33 +4622,39 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true }, "node_modules/abab": { "version": "2.0.6", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true }, "node_modules/abbrev": { "version": "1.1.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4322,8 +4665,9 @@ }, "node_modules/acorn": { "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4333,24 +4677,27 @@ }, "node_modules/acorn-import-assertions": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, - "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" @@ -4361,8 +4708,9 @@ }, "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4374,16 +4722,18 @@ }, "node_modules/adm-zip": { "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.3.0" } }, "node_modules/agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "4" }, @@ -4393,8 +4743,9 @@ }, "node_modules/agentkeepalive": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -4406,16 +4757,18 @@ }, "node_modules/agentkeepalive/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4426,8 +4779,9 @@ }, "node_modules/ajv": { "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -4441,8 +4795,9 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -4457,8 +4812,9 @@ }, "node_modules/ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -4468,7 +4824,8 @@ }, "node_modules/angular-oauth2-oidc": { "version": "13.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/angular-oauth2-oidc/-/angular-oauth2-oidc-13.0.1.tgz", + "integrity": "sha512-aL1VIv9Jqoqq31lbpUXIeNpM3GeN/ldb3KOlq0cV92amGpZs9J4YA+2rlJ5V9zb6NFNbvd7XfTntMbnNuS0+CQ==", "dependencies": { "fast-sha256": "^1.3.0", "tslib": "^2.0.0" @@ -4480,16 +4837,18 @@ }, "node_modules/ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4502,26 +4861,29 @@ }, "node_modules/ansi-html-community": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -4531,8 +4893,9 @@ }, "node_modules/anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4543,19 +4906,23 @@ }, "node_modules/app-root-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0" } }, "node_modules/aproba": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, "node_modules/arch": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true, "funding": [ { @@ -4570,13 +4937,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/are-we-there-yet": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", "dev": true, - "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4587,105 +4954,120 @@ }, "node_modules/argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/argparse/node_modules/sprintf-js": { "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true }, "node_modules/aria-query": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=6.0" } }, "node_modules/array-flatten": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } }, "node_modules/assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/ast-types-flow": { "version": "0.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "dev": true }, "node_modules/astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { "version": "3.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true }, "node_modules/asynckit": { "version": "0.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/at-least-node": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 4.0.0" } }, "node_modules/atob": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -4695,6 +5077,8 @@ }, "node_modules/autoprefixer": { "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", "dev": true, "funding": [ { @@ -4706,7 +5090,6 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], - "license": "MIT", "dependencies": { "browserslist": "^4.20.3", "caniuse-lite": "^1.0.30001335", @@ -4727,29 +5110,33 @@ }, "node_modules/aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { "version": "1.11.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true }, "node_modules/axobject-query": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.0.1.tgz", + "integrity": "sha512-vy5JPSOibF9yAeC2PoemRdA1MuSXX7vX5osdoxKf/6OUeppAWekZ3JIJVNWFMH6wgj7uHYyqZUSqE/b/3JLV1A==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=6.0" } }, "node_modules/babel-loader": { "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dev": true, - "license": "MIT", "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -4766,8 +5153,9 @@ }, "node_modules/babel-loader/node_modules/loader-utils": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -4779,16 +5167,18 @@ }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", @@ -4802,8 +5192,9 @@ }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.13.11", "@babel/helper-define-polyfill-provider": "^0.3.1", @@ -4815,16 +5206,18 @@ }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1", "core-js-compat": "^3.21.0" @@ -4835,8 +5228,9 @@ }, "node_modules/babel-plugin-polyfill-regenerator": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1" }, @@ -4846,8 +5240,9 @@ }, "node_modules/bail": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4855,11 +5250,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base64-js": { "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4873,50 +5271,55 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/base64id": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, - "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } }, "node_modules/batch": { "version": "0.6.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "tweetnacl": "^0.14.3" } }, "node_modules/big.js": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4925,6 +5328,8 @@ }, "node_modules/bl/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -4940,7 +5345,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4948,13 +5352,15 @@ }, "node_modules/blob-util": { "version": "2.0.2", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true }, "node_modules/blocking-proxy": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -4967,13 +5373,15 @@ }, "node_modules/bluebird": { "version": "3.7.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true }, "node_modules/body-parser": { "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -4995,21 +5403,24 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/body-parser/node_modules/qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -5022,8 +5433,9 @@ }, "node_modules/bonjour-service": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", + "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", "dev": true, - "license": "MIT", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -5033,21 +5445,24 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true }, "node_modules/brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -5057,12 +5472,15 @@ }, "node_modules/browser-stdout": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, - "license": "ISC", "peer": true }, "node_modules/browserslist": { - "version": "4.20.4", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", "dev": true, "funding": [ { @@ -5074,13 +5492,11 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", "node-releases": "^2.0.5", - "picocolors": "^1.0.0" + "update-browserslist-db": "^1.0.4" }, "bin": { "browserslist": "cli.js" @@ -5091,16 +5507,18 @@ }, "node_modules/browserstack": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", "dev": true, - "license": "MIT", "dependencies": { "https-proxy-agent": "^2.2.1" } }, "node_modules/browserstack/node_modules/agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, - "license": "MIT", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -5110,16 +5528,18 @@ }, "node_modules/browserstack/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/browserstack/node_modules/https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -5130,6 +5550,8 @@ }, "node_modules/buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -5144,7 +5566,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -5152,26 +5573,30 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true }, "node_modules/buffer-from": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true }, "node_modules/builtin-modules": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -5179,24 +5604,27 @@ }, "node_modules/builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^7.0.0" } }, "node_modules/bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cacache": { "version": "16.0.7", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.7.tgz", + "integrity": "sha512-a4zfQpp5vm4Ipdvbj+ZrPonikRhm6WBEd4zT1Yc1DXsmAxrPgDwWBLF/u/wTVXSFPIgOJ1U3ghSa2Xm4s3h28w==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -5223,16 +5651,18 @@ }, "node_modules/cachedir": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5243,23 +5673,26 @@ }, "node_modules/callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/camelcase": { "version": "5.3.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "engines": { "node": ">=6" } }, "node_modules/camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -5273,7 +5706,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001355", + "version": "1.0.30001363", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz", + "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==", "dev": true, "funding": [ { @@ -5284,18 +5719,19 @@ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/caseless": { "version": "0.12.0", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true }, "node_modules/chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5307,8 +5743,9 @@ }, "node_modules/character-entities": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5316,8 +5753,9 @@ }, "node_modules/character-entities-legacy": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5325,8 +5763,9 @@ }, "node_modules/character-reference-invalid": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5334,19 +5773,23 @@ }, "node_modules/chardet": { "version": "0.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "node_modules/check-more-types": { "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "funding": [ { @@ -5354,7 +5797,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5373,37 +5815,42 @@ }, "node_modules/chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { "version": "3.3.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "dev": true }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, - "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5413,8 +5860,9 @@ }, "node_modules/cli-spinners": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -5424,8 +5872,9 @@ }, "node_modules/cli-table3": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "dev": true, - "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -5438,8 +5887,9 @@ }, "node_modules/cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, - "license": "MIT", "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -5453,15 +5903,17 @@ }, "node_modules/cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, - "license": "ISC", "engines": { "node": ">= 10" } }, "node_modules/cliui": { "version": "7.0.4", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -5470,16 +5922,18 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -5491,8 +5945,9 @@ }, "node_modules/clone-regexp": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, - "license": "MIT", "dependencies": { "is-regexp": "^2.0.0" }, @@ -5502,8 +5957,9 @@ }, "node_modules/codelyzer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", + "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", "dev": true, - "license": "MIT", "dependencies": { "@angular/compiler": "9.0.0", "@angular/core": "9.0.0", @@ -5528,16 +5984,18 @@ }, "node_modules/codelyzer/node_modules/@angular/compiler": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", "dev": true, - "license": "MIT", "peerDependencies": { "tslib": "^1.10.0" } }, "node_modules/codelyzer/node_modules/@angular/core": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", "dev": true, - "license": "MIT", "peerDependencies": { "rxjs": "^6.5.3", "tslib": "^1.10.0", @@ -5546,8 +6004,9 @@ }, "node_modules/codelyzer/node_modules/aria-query": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "ast-types-flow": "0.0.7", "commander": "^2.11.0" @@ -5555,21 +6014,24 @@ }, "node_modules/codelyzer/node_modules/axobject-query": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, - "license": "Apache-2.0", "dependencies": { "ast-types-flow": "0.0.7" } }, "node_modules/codelyzer/node_modules/commander": { "version": "2.20.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/codelyzer/node_modules/rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "tslib": "^1.9.0" }, @@ -5579,65 +6041,74 @@ }, "node_modules/codelyzer/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/codelyzer/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/codelyzer/node_modules/zone.js": { "version": "0.10.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true }, "node_modules/codemirror": { - "version": "5.65.5", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.5.tgz", - "integrity": "sha512-HNyhvGLnYz5c+kIsB9QKVitiZUevha3ovbIYaQiGzKo7ECSL/elWD9RXt3JgNr0NdnyqE9/Rc/7uLfkJQL638w==" + "version": "5.65.6", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.6.tgz", + "integrity": "sha512-zNihMSMoDxK9Gqv9oEyDT8oM51rcRrQ+IEo2zyS48gJByBq5Fj8XuNEguMra+MuIOuh6lkpnLUJeL70DoTt6yw==" }, "node_modules/color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/color-name": { "version": "1.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "license": "ISC", "bin": { "color-support": "bin.js" } }, "node_modules/colorette": { "version": "2.0.19", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true }, "node_modules/colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.1.90" } }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5647,34 +6118,39 @@ }, "node_modules/commander": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/common-tags": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/commondir": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true }, "node_modules/component-emitter": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "node_modules/compressible": { "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -5684,8 +6160,9 @@ }, "node_modules/compression": { "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -5701,34 +6178,39 @@ }, "node_modules/compression/node_modules/bytes": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true }, "node_modules/connect": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -5741,34 +6223,39 @@ }, "node_modules/connect-history-api-fallback": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -5778,6 +6265,8 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -5792,42 +6281,46 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/content-type": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/cookie": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true }, "node_modules/copy-anything": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, - "license": "MIT", "dependencies": { "is-what": "^3.14.1" }, @@ -5837,8 +6330,9 @@ }, "node_modules/copy-webpack-plugin": { "version": "10.2.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", + "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "glob-parent": "^6.0.1", @@ -5860,8 +6354,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/array-union": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -5871,8 +6366,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5882,8 +6378,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "12.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", + "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^3.0.1", "dir-glob": "^3.0.1", @@ -5901,8 +6398,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -5919,8 +6417,9 @@ }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, - "license": "MIT", "engines": { "node": ">=12" }, @@ -5929,11 +6428,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.23.1", + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", + "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", "dev": true, - "license": "MIT", "dependencies": { - "browserslist": "^4.20.4", + "browserslist": "^4.21.0", "semver": "7.0.0" }, "funding": { @@ -5943,20 +6443,23 @@ }, "node_modules/core-js-compat/node_modules/semver": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/core-util-is": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true }, "node_modules/cors": { "version": "2.8.5", - "license": "MIT", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -5967,8 +6470,9 @@ }, "node_modules/cosmiconfig": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -5982,8 +6486,9 @@ }, "node_modules/critters": { "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "chalk": "^4.1.0", "css-select": "^4.2.0", @@ -5995,8 +6500,9 @@ }, "node_modules/critters/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6009,8 +6515,9 @@ }, "node_modules/critters/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6024,8 +6531,9 @@ }, "node_modules/critters/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6035,26 +6543,30 @@ }, "node_modules/critters/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/critters/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/critters/node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/critters/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6064,8 +6576,9 @@ }, "node_modules/cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6077,8 +6590,9 @@ }, "node_modules/css": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.4", "source-map": "^0.6.1", @@ -6087,8 +6601,9 @@ }, "node_modules/css-blank-pseudo": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -6104,8 +6619,9 @@ }, "node_modules/css-has-pseudo": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -6121,8 +6637,9 @@ }, "node_modules/css-loader": { "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.7", @@ -6146,8 +6663,9 @@ }, "node_modules/css-prefers-color-scheme": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", "dev": true, - "license": "CC0-1.0", "bin": { "css-prefers-color-scheme": "dist/cli.cjs" }, @@ -6160,8 +6678,9 @@ }, "node_modules/css-select": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -6175,8 +6694,9 @@ }, "node_modules/css-selector-tokenizer": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "fastparse": "^1.1.2" @@ -6184,8 +6704,9 @@ }, "node_modules/css-what": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -6195,24 +6716,27 @@ }, "node_modules/css/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/cssauron": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", "dev": true, - "license": "MIT", "dependencies": { "through": "X.X.X" } }, "node_modules/cssdb": { "version": "6.6.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", + "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==", "dev": true, - "license": "CC0-1.0", "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" @@ -6220,8 +6744,9 @@ }, "node_modules/cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -6231,14 +6756,16 @@ }, "node_modules/custom-event": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true }, "node_modules/cypress": { - "version": "10.1.0", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.3.0.tgz", + "integrity": "sha512-txkQWKzvBVnWdCuKs5Xc08gjpO89W2Dom2wpZgT9zWZT5jXxqPIxqP/NC1YArtkpmp3fN5HW8aDjYBizHLUFvg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@cypress/request": "^2.88.10", "@cypress/xvfb": "^1.2.4", @@ -6288,17 +6815,13 @@ }, "engines": { "node": ">=12.0.0" - }, - "workspaces": { - "nohoist": [ - "@types/*" - ] } }, "node_modules/cypress-terminal-report": { - "version": "4.0.1", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-4.0.2.tgz", + "integrity": "sha512-sk7zBRZIh19U32pbOyv6GtlWPxE1C6l+mMAhnPAmsv619s7+O7/jZbI4YZfM2MyO50Om/qEq7W5rVP8yolihAA==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^3.0.0", "fs-extra": "^9.0.1", @@ -6312,8 +6835,9 @@ }, "node_modules/cypress-terminal-report/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6326,8 +6850,9 @@ }, "node_modules/cypress-terminal-report/node_modules/chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6338,8 +6863,9 @@ }, "node_modules/cypress-terminal-report/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6349,21 +6875,24 @@ }, "node_modules/cypress-terminal-report/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/cypress-terminal-report/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cypress-terminal-report/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6373,13 +6902,15 @@ }, "node_modules/cypress/node_modules/@types/node": { "version": "14.18.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", + "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==", + "dev": true }, "node_modules/cypress/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -6392,6 +6923,8 @@ }, "node_modules/cypress/node_modules/buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -6407,7 +6940,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -6415,8 +6947,9 @@ }, "node_modules/cypress/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6430,8 +6963,9 @@ }, "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6441,8 +6975,9 @@ }, "node_modules/cypress/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -6452,21 +6987,24 @@ }, "node_modules/cypress/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/cypress/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6479,13 +7017,15 @@ }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true }, "node_modules/dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" }, @@ -6495,29 +7035,33 @@ }, "node_modules/date-format": { "version": "4.0.11", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", + "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/dateformat": { "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true, - "license": "MIT", "engines": { "node": "*" } }, "node_modules/dayjs": { "version": "1.11.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==", + "dev": true }, "node_modules/debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -6532,15 +7076,17 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "engines": { "node": ">=0.10.0" } }, "node_modules/decamelize-keys": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", "dev": true, - "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -6551,29 +7097,33 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/deep-is": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, "node_modules/default-gateway": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" }, @@ -6583,8 +7133,9 @@ }, "node_modules/default-gateway/node_modules/execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -6605,8 +7156,9 @@ }, "node_modules/default-gateway/node_modules/get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -6616,32 +7168,36 @@ }, "node_modules/default-gateway/node_modules/human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/defaults": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", "dev": true, - "license": "MIT", "dependencies": { "clone": "^1.0.2" } }, "node_modules/define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/define-properties": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, - "license": "MIT", "dependencies": { "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" @@ -6655,8 +7211,9 @@ }, "node_modules/del": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", "dev": true, - "license": "MIT", "dependencies": { "globby": "^5.0.0", "is-path-cwd": "^1.0.0", @@ -6672,8 +7229,9 @@ }, "node_modules/del/node_modules/array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, - "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -6683,8 +7241,9 @@ }, "node_modules/del/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6692,8 +7251,9 @@ }, "node_modules/del/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6711,8 +7271,9 @@ }, "node_modules/del/node_modules/globby": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -6727,8 +7288,9 @@ }, "node_modules/del/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6738,8 +7300,9 @@ }, "node_modules/del/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6749,37 +7312,42 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/delegates": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dependency-graph": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -6787,30 +7355,35 @@ }, "node_modules/detect-node": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true }, "node_modules/di": { "version": "0.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true }, "node_modules/diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } }, "node_modules/dijkstrajs": { "version": "1.0.2", - "license": "MIT" + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" }, "node_modules/dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6820,13 +7393,15 @@ }, "node_modules/dns-equal": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true }, "node_modules/dns-packet": { "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, - "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, @@ -6836,8 +7411,9 @@ }, "node_modules/doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6847,8 +7423,9 @@ }, "node_modules/dom-serialize": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, - "license": "MIT", "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -6858,8 +7435,9 @@ }, "node_modules/dom-serializer": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -6871,19 +7449,21 @@ }, "node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -6896,8 +7476,9 @@ }, "node_modules/domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -6909,16 +7490,18 @@ }, "node_modules/dotenv": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=10" } }, "node_modules/ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, - "license": "MIT", "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -6926,21 +7509,24 @@ }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/ee-first": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true }, "node_modules/ejs": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -6952,38 +7538,44 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.160", - "dev": true, - "license": "ISC" + "version": "1.4.179", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.179.tgz", + "integrity": "sha512-1XeTb/U/8Xgh2YgPOqhakLYsvCcU4U7jUjTMbEnhIJoIWd/Qt3yC8y0cbG+fHzn4zUNF99Ey1xiPf20bwgLO3Q==", + "dev": true }, "node_modules/emoji-regex": { "version": "8.0.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/emojis-list": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/encode-utf8": { "version": "1.0.3", - "license": "MIT" + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, "node_modules/encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -6991,8 +7583,9 @@ }, "node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -7003,16 +7596,18 @@ }, "node_modules/end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, - "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/engine.io": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "dev": true, - "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -7031,16 +7626,18 @@ }, "node_modules/engine.io-parser": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/enhanced-resolve": { - "version": "5.9.3", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -7051,8 +7648,9 @@ }, "node_modules/enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" }, @@ -7062,34 +7660,39 @@ }, "node_modules/ent": { "version": "2.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true }, "node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/err-code": { "version": "2.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "prr": "~1.0.1" @@ -7100,35 +7703,40 @@ }, "node_modules/error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-module-lexer": { "version": "0.9.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true }, "node_modules/es6-promise": { "version": "4.2.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true }, "node_modules/es6-promisify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "dev": true, - "license": "MIT", "dependencies": { "es6-promise": "^4.0.3" } }, "node_modules/esbuild": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", + "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "bin": { "esbuild": "bin/esbuild" @@ -7159,13 +7767,46 @@ "esbuild-windows-arm64": "0.14.38" } }, - "node_modules/esbuild-darwin-64": { + "node_modules/esbuild-android-64": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", + "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", + "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", + "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -7174,10 +7815,235 @@ "node": ">=12" } }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", + "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", + "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", + "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", + "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", + "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", + "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", + "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", + "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", + "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", + "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", + "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", + "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", + "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", + "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild-wasm": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.38.tgz", + "integrity": "sha512-mObTw5/3+KIOTShVgk3fuEn+INnHgOSbWJuGkInEZTWpUOh/+TCSgRxl5cDon4OkoaLU5rWm7R7Dkl/mJv8SGw==", "dev": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7185,30 +8051,82 @@ "node": ">=12" } }, + "node_modules/esbuild-windows-32": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", + "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", + "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", + "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true }, "node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { - "version": "8.17.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint/eslintrc": "^1.3.0", "@humanwhocodes/config-array": "^0.9.2", @@ -7258,8 +8176,9 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -7270,8 +8189,9 @@ }, "node_modules/eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-visitor-keys": "^2.0.0" }, @@ -7287,24 +8207,27 @@ }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -7318,8 +8241,9 @@ }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -7332,13 +8256,15 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "2.0.1", - "dev": true, - "license": "Python-2.0" + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -7346,8 +8272,9 @@ }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7361,8 +8288,9 @@ }, "node_modules/eslint/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7372,13 +8300,15 @@ }, "node_modules/eslint/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -7388,8 +8318,9 @@ }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7400,16 +8331,18 @@ }, "node_modules/eslint/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -7418,9 +8351,10 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -7433,16 +8367,18 @@ }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/eslint/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -7452,13 +8388,15 @@ }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7468,8 +8406,9 @@ }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -7479,8 +8418,9 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7490,8 +8430,9 @@ }, "node_modules/espree": { "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.7.1", "acorn-jsx": "^5.3.2", @@ -7503,8 +8444,9 @@ }, "node_modules/esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -7515,8 +8457,9 @@ }, "node_modules/esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -7526,16 +8469,18 @@ }, "node_modules/esquery/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -7545,63 +8490,72 @@ }, "node_modules/esrecurse/node_modules/estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/eventemitter-asyncresource": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true }, "node_modules/eventemitter2": { - "version": "6.4.5", - "dev": true, - "license": "MIT" + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", + "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==", + "dev": true }, "node_modules/eventemitter3": { "version": "4.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, "node_modules/events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/execa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, - "license": "MIT", "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -7622,8 +8576,9 @@ }, "node_modules/execall": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, - "license": "MIT", "dependencies": { "clone-regexp": "^2.1.0" }, @@ -7633,8 +8588,9 @@ }, "node_modules/executable": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^2.2.0" }, @@ -7644,6 +8600,8 @@ }, "node_modules/exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -7651,8 +8609,9 @@ }, "node_modules/express": { "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -7692,29 +8651,33 @@ }, "node_modules/express/node_modules/array-flatten": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true }, "node_modules/express/node_modules/cookie": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7730,13 +8693,15 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/express/node_modules/qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -7749,6 +8714,8 @@ }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -7763,26 +8730,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/express/node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/extend": { "version": "3.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "node_modules/external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, - "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -7794,8 +8763,9 @@ }, "node_modules/external-editor/node_modules/tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -7805,8 +8775,9 @@ }, "node_modules/extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7824,21 +8795,24 @@ }, "node_modules/extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true, "engines": [ "node >=0.6.0" - ], - "license": "MIT" + ] }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7852,40 +8826,47 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true }, "node_modules/fast-sha256": { "version": "1.3.0", - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==" }, "node_modules/fastest-levenshtein": { "version": "1.0.12", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true }, "node_modules/fastparse": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true }, "node_modules/fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, - "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -7895,16 +8876,18 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, - "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7917,8 +8900,9 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -7928,20 +8912,23 @@ }, "node_modules/file-saver": { "version": "2.0.5", - "license": "MIT" + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/filelist": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } }, "node_modules/fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7951,8 +8938,9 @@ }, "node_modules/finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -7968,21 +8956,24 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/finalhandler/node_modules/on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -7992,8 +8983,9 @@ }, "node_modules/find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, - "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -8008,7 +9000,8 @@ }, "node_modules/find-up": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -8019,16 +9012,18 @@ }, "node_modules/flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" @@ -8038,12 +9033,15 @@ } }, "node_modules/flatted": { - "version": "3.2.5", - "dev": true, - "license": "ISC" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", + "dev": true }, "node_modules/follow-redirects": { "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true, "funding": [ { @@ -8051,7 +9049,6 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], - "license": "MIT", "engines": { "node": ">=4.0" }, @@ -8063,16 +9060,18 @@ }, "node_modules/forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, - "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -8084,16 +9083,18 @@ }, "node_modules/forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fraction.js": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true, - "license": "MIT", "engines": { "node": "*" }, @@ -8104,21 +9105,24 @@ }, "node_modules/fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true }, "node_modules/fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, - "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -8131,8 +9135,9 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -8142,18 +9147,22 @@ }, "node_modules/fs-monkey": { "version": "1.0.3", - "dev": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "license": "MIT", + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -8164,23 +9173,27 @@ }, "node_modules/fsu": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", + "dev": true }, "node_modules/function-bind": { "version": "1.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true }, "node_modules/gauge": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, - "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -8197,23 +9210,26 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "license": "ISC", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -8225,16 +9241,18 @@ }, "node_modules/get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/get-stdin": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8244,8 +9262,9 @@ }, "node_modules/get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, - "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -8258,24 +9277,27 @@ }, "node_modules/getos": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", "dev": true, - "license": "MIT", "dependencies": { "async": "^3.2.0" } }, "node_modules/getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0" } }, "node_modules/glob": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8293,8 +9315,9 @@ }, "node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -8304,13 +9327,15 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, "node_modules/global-dirs": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, - "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -8323,16 +9348,18 @@ }, "node_modules/global-dirs/node_modules/ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/global-modules": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -8342,8 +9369,9 @@ }, "node_modules/global-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -8355,13 +9383,15 @@ }, "node_modules/global-prefix/node_modules/ini": { "version": "1.3.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -8371,16 +9401,18 @@ }, "node_modules/globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -8398,13 +9430,15 @@ }, "node_modules/globjoin": { "version": "0.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true }, "node_modules/gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.5" }, @@ -8416,46 +9450,54 @@ } }, "node_modules/google-proto-files": { - "version": "2.5.2", - "license": "MIT", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-3.0.0.tgz", + "integrity": "sha512-YN2mHdmxnrMrQbC5jXmXZda0aQ90as7uMsUIxoqL6tydwz+7GjoQ0OsZ8kJmDXxXMZRgY5PFjqIvWKjEYyNGjQ==", "dependencies": { "protobufjs": "^6.8.0", "walkdir": "^0.4.0" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, "node_modules/google-protobuf": { "version": "3.20.1", - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz", + "integrity": "sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==" }, "node_modules/graceful-fs": { "version": "4.2.10", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "node_modules/grpc-web": { "version": "1.3.1", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.3.1.tgz", + "integrity": "sha512-VxyYEAGsatecAFY3xieRDzsuhm92yQBsJD7fd5Z3MY150hZWPwkrUWetzJ0QK5W0uym4+VedPQrei38wk0eIjQ==" }, "node_modules/handle-thing": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true }, "node_modules/har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true, - "license": "ISC", "engines": { "node": ">=4" } }, "node_modules/har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" @@ -8466,8 +9508,9 @@ }, "node_modules/har-validator/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -8481,21 +9524,24 @@ }, "node_modules/har-validator/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -8505,8 +9551,9 @@ }, "node_modules/has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -8516,24 +9563,27 @@ }, "node_modules/has-ansi/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, - "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.1" }, @@ -8543,8 +9593,9 @@ }, "node_modules/has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8554,13 +9605,15 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "node_modules/hdr-histogram-js": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dev": true, - "license": "BSD", "dependencies": { "@assemblyscript/loader": "^0.10.1", "base64-js": "^1.2.0", @@ -8569,13 +9622,15 @@ }, "node_modules/hdr-histogram-percentiles-obj": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true }, "node_modules/he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "license": "MIT", "peer": true, "bin": { "he": "bin/he" @@ -8583,8 +9638,9 @@ }, "node_modules/hosted-git-info": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^7.5.1" }, @@ -8594,8 +9650,9 @@ }, "node_modules/hpack.js": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -8605,8 +9662,9 @@ }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8619,26 +9677,30 @@ }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/html-entities": { "version": "2.3.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true }, "node_modules/html-escaper": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true }, "node_modules/html-tags": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -8648,8 +9710,9 @@ }, "node_modules/htmlparser2": { "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^1.3.1", "domhandler": "^2.3.0", @@ -8661,8 +9724,9 @@ }, "node_modules/htmlparser2/node_modules/dom-serializer": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, - "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -8670,40 +9734,45 @@ }, "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ], - "license": "BSD-2-Clause" + ] }, "node_modules/htmlparser2/node_modules/dom-serializer/node_modules/entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/htmlparser2/node_modules/domelementtype": { "version": "1.3.1", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true }, "node_modules/htmlparser2/node_modules/domhandler": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "domelementtype": "1" } }, "node_modules/htmlparser2/node_modules/domutils": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "0", "domelementtype": "1" @@ -8711,23 +9780,27 @@ }, "node_modules/htmlparser2/node_modules/entities": { "version": "1.1.2", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true }, "node_modules/http-cache-semantics": { "version": "4.1.0", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "node_modules/http-deceiver": { "version": "1.2.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true }, "node_modules/http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, - "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -8741,21 +9814,24 @@ }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/http-parser-js": { - "version": "0.5.6", - "dev": true, - "license": "MIT" + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true }, "node_modules/http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -8767,8 +9843,9 @@ }, "node_modules/http-proxy-agent": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -8780,8 +9857,9 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, - "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -8803,8 +9881,9 @@ }, "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -8814,8 +9893,9 @@ }, "node_modules/http-signature": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -8827,8 +9907,9 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -8839,24 +9920,27 @@ }, "node_modules/human-signals": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=8.12.0" } }, "node_modules/humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.0.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -8866,8 +9950,9 @@ }, "node_modules/icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -8877,6 +9962,8 @@ }, "node_modules/ieee754": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -8890,21 +9977,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "BSD-3-Clause" + ] }, "node_modules/ignore": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, - "license": "ISC", "dependencies": { "minimatch": "^5.0.1" }, @@ -8914,8 +10002,9 @@ }, "node_modules/image-size": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, - "license": "MIT", "optional": true, "bin": { "image-size": "bin/image-size.js" @@ -8926,18 +10015,21 @@ }, "node_modules/immediate": { "version": "3.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true }, "node_modules/immutable": { "version": "4.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -8951,45 +10043,51 @@ }, "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/import-lazy": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/infer-owner": { "version": "1.0.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "node_modules/inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, - "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -8997,21 +10095,24 @@ }, "node_modules/inherits": { "version": "2.0.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/ini": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", "dev": true, - "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/inquirer": { "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -9035,8 +10136,9 @@ }, "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9049,8 +10151,9 @@ }, "node_modules/inquirer/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9064,8 +10167,9 @@ }, "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9075,21 +10179,24 @@ }, "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/inquirer/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/inquirer/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9099,21 +10206,24 @@ }, "node_modules/ip": { "version": "1.1.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true }, "node_modules/ipaddr.js": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/is-alphabetical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9121,8 +10231,9 @@ }, "node_modules/is-alphanumerical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, - "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" @@ -9134,13 +10245,15 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -9150,6 +10263,8 @@ }, "node_modules/is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, "funding": [ { @@ -9165,15 +10280,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, - "license": "MIT", "dependencies": { "ci-info": "^3.2.0" }, @@ -9183,8 +10298,9 @@ }, "node_modules/is-core-module": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, - "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -9194,8 +10310,9 @@ }, "node_modules/is-decimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9203,8 +10320,9 @@ }, "node_modules/is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -9217,23 +10335,26 @@ }, "node_modules/is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "engines": { "node": ">=8" } }, "node_modules/is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -9243,8 +10364,9 @@ }, "node_modules/is-hexadecimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -9252,8 +10374,9 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, - "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -9267,37 +10390,42 @@ }, "node_modules/is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-lambda": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true }, "node_modules/is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-path-cwd": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-path-in-cwd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, - "license": "MIT", "dependencies": { "is-path-inside": "^1.0.0" }, @@ -9307,8 +10435,9 @@ }, "node_modules/is-path-in-cwd/node_modules/is-path-inside": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "dev": true, - "license": "MIT", "dependencies": { "path-is-inside": "^1.0.1" }, @@ -9318,24 +10447,27 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -9345,16 +10477,18 @@ }, "node_modules/is-regexp": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -9364,13 +10498,15 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -9380,13 +10516,15 @@ }, "node_modules/is-what": { "version": "3.14.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true }, "node_modules/is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -9396,13 +10534,15 @@ }, "node_modules/isarray": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "node_modules/isbinaryfile": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -9412,34 +10552,39 @@ }, "node_modules/isexe": { "version": "2.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/isstream": { "version": "0.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-instrument": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -9453,16 +10598,18 @@ }, "node_modules/istanbul-lib-instrument/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-report": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "make-dir": "^3.0.0", @@ -9474,16 +10621,18 @@ }, "node_modules/istanbul-lib-report/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9493,8 +10642,9 @@ }, "node_modules/istanbul-lib-source-maps": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.5", @@ -9508,8 +10658,9 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9517,8 +10668,9 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9536,16 +10688,18 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-source-maps/node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -9556,8 +10710,9 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9567,16 +10722,18 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/istanbul-lib-source-maps/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -9586,24 +10743,27 @@ }, "node_modules/istanbul-lib-source-maps/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/istanbul-lib-source-maps/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/istanbul-reports": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -9614,8 +10774,9 @@ }, "node_modules/jake": { "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, - "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -9631,8 +10792,9 @@ }, "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -9645,8 +10807,9 @@ }, "node_modules/jake/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9654,8 +10817,9 @@ }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9669,8 +10833,9 @@ }, "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -9680,21 +10845,24 @@ }, "node_modules/jake/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jake/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9704,8 +10872,9 @@ }, "node_modules/jake/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9715,8 +10884,9 @@ }, "node_modules/jasmine": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", "dev": true, - "license": "MIT", "dependencies": { "exit": "^0.1.2", "glob": "^7.0.6", @@ -9727,22 +10897,25 @@ } }, "node_modules/jasmine-core": { - "version": "4.1.1", - "dev": true, - "license": "MIT" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", + "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", + "dev": true }, "node_modules/jasmine-spec-reporter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "colors": "1.4.0" } }, "node_modules/jasmine/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -9750,8 +10923,9 @@ }, "node_modules/jasmine/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -9769,13 +10943,15 @@ }, "node_modules/jasmine/node_modules/jasmine-core": { "version": "2.8.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", + "dev": true }, "node_modules/jasmine/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9785,16 +10961,18 @@ }, "node_modules/jasminewd2": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.9.x" } }, "node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9806,16 +10984,18 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9828,13 +11008,15 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -9845,13 +11027,15 @@ }, "node_modules/jsbn": { "version": "0.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true }, "node_modules/jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true, - "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -9861,33 +11045,39 @@ }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "node_modules/json-schema": { "version": "0.4.0", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true }, "node_modules/json5": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true, - "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -9897,13 +11087,15 @@ }, "node_modules/jsonc-parser": { "version": "3.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true }, "node_modules/jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -9913,16 +11105,18 @@ }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" - ], - "license": "MIT" + ] }, "node_modules/jsonwebtoken": { "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dev": true, - "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -9942,19 +11136,21 @@ }, "node_modules/jsonwebtoken/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/jsprim": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -9964,8 +11160,9 @@ }, "node_modules/jszip": { "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz", + "integrity": "sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q==", "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -9975,8 +11172,9 @@ }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -9989,16 +11187,18 @@ }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/jwa": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, - "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -10007,17 +11207,19 @@ }, "node_modules/jws": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, - "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, "node_modules/karma": { - "version": "6.3.20", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", "dev": true, - "license": "MIT", "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -10053,16 +11255,18 @@ }, "node_modules/karma-chrome-launcher": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, - "license": "MIT", "dependencies": { "which": "^1.2.1" } }, "node_modules/karma-chrome-launcher/node_modules/which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -10072,8 +11276,9 @@ }, "node_modules/karma-coverage-istanbul-reporter": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", "dev": true, - "license": "MIT", "dependencies": { "istanbul-lib-coverage": "^3.0.0", "istanbul-lib-report": "^3.0.0", @@ -10087,8 +11292,9 @@ }, "node_modules/karma-coverage-istanbul-reporter/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10096,8 +11302,9 @@ }, "node_modules/karma-coverage-istanbul-reporter/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10106,9 +11313,10 @@ } }, "node_modules/karma-jasmine": { - "version": "5.0.1", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, - "license": "MIT", "dependencies": { "jasmine-core": "^4.1.0" }, @@ -10121,8 +11329,9 @@ }, "node_modules/karma-jasmine-html-reporter": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", + "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", "dev": true, - "license": "MIT", "peerDependencies": { "jasmine-core": "^4.0.0", "karma": "^6.0.0", @@ -10131,16 +11340,18 @@ }, "node_modules/karma-source-map-support": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dev": true, - "license": "MIT", "dependencies": { "source-map-support": "^0.5.5" } }, "node_modules/karma/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10148,8 +11359,9 @@ }, "node_modules/karma/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10167,8 +11379,9 @@ }, "node_modules/karma/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10178,8 +11391,9 @@ }, "node_modules/karma/node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -10189,16 +11403,18 @@ }, "node_modules/karma/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/karma/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -10214,45 +11430,51 @@ }, "node_modules/karma/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/klona": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/known-css-properties": { "version": "0.21.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", + "dev": true }, "node_modules/lazy-ass": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true, - "license": "MIT", "engines": { "node": "> 0.8" } }, "node_modules/less": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", "dev": true, - "license": "Apache-2.0", "dependencies": { "copy-anything": "^2.0.1", "parse-node-version": "^1.0.1", @@ -10276,8 +11498,9 @@ }, "node_modules/less-loader": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", + "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", "dev": true, - "license": "MIT", "dependencies": { "klona": "^2.0.4" }, @@ -10295,8 +11518,9 @@ }, "node_modules/less/node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "pify": "^4.0.1", @@ -10308,8 +11532,9 @@ }, "node_modules/less/node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "optional": true, "bin": { "mime": "cli.js" @@ -10320,8 +11545,9 @@ }, "node_modules/less/node_modules/pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "license": "MIT", "optional": true, "engines": { "node": ">=6" @@ -10329,8 +11555,9 @@ }, "node_modules/less/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "optional": true, "bin": { "semver": "bin/semver" @@ -10338,8 +11565,9 @@ }, "node_modules/less/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=0.10.0" @@ -10347,8 +11575,9 @@ }, "node_modules/levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10358,13 +11587,15 @@ } }, "node_modules/libphonenumber-js": { - "version": "1.10.6", - "license": "MIT" + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.7.tgz", + "integrity": "sha512-jZXLCCWMe1b/HXkjiLeYt2JsytZMcqH26jLFIdzFDFF0xvSUWrYKyvPlyPG+XJzEyKUFbcZxLdWGMwQsWaHDxQ==" }, "node_modules/license-webpack-plugin": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "dev": true, - "license": "ISC", "dependencies": { "webpack-sources": "^3.0.0" }, @@ -10379,21 +11610,24 @@ }, "node_modules/lie": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, - "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/lines-and-columns": { "version": "1.2.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true }, "node_modules/listr2": { "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, - "license": "MIT", "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -10418,23 +11652,26 @@ }, "node_modules/loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 12.13.0" } }, "node_modules/locate-path": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { "p-locate": "^4.1.0" }, @@ -10444,87 +11681,104 @@ }, "node_modules/lodash": { "version": "4.17.21", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true }, "node_modules/lodash.includes": { "version": "4.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true }, "node_modules/lodash.isempty": { "version": "4.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", + "dev": true }, "node_modules/lodash.isfunction": { "version": "3.0.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "dev": true }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true }, "node_modules/lodash.isobject": { "version": "3.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", + "dev": true }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, "node_modules/lodash.isstring": { "version": "4.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.once": { "version": "4.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true }, "node_modules/lodash.sortby": { "version": "4.7.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true }, "node_modules/lodash.truncate": { "version": "4.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true }, "node_modules/log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -10538,8 +11792,9 @@ }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10552,8 +11807,9 @@ }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10567,8 +11823,9 @@ }, "node_modules/log-symbols/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10578,21 +11835,24 @@ }, "node_modules/log-symbols/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-symbols/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -10602,8 +11862,9 @@ }, "node_modules/log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -10619,8 +11880,9 @@ }, "node_modules/log-update/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10633,8 +11895,9 @@ }, "node_modules/log-update/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -10644,13 +11907,15 @@ }, "node_modules/log-update/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -10665,8 +11930,9 @@ }, "node_modules/log-update/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -10678,8 +11944,9 @@ }, "node_modules/log4js": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", + "integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==", "dev": true, - "license": "Apache-2.0", "dependencies": { "date-format": "^4.0.10", "debug": "^4.3.4", @@ -10693,12 +11960,14 @@ }, "node_modules/long": { "version": "4.0.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/longest-streak": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10706,8 +11975,9 @@ }, "node_modules/loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, - "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -10716,17 +11986,19 @@ } }, "node_modules/lru-cache": { - "version": "7.10.1", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/magic-string": { "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", "dev": true, - "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" }, @@ -10736,8 +12008,9 @@ }, "node_modules/make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -10750,16 +12023,18 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/make-fetch-happen": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, - "license": "ISC", "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -10784,8 +12059,9 @@ }, "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, - "license": "ISC", "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -10793,8 +12069,9 @@ }, "node_modules/make-fetch-happen/node_modules/@npmcli/move-file": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, - "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -10805,8 +12082,9 @@ }, "node_modules/make-fetch-happen/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -10814,8 +12092,9 @@ }, "node_modules/make-fetch-happen/node_modules/cacache": { "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -10842,8 +12121,9 @@ }, "node_modules/make-fetch-happen/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10861,8 +12141,9 @@ }, "node_modules/make-fetch-happen/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10872,8 +12153,9 @@ }, "node_modules/make-fetch-happen/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10883,8 +12165,9 @@ }, "node_modules/make-fetch-happen/node_modules/ssri": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -10894,8 +12177,9 @@ }, "node_modules/map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -10905,16 +12189,19 @@ }, "node_modules/material-colors": { "version": "1.2.6", - "license": "ISC" + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" }, "node_modules/material-design-icons-iconfont": { "version": "6.7.0", - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.7.0.tgz", + "integrity": "sha512-lSj71DgVv20kO0kGbs42icDzbRot61gEDBLQACzkUuznRQBUYmbxzEkGU6dNBb5fRWHMaScYlAXX96HQ4/cJWA==" }, "node_modules/mathml-tag-names": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10922,8 +12209,9 @@ }, "node_modules/mdast-util-from-markdown": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/mdast": "^3.0.0", "mdast-util-to-string": "^2.0.0", @@ -10938,8 +12226,9 @@ }, "node_modules/mdast-util-to-markdown": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "longest-streak": "^2.0.0", @@ -10955,8 +12244,9 @@ }, "node_modules/mdast-util-to-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -10964,18 +12254,20 @@ }, "node_modules/media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { - "version": "3.4.4", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", "dev": true, - "license": "Unlicense", "dependencies": { - "fs-monkey": "1.0.3" + "fs-monkey": "^1.0.3" }, "engines": { "node": ">= 4.0.0" @@ -10983,8 +12275,9 @@ }, "node_modules/meow": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -11008,8 +12301,9 @@ }, "node_modules/meow/node_modules/hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -11019,8 +12313,9 @@ }, "node_modules/meow/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11030,8 +12325,9 @@ }, "node_modules/meow/node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -11044,8 +12340,9 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -11055,40 +12352,47 @@ }, "node_modules/meow/node_modules/yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true }, "node_modules/merge-stream": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromark": { "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "funding": [ { @@ -11100,7 +12404,6 @@ "url": "https://opencollective.com/unified" } ], - "license": "MIT", "dependencies": { "debug": "^4.0.0", "parse-entities": "^2.0.0" @@ -11108,8 +12411,9 @@ }, "node_modules/micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -11120,8 +12424,9 @@ }, "node_modules/mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -11131,16 +12436,18 @@ }, "node_modules/mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -11150,24 +12457,27 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mini-css-extract-plugin": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", + "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", "dev": true, - "license": "MIT", "dependencies": { "schema-utils": "^4.0.0" }, @@ -11184,8 +12494,9 @@ }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -11202,13 +12513,15 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, "node_modules/minimatch": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11218,13 +12531,15 @@ }, "node_modules/minimist": { "version": "1.2.6", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, "node_modules/minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, - "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -11235,9 +12550,10 @@ } }, "node_modules/minipass": { - "version": "3.1.6", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11247,8 +12563,9 @@ }, "node_modules/minipass-collect": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11258,8 +12575,9 @@ }, "node_modules/minipass-fetch": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -11274,8 +12592,9 @@ }, "node_modules/minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11285,8 +12604,9 @@ }, "node_modules/minipass-json-stream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, - "license": "MIT", "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" @@ -11294,8 +12614,9 @@ }, "node_modules/minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11305,8 +12626,9 @@ }, "node_modules/minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11316,8 +12638,9 @@ }, "node_modules/minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -11328,8 +12651,9 @@ }, "node_modules/mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, - "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -11339,8 +12663,9 @@ }, "node_modules/mocha": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", @@ -11380,14 +12705,16 @@ }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "license": "Python-2.0", "peer": true }, "node_modules/mocha/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -11396,8 +12723,9 @@ }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -11408,8 +12736,9 @@ }, "node_modules/mocha/node_modules/find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "locate-path": "^6.0.0", @@ -11424,8 +12753,9 @@ }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -11444,8 +12774,9 @@ }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -11456,8 +12787,9 @@ }, "node_modules/mocha/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -11465,8 +12797,9 @@ }, "node_modules/mocha/node_modules/js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "argparse": "^2.0.1" @@ -11477,8 +12810,9 @@ }, "node_modules/mocha/node_modules/locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "p-locate": "^5.0.0" @@ -11492,14 +12826,16 @@ }, "node_modules/mocha/node_modules/ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/mocha/node_modules/p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "yocto-queue": "^0.1.0" @@ -11513,8 +12849,9 @@ }, "node_modules/mocha/node_modules/p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "p-limit": "^3.0.2" @@ -11528,8 +12865,9 @@ }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "has-flag": "^4.0.0" @@ -11543,8 +12881,9 @@ }, "node_modules/mocha/node_modules/yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "cliui": "^7.0.2", @@ -11561,8 +12900,9 @@ }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "license": "ISC", "peer": true, "engines": { "node": ">=10" @@ -11570,8 +12910,9 @@ }, "node_modules/mochawesome": { "version": "7.1.3", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", + "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "diff": "^5.0.0", @@ -11590,8 +12931,9 @@ }, "node_modules/mochawesome-report-generator": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", + "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", "dev": true, - "license": "MIT", "dependencies": { "chalk": "^4.1.2", "dateformat": "^4.5.1", @@ -11612,8 +12954,9 @@ }, "node_modules/mochawesome-report-generator/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11626,8 +12969,9 @@ }, "node_modules/mochawesome-report-generator/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11641,8 +12985,9 @@ }, "node_modules/mochawesome-report-generator/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11652,13 +12997,15 @@ }, "node_modules/mochawesome-report-generator/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/mochawesome-report-generator/node_modules/fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -11670,16 +13017,18 @@ }, "node_modules/mochawesome-report-generator/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mochawesome-report-generator/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11689,8 +13038,9 @@ }, "node_modules/mochawesome/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -11703,8 +13053,9 @@ }, "node_modules/mochawesome/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11718,8 +13069,9 @@ }, "node_modules/mochawesome/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -11729,21 +13081,24 @@ }, "node_modules/mochawesome/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/mochawesome/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/mochawesome/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11753,20 +13108,23 @@ }, "node_modules/moment": { "version": "2.29.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", "engines": { "node": "*" } }, "node_modules/ms": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, "node_modules/multicast-dns": { "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, - "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" @@ -11777,13 +13135,15 @@ }, "node_modules/mute-stream": { "version": "0.0.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, "node_modules/nanoid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11793,13 +13153,15 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true }, "node_modules/needle": { "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "debug": "^3.2.6", @@ -11815,8 +13177,9 @@ }, "node_modules/needle/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "optional": true, "dependencies": { "ms": "^2.1.1" @@ -11824,20 +13187,23 @@ }, "node_modules/negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true }, "node_modules/ng-qrcode": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-7.0.0.tgz", + "integrity": "sha512-Mx7nf8rtGMVYxGe2qfy8/JNiCnxKD7uFsqpP2Hm5eJSQrOEapQl9FR0yuK0I4MMQorJ7s8mZZDxmszQiH8R2Kg==", "dependencies": { "qrcode": "^1.5.0", "tslib": "^2.4.0" @@ -11849,7 +13215,8 @@ }, "node_modules/ngx-color": { "version": "7.3.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-7.3.3.tgz", + "integrity": "sha512-RyMIFMC5/aYYD/jkfStOUjr3gQfTGhgiiMxuZEfxt2o4GYmb3C/06C1o0S6Mj9qHAcKlG6soioq2MzdhtIswHw==", "dependencies": { "@ctrl/tinycolor": "^3.4.0", "material-colors": "^1.2.6", @@ -11862,7 +13229,8 @@ }, "node_modules/ngx-quicklink": { "version": "0.2.7", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ngx-quicklink/-/ngx-quicklink-0.2.7.tgz", + "integrity": "sha512-5ZSUCu79dTqLNqDTsXDzofaSjB1ddOxfSMUVR4gmg0mDI2M/6G/ASgs9tVM2LoR8on3wp2ExLGHOHvzg7qWkRA==", "dependencies": { "tslib": "^2.0.0" }, @@ -11873,9 +13241,10 @@ }, "node_modules/nice-napi": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "dev": true, "hasInstallScript": true, - "license": "MIT", "optional": true, "os": [ "!win32" @@ -11887,21 +13256,24 @@ }, "node_modules/node-addon-api": { "version": "3.2.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true }, "node_modules/node-forge": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-gyp": { "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, - "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -11922,9 +13294,10 @@ } }, "node_modules/node-gyp-build": { - "version": "4.4.0", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "dev": true, - "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -11933,8 +13306,9 @@ }, "node_modules/node-gyp/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11942,8 +13316,9 @@ }, "node_modules/node-gyp/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11961,8 +13336,9 @@ }, "node_modules/node-gyp/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11972,13 +13348,15 @@ }, "node_modules/node-releases": { "version": "2.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true }, "node_modules/nopt": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, - "license": "ISC", "dependencies": { "abbrev": "1" }, @@ -11991,8 +13369,9 @@ }, "node_modules/normalize-package-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^5.0.0", "is-core-module": "^2.8.1", @@ -12005,37 +13384,42 @@ }, "node_modules/normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-range": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-selector": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", + "dev": true }, "node_modules/npm-bundled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, - "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^1.0.1" } }, "node_modules/npm-install-checks": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -12045,13 +13429,15 @@ }, "node_modules/npm-normalize-package-bin": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "node_modules/npm-package-arg": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", + "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", "dev": true, - "license": "ISC", "dependencies": { "hosted-git-info": "^5.0.0", "semver": "^7.3.5", @@ -12062,9 +13448,10 @@ } }, "node_modules/npm-packlist": { - "version": "5.1.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", @@ -12080,8 +13467,9 @@ }, "node_modules/npm-pick-manifest": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, - "license": "ISC", "dependencies": { "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^1.0.1", @@ -12094,8 +13482,9 @@ }, "node_modules/npm-registry-fetch": { "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", "dev": true, - "license": "ISC", "dependencies": { "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", @@ -12111,16 +13500,18 @@ }, "node_modules/npm-registry-fetch/node_modules/@tootallnate/once": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/npm-registry-fetch/node_modules/cacache": { "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -12147,8 +13538,9 @@ }, "node_modules/npm-registry-fetch/node_modules/http-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, - "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -12159,9 +13551,10 @@ } }, "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "10.1.7", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", "dev": true, - "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -12186,8 +13579,9 @@ }, "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, - "license": "MIT", "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -12202,8 +13596,9 @@ }, "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -12215,8 +13610,9 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -12226,8 +13622,9 @@ }, "node_modules/npmlog": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, - "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -12240,8 +13637,9 @@ }, "node_modules/nth-check": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -12251,13 +13649,15 @@ }, "node_modules/num2fraction": { "version": "1.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true }, "node_modules/nx": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-13.1.3.tgz", + "integrity": "sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw==", "dev": true, - "license": "MIT", "dependencies": { "@nrwl/cli": "*" }, @@ -12267,39 +13667,44 @@ }, "node_modules/oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/object-assign": { "version": "4.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true, - "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", @@ -12315,13 +13720,15 @@ }, "node_modules/obuf": { "version": "1.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true }, "node_modules/on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, - "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -12331,24 +13738,27 @@ }, "node_modules/on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -12361,8 +13771,9 @@ }, "node_modules/open": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, - "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -12377,16 +13788,18 @@ }, "node_modules/opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, - "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -12401,8 +13814,9 @@ }, "node_modules/ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -12423,8 +13837,9 @@ }, "node_modules/ora/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -12437,8 +13852,9 @@ }, "node_modules/ora/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12452,8 +13868,9 @@ }, "node_modules/ora/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12463,21 +13880,24 @@ }, "node_modules/ora/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/ora/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ora/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -12487,20 +13907,23 @@ }, "node_modules/os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ospath": { "version": "1.2.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true }, "node_modules/p-limit": { "version": "2.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { "p-try": "^2.0.0" }, @@ -12513,7 +13936,8 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { "p-limit": "^2.2.0" }, @@ -12523,8 +13947,9 @@ }, "node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, - "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -12537,8 +13962,9 @@ }, "node_modules/p-retry": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" @@ -12549,23 +13975,26 @@ }, "node_modules/p-retry/node_modules/retry": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/p-try": { "version": "2.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "engines": { "node": ">=6" } }, "node_modules/pacote": { "version": "13.3.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.3.0.tgz", + "integrity": "sha512-auhJAUlfC2TALo6I0s1vFoPvVFgWGx+uz/PnIojTTgkGwlK3Np8sGJ0ghfFhiuzJXTZoTycMLk8uLskdntPbDw==", "dev": true, - "license": "ISC", "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", @@ -12598,13 +14027,15 @@ }, "node_modules/pako": { "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12614,8 +14045,9 @@ }, "node_modules/parse-entities": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, - "license": "MIT", "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", @@ -12631,8 +14063,9 @@ }, "node_modules/parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -12648,21 +14081,24 @@ }, "node_modules/parse-node-version": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/parse5": { "version": "5.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "optional": true }, "node_modules/parse5-html-rewriting-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", "dev": true, - "license": "MIT", "dependencies": { "parse5": "^6.0.1", "parse5-sax-parser": "^6.0.1" @@ -12670,108 +14106,125 @@ }, "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, - "license": "MIT", "dependencies": { "parse5": "^6.0.1" } }, "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parse5-sax-parser": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", "dev": true, - "license": "MIT", "dependencies": { "parse5": "^6.0.1" } }, "node_modules/parse5-sax-parser/node_modules/parse5": { "version": "6.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "node_modules/parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-exists": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-is-inside": { "version": "1.0.2", - "dev": true, - "license": "(WTFPL OR MIT)" + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true }, "node_modules/path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "node_modules/path-to-regexp": { "version": "0.1.7", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true }, "node_modules/path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pend": { "version": "1.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true }, "node_modules/performance-now": { "version": "2.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true }, "node_modules/picocolors": { "version": "1.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8.6" }, @@ -12781,24 +14234,27 @@ }, "node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, - "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -12808,8 +14264,9 @@ }, "node_modules/piscina": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "dev": true, - "license": "MIT", "dependencies": { "eventemitter-asyncresource": "^1.0.0", "hdr-histogram-js": "^2.0.1", @@ -12821,8 +14278,9 @@ }, "node_modules/pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -12832,13 +14290,16 @@ }, "node_modules/pngjs": { "version": "5.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", "engines": { "node": ">=10.13.0" } }, "node_modules/postcss": { "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", "dev": true, "funding": [ { @@ -12850,7 +14311,6 @@ "url": "https://tidelift.com/funding/github/npm/postcss" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.3", "picocolors": "^1.0.0", @@ -12862,8 +14322,9 @@ }, "node_modules/postcss-attribute-case-insensitive": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", + "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -12880,8 +14341,9 @@ }, "node_modules/postcss-clamp": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12894,8 +14356,9 @@ }, "node_modules/postcss-color-functional-notation": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12912,8 +14375,9 @@ }, "node_modules/postcss-color-hex-alpha": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12930,8 +14394,9 @@ }, "node_modules/postcss-color-rebeccapurple": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz", + "integrity": "sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12948,8 +14413,9 @@ }, "node_modules/postcss-custom-media": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12966,8 +14432,9 @@ }, "node_modules/postcss-custom-properties": { "version": "12.1.8", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz", + "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -12984,8 +14451,9 @@ }, "node_modules/postcss-custom-selectors": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", "dev": true, - "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -13002,8 +14470,9 @@ }, "node_modules/postcss-dir-pseudo-class": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -13016,8 +14485,9 @@ }, "node_modules/postcss-double-position-gradients": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -13031,8 +14501,9 @@ }, "node_modules/postcss-env-function": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13045,8 +14516,9 @@ }, "node_modules/postcss-focus-visible": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -13059,8 +14531,9 @@ }, "node_modules/postcss-focus-within": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-selector-parser": "^6.0.9" }, @@ -13073,16 +14546,18 @@ }, "node_modules/postcss-font-variant": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true, - "license": "MIT", "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-gap-properties": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", "dev": true, - "license": "CC0-1.0", "engines": { "node": "^12 || ^14 || >=16" }, @@ -13092,8 +14567,9 @@ }, "node_modules/postcss-html": { "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", "dev": true, - "license": "MIT", "dependencies": { "htmlparser2": "^3.10.0" }, @@ -13104,8 +14580,9 @@ }, "node_modules/postcss-image-set-function": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13118,8 +14595,9 @@ }, "node_modules/postcss-import": { "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", "dev": true, - "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -13134,16 +14612,18 @@ }, "node_modules/postcss-initial": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "dev": true, - "license": "MIT", "peerDependencies": { "postcss": "^8.0.0" } }, "node_modules/postcss-lab-function": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", "postcss-value-parser": "^4.2.0" @@ -13161,8 +14641,9 @@ }, "node_modules/postcss-less": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", "dev": true, - "license": "MIT", "dependencies": { "postcss": "^7.0.14" }, @@ -13172,13 +14653,15 @@ }, "node_modules/postcss-less/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/postcss-less/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -13193,16 +14676,18 @@ }, "node_modules/postcss-less/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/postcss-loader": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, - "license": "MIT", "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -13222,8 +14707,9 @@ }, "node_modules/postcss-logical": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "dev": true, - "license": "CC0-1.0", "engines": { "node": "^12 || ^14 || >=16" }, @@ -13233,8 +14719,9 @@ }, "node_modules/postcss-media-minmax": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -13244,13 +14731,15 @@ }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true }, "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" }, @@ -13260,8 +14749,9 @@ }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, - "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -13276,8 +14766,9 @@ }, "node_modules/postcss-modules-scope": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, - "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -13290,8 +14781,9 @@ }, "node_modules/postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" }, @@ -13303,9 +14795,10 @@ } }, "node_modules/postcss-nesting": { - "version": "10.1.8", + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz", + "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/selector-specificity": "^2.0.0", "postcss-selector-parser": "^6.0.10" @@ -13318,11 +14811,13 @@ "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-opacity-percentage": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", "dev": true, "funding": [ { @@ -13334,15 +14829,15 @@ "url": "https://liberapay.com/mrcgrtz" } ], - "license": "MIT", "engines": { "node": "^12 || ^14 || >=16" } }, "node_modules/postcss-overflow-shorthand": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", "dev": true, - "license": "CC0-1.0", "engines": { "node": "^12 || ^14 || >=16" }, @@ -13352,16 +14847,18 @@ }, "node_modules/postcss-page-break": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "dev": true, - "license": "MIT", "peerDependencies": { "postcss": "^8" } }, "node_modules/postcss-place": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -13374,8 +14871,9 @@ }, "node_modules/postcss-preset-env": { "version": "7.5.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", + "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", "dev": true, - "license": "CC0-1.0", "dependencies": { "@csstools/postcss-color-function": "^1.1.0", "@csstools/postcss-font-format-keywords": "^1.0.0", @@ -13435,9 +14933,10 @@ } }, "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.4", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.5.tgz", + "integrity": "sha512-nSGKGScwFTaaV8Cyi27W9FegX3l3b7tmNxujxmykI/j3++cBAiq8fTUAU3ZK0s2aneN2T8cTUvKdNedzp3JIEA==", "dev": true, - "license": "CC0-1.0", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -13449,26 +14948,29 @@ "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.4" + "postcss": "^8.2" } }, "node_modules/postcss-replace-overflow-wrap": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "dev": true, - "license": "MIT", "peerDependencies": { "postcss": "^8.0.3" } }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true }, "node_modules/postcss-safe-parser": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, - "license": "MIT", "dependencies": { "postcss": "^7.0.26" }, @@ -13478,13 +14980,15 @@ }, "node_modules/postcss-safe-parser/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/postcss-safe-parser/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -13499,16 +15003,18 @@ }, "node_modules/postcss-safe-parser/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/postcss-sass": { "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, - "license": "MIT", "dependencies": { "gonzales-pe": "^4.3.0", "postcss": "^7.0.21" @@ -13516,13 +15022,15 @@ }, "node_modules/postcss-sass/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/postcss-sass/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -13537,16 +15045,18 @@ }, "node_modules/postcss-sass/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/postcss-scss": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", "dev": true, - "license": "MIT", "dependencies": { "postcss": "^7.0.6" }, @@ -13556,13 +15066,15 @@ }, "node_modules/postcss-scss/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/postcss-scss/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -13577,16 +15089,18 @@ }, "node_modules/postcss-scss/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/postcss-selector-not": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" }, @@ -13596,8 +15110,9 @@ }, "node_modules/postcss-selector-parser": { "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, - "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13608,29 +15123,33 @@ }, "node_modules/postcss-syntax": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", "dev": true, - "license": "MIT", "peerDependencies": { "postcss": ">=5.0.0" } }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true }, "node_modules/prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -13643,8 +15162,9 @@ }, "node_modules/pretty-bytes": { "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" }, @@ -13654,26 +15174,30 @@ }, "node_modules/proc-log": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true, - "license": "ISC", "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true }, "node_modules/promise-inflight": { "version": "1.0.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, - "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -13684,8 +15208,9 @@ }, "node_modules/prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, - "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -13694,8 +15219,9 @@ }, "node_modules/protobufjs": { "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "hasInstallScript": true, - "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -13718,8 +15244,9 @@ }, "node_modules/protractor": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", "dev": true, - "license": "MIT", "dependencies": { "@types/q": "^0.0.32", "@types/selenium-webdriver": "^3.0.0", @@ -13747,24 +15274,27 @@ }, "node_modules/protractor/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/protractor/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/protractor/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13772,8 +15302,9 @@ }, "node_modules/protractor/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -13787,8 +15318,9 @@ }, "node_modules/protractor/node_modules/cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -13797,16 +15329,18 @@ }, "node_modules/protractor/node_modules/cliui/node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/protractor/node_modules/cliui/node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13816,8 +15350,9 @@ }, "node_modules/protractor/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -13827,13 +15362,15 @@ }, "node_modules/protractor/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/protractor/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -13851,8 +15388,9 @@ }, "node_modules/protractor/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13862,24 +15400,27 @@ }, "node_modules/protractor/node_modules/source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/protractor/node_modules/source-map-support": { "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, - "license": "MIT", "dependencies": { "source-map": "^0.5.6" } }, "node_modules/protractor/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -13889,16 +15430,18 @@ }, "node_modules/protractor/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/protractor/node_modules/wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -13910,16 +15453,18 @@ }, "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/protractor/node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -13932,8 +15477,9 @@ }, "node_modules/protractor/node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -13943,13 +15489,15 @@ }, "node_modules/protractor/node_modules/y18n": { "version": "4.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/protractor/node_modules/yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -13969,8 +15517,9 @@ }, "node_modules/protractor/node_modules/yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, - "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -13981,8 +15530,9 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, - "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -13993,32 +15543,37 @@ }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/proxy-from-env": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true }, "node_modules/prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, - "license": "MIT", "optional": true }, "node_modules/psl": { - "version": "1.8.0", - "dev": true, - "license": "MIT" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, - "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -14026,16 +15581,18 @@ }, "node_modules/punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/q": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -14043,15 +15600,17 @@ }, "node_modules/qjobs": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.9" } }, "node_modules/qrcode": { "version": "1.5.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", "dependencies": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", @@ -14067,7 +15626,8 @@ }, "node_modules/qrcode/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -14080,7 +15640,8 @@ }, "node_modules/qrcode/node_modules/cliui": { "version": "6.0.0", - "license": "ISC", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -14089,7 +15650,8 @@ }, "node_modules/qrcode/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -14099,11 +15661,13 @@ }, "node_modules/qrcode/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/qrcode/node_modules/wrap-ansi": { "version": "6.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14115,11 +15679,13 @@ }, "node_modules/qrcode/node_modules/y18n": { "version": "4.0.3", - "license": "ISC" + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "node_modules/qrcode/node_modules/yargs": { "version": "15.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -14139,7 +15705,8 @@ }, "node_modules/qrcode/node_modules/yargs-parser": { "version": "18.1.3", - "license": "ISC", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -14150,14 +15717,17 @@ }, "node_modules/qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -14172,37 +15742,40 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, - "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -14215,21 +15788,24 @@ }, "node_modules/react-is": { "version": "16.13.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true }, "node_modules/read-cache": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "license": "MIT", "dependencies": { "pify": "^2.3.0" } }, "node_modules/read-package-json": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", @@ -14242,8 +15818,9 @@ }, "node_modules/read-package-json-fast": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, - "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -14254,8 +15831,9 @@ }, "node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, - "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -14268,8 +15846,9 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, - "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -14284,21 +15863,24 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -14308,24 +15890,27 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, - "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -14337,8 +15922,9 @@ }, "node_modules/readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -14348,8 +15934,9 @@ }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, - "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -14360,18 +15947,21 @@ }, "node_modules/reflect-metadata": { "version": "0.1.13", - "dev": true, - "license": "Apache-2.0" + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true }, "node_modules/regenerate": { "version": "1.4.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true }, "node_modules/regenerate-unicode-properties": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, - "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -14381,26 +15971,30 @@ }, "node_modules/regenerator-runtime": { "version": "0.13.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true }, "node_modules/regenerator-transform": { "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, - "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regex-parser": { "version": "2.2.11", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true }, "node_modules/regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -14409,9 +16003,10 @@ } }, "node_modules/regexpu-core": { - "version": "5.0.1", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", "dev": true, - "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.0.1", @@ -14426,13 +16021,15 @@ }, "node_modules/regjsgen": { "version": "0.6.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true }, "node_modules/regjsparser": { "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "jsesc": "~0.5.0" }, @@ -14442,6 +16039,8 @@ }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -14449,8 +16048,9 @@ }, "node_modules/remark": { "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, - "license": "MIT", "dependencies": { "remark-parse": "^9.0.0", "remark-stringify": "^9.0.0", @@ -14463,8 +16063,9 @@ }, "node_modules/remark-parse": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, - "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^0.8.0" }, @@ -14475,8 +16076,9 @@ }, "node_modules/remark-stringify": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "dev": true, - "license": "MIT", "dependencies": { "mdast-util-to-markdown": "^0.6.0" }, @@ -14487,16 +16089,19 @@ }, "node_modules/repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "license": "Apache-2.0", "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -14525,16 +16130,18 @@ }, "node_modules/request-progress": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, - "license": "MIT", "dependencies": { "throttleit": "^1.0.0" } }, "node_modules/request/node_modules/http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -14547,8 +16154,9 @@ }, "node_modules/request/node_modules/jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "license": "MIT", "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -14561,40 +16169,47 @@ }, "node_modules/request/node_modules/uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/require-directory": { "version": "2.1.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "node_modules/requires-port": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, - "license": "MIT", "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -14609,16 +16224,18 @@ }, "node_modules/resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/resolve-url-loader": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, - "license": "MIT", "dependencies": { "adjust-sourcemap-loader": "^4.0.0", "convert-source-map": "^1.7.0", @@ -14632,8 +16249,9 @@ }, "node_modules/resolve-url-loader/node_modules/loader-utils": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, - "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -14645,16 +16263,18 @@ }, "node_modules/resolve-url-loader/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -14665,16 +16285,18 @@ }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -14682,13 +16304,15 @@ }, "node_modules/rfdc": { "version": "1.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true }, "node_modules/rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -14701,8 +16325,9 @@ }, "node_modules/rimraf/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14710,8 +16335,9 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14729,8 +16355,9 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14740,14 +16367,17 @@ }, "node_modules/run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -14763,32 +16393,35 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/rxjs": { "version": "7.5.5", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "dependencies": { "tslib": "^2.1.0" } }, "node_modules/safe-buffer": { "version": "5.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, "node_modules/safer-buffer": { "version": "2.1.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sass": { "version": "1.51.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.51.0.tgz", + "integrity": "sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==", "dev": true, - "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -14803,8 +16436,9 @@ }, "node_modules/sass-loader": { "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", "dev": true, - "license": "MIT", "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -14840,6 +16474,8 @@ }, "node_modules/saucelabs": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "dependencies": { "https-proxy-agent": "^2.2.1" @@ -14850,8 +16486,9 @@ }, "node_modules/saucelabs/node_modules/agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, - "license": "MIT", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -14861,16 +16498,18 @@ }, "node_modules/saucelabs/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/saucelabs/node_modules/https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -14881,13 +16520,15 @@ }, "node_modules/sax": { "version": "1.2.4", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true }, "node_modules/schema-utils": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.5", "ajv": "^6.12.4", @@ -14903,8 +16544,9 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14918,26 +16560,30 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/select-hose": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true }, "node_modules/selenium-webdriver": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, - "license": "Apache-2.0", "dependencies": { "jszip": "^3.1.3", "rimraf": "^2.5.4", @@ -14950,8 +16596,9 @@ }, "node_modules/selenium-webdriver/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14959,8 +16606,9 @@ }, "node_modules/selenium-webdriver/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14978,8 +16626,9 @@ }, "node_modules/selenium-webdriver/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14989,8 +16638,9 @@ }, "node_modules/selenium-webdriver/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -15000,8 +16650,9 @@ }, "node_modules/selenium-webdriver/node_modules/tmp": { "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", "dev": true, - "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.1" }, @@ -15011,8 +16662,9 @@ }, "node_modules/selfsigned": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", "dev": true, - "license": "MIT", "dependencies": { "node-forge": "^1" }, @@ -15022,8 +16674,9 @@ }, "node_modules/semver": { "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, - "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15036,24 +16689,27 @@ }, "node_modules/semver-dsl": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", "dev": true, - "license": "MIT", "dependencies": { "semver": "^5.3.0" } }, "node_modules/semver-dsl/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/semver/node_modules/lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -15063,8 +16719,9 @@ }, "node_modules/send": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, - "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -15086,21 +16743,24 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/send/node_modules/mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, - "license": "MIT", "bin": { "mime": "cli.js" }, @@ -15110,29 +16770,33 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -15148,24 +16812,27 @@ }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, - "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -15178,23 +16845,27 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true }, "node_modules/serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, - "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -15207,22 +16878,26 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setimmediate": { "version": "1.0.5", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "node_modules/setprototypeof": { "version": "1.2.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true }, "node_modules/shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -15232,8 +16907,9 @@ }, "node_modules/shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -15243,16 +16919,18 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -15264,21 +16942,24 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, "node_modules/slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -15290,8 +16971,9 @@ }, "node_modules/slice-ansi/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15304,8 +16986,9 @@ }, "node_modules/slice-ansi/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15315,13 +16998,15 @@ }, "node_modules/slice-ansi/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -15329,8 +17014,9 @@ }, "node_modules/socket.io": { "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", "dev": true, - "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -15345,13 +17031,15 @@ }, "node_modules/socket.io-adapter": { "version": "2.4.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", + "dev": true }, "node_modules/socket.io-parser": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", "dev": true, - "license": "MIT", "dependencies": { "@types/component-emitter": "^1.2.10", "component-emitter": "~1.3.0", @@ -15363,8 +17051,9 @@ }, "node_modules/sockjs": { "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, - "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -15373,8 +17062,9 @@ }, "node_modules/socks": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, - "license": "MIT", "dependencies": { "ip": "^1.1.5", "smart-buffer": "^4.2.0" @@ -15386,8 +17076,9 @@ }, "node_modules/socks-proxy-agent": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, - "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -15399,24 +17090,27 @@ }, "node_modules/source-map": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">= 8" } }, "node_modules/source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-loader": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", "dev": true, - "license": "MIT", "dependencies": { "abab": "^2.0.5", "iconv-lite": "^0.6.3", @@ -15435,8 +17129,9 @@ }, "node_modules/source-map-loader/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, - "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -15446,8 +17141,10 @@ }, "node_modules/source-map-resolve": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, - "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0" @@ -15455,8 +17152,9 @@ }, "node_modules/source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -15464,21 +17162,24 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true }, "node_modules/spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -15486,13 +17187,15 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "dev": true, - "license": "CC-BY-3.0" + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -15500,13 +17203,15 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.11", - "dev": true, - "license": "CC0-1.0" + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true }, "node_modules/spdy": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -15520,8 +17225,9 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -15533,21 +17239,24 @@ }, "node_modules/specificity": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true, - "license": "MIT", "bin": { "specificity": "bin/specificity" } }, "node_modules/sprintf-js": { "version": "1.1.2", - "dev": true, - "license": "BSD-3-Clause" + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true }, "node_modules/sshpk": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, - "license": "MIT", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -15570,8 +17279,9 @@ }, "node_modules/ssri": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, - "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -15581,16 +17291,18 @@ }, "node_modules/statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/streamroller": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", + "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", "dev": true, - "license": "MIT", "dependencies": { "date-format": "^4.0.10", "debug": "^4.3.4", @@ -15602,8 +17314,9 @@ }, "node_modules/streamroller/node_modules/fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -15615,14 +17328,17 @@ }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, - "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string_decoder/node_modules/safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { @@ -15637,12 +17353,12 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/string-width": { "version": "4.2.3", - "license": "MIT", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -15654,7 +17370,8 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -15664,24 +17381,27 @@ }, "node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, - "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -15691,8 +17411,9 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -15702,13 +17423,15 @@ }, "node_modules/style-search": { "version": "0.1.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true }, "node_modules/stylelint": { "version": "13.13.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", "dev": true, - "license": "MIT", "dependencies": { "@stylelint/postcss-css-in-js": "^0.37.2", "@stylelint/postcss-markdown": "^0.36.2", @@ -15772,16 +17495,18 @@ }, "node_modules/stylelint-config-recommended": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz", + "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==", "dev": true, - "license": "MIT", "peerDependencies": { "stylelint": "^13.13.0" } }, "node_modules/stylelint-config-standard": { "version": "22.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-22.0.0.tgz", + "integrity": "sha512-uQVNi87SHjqTm8+4NIP5NMAyY/arXrBgimaaT7skvRfE9u3JKXRK9KBkbr4pVmeciuCcs64kAdjlxfq6Rur7Hw==", "dev": true, - "license": "MIT", "dependencies": { "stylelint-config-recommended": "^5.0.0" }, @@ -15791,8 +17516,9 @@ }, "node_modules/stylelint-scss": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.21.0.tgz", + "integrity": "sha512-CMI2wSHL+XVlNExpauy/+DbUcB/oUZLARDtMIXkpV/5yd8nthzylYd1cdHeDMJVBXeYHldsnebUX6MoV5zPW4A==", "dev": true, - "license": "MIT", "dependencies": { "lodash": "^4.17.15", "postcss-media-query-parser": "^0.2.3", @@ -15809,8 +17535,9 @@ }, "node_modules/stylelint/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -15823,8 +17550,9 @@ }, "node_modules/stylelint/node_modules/autoprefixer": { "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, - "license": "MIT", "dependencies": { "browserslist": "^4.12.0", "caniuse-lite": "^1.0.30001109", @@ -15844,13 +17572,15 @@ }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true }, "node_modules/stylelint/node_modules/chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15864,8 +17594,9 @@ }, "node_modules/stylelint/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -15875,26 +17606,30 @@ }, "node_modules/stylelint/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/stylelint/node_modules/has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/stylelint/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/stylelint/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -15909,16 +17644,18 @@ }, "node_modules/stylelint/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/stylelint/node_modules/supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15928,8 +17665,9 @@ }, "node_modules/stylus": { "version": "0.57.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz", + "integrity": "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==", "dev": true, - "license": "MIT", "dependencies": { "css": "^3.0.0", "debug": "^4.3.2", @@ -15947,8 +17685,9 @@ }, "node_modules/stylus-loader": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", + "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", "dev": true, - "license": "MIT", "dependencies": { "fast-glob": "^3.2.7", "klona": "^2.0.4", @@ -15968,8 +17707,9 @@ }, "node_modules/stylus/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -15977,8 +17717,9 @@ }, "node_modules/stylus/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15996,8 +17737,9 @@ }, "node_modules/stylus/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16007,21 +17749,24 @@ }, "node_modules/sugarss": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", "dev": true, - "license": "MIT", "dependencies": { "postcss": "^7.0.2" } }, "node_modules/sugarss/node_modules/picocolors": { "version": "0.2.1", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "node_modules/sugarss/node_modules/postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, - "license": "MIT", "dependencies": { "picocolors": "^0.2.1", "source-map": "^0.6.1" @@ -16036,16 +17781,18 @@ }, "node_modules/sugarss/node_modules/source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -16055,8 +17802,9 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16066,20 +17814,24 @@ }, "node_modules/svg-tags": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "node_modules/symbol-observable": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/table": { "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -16093,8 +17845,9 @@ }, "node_modules/table/node_modules/ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16107,8 +17860,9 @@ }, "node_modules/table/node_modules/color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -16118,13 +17872,15 @@ }, "node_modules/table/node_modules/color-name": { "version": "1.1.4", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -16139,16 +17895,18 @@ }, "node_modules/tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, - "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -16163,8 +17921,9 @@ }, "node_modules/tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, - "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -16178,21 +17937,24 @@ }, "node_modules/tcomb": { "version": "3.2.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true }, "node_modules/tcomb-validation": { "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, - "license": "MIT", "dependencies": { "tcomb": "^3.0.0" } }, "node_modules/terser": { "version": "5.13.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", + "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.5.0", "commander": "^2.20.0", @@ -16208,8 +17970,9 @@ }, "node_modules/terser-webpack-plugin": { "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.7", "jest-worker": "^27.4.5", @@ -16241,8 +18004,9 @@ }, "node_modules/terser-webpack-plugin/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -16256,21 +18020,24 @@ }, "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -16286,13 +18053,15 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, "node_modules/terser/node_modules/source-map": { "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -16302,8 +18071,9 @@ }, "node_modules/test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, - "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", "glob": "^7.1.4", @@ -16315,8 +18085,9 @@ }, "node_modules/test-exclude/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16324,8 +18095,9 @@ }, "node_modules/test-exclude/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16343,8 +18115,9 @@ }, "node_modules/test-exclude/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16354,35 +18127,41 @@ }, "node_modules/text-table": { "version": "0.2.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/throttleit": { "version": "1.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "dev": true }, "node_modules/through": { "version": "2.3.8", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true }, "node_modules/thunky": { "version": "1.1.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true }, "node_modules/tinycolor2": { "version": "1.4.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", "engines": { "node": "*" } }, "node_modules/tmp": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, - "license": "MIT", "dependencies": { "rimraf": "^3.0.0" }, @@ -16392,16 +18171,18 @@ }, "node_modules/to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -16411,16 +18192,18 @@ }, "node_modules/toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -16431,32 +18214,36 @@ }, "node_modules/tr46": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, - "license": "MIT", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, - "license": "MIT", "bin": { "tree-kill": "cli.js" } }, "node_modules/trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/trough": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16464,8 +18251,9 @@ }, "node_modules/tsconfig-paths": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", @@ -16475,8 +18263,9 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -16486,12 +18275,15 @@ }, "node_modules/tslib": { "version": "2.4.0", - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/tslint": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, - "license": "Apache-2.0", "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", @@ -16520,8 +18312,9 @@ }, "node_modules/tslint/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0", @@ -16530,14 +18323,16 @@ }, "node_modules/tslint/node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "MIT", "peer": true }, "node_modules/tslint/node_modules/diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.3.1" @@ -16545,8 +18340,9 @@ }, "node_modules/tslint/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -16565,8 +18361,9 @@ }, "node_modules/tslint/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -16577,8 +18374,9 @@ }, "node_modules/tslint/node_modules/mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "minimist": "^1.2.6" @@ -16589,8 +18387,9 @@ }, "node_modules/tslint/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "peer": true, "bin": { "semver": "bin/semver" @@ -16598,14 +18397,16 @@ }, "node_modules/tslint/node_modules/tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, - "license": "0BSD", "peer": true }, "node_modules/tslint/node_modules/tsutils": { "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "tslib": "^1.8.1" @@ -16616,8 +18417,9 @@ }, "node_modules/tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -16630,13 +18432,15 @@ }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", - "dev": true, - "license": "0BSD" + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -16646,30 +18450,24 @@ }, "node_modules/tv4": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", "dev": true, - "license": [ - { - "type": "Public Domain", - "url": "http://geraintluff.github.io/tv4/LICENSE.txt" - }, - { - "type": "MIT", - "url": "http://jsonary.com/LICENSE.txt" - } - ], "engines": { "node": ">= 0.8.0" } }, "node_modules/tweetnacl": { "version": "0.14.5", - "dev": true, - "license": "Unlicense" + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true }, "node_modules/type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -16679,8 +18477,9 @@ }, "node_modules/type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -16690,8 +18489,9 @@ }, "node_modules/type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, - "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -16702,21 +18502,24 @@ }, "node_modules/typed-assert": { "version": "1.0.9", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, - "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { - "version": "4.7.3", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16727,6 +18530,8 @@ }, "node_modules/ua-parser-js": { "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true, "funding": [ { @@ -16738,23 +18543,24 @@ "url": "https://paypal.me/faisalman" } ], - "license": "MIT", "engines": { "node": "*" } }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, - "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -16765,24 +18571,27 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/unified": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, - "license": "MIT", "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", @@ -16798,32 +18607,36 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/unique-filename": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, - "license": "ISC", "dependencies": { "unique-slug": "^2.0.0" } }, "node_modules/unique-slug": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" } }, "node_modules/unist-util-find-all-after": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, - "license": "MIT", "dependencies": { "unist-util-is": "^4.0.0" }, @@ -16834,8 +18647,9 @@ }, "node_modules/unist-util-is": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -16843,8 +18657,9 @@ }, "node_modules/unist-util-stringify-position": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.2" }, @@ -16855,65 +18670,100 @@ }, "node_modules/universalify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/untildify": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { "version": "2.3.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true }, "node_modules/validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -16921,8 +18771,9 @@ }, "node_modules/validate-npm-package-name": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, - "license": "ISC", "dependencies": { "builtins": "^5.0.0" }, @@ -16932,26 +18783,29 @@ }, "node_modules/validator": { "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/vary": { "version": "1.1.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } }, "node_modules/verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "engines": [ "node >=0.6.0" ], - "license": "MIT", "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -16960,8 +18814,9 @@ }, "node_modules/vfile": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", @@ -16975,8 +18830,9 @@ }, "node_modules/vfile-message": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" @@ -16988,23 +18844,26 @@ }, "node_modules/void-elements": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/walkdir": { "version": "0.4.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==", "engines": { "node": ">=6.0.0" } }, "node_modules/watchpack": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -17015,24 +18874,27 @@ }, "node_modules/wbuf": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, - "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, - "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, "node_modules/webdriver-js-extender": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/selenium-webdriver": "^3.0.0", "selenium-webdriver": "^3.0.1" @@ -17043,8 +18905,9 @@ }, "node_modules/webdriver-manager": { "version": "12.1.8", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", + "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", "dev": true, - "license": "MIT", "dependencies": { "adm-zip": "^0.4.9", "chalk": "^1.1.1", @@ -17067,24 +18930,27 @@ }, "node_modules/webdriver-manager/node_modules/ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webdriver-manager/node_modules/ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/webdriver-manager/node_modules/brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17092,8 +18958,9 @@ }, "node_modules/webdriver-manager/node_modules/chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", @@ -17107,8 +18974,9 @@ }, "node_modules/webdriver-manager/node_modules/glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -17126,13 +18994,15 @@ }, "node_modules/webdriver-manager/node_modules/ini": { "version": "1.3.8", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/webdriver-manager/node_modules/minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17142,8 +19012,9 @@ }, "node_modules/webdriver-manager/node_modules/rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -17153,16 +19024,18 @@ }, "node_modules/webdriver-manager/node_modules/semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/webdriver-manager/node_modules/strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^2.0.0" }, @@ -17172,21 +19045,24 @@ }, "node_modules/webdriver-manager/node_modules/supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/webidl-conversions": { "version": "4.0.2", - "dev": true, - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true }, "node_modules/webpack": { "version": "5.72.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", + "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "dev": true, - "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -17231,8 +19107,9 @@ }, "node_modules/webpack-dev-middleware": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "dev": true, - "license": "MIT", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.1", @@ -17253,8 +19130,9 @@ }, "node_modules/webpack-dev-middleware/node_modules/schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -17271,8 +19149,9 @@ }, "node_modules/webpack-dev-server": { "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz", + "integrity": "sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==", "dev": true, - "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -17320,8 +19199,9 @@ }, "node_modules/webpack-dev-server/node_modules/schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -17338,8 +19218,9 @@ }, "node_modules/webpack-dev-server/node_modules/ws": { "version": "8.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", + "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -17358,8 +19239,9 @@ }, "node_modules/webpack-merge": { "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, - "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" @@ -17370,16 +19252,18 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack-subresource-integrity": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dev": true, - "license": "MIT", "dependencies": { "typed-assert": "^1.0.8" }, @@ -17396,10 +19280,17 @@ } } }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "node_modules/webpack/node_modules/ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -17413,21 +19304,24 @@ }, "node_modules/webpack/node_modules/ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/webpack/node_modules/json-schema-traverse": { "version": "0.4.1", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, - "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -17443,8 +19337,9 @@ }, "node_modules/websocket-driver": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, - "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -17456,16 +19351,18 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, - "license": "Apache-2.0", "engines": { "node": ">=0.8.0" } }, "node_modules/whatwg-url": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, - "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -17474,8 +19371,9 @@ }, "node_modules/which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -17488,38 +19386,44 @@ }, "node_modules/which-module": { "version": "2.0.0", - "license": "ISC" + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, - "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wildcard": { "version": "2.0.0", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true }, "node_modules/word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/workerpool": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true, - "license": "Apache-2.0", "peer": true }, "node_modules/wrap-ansi": { "version": "7.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -17534,7 +19438,8 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dependencies": { "color-convert": "^2.0.1" }, @@ -17547,7 +19452,8 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dependencies": { "color-name": "~1.1.4" }, @@ -17557,17 +19463,20 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "license": "MIT" + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrappy": { "version": "1.0.2", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, - "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -17577,8 +19486,9 @@ }, "node_modules/ws": { "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -17597,8 +19507,9 @@ }, "node_modules/xml2js": { "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, - "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -17609,36 +19520,41 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/y18n": { "version": "5.0.8", - "license": "ISC", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "engines": { "node": ">=10" } }, "node_modules/yallist": { "version": "4.0.0", - "dev": true, - "license": "ISC" + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "license": "ISC", "engines": { "node": ">= 6" } }, "node_modules/yargs": { "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, - "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -17654,16 +19570,18 @@ }, "node_modules/yargs-parser": { "version": "20.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz", + "integrity": "sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA==", "dev": true, - "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "license": "MIT", "peer": true, "dependencies": { "camelcase": "^6.0.0", @@ -17677,8 +19595,9 @@ }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -17689,8 +19608,9 @@ }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -17701,8 +19621,9 @@ }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -17710,16 +19631,18 @@ }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true, - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, - "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -17727,8 +19650,9 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -17739,15 +19663,17 @@ }, "node_modules/zone.js": { "version": "0.11.6", - "license": "MIT", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.6.tgz", + "integrity": "sha512-umJqFtKyZlPli669gB1gOrRE9hxUUGkZr7mo878z+NEBJZZixJkKeVYfnoLa7g25SseUDc92OZrMKKHySyJrFg==", "dependencies": { "tslib": "^2.3.0" } }, "node_modules/zwitch": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true, - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -17757,6 +19683,8 @@ "dependencies": { "@ampproject/remapping": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.1.0", @@ -17764,15 +19692,19 @@ } }, "@angular-devkit/architect": { - "version": "0.1400.2", + "version": "0.1400.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1400.4.tgz", + "integrity": "sha512-9tjOIRpAPuhsJ5xMVZI/C9qQUaVTF9URFrK4r/b9RO7lRsvMvweReMcOH4/8+veVSTAzAa34B6WNYvvuBZFMOg==", "dev": true, "requires": { - "@angular-devkit/core": "14.0.2", + "@angular-devkit/core": "14.0.4", "rxjs": "6.6.7" }, "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17780,18 +19712,22 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@angular-devkit/build-angular": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.0.4.tgz", + "integrity": "sha512-VoiDfyKSTBU4LDRwtY8Ga5ZBKsDxTYWNx9aDCoswalMvYREwhEi9+wEcWjF5aMKl4usr6twCPaYqDrbkHYUHqw==", "dev": true, "requires": { "@ampproject/remapping": "2.2.0", - "@angular-devkit/architect": "0.1400.2", - "@angular-devkit/build-webpack": "0.1400.2", - "@angular-devkit/core": "14.0.2", + "@angular-devkit/architect": "0.1400.4", + "@angular-devkit/build-webpack": "0.1400.4", + "@angular-devkit/core": "14.0.4", "@babel/core": "7.17.10", "@babel/generator": "7.17.10", "@babel/helper-annotate-as-pure": "7.16.7", @@ -17802,7 +19738,7 @@ "@babel/runtime": "7.17.9", "@babel/template": "7.16.7", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "14.0.2", + "@ngtools/webpack": "14.0.4", "ansi-colors": "4.1.1", "babel-loader": "8.2.5", "babel-plugin-istanbul": "6.1.1", @@ -17855,6 +19791,8 @@ "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17862,6 +19800,8 @@ "dependencies": { "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } @@ -17869,15 +19809,19 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1400.2", + "version": "0.1400.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1400.4.tgz", + "integrity": "sha512-eknabzf8lWDidOzeoV7NG3Rrfme/O2REZtranhBGKRfoRNUOCWMYcCfAF1hUEHjgw7zd4pn+3EdMVjhwpG48hA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1400.2", + "@angular-devkit/architect": "0.1400.4", "rxjs": "6.6.7" }, "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17885,12 +19829,16 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@angular-devkit/core": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.0.4.tgz", + "integrity": "sha512-ySQnhu9KhU6vMcFE5jFD93Q2aQ/UJYRZXlvDCve11pp6Lb+llcA7H46lHlBwpxR3jKom+8U4W5vnviqU52zhcg==", "dev": true, "requires": { "ajv": "8.11.0", @@ -17902,6 +19850,8 @@ "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17909,15 +19859,19 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@angular-devkit/schematics": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.0.4.tgz", + "integrity": "sha512-dOi843eANcCL/tcSIAaotfLTHZTQLzRrpP2hz/le/vYMcuIfP90auvsWbQVrWbDIxWYl57Lu2UxvITT9gIarnA==", "dev": true, "requires": { - "@angular-devkit/core": "14.0.2", + "@angular-devkit/core": "14.0.4", "jsonc-parser": "3.0.0", "magic-string": "0.26.1", "ora": "5.4.1", @@ -17926,6 +19880,8 @@ "dependencies": { "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -17933,99 +19889,109 @@ }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "@angular-eslint/builder": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.0.0-alpha.3.tgz", - "integrity": "sha512-J3/Pj0erEkmRCSpVcsTWIg4riIADkfbC+Z+iGeS0cN3Ix6pyXk6XPDXoUCHBB0C55RCpeCYuJIFqJuLfEKIfZw==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-14.0.0.tgz", + "integrity": "sha512-91/ZHivDD8ou/vEUsgY3nRv//2Kd0PA+JypI4jVs7nErmFtMkPAbpONn2cIqFlRgPilEm3LA78wemr7HxyxacA==", "dev": true, "requires": { "@nrwl/devkit": "13.1.3" } }, "@angular-eslint/bundled-angular-compiler": { - "version": "14.0.0-alpha.3", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-14.0.0.tgz", + "integrity": "sha512-/rzDy+rVfpVOSAVycYsD15xbDrU54aayI94OT9Rxxl9J4Jp/Hep2FY7JrjvfqpS097qVIgJltEP9xu9OopOz7g==", "dev": true }, "@angular-eslint/eslint-plugin": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.0.0-alpha.3.tgz", - "integrity": "sha512-vGKiKoWTZITcj6VMdfEhRpQOgzYX53QXqEfqq1deEybNxJsmSHD5i7niLw6l3AgK8o18j2HZfMyz39MItiQ/Rg==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-14.0.0.tgz", + "integrity": "sha512-A4oCWgOwiP9aYuuMOyF1iLcjZONMjxuabG+FICLA7LosjIIgIf0Cktp74Ii4itBr2Ka+E5+sCvFBce8r2Cmosg==", "dev": true, "requires": { - "@angular-eslint/utils": "14.0.0-alpha.3", - "@typescript-eslint/experimental-utils": "5.27.1" + "@angular-eslint/utils": "14.0.0", + "@typescript-eslint/utils": "5.29.0" } }, "@angular-eslint/eslint-plugin-template": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.0.0-alpha.3.tgz", - "integrity": "sha512-AoOyyLOpRZPph35wwBI1BOmBaI5VIBOdxWmOlCZsP2H5iaBiF+wQTARUu8swQVLKZ2arKKSP0ufAfc5E2FBcZA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-14.0.0.tgz", + "integrity": "sha512-h+3eL2ovMiBn5EG0DH8/2ikolvUUjSGJFbZenlJwEPGGEHaJoYw6205ZMoRNxKResEbPgEoY1UK+paO8x14z6w==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "14.0.0-alpha.3", - "@typescript-eslint/experimental-utils": "5.27.1", + "@angular-eslint/bundled-angular-compiler": "14.0.0", + "@typescript-eslint/utils": "5.29.0", "aria-query": "5.0.0", "axobject-query": "3.0.1" } }, "@angular-eslint/schematics": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-14.0.0-alpha.3.tgz", - "integrity": "sha512-swBkQ4/9itzEPTvPbBw1H02pMrZIPly5d6fPUh71+xhPTTBvjFm525AyVMhg6N6uk9ai3mDgWyek8eaz7NHZgA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-14.0.0.tgz", + "integrity": "sha512-4lOpDECUgcSdlBsMeIq9Sx0FkIZDQZPfmtwNHDl7P7GCA4voqS3GgSX7/azwYrXFchPteQeHrXxB4B8n8AByig==", "dev": true, "requires": { - "@angular-eslint/eslint-plugin": "14.0.0-alpha.3", - "@angular-eslint/eslint-plugin-template": "14.0.0-alpha.3", + "@angular-eslint/eslint-plugin": "14.0.0", + "@angular-eslint/eslint-plugin-template": "14.0.0", "ignore": "5.2.0", "strip-json-comments": "3.1.1", "tmp": "0.2.1" } }, "@angular-eslint/template-parser": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.0.0-alpha.3.tgz", - "integrity": "sha512-twCZoBFuAgSZK6lKiNRdD738f99OSaQEaykf03QJAjo501Ib/q85cP2D7ZQzk03nT+xSODqUEaEPnuu/kE59nQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-14.0.0.tgz", + "integrity": "sha512-i0ec0m0hezabVYH9MruxIxLyoQp60VQAy0QvsQlYB6q3nFuJnx9MT+iSN+Now8AhWh2yqbnCxxnhhLFushwBFQ==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "14.0.0-alpha.3", + "@angular-eslint/bundled-angular-compiler": "14.0.0", "eslint-scope": "^5.1.0" } }, "@angular-eslint/utils": { - "version": "14.0.0-alpha.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.0.0-alpha.3.tgz", - "integrity": "sha512-py2oFSDdiY/QJmBKg0wbbO4Caf18uioHAivMXdXfIyFHM6XGoiI1DBUUCmNrCq6sbYanD1oO0BtRFD+Gv6y+vg==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-14.0.0.tgz", + "integrity": "sha512-gK8gDzo2MbMXYDqsWqE28rGkqPMMhPG4mIWp+zMsuWYG7oiUlD2TibWerYQCfGa9K2FTF97UGmI21Ckqsgex7w==", "dev": true, "requires": { - "@angular-eslint/bundled-angular-compiler": "14.0.0-alpha.3", - "@typescript-eslint/experimental-utils": "5.27.1" + "@angular-eslint/bundled-angular-compiler": "14.0.0", + "@typescript-eslint/utils": "5.29.0" } }, "@angular/animations": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.0.4.tgz", + "integrity": "sha512-+Qe+wLA0DOHlOdFRQSEJoenhFm5zcKwkDItqAFT5NVYOT04yxXq8NFRIHSbqn468qR70EkX514lKi6pr6nxGYQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/cdk": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-14.0.4.tgz", + "integrity": "sha512-zPM4VZadoKzTF9TZ7Yx5gJ7GtQpt62f8ofdH/BF2atG+TaNzOEFqtzogP4WuJDFAxJXOPMePobhth4YjUk0Wbw==", "requires": { "parse5": "^5.0.0", "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.0.4.tgz", + "integrity": "sha512-hb6mJk6/vJwHCuMaGResQh9aXgoSyfrJ/WuFgLcPspdFRkm4EQcTSx8DwrRo7YawuCa12UJdPoK0dASXYN6JHA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1400.2", - "@angular-devkit/core": "14.0.2", - "@angular-devkit/schematics": "14.0.2", - "@schematics/angular": "14.0.2", + "@angular-devkit/architect": "0.1400.4", + "@angular-devkit/core": "14.0.4", + "@angular-devkit/schematics": "14.0.4", + "@schematics/angular": "14.0.4", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.4", @@ -18045,19 +20011,25 @@ } }, "@angular/common": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.0.4.tgz", + "integrity": "sha512-CvlFa2lCxen0LB3N45IzZDdMIqpcasXfVUhiAkLxZgT+kSTunc/rg8hMoLHVfmFpkQKCQmPVyuzNXnSwIFhYkQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.0.4.tgz", + "integrity": "sha512-WdRpZFTX2vt71sSfQ89C1K5l2zhYtn8ON+ZlAVxyZ5uT0nA/Z/vuMLfNZB1WmcGVDOc7JmQduSiSaI0hhQqXqw==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.0.4.tgz", + "integrity": "sha512-j3T0dOwNov6rKcaxLMSlPLRvrBT6MyBTum18x6XvZRqb75RUAJ/yV+PXgtA//XZ2hjuy87+CvZy3tBKktvY7bA==", "dev": true, "requires": { "@babel/core": "^7.17.2", @@ -18073,74 +20045,100 @@ } }, "@angular/core": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.0.4.tgz", + "integrity": "sha512-uMS/X+/5RokF3uiiD1IAr6Ha9k7QPegHrAB3QW0x6WRUTMq0K+08F+AeF5COmbfYMMaxofD6x8XmM+BLeg/0hw==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.0.4.tgz", + "integrity": "sha512-u/9y09WQ00y6BQeNo69hMa/Fx+xKHGnmcjMtS3xkZtmoCP+A0ebumG0Y9DfXs2olJY2//O5di7Qu3fwlBg+3Cw==", "requires": { "tslib": "^2.3.0" } }, "@angular/language-service": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-14.0.4.tgz", + "integrity": "sha512-5I2k1/EJSBBA3D5jP8Q+Z9paI62t7UUi3NO3o1nJkc9d6/01FGKgilbouSNhdLI6Rn0FeBOwF2h00H9NQ+XHTw==", "dev": true }, "@angular/material": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-14.0.4.tgz", + "integrity": "sha512-Ysz6oPbpLH7CvRR6oxQwpUImSbFqxL4+eiH0LPc7vkaOSrvGdZ/7cWhAfT6hVnw3bEY+eq5qBSMgyVUB44z4eg==", "requires": { "tslib": "^2.3.0" } }, "@angular/material-moment-adapter": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-14.0.4.tgz", + "integrity": "sha512-RqBtLKzwqO2fRAlwURVfVSXZQ3Qks1k3G5lj4AOZpGnAPBw8DGHI/zroBD/3QzPer8rUsoiVVwdQSXpmWf1mlg==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.0.4.tgz", + "integrity": "sha512-VFeFpQ+248m8GiCqcsHwH4PET7tR1cyXnhsep1EeI4MDaO+aIbsUcESqXzMm5+ChOmNyiCtLQu8QvfHZK0uDVA==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.0.4.tgz", + "integrity": "sha512-snVbAKfnBuCUMgop6ln111B/ouMnDR1ZzMzpiKefdJDGUvASCLbR8XAioY+zXUI82QbNg5masUPia1Fy+yTvGw==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.0.4.tgz", + "integrity": "sha512-aqtOjIjVNtWbpedDdni0yGfGR6sEb8S3jJB9jf43ththmHKxAlW7PKP2NgEmx0uJ2xY2iGET7Gkpl8RBwvoHgQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/service-worker": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-14.0.4.tgz", + "integrity": "sha512-dJzsDTQg6LRNK/wJPi06EdfKCSnvil3DD6HNHDMHNxLE4J5NQmZdd6bCBEkXTOchqpOUjae4ej/ZelEE0te3Bg==", "requires": { "tslib": "^2.3.0" } }, "@assemblyscript/loader": { "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", "dev": true }, "@babel/code-frame": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dev": true, "requires": { - "@babel/highlight": "^7.16.7" + "@babel/highlight": "^7.18.6" } }, "@babel/compat-data": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", "dev": true }, "@babel/core": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", + "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", @@ -18162,12 +20160,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/generator": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", + "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", "dev": true, "requires": { "@babel/types": "^7.17.10", @@ -18177,58 +20179,94 @@ }, "@babel/helper-annotate-as-pure": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "requires": { "@babel/types": "^7.16.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", + "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" } }, "@babel/helper-compilation-targets": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.20.2", "semver": "^6.3.0" }, "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", + "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + } } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + } } }, "@babel/helper-define-polyfill-provider": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -18243,174 +20281,286 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/helper-environment-visitor": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", "dev": true }, "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-function-name": { - "version": "7.17.9", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + } } }, "@babel/helper-hoist-variables": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", + "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", "dev": true, "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-imports": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-module-transforms": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", + "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + } } }, "@babel/helper-replace-supers": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", + "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", "dev": true, "requires": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" } }, "@babel/helper-simple-access": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", "dev": true, "requires": { - "@babel/types": "^7.18.2" + "@babel/types": "^7.18.6" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", + "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", "dev": true, "requires": { - "@babel/types": "^7.16.0" + "@babel/types": "^7.18.6" } }, "@babel/helper-split-export-declaration": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.18.6" } }, "@babel/helper-validator-identifier": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.16.8", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", + "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + } } }, "@babel/helpers": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", + "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", "dev": true, "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "dependencies": { + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + } } }, "@babel/highlight": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", + "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6" } }, "@babel/plugin-proposal-async-generator-functions": { "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.16.7", @@ -18419,126 +20569,167 @@ } }, "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", + "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", + "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", + "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.17.12" + "@babel/plugin-transform-parameters": "^7.18.6" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", + "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + } } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18546,6 +20737,8 @@ }, "@babel/plugin-syntax-class-properties": { "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" @@ -18553,6 +20746,8 @@ }, "@babel/plugin-syntax-class-static-block": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -18560,6 +20755,8 @@ }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18567,6 +20764,8 @@ }, "@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.3" @@ -18574,6 +20773,8 @@ }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18581,6 +20782,8 @@ }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -18588,6 +20791,8 @@ }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18595,6 +20800,8 @@ }, "@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -18602,6 +20809,8 @@ }, "@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18609,6 +20818,8 @@ }, "@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18616,6 +20827,8 @@ }, "@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.8.0" @@ -18623,6 +20836,8 @@ }, "@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" @@ -18630,20 +20845,26 @@ }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.14.5" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-async-to-generator": { "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", @@ -18652,192 +20873,251 @@ } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.18.4", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", + "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-classes": { - "version": "7.18.4", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", + "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-replace-supers": "^7.18.2", - "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + } } }, "@babel/plugin-transform-computed-properties": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", + "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-destructuring": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", + "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", + "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.18.1", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", + "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-function-name": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", + "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-literals": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", + "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", + "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-new-target": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", + "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-property-literals": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-regenerator": { - "version": "7.18.0", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-plugin-utils": "^7.18.6", "regenerator-transform": "^0.15.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-runtime": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz", + "integrity": "sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", @@ -18850,63 +21130,81 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", + "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.18.2", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", + "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.17.12", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", + "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", + "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { "version": "7.17.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", + "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", "dev": true, "requires": { "@babel/compat-data": "^7.17.10", @@ -18987,12 +21285,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "@babel/preset-modules": { "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -19004,6 +21306,8 @@ }, "@babel/runtime": { "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -19011,6 +21315,8 @@ }, "@babel/template": { "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", @@ -19019,35 +21325,41 @@ } }, "@babel/traverse": { - "version": "7.18.5", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", "dev": true, "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.2", - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.5", - "@babel/types": "^7.18.4", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.18.2", + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", "dev": true, "requires": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" } }, "@jridgewell/gen-mapping": { - "version": "0.3.1", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.0", + "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" } @@ -19055,19 +21367,25 @@ } }, "@babel/types": { - "version": "7.18.4", + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.16.7", + "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } }, "@colors/colors": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true }, "@csstools/postcss-color-function": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.0.tgz", + "integrity": "sha512-5D5ND/mZWcQoSfYnSPsXtuiFxhzmhxt6pcjrFLJyldj+p0ZN2vvRpYNX+lahFTtMhAYOa2WmkdGINr0yP0CvGA==", "dev": true, "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -19076,6 +21394,8 @@ }, "@csstools/postcss-font-format-keywords": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.0.tgz", + "integrity": "sha512-oO0cZt8do8FdVBX8INftvIA4lUrKUSCcWUf9IwH9IPWOgKT22oAZFXeHLoDK7nhB2SmkNycp5brxfNMRLIhd6Q==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -19083,6 +21403,8 @@ }, "@csstools/postcss-hwb-function": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.1.tgz", + "integrity": "sha512-AMZwWyHbbNLBsDADWmoXT9A5yl5dsGEBeJSJRUJt8Y9n8Ziu7Wstt4MC8jtPW7xjcLecyfJwtnUTNSmOzcnWeg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -19090,6 +21412,8 @@ }, "@csstools/postcss-ic-unit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.0.tgz", + "integrity": "sha512-i4yps1mBp2ijrx7E96RXrQXQQHm6F4ym1TOD0D69/sjDjZvQ22tqiEvaNw7pFZTUO5b9vWRHzbHzP9+UKuw+bA==", "dev": true, "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -19097,7 +21421,9 @@ } }, "@csstools/postcss-is-pseudo-class": { - "version": "2.0.5", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.6.tgz", + "integrity": "sha512-Oqs396oenuyyMdRXOstxXbxei8fYEgToYjmlYHEi5gk0QLk7xQ72LY7NDr7waWAAmdVzRqPpbE26Q7/cUrGu4Q==", "dev": true, "requires": { "@csstools/selector-specificity": "^2.0.0", @@ -19106,6 +21432,8 @@ }, "@csstools/postcss-normalize-display-values": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.0.tgz", + "integrity": "sha512-bX+nx5V8XTJEmGtpWTO6kywdS725t71YSLlxWt78XoHUbELWgoCXeOFymRJmL3SU1TLlKSIi7v52EWqe60vJTQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -19113,6 +21441,8 @@ }, "@csstools/postcss-oklab-function": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.0.tgz", + "integrity": "sha512-e/Q5HopQzmnQgqimG9v3w2IG4VRABsBq3itOcn4bnm+j4enTgQZ0nWsaH/m9GV2otWGQ0nwccYL5vmLKyvP1ww==", "dev": true, "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -19121,6 +21451,8 @@ }, "@csstools/postcss-progressive-custom-properties": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -19128,6 +21460,8 @@ }, "@csstools/postcss-stepped-value-functions": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.0.tgz", + "integrity": "sha512-q8c4bs1GumAiRenmFjASBcWSLKrbzHzWl6C2HcaAxAXIiL2rUlUWbqQZUjwVG5tied0rld19j/Mm90K3qI26vw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -19135,26 +21469,36 @@ }, "@csstools/postcss-unset-value": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.1.tgz", + "integrity": "sha512-f1G1WGDXEU/RN1TWAxBPQgQudtLnLQPyiWdtypkPC+mVYNKFKH/HYXSxH4MVNqwF8M0eDsoiU7HumJHCg/L/jg==", "dev": true, "requires": {} }, "@csstools/selector-specificity": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.1.tgz", + "integrity": "sha512-aG20vknL4/YjQF9BSV7ts4EWm/yrjagAN7OWBNmlbEOUiu0llj4OGrFoOKK3g2vey4/p2omKCoHrWtPxSwV3HA==", "dev": true, "requires": {} }, "@ctrl/ngx-codemirror": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@ctrl/ngx-codemirror/-/ngx-codemirror-5.1.1.tgz", + "integrity": "sha512-MAByA/cJBZY3yv/cpO87mF9Q24/ptCWf2Pr4n4V1w3G0ya5cKAIyHwIfvJ5nJz/4Gj2i2O/pteDWkyxrbyICoA==", "requires": { "@types/codemirror": "^5.60.5", "tslib": "^2.3.0" } }, "@ctrl/tinycolor": { - "version": "3.4.1" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", + "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==" }, "@cypress/request": { "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -19179,6 +21523,8 @@ }, "@cypress/xvfb": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", "dev": true, "requires": { "debug": "^3.1.0", @@ -19187,6 +21533,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -19196,10 +21544,14 @@ }, "@discoveryjs/json-ext": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, "@eslint/eslintrc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -19215,6 +21567,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -19225,10 +21579,14 @@ }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -19236,7 +21594,9 @@ } }, "globals": { - "version": "13.15.0", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -19244,6 +21604,8 @@ }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -19251,10 +21613,14 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -19262,16 +21628,22 @@ }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "@gar/promisify": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "dev": true }, "@grpc/grpc-js": { "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.6.7.tgz", + "integrity": "sha512-eBM03pu9hd3VqDQG+kHahiG1x80RGkkqqRb1Pchcwqej/KkAH95gAvKs6laqaHCycYaPK+TKuNQnOz9UXYA8qw==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -19279,6 +21651,8 @@ }, "@grpc/proto-loader": { "version": "0.6.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.6.13.tgz", + "integrity": "sha512-FjxPYDRTn6Ec3V0arm1FtSpmP6V50wuph2yILpyvTKzjc76oDdoihXqM1DzOW5ubvCC8GivfCnNtfaRE8myJ7g==", "requires": { "@types/long": "^4.0.1", "lodash.camelcase": "^4.3.0", @@ -19289,6 +21663,8 @@ "dependencies": { "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -19300,12 +21676,16 @@ } }, "yargs-parser": { - "version": "20.2.9" + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } }, "@humanwhocodes/config-array": { "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -19315,6 +21695,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -19323,6 +21705,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -19332,10 +21716,14 @@ }, "@humanwhocodes/object-schema": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -19347,10 +21735,14 @@ }, "@istanbuljs/schema": { "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true }, "@jridgewell/gen-mapping": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", @@ -19358,19 +21750,27 @@ } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", "dev": true }, "@jridgewell/set-array": { - "version": "1.1.1", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.13", + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -19379,27 +21779,37 @@ }, "@leichtgewicht/ip-codec": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, "@ngtools/webpack": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.0.4.tgz", + "integrity": "sha512-83b/gB4Kna2FhIQj82RNZol+6gq+vLv6+4LUFOGSBb4Xha3RVQGJQpGwqEkXRFziwgTODrPWJAnOup5pzKv9wA==", "dev": true, "requires": {} }, "@ngx-translate/core": { "version": "14.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-14.0.0.tgz", + "integrity": "sha512-UevdwNCXMRCdJv//0kC8h2eSfmi02r29xeE8E9gJ1Al4D4jEJ7eiLPdjslTMc21oJNGguqqWeEVjf64SFtvw2w==", "requires": { "tslib": "^2.3.0" } }, "@ngx-translate/http-loader": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-7.0.0.tgz", + "integrity": "sha512-j+NpXXlcGVdyUNyY/qsJrqqeAdJdizCd+GKh3usXExSqy1aE9866jlAIL+xrfDU4w+LiMoma5pgE4emvFebZmA==", "requires": { "tslib": "^2.3.0" } }, "@nodelib/fs.scandir": { "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", @@ -19408,10 +21818,14 @@ }, "@nodelib/fs.stat": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", @@ -19420,6 +21834,8 @@ }, "@npmcli/fs": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.0.tgz", + "integrity": "sha512-DmfBvNXGaetMxj9LTp8NAN9vEidXURrf5ZTslQzEAi/6GbW+4yjaLFQc6Tue5cpZ9Frlk4OBo/Snf1Bh/S7qTQ==", "dev": true, "requires": { "@gar/promisify": "^1.1.3", @@ -19428,6 +21844,8 @@ }, "@npmcli/git": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.1.tgz", + "integrity": "sha512-UU85F/T+F1oVn3IsB/L6k9zXIMpXBuUBE25QDH0SsURwT6IOBqkC7M16uqo2vVZIyji3X1K4XH9luip7YekH1A==", "dev": true, "requires": { "@npmcli/promise-spawn": "^3.0.0", @@ -19443,6 +21861,8 @@ }, "@npmcli/installed-package-contents": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", "dev": true, "requires": { "npm-bundled": "^1.1.1", @@ -19451,6 +21871,8 @@ }, "@npmcli/move-file": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.0.tgz", + "integrity": "sha512-UR6D5f4KEGWJV6BGPH3Qb2EtgH+t+1XQ1Tt85c7qicN6cezzuHPdZwwAxqZr4JLtnQu0LZsTza/5gmNmSl8XLg==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -19459,10 +21881,14 @@ }, "@npmcli/node-gyp": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", "dev": true }, "@npmcli/promise-spawn": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", "dev": true, "requires": { "infer-owner": "^1.0.4" @@ -19470,6 +21896,8 @@ }, "@npmcli/run-script": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-3.0.3.tgz", + "integrity": "sha512-ZXL6qgC5NjwfZJ2nET+ZSLEz/PJgJ/5CU90C2S66dZY4Jw73DasS4ZCXuy/KHWYP0imjJ4VtA+Gebb5BxxKp9Q==", "dev": true, "requires": { "@npmcli/node-gyp": "^2.0.0", @@ -19479,21 +21907,27 @@ } }, "@nrwl/cli": { - "version": "14.3.6", + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/@nrwl/cli/-/cli-14.4.1.tgz", + "integrity": "sha512-9MHzXneygo1+hYgmBxrxe4L702OikuhcCzbUJ1W0JuvcEk/tbotn/EG/jaJqBzPyCQz1cZYYlJuN7sxg8bdtNw==", "dev": true, "requires": { - "nx": "14.3.6" + "nx": "14.4.1" }, "dependencies": { "@nrwl/tao": { - "version": "14.3.6", + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-14.4.1.tgz", + "integrity": "sha512-BLao0kpWFkP38V3Fli2cYmM3Vbjkfu01EKrKULIukPh7VlT8nX0vgUND7LcPg46d+HTlaQG12SGLqiMroB+qwQ==", "dev": true, "requires": { - "nx": "14.3.6" + "nx": "14.4.1" } }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -19501,10 +21935,14 @@ }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -19513,6 +21951,8 @@ }, "chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -19521,6 +21961,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -19528,10 +21970,14 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "fast-glob": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -19543,6 +21989,8 @@ }, "fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -19552,6 +22000,8 @@ }, "glob": { "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -19564,10 +22014,14 @@ }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -19575,6 +22029,8 @@ }, "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -19582,17 +22038,21 @@ }, "minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "nx": { - "version": "14.3.6", + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-14.4.1.tgz", + "integrity": "sha512-nXWrvtAe1Lp4IqqrjjhEQ0S3LmrlVLb9vjKkhSeirLOFnECWhf905hR0iQe8p+JDRrlD0zSjo2YiAAF1c6SarQ==", "dev": true, "requires": { - "@nrwl/cli": "14.3.6", - "@nrwl/tao": "14.3.6", + "@nrwl/cli": "14.4.1", + "@nrwl/tao": "14.4.1", "@parcel/watcher": "2.0.4", "chalk": "4.1.0", "chokidar": "^3.5.1", @@ -19625,6 +22085,8 @@ }, "semver": { "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -19632,6 +22094,8 @@ }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -19639,12 +22103,16 @@ }, "yargs-parser": { "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true } } }, "@nrwl/devkit": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-13.1.3.tgz", + "integrity": "sha512-TAAsZJvVc/obeH0rZKY6miVhyM2GHGb8qIWp9MAIdLlXf4VDcNC7rxwb5OrGVSwuTTjqGYBGPUx0yEogOOJthA==", "dev": true, "requires": { "@nrwl/tao": "13.1.3", @@ -19657,6 +22125,8 @@ "dependencies": { "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -19664,6 +22134,8 @@ }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -19671,12 +22143,16 @@ "dependencies": { "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "semver": { "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -19686,6 +22162,8 @@ }, "@nrwl/tao": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-13.1.3.tgz", + "integrity": "sha512-/IwJgSgCBD1SaF+n8RuXX2OxDAh8ut/+P8pMswjm8063ac30UlAHjQ4XTYyskLH8uoUmNi2hNaGgHUrkwt7tQA==", "dev": true, "requires": { "chalk": "4.1.0", @@ -19703,6 +22181,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -19710,6 +22190,8 @@ }, "chalk": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -19718,6 +22200,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -19725,14 +22209,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -19740,6 +22230,8 @@ }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -19747,17 +22239,23 @@ "dependencies": { "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "rxjs-for-await": { "version": "0.0.2", + "resolved": "https://registry.npmjs.org/rxjs-for-await/-/rxjs-for-await-0.0.2.tgz", + "integrity": "sha512-IJ8R/ZCFMHOcDIqoABs82jal00VrZx8Xkgfe7TOKoaRPAW5nH/VFlG23bXpeGdrmtqI9UobFPgUKgCuFc7Lncw==", "dev": true, "requires": {} }, "semver": { "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -19765,6 +22263,8 @@ }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -19774,6 +22274,8 @@ }, "@parcel/watcher": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, "requires": { "node-addon-api": "^3.2.1", @@ -19781,50 +22283,74 @@ } }, "@protobufjs/aspromise": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" }, "@protobufjs/base64": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" }, "@protobufjs/codegen": { - "version": "2.0.4" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" }, "@protobufjs/eventemitter": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" }, "@protobufjs/fetch": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" } }, "@protobufjs/float": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" }, "@protobufjs/inquire": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" }, "@protobufjs/path": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" }, "@protobufjs/pool": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" }, "@protobufjs/utf8": { - "version": "1.1.0" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "@schematics/angular": { - "version": "14.0.2", + "version": "14.0.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.0.4.tgz", + "integrity": "sha512-2t7B8ZplJzLfrU7SjciaUquaOAWCi6SD954Q1Ej/SZfWlLjs8k1SvlKb+Syzo9TMByMuzdKTrdnmNRHekvMZEQ==", "dev": true, "requires": { - "@angular-devkit/core": "14.0.2", - "@angular-devkit/schematics": "14.0.2", + "@angular-devkit/core": "14.0.4", + "@angular-devkit/schematics": "14.0.4", "jsonc-parser": "3.0.0" } }, "@stylelint/postcss-css-in-js": { "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.3.tgz", + "integrity": "sha512-scLk3cSH1H9KggSniseb2KNAU5D9FWc3H7BxCSAIdtU9OWIyw0zkEZ9qEKHryRM+SExYXRKNb7tOOVNAsQ3iwg==", "dev": true, "requires": { "@babel/core": "^7.17.9" @@ -19832,6 +22358,8 @@ }, "@stylelint/postcss-markdown": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz", + "integrity": "sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ==", "dev": true, "requires": { "remark": "^13.0.0", @@ -19840,10 +22368,14 @@ }, "@tootallnate/once": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "@types/body-parser": { "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "requires": { "@types/connect": "*", @@ -19852,6 +22384,8 @@ }, "@types/bonjour": { "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, "requires": { "@types/node": "*" @@ -19859,16 +22393,22 @@ }, "@types/codemirror": { "version": "5.60.5", + "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.5.tgz", + "integrity": "sha512-TiECZmm8St5YxjFUp64LK0c8WU5bxMDt9YaAek1UqUb9swrSCoJhh92fWu1p3mTEqlHjhB5sY7OFBhWroJXZVg==", "requires": { "@types/tern": "*" } }, "@types/component-emitter": { "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, "@types/connect": { "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { "@types/node": "*" @@ -19876,6 +22416,8 @@ }, "@types/connect-history-api-fallback": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, "requires": { "@types/express-serve-static-core": "*", @@ -19884,14 +22426,20 @@ }, "@types/cookie": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, "@types/cors": { "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", "dev": true }, "@types/eslint": { - "version": "8.4.3", + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", "dev": true, "requires": { "@types/estree": "*", @@ -19899,7 +22447,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.3", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, "requires": { "@types/eslint": "*", @@ -19907,10 +22457,14 @@ } }, "@types/estree": { - "version": "0.0.51" + "version": "0.0.52", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz", + "integrity": "sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==" }, "@types/express": { "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, "requires": { "@types/body-parser": "*", @@ -19921,6 +22475,8 @@ }, "@types/express-serve-static-core": { "version": "4.17.29", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", + "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", "dev": true, "requires": { "@types/node": "*", @@ -19929,13 +22485,19 @@ } }, "@types/file-saver": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==" }, "@types/google-protobuf": { - "version": "3.15.6" + "version": "3.15.6", + "resolved": "https://registry.npmjs.org/@types/google-protobuf/-/google-protobuf-3.15.6.tgz", + "integrity": "sha512-pYVNNJ+winC4aek+lZp93sIKxnXt5qMkuKmaqS3WGuTq0Bw1ZDYNBgzG5kkdtwcv+GmYJGo3yEg6z2cKKAiEdw==" }, "@types/http-proxy": { "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", "dev": true, "requires": { "@types/node": "*" @@ -19943,10 +22505,14 @@ }, "@types/jasmine": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", + "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", "dev": true }, "@types/jasminewd2": { "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.10.tgz", + "integrity": "sha512-J7mDz7ovjwjc+Y9rR9rY53hFWKATcIkrr9DwQWmOas4/pnIPJTXawnzjwpHm3RSxz/e3ZVUvQ7cRbd5UQLo10g==", "dev": true, "requires": { "@types/jasmine": "*" @@ -19954,24 +22520,34 @@ }, "@types/json-schema": { "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/jsonwebtoken": { "version": "8.5.8", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.8.tgz", + "integrity": "sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==", "dev": true, "requires": { "@types/node": "*" } }, "@types/long": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" }, "@types/mdast": { "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", + "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", "dev": true, "requires": { "@types/unist": "*" @@ -19979,45 +22555,67 @@ }, "@types/mime": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, "@types/minimist": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/node": { - "version": "17.0.45" + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" }, "@types/normalize-package-data": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "@types/parse-json": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, "@types/q": { "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==", "dev": true }, "@types/qs": { "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, "@types/range-parser": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, "@types/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, "@types/selenium-webdriver": { "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.20.tgz", + "integrity": "sha512-6d8Q5fqS9DWOXEhMDiF6/2FjyHdmP/jSTAUyeQR7QwrFeNmYyzmvGxD5aLIHL445HjWgibs0eAig+KPnbaesXA==", "dev": true }, "@types/serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, "requires": { "@types/express": "*" @@ -20025,6 +22623,8 @@ }, "@types/serve-static": { "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, "requires": { "@types/mime": "^1", @@ -20033,14 +22633,20 @@ }, "@types/sinonjs__fake-timers": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", "dev": true }, "@types/sizzle": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", "dev": true }, "@types/sockjs": { "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, "requires": { "@types/node": "*" @@ -20048,19 +22654,27 @@ }, "@types/tern": { "version": "0.23.4", + "resolved": "https://registry.npmjs.org/@types/tern/-/tern-0.23.4.tgz", + "integrity": "sha512-JAUw1iXGO1qaWwEOzxTKJZ/5JxVeON9kvGZ/osgZaJImBnyjyn0cjovPsf6FNLmyGY8Vw9DoXZCMlfMkMwHRWg==", "requires": { "@types/estree": "*" } }, "@types/unist": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", "dev": true }, "@types/uuid": { - "version": "8.3.4" + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==" }, "@types/ws": { "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", "dev": true, "requires": { "@types/node": "*" @@ -20068,6 +22682,8 @@ }, "@types/yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", "dev": true, "optional": true, "requires": { @@ -20075,204 +22691,186 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz", + "integrity": "sha512-xjujQISAIa4HAaos8fcMZXmqkuZqMx6icdxkI88jMM/eNe4J8AuTLYnLK+zdm0mBYLyctdFf//UE4/xFCcQzYQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/type-utils": "5.25.0", - "@typescript-eslint/utils": "5.25.0", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/type-utils": "5.30.4", + "@typescript-eslint/utils": "5.30.4", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.27.1", - "dev": true, - "requires": { - "@typescript-eslint/utils": "5.27.1" }, "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.27.1", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.27.1", - "@typescript-eslint/visitor-keys": "5.27.1" - } - }, - "@typescript-eslint/types": { - "version": "5.27.1", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.27.1", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.27.1", - "@typescript-eslint/visitor-keys": "5.27.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, "@typescript-eslint/utils": { - "version": "5.27.1", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.4.tgz", + "integrity": "sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.27.1", - "@typescript-eslint/types": "5.27.1", - "@typescript-eslint/typescript-estree": "5.27.1", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/typescript-estree": "5.30.4", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.27.1", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.27.1", - "eslint-visitor-keys": "^3.3.0" - } } } }, "@typescript-eslint/parser": { - "version": "5.27.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.4.tgz", + "integrity": "sha512-/ge1HtU63wVoED4VnlU2o+FPFmi017bPYpeSrCmd8Ycsti4VSxXrmcpXXm7JpI4GT0Aa7qviabv1PEp6L5bboQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.27.0", - "@typescript-eslint/types": "5.27.0", - "@typescript-eslint/typescript-estree": "5.27.0", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/typescript-estree": "5.30.4", "debug": "^4.3.4" - }, - "dependencies": { - "@typescript-eslint/scope-manager": { - "version": "5.27.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.27.0", - "@typescript-eslint/visitor-keys": "5.27.0" - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.27.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.27.0", - "eslint-visitor-keys": "^3.3.0" - } - } } }, "@typescript-eslint/scope-manager": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.4.tgz", + "integrity": "sha512-DNzlQwGSiGefz71JwaHrpcaAX3zYkEcy8uVuan3YMKOa6qeW/y+7SaD8KIsIAruASwq6P+U4BjWBWtM2O+mwBQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0" - }, - "dependencies": { - "@typescript-eslint/types": { - "version": "5.25.0", - "dev": true - } + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/visitor-keys": "5.30.4" } }, "@typescript-eslint/type-utils": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.4.tgz", + "integrity": "sha512-55cf1dZviwwv+unDB+mF8vZkfta5muTK6bppPvenWWCD7slZZ0DEsXUjZerqy7Rq8s3J4SXdg4rMIY8ngCtTmA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.25.0", + "@typescript-eslint/utils": "5.30.4", "debug": "^4.3.4", "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/utils": { + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.4.tgz", + "integrity": "sha512-a+GQrJzOUhn4WT1mUumXDyam+22Oo4c5K/jnZ+6r/4WTQF3q8e4CsC9PLHb4SnOClzOqo/5GLZWvkE1aa5UGKQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.30.4", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/typescript-estree": "5.30.4", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + } } }, "@typescript-eslint/types": { - "version": "5.27.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.4.tgz", + "integrity": "sha512-NTEvqc+Vvu8Q6JeAKryHk2eqLKqsr2St3xhIjhOjQv5wQUBhaTuix4WOSacqj0ONWfKVU12Eug3LEAB95GBkMA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.27.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.4.tgz", + "integrity": "sha512-V4VnEs6/J9/nNizaA12IeU4SAeEYaiKr7XndLNfV5+3zZSB4hIu6EhHJixTKhvIqA+EEHgBl6re8pivBMLLO1w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.27.0", - "@typescript-eslint/visitor-keys": "5.27.0", + "@typescript-eslint/types": "5.30.4", + "@typescript-eslint/visitor-keys": "5.30.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" - }, - "dependencies": { - "@typescript-eslint/visitor-keys": { - "version": "5.27.0", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.27.0", - "eslint-visitor-keys": "^3.3.0" - } - } } }, "@typescript-eslint/utils": { - "version": "5.25.0", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.29.0.tgz", + "integrity": "sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.25.0", - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/typescript-estree": "5.25.0", + "@typescript-eslint/scope-manager": "5.29.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/typescript-estree": "5.29.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz", + "integrity": "sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0" + } + }, "@typescript-eslint/types": { - "version": "5.25.0", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.29.0.tgz", + "integrity": "sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.25.0", + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz", + "integrity": "sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.25.0", - "@typescript-eslint/visitor-keys": "5.25.0", + "@typescript-eslint/types": "5.29.0", + "@typescript-eslint/visitor-keys": "5.29.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz", + "integrity": "sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.29.0", + "eslint-visitor-keys": "^3.3.0" + } } } }, "@typescript-eslint/visitor-keys": { - "version": "5.25.0", + "version": "5.30.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.4.tgz", + "integrity": "sha512-ulKGse3mruSc8x6l8ORSc6+1ORyJzKmZeIaRTu/WpaF/jx3vHvEn5XZUKF9XaVg2710mFmTAUlLcLYLPp/Zf/Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.25.0", + "@typescript-eslint/types": "5.30.4", "eslint-visitor-keys": "^3.3.0" - }, - "dependencies": { - "@typescript-eslint/types": { - "version": "5.25.0", - "dev": true - } } }, "@ungap/promise-all-settled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true, "peer": true }, "@webassemblyjs/ast": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.1", @@ -20281,18 +22879,26 @@ }, "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", @@ -20302,10 +22908,14 @@ }, "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", @@ -20316,6 +22926,8 @@ }, "@webassemblyjs/ieee754": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" @@ -20323,6 +22935,8 @@ }, "@webassemblyjs/leb128": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" @@ -20330,10 +22944,14 @@ }, "@webassemblyjs/utf8": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", @@ -20348,6 +22966,8 @@ }, "@webassemblyjs/wasm-gen": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", @@ -20359,6 +22979,8 @@ }, "@webassemblyjs/wasm-opt": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", @@ -20369,6 +22991,8 @@ }, "@webassemblyjs/wasm-parser": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", @@ -20381,6 +23005,8 @@ }, "@webassemblyjs/wast-printer": { "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.11.1", @@ -20389,26 +23015,38 @@ }, "@xtuc/ieee754": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "@xtuc/long": { "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "@yarnpkg/lockfile": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, "abab": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", "dev": true }, "abbrev": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true }, "accepts": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { "mime-types": "~2.1.34", @@ -20417,20 +23055,28 @@ }, "acorn": { "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true }, "acorn-import-assertions": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, "requires": {} }, "acorn-jsx": { "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "adjust-sourcemap-loader": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -20439,6 +23085,8 @@ "dependencies": { "loader-utils": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -20450,10 +23098,14 @@ }, "adm-zip": { "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", "dev": true }, "agent-base": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" @@ -20461,6 +23113,8 @@ }, "agentkeepalive": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -20470,12 +23124,16 @@ "dependencies": { "depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true } } }, "aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -20484,6 +23142,8 @@ }, "ajv": { "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -20494,6 +23154,8 @@ }, "ajv-formats": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "requires": { "ajv": "^8.0.0" @@ -20501,6 +23163,8 @@ }, "ajv-keywords": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.3" @@ -20508,6 +23172,8 @@ }, "angular-oauth2-oidc": { "version": "13.0.1", + "resolved": "https://registry.npmjs.org/angular-oauth2-oidc/-/angular-oauth2-oidc-13.0.1.tgz", + "integrity": "sha512-aL1VIv9Jqoqq31lbpUXIeNpM3GeN/ldb3KOlq0cV92amGpZs9J4YA+2rlJ5V9zb6NFNbvd7XfTntMbnNuS0+CQ==", "requires": { "fast-sha256": "^1.3.0", "tslib": "^2.0.0" @@ -20515,10 +23181,14 @@ }, "ansi-colors": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-escapes": { "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { "type-fest": "^0.21.3" @@ -20526,13 +23196,19 @@ }, "ansi-html-community": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "5.0.1" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -20540,6 +23216,8 @@ }, "anymatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -20548,18 +23226,26 @@ }, "app-root-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", "dev": true }, "aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, "arch": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, "are-we-there-yet": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", + "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", "dev": true, "requires": { "delegates": "^1.0.0", @@ -20568,6 +23254,8 @@ }, "argparse": { "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -20575,32 +23263,46 @@ "dependencies": { "sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true } } }, "aria-query": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", + "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", "dev": true }, "array-flatten": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, "array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "array-uniq": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, "arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true }, "asn1": { "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -20608,34 +23310,50 @@ }, "assert-plus": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true }, "ast-types-flow": { "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", "dev": true }, "astral-regex": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, "asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, "at-least-node": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, "atob": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true }, "autoprefixer": { "version": "10.4.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", + "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", "dev": true, "requires": { "browserslist": "^4.20.3", @@ -20648,18 +23366,26 @@ }, "aws-sign2": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", "dev": true }, "aws4": { "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "axobject-query": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.0.1.tgz", + "integrity": "sha512-vy5JPSOibF9yAeC2PoemRdA1MuSXX7vX5osdoxKf/6OUeppAWekZ3JIJVNWFMH6wgj7uHYyqZUSqE/b/3JLV1A==", "dev": true }, "babel-loader": { "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", "dev": true, "requires": { "find-cache-dir": "^3.3.1", @@ -20670,6 +23396,8 @@ "dependencies": { "loader-utils": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -20681,6 +23409,8 @@ }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { "object.assign": "^4.1.0" @@ -20688,6 +23418,8 @@ }, "babel-plugin-istanbul": { "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -20699,6 +23431,8 @@ }, "babel-plugin-polyfill-corejs2": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", @@ -20708,12 +23442,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "babel-plugin-polyfill-corejs3": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1", @@ -20722,6 +23460,8 @@ }, "babel-plugin-polyfill-regenerator": { "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1" @@ -20729,25 +23469,37 @@ }, "bail": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", "dev": true }, "balanced-match": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base64-js": { - "version": "1.5.1" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64id": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, "batch": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", "dev": true, "requires": { "tweetnacl": "^0.14.3" @@ -20755,14 +23507,20 @@ }, "big.js": { "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "bl": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "requires": { "buffer": "^5.5.0", @@ -20772,6 +23530,8 @@ "dependencies": { "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", @@ -20782,10 +23542,14 @@ }, "blob-util": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", "dev": true }, "blocking-proxy": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -20793,10 +23557,14 @@ }, "bluebird": { "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "body-parser": { "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { "bytes": "3.1.2", @@ -20815,6 +23583,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -20822,10 +23592,14 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -20835,6 +23609,8 @@ }, "bonjour-service": { "version": "1.0.13", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.13.tgz", + "integrity": "sha512-LWKRU/7EqDUC9CTAQtuZl5HzBALoCYwtLhffW3et7vZMwv3bWLpJf8bRYlMD5OCcDpTfnPgNCV4yo9ZIaJGMiA==", "dev": true, "requires": { "array-flatten": "^2.1.2", @@ -20845,10 +23621,14 @@ }, "boolbase": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "brace-expansion": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -20856,6 +23636,8 @@ }, "braces": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" @@ -20863,22 +23645,27 @@ }, "browser-stdout": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true, "peer": true }, "browserslist": { - "version": "4.20.4", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001349", - "electron-to-chromium": "^1.4.147", - "escalade": "^3.1.1", + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", "node-releases": "^2.0.5", - "picocolors": "^1.0.0" + "update-browserslist-db": "^1.0.4" } }, "browserstack": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.1.tgz", + "integrity": "sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -20886,6 +23673,8 @@ "dependencies": { "agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -20893,6 +23682,8 @@ }, "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -20900,6 +23691,8 @@ }, "https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { "agent-base": "^4.3.0", @@ -20910,6 +23703,8 @@ }, "buffer": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "requires": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -20917,23 +23712,33 @@ }, "buffer-crc32": { "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true }, "buffer-equal-constant-time": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "dev": true }, "buffer-from": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "builtin-modules": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", "dev": true, "peer": true }, "builtins": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", "dev": true, "requires": { "semver": "^7.0.0" @@ -20941,10 +23746,14 @@ }, "bytes": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "cacache": { "version": "16.0.7", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.0.7.tgz", + "integrity": "sha512-a4zfQpp5vm4Ipdvbj+ZrPonikRhm6WBEd4zT1Yc1DXsmAxrPgDwWBLF/u/wTVXSFPIgOJ1U3ghSa2Xm4s3h28w==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", @@ -20969,10 +23778,14 @@ }, "cachedir": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", "dev": true }, "call-bind": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -20981,13 +23794,19 @@ }, "callsites": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camelcase": { - "version": "5.3.1" + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -20996,15 +23815,21 @@ } }, "caniuse-lite": { - "version": "1.0.30001355", + "version": "1.0.30001363", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001363.tgz", + "integrity": "sha512-HpQhpzTGGPVMnCjIomjt+jvyUu8vNFo3TaDiZ/RcoTrlOq/5+tC8zHdsbgFB6MxmaY+jCpsH09aD80Bb4Ow3Sg==", "dev": true }, "caseless": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, "chalk": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -21014,26 +23839,38 @@ }, "character-entities": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "dev": true }, "character-entities-legacy": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "dev": true }, "character-reference-invalid": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "dev": true }, "chardet": { "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, "check-more-types": { "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", "dev": true }, "chokidar": { "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { "anymatch": "~3.1.2", @@ -21048,22 +23885,32 @@ }, "chownr": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true }, "chrome-trace-event": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, "ci-info": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, "clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, "cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { "restore-cursor": "^3.1.0" @@ -21071,10 +23918,14 @@ }, "cli-spinners": { "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true }, "cli-table3": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -21083,6 +23934,8 @@ }, "cli-truncate": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, "requires": { "slice-ansi": "^3.0.0", @@ -21091,10 +23944,14 @@ }, "cli-width": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -21103,10 +23960,14 @@ }, "clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, "clone-deep": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", @@ -21116,6 +23977,8 @@ }, "clone-regexp": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", + "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", "dev": true, "requires": { "is-regexp": "^2.0.0" @@ -21123,6 +23986,8 @@ }, "codelyzer": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", + "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", "dev": true, "requires": { "@angular/compiler": "9.0.0", @@ -21143,16 +24008,22 @@ "dependencies": { "@angular/compiler": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", "dev": true, "requires": {} }, "@angular/core": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", "dev": true, "requires": {} }, "aria-query": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha512-majUxHgLehQTeSA+hClx+DY09OVUqG3GtezWkF1krgLGNdlDu9l9V8DaqNMWbq4Eddc8wsyDA0hpDUtnYxQEXw==", "dev": true, "requires": { "ast-types-flow": "0.0.7", @@ -21161,6 +24032,8 @@ }, "axobject-query": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, "requires": { "ast-types-flow": "0.0.7" @@ -21168,10 +24041,14 @@ }, "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "rxjs": { "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -21179,25 +24056,33 @@ }, "source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "zone.js": { "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", "dev": true } } }, "codemirror": { - "version": "5.65.5", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.5.tgz", - "integrity": "sha512-HNyhvGLnYz5c+kIsB9QKVitiZUevha3ovbIYaQiGzKo7ECSL/elWD9RXt3JgNr0NdnyqE9/Rc/7uLfkJQL638w==" + "version": "5.65.6", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.6.tgz", + "integrity": "sha512-zNihMSMoDxK9Gqv9oEyDT8oM51rcRrQ+IEo2zyS48gJByBq5Fj8XuNEguMra+MuIOuh6lkpnLUJeL70DoTt6yw==" }, "color-convert": { "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -21205,22 +24090,32 @@ }, "color-name": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, "color-support": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, "colorette": { "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, "colors": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -21228,22 +24123,32 @@ }, "commander": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true }, "common-tags": { "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true }, "commondir": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, "component-emitter": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "compressible": { "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { "mime-db": ">= 1.43.0 < 2" @@ -21251,6 +24156,8 @@ }, "compression": { "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", @@ -21264,10 +24171,14 @@ "dependencies": { "bytes": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true }, "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -21275,16 +24186,22 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "concat-map": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "connect": { "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", @@ -21295,6 +24212,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -21302,20 +24221,28 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "connect-history-api-fallback": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, "console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "content-disposition": { "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { "safe-buffer": "5.2.1" @@ -21323,16 +24250,22 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } }, "content-type": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true }, "convert-source-map": { "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -21340,14 +24273,20 @@ }, "cookie": { "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true }, "cookie-signature": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "copy-anything": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", "dev": true, "requires": { "is-what": "^3.14.1" @@ -21355,6 +24294,8 @@ }, "copy-webpack-plugin": { "version": "10.2.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", + "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", "dev": true, "requires": { "fast-glob": "^3.2.7", @@ -21367,10 +24308,14 @@ "dependencies": { "array-union": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "dev": true }, "glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" @@ -21378,6 +24323,8 @@ }, "globby": { "version": "12.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", + "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "dev": true, "requires": { "array-union": "^3.0.1", @@ -21390,6 +24337,8 @@ }, "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -21400,30 +24349,40 @@ }, "slash": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true } } }, "core-js-compat": { - "version": "3.23.1", + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", + "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", "dev": true, "requires": { - "browserslist": "^4.20.4", + "browserslist": "^4.21.0", "semver": "7.0.0" }, "dependencies": { "semver": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true } } }, "core-util-is": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true }, "cors": { "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "requires": { "object-assign": "^4", "vary": "^1" @@ -21431,6 +24390,8 @@ }, "cosmiconfig": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -21442,6 +24403,8 @@ }, "critters": { "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -21454,6 +24417,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -21461,6 +24426,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -21469,6 +24436,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -21476,18 +24445,26 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -21497,6 +24474,8 @@ }, "cross-spawn": { "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", @@ -21506,6 +24485,8 @@ }, "css": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "dev": true, "requires": { "inherits": "^2.0.4", @@ -21515,12 +24496,16 @@ "dependencies": { "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "css-blank-pseudo": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.9" @@ -21528,6 +24513,8 @@ }, "css-has-pseudo": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.9" @@ -21535,6 +24522,8 @@ }, "css-loader": { "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", "dev": true, "requires": { "icss-utils": "^5.1.0", @@ -21549,11 +24538,15 @@ }, "css-prefers-color-scheme": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", "dev": true, "requires": {} }, "css-select": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { "boolbase": "^1.0.0", @@ -21565,6 +24558,8 @@ }, "css-selector-tokenizer": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -21573,10 +24568,14 @@ }, "css-what": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, "cssauron": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha512-Ht70DcFBh+/ekjVrYS2PlDMdSQEl3OFNmjK6lcn49HptBgilXf/Zwg4uFh9Xn0pX3Q8YOkSjIFOfK2osvdqpBw==", "dev": true, "requires": { "through": "X.X.X" @@ -21584,18 +24583,26 @@ }, "cssdb": { "version": "6.6.3", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-6.6.3.tgz", + "integrity": "sha512-7GDvDSmE+20+WcSMhP17Q1EVWUrLlbxxpMDqG731n8P99JhnQZHR9YvtjPvEHfjFUjvQJvdpKCjlKOX+xe4UVA==", "dev": true }, "cssesc": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "custom-event": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, "cypress": { - "version": "10.1.0", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.3.0.tgz", + "integrity": "sha512-txkQWKzvBVnWdCuKs5Xc08gjpO89W2Dom2wpZgT9zWZT5jXxqPIxqP/NC1YArtkpmp3fN5HW8aDjYBizHLUFvg==", "dev": true, "requires": { "@cypress/request": "^2.88.10", @@ -21644,10 +24651,14 @@ "dependencies": { "@types/node": { "version": "14.18.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", + "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==", "dev": true }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -21655,6 +24666,8 @@ }, "buffer": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { "base64-js": "^1.3.1", @@ -21663,6 +24676,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -21671,6 +24686,8 @@ "dependencies": { "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -21680,6 +24697,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -21687,14 +24706,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -21703,7 +24728,9 @@ } }, "cypress-terminal-report": { - "version": "4.0.1", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-4.0.2.tgz", + "integrity": "sha512-sk7zBRZIh19U32pbOyv6GtlWPxE1C6l+mMAhnPAmsv619s7+O7/jZbI4YZfM2MyO50Om/qEq7W5rVP8yolihAA==", "dev": true, "requires": { "chalk": "^3.0.0", @@ -21715,6 +24742,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -21722,6 +24751,8 @@ }, "chalk": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -21730,6 +24761,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -21737,14 +24770,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -21754,10 +24793,14 @@ }, "damerau-levenshtein": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "dashdash": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -21765,28 +24808,40 @@ }, "date-format": { "version": "4.0.11", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", + "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", "dev": true }, "dateformat": { "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", "dev": true }, "dayjs": { "version": "1.11.3", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", + "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==", "dev": true }, "debug": { "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "decamelize": { - "version": "1.2.0" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" }, "decamelize-keys": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", "dev": true, "requires": { "decamelize": "^1.1.0", @@ -21795,20 +24850,28 @@ "dependencies": { "map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true } } }, "decode-uri-component": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", "dev": true }, "deep-is": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-gateway": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "requires": { "execa": "^5.0.0" @@ -21816,6 +24879,8 @@ "dependencies": { "execa": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -21831,16 +24896,22 @@ }, "get-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "human-signals": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true } } }, "defaults": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", "dev": true, "requires": { "clone": "^1.0.2" @@ -21848,10 +24919,14 @@ }, "define-lazy-prop": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, "define-properties": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { "has-property-descriptors": "^1.0.0", @@ -21860,6 +24935,8 @@ }, "del": { "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==", "dev": true, "requires": { "globby": "^5.0.0", @@ -21873,6 +24950,8 @@ "dependencies": { "array-union": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "requires": { "array-uniq": "^1.0.1" @@ -21880,6 +24959,8 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -21888,6 +24969,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -21900,6 +24983,8 @@ }, "globby": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==", "dev": true, "requires": { "array-union": "^1.0.1", @@ -21912,6 +24997,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -21919,6 +25006,8 @@ }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -21928,41 +25017,61 @@ }, "delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "delegates": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "depd": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "dependency-graph": { "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "dev": true }, "destroy": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detect-node": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "di": { "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", "dev": true }, "diff": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, "dijkstrajs": { - "version": "1.0.2" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", + "integrity": "sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==" }, "dir-glob": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" @@ -21970,10 +25079,14 @@ }, "dns-equal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", "dev": true }, "dns-packet": { "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -21981,6 +25094,8 @@ }, "doctrine": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" @@ -21988,6 +25103,8 @@ }, "dom-serialize": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, "requires": { "custom-event": "~1.0.0", @@ -21998,6 +25115,8 @@ }, "dom-serializer": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -22007,10 +25126,14 @@ }, "domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, "domhandler": { "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -22018,6 +25141,8 @@ }, "domutils": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -22027,10 +25152,14 @@ }, "dotenv": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true }, "ecc-jsbn": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", "dev": true, "requires": { "jsbn": "~0.1.0", @@ -22039,6 +25168,8 @@ }, "ecdsa-sig-formatter": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -22046,35 +25177,51 @@ }, "ee-first": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "ejs": { "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", "dev": true, "requires": { "jake": "^10.8.5" } }, "electron-to-chromium": { - "version": "1.4.160", + "version": "1.4.179", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.179.tgz", + "integrity": "sha512-1XeTb/U/8Xgh2YgPOqhakLYsvCcU4U7jUjTMbEnhIJoIWd/Qt3yC8y0cbG+fHzn4zUNF99Ey1xiPf20bwgLO3Q==", "dev": true }, "emoji-regex": { - "version": "8.0.0" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "encode-utf8": { - "version": "1.0.3" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, "encodeurl": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, "encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "optional": true, "requires": { @@ -22083,6 +25230,8 @@ "dependencies": { "iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "optional": true, "requires": { @@ -22093,6 +25242,8 @@ }, "end-of-stream": { "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -22100,6 +25251,8 @@ }, "engine.io": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", + "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -22116,10 +25269,14 @@ }, "engine.io-parser": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", + "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", "dev": true }, "enhanced-resolve": { - "version": "5.9.3", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -22128,6 +25285,8 @@ }, "enquirer": { "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "requires": { "ansi-colors": "^4.1.1" @@ -22135,22 +25294,32 @@ }, "ent": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", "dev": true }, "entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true }, "err-code": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true }, "errno": { "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "optional": true, "requires": { @@ -22159,6 +25328,8 @@ }, "error-ex": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" @@ -22166,14 +25337,20 @@ }, "es-module-lexer": { "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "es6-promise": { "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "es6-promisify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "dev": true, "requires": { "es6-promise": "^4.0.3" @@ -22181,6 +25358,8 @@ }, "esbuild": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", + "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", "dev": true, "optional": true, "requires": { @@ -22206,28 +25385,173 @@ "esbuild-windows-arm64": "0.14.38" } }, + "esbuild-android-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", + "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", + "dev": true, + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", + "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", + "dev": true, + "optional": true + }, "esbuild-darwin-64": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", + "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", + "dev": true, + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", + "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", + "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", + "dev": true, + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", + "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", + "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", + "dev": true, + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", + "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", + "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", + "dev": true, + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", + "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", + "dev": true, + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", + "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", + "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", + "dev": true, + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", + "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", + "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", + "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", + "dev": true, + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", + "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", + "dev": true, + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", + "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", "dev": true, "optional": true }, "esbuild-wasm": { "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.38.tgz", + "integrity": "sha512-mObTw5/3+KIOTShVgk3fuEn+INnHgOSbWJuGkInEZTWpUOh/+TCSgRxl5cDon4OkoaLU5rWm7R7Dkl/mJv8SGw==", "dev": true }, + "esbuild-windows-32": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", + "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", + "dev": true, + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", + "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", + "dev": true, + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.38", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", + "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", + "dev": true, + "optional": true + }, "escalade": { - "version": "3.1.1" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, "eslint": { - "version": "8.17.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", + "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", "dev": true, "requires": { "@eslint/eslintrc": "^1.3.0", @@ -22269,6 +25593,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -22279,6 +25605,8 @@ }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -22286,10 +25614,14 @@ }, "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -22298,6 +25630,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -22306,6 +25640,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -22313,14 +25649,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint-scope": { "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -22329,17 +25671,23 @@ }, "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "glob-parent": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" } }, "globals": { - "version": "13.15.0", + "version": "13.16.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", + "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -22347,10 +25695,14 @@ }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -22358,10 +25710,14 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -22369,6 +25725,8 @@ }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -22376,12 +25734,16 @@ }, "type-fest": { "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true } } }, "eslint-scope": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -22390,6 +25752,8 @@ }, "eslint-utils": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" @@ -22397,16 +25761,22 @@ "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "espree": { "version": "9.3.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", + "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", "dev": true, "requires": { "acorn": "^8.7.1", @@ -22416,10 +25786,14 @@ }, "esprima": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esquery": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -22427,12 +25801,16 @@ "dependencies": { "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "esrecurse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" @@ -22440,40 +25818,58 @@ "dependencies": { "estraverse": { "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } }, "estraverse": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, "esutils": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, "eventemitter-asyncresource": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "dev": true }, "eventemitter2": { - "version": "6.4.5", + "version": "6.4.6", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", + "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==", "dev": true }, "eventemitter3": { "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "execa": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -22489,6 +25885,8 @@ }, "execall": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", + "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", "dev": true, "requires": { "clone-regexp": "^2.1.0" @@ -22496,6 +25894,8 @@ }, "executable": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", "dev": true, "requires": { "pify": "^2.2.0" @@ -22503,10 +25903,14 @@ }, "exit": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, "express": { "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", "dev": true, "requires": { "accepts": "~1.3.8", @@ -22544,14 +25948,20 @@ "dependencies": { "array-flatten": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "cookie": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -22559,6 +25969,8 @@ }, "finalhandler": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { "debug": "2.6.9", @@ -22572,10 +25984,14 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "qs": { "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -22583,20 +25999,28 @@ }, "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } }, "extend": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "external-editor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -22606,6 +26030,8 @@ "dependencies": { "tmp": { "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { "os-tmpdir": "~1.0.2" @@ -22615,6 +26041,8 @@ }, "extract-zip": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "requires": { "@types/yauzl": "^2.9.1", @@ -22625,14 +26053,20 @@ }, "extsprintf": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", "dev": true }, "fast-deep-equal": { "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -22644,25 +26078,37 @@ }, "fast-json-stable-stringify": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fast-sha256": { - "version": "1.3.0" + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-sha256/-/fast-sha256-1.3.0.tgz", + "integrity": "sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==" }, "fastest-levenshtein": { "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, "fastparse": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", "dev": true }, "fastq": { "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -22670,6 +26116,8 @@ }, "faye-websocket": { "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -22677,6 +26125,8 @@ }, "fd-slicer": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "requires": { "pend": "~1.2.0" @@ -22684,6 +26134,8 @@ }, "figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -22691,16 +26143,22 @@ }, "file-entry-cache": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "file-saver": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "filelist": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -22708,6 +26166,8 @@ }, "fill-range": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -22715,6 +26175,8 @@ }, "finalhandler": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "requires": { "debug": "2.6.9", @@ -22728,6 +26190,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -22735,10 +26199,14 @@ }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "on-finished": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -22748,6 +26216,8 @@ }, "find-cache-dir": { "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -22757,6 +26227,8 @@ }, "find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -22764,10 +26236,14 @@ }, "flat": { "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "flat-cache": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", @@ -22775,19 +26251,27 @@ } }, "flatted": { - "version": "3.2.5", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, "follow-redirects": { "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", "dev": true }, "forever-agent": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "dev": true }, "form-data": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { "asynckit": "^0.4.0", @@ -22797,22 +26281,32 @@ }, "forwarded": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fraction.js": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true }, "fresh": { "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "fs-constants": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "requires": { "at-least-node": "^1.0.0", @@ -22823,6 +26317,8 @@ }, "fs-minipass": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -22830,31 +26326,45 @@ }, "fs-monkey": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, "fs.realpath": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "fsu": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", "dev": true }, "function-bind": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "functional-red-black-tree": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "dev": true }, "gauge": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "dev": true, "requires": { "aproba": "^1.0.3 || ^2.0.0", @@ -22869,13 +26379,19 @@ }, "gensync": { "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "get-caller-file": { - "version": "2.0.5" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -22885,14 +26401,20 @@ }, "get-package-type": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true }, "get-stdin": { "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, "get-stream": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -22900,6 +26422,8 @@ }, "getos": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", "dev": true, "requires": { "async": "^3.2.0" @@ -22907,6 +26431,8 @@ }, "getpass": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", "dev": true, "requires": { "assert-plus": "^1.0.0" @@ -22914,6 +26440,8 @@ }, "glob": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.1.tgz", + "integrity": "sha512-cF7FYZZ47YzmCu7dDy50xSRRfO3ErRfrXuLZcNIuyiJEco0XSrGtuilG19L5xp3NcwTx7Gn+X6Tv3fmsUPTbow==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -22926,6 +26454,8 @@ }, "glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -22933,10 +26463,14 @@ }, "glob-to-regexp": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, "global-dirs": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", "dev": true, "requires": { "ini": "2.0.0" @@ -22944,12 +26478,16 @@ "dependencies": { "ini": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true } } }, "global-modules": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, "requires": { "global-prefix": "^3.0.0" @@ -22957,6 +26495,8 @@ }, "global-prefix": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "requires": { "ini": "^1.3.5", @@ -22966,10 +26506,14 @@ "dependencies": { "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -22979,10 +26523,14 @@ }, "globals": { "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -22995,42 +26543,60 @@ }, "globjoin": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, "gonzales-pe": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "google-proto-files": { - "version": "2.5.2", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/google-proto-files/-/google-proto-files-3.0.0.tgz", + "integrity": "sha512-YN2mHdmxnrMrQbC5jXmXZda0aQ90as7uMsUIxoqL6tydwz+7GjoQ0OsZ8kJmDXxXMZRgY5PFjqIvWKjEYyNGjQ==", "requires": { "protobufjs": "^6.8.0", "walkdir": "^0.4.0" } }, "google-protobuf": { - "version": "3.20.1" + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.20.1.tgz", + "integrity": "sha512-XMf1+O32FjYIV3CYu6Tuh5PNbfNEU5Xu22X+Xkdb/DUexFlCzhvv7d5Iirm4AOwn8lv4al1YvIhzGrg2j9Zfzw==" }, "graceful-fs": { "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, "grpc-web": { - "version": "1.3.1" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.3.1.tgz", + "integrity": "sha512-VxyYEAGsatecAFY3xieRDzsuhm92yQBsJD7fd5Z3MY150hZWPwkrUWetzJ0QK5W0uym4+VedPQrei38wk0eIjQ==" }, "handle-thing": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "har-schema": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", "dev": true }, "har-validator": { "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { "ajv": "^6.12.3", @@ -23039,6 +26605,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -23049,16 +26617,22 @@ }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true } } }, "hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, "has": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -23066,6 +26640,8 @@ }, "has-ansi": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -23073,16 +26649,22 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true } } }, "has-flag": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, "has-property-descriptors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", "dev": true, "requires": { "get-intrinsic": "^1.1.1" @@ -23090,14 +26672,20 @@ }, "has-symbols": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, "has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "hdr-histogram-js": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", "dev": true, "requires": { "@assemblyscript/loader": "^0.10.1", @@ -23107,15 +26695,21 @@ }, "hdr-histogram-percentiles-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, "he": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "peer": true }, "hosted-git-info": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", + "integrity": "sha512-rRnjWu0Bxj+nIfUOkz0695C0H6tRrN5iYIzYejb0tDEefe2AekHu/U5Kn9pEie5vsJqpNQU02az7TGSH3qpz4Q==", "dev": true, "requires": { "lru-cache": "^7.5.1" @@ -23123,6 +26717,8 @@ }, "hpack.js": { "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -23133,6 +26729,8 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -23146,6 +26744,8 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -23155,18 +26755,26 @@ }, "html-entities": { "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", "dev": true }, "html-escaper": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "html-tags": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", "dev": true }, "htmlparser2": { "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "dev": true, "requires": { "domelementtype": "^1.3.1", @@ -23179,6 +26787,8 @@ "dependencies": { "dom-serializer": { "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -23187,20 +26797,28 @@ "dependencies": { "domelementtype": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, "entities": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true } } }, "domelementtype": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" @@ -23208,6 +26826,8 @@ }, "domutils": { "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { "dom-serializer": "0", @@ -23216,20 +26836,28 @@ }, "entities": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true } } }, "http-cache-semantics": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-deceiver": { "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "http-errors": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { "depd": "2.0.0", @@ -23241,16 +26869,22 @@ "dependencies": { "statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } }, "http-parser-js": { - "version": "0.5.6", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "http-proxy": { "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", @@ -23260,6 +26894,8 @@ }, "http-proxy-agent": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { "@tootallnate/once": "1", @@ -23269,6 +26905,8 @@ }, "http-proxy-middleware": { "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", @@ -23280,12 +26918,16 @@ "dependencies": { "is-plain-obj": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true } } }, "http-signature": { "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -23295,6 +26937,8 @@ }, "https-proxy-agent": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -23303,10 +26947,14 @@ }, "human-signals": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, "humanize-ms": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, "requires": { "ms": "^2.0.0" @@ -23314,6 +26962,8 @@ }, "iconv-lite": { "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -23321,18 +26971,26 @@ }, "icss-utils": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "requires": {} }, "ieee754": { - "version": "1.2.1" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true }, "ignore-walk": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", "dev": true, "requires": { "minimatch": "^5.0.1" @@ -23340,19 +26998,27 @@ }, "image-size": { "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, "optional": true }, "immediate": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true }, "immutable": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", "dev": true }, "import-fresh": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -23361,28 +27027,40 @@ "dependencies": { "resolve-from": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true } } }, "import-lazy": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true }, "imurmurhash": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, "infer-owner": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "inflight": { "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", @@ -23391,14 +27069,20 @@ }, "inherits": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", "dev": true }, "inquirer": { "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", @@ -23420,6 +27104,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -23427,6 +27113,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -23435,6 +27123,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -23442,14 +27132,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -23459,18 +27155,26 @@ }, "ip": { "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, "ipaddr.js": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true }, "is-alphabetical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "dev": true }, "is-alphanumerical": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", @@ -23479,10 +27183,14 @@ }, "is-arrayish": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, "is-binary-path": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" @@ -23490,10 +27198,14 @@ }, "is-buffer": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true }, "is-ci": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "requires": { "ci-info": "^3.2.0" @@ -23501,6 +27213,8 @@ }, "is-core-module": { "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -23508,21 +27222,31 @@ }, "is-decimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "dev": true }, "is-docker": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-fullwidth-code-point": { - "version": "3.0.0" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -23530,10 +27254,14 @@ }, "is-hexadecimal": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, "is-installed-globally": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "dev": true, "requires": { "global-dirs": "^3.0.0", @@ -23542,22 +27270,32 @@ }, "is-interactive": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true }, "is-lambda": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "dev": true }, "is-number": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-path-cwd": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", "dev": true }, "is-path-in-cwd": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "^1.0.0" @@ -23565,6 +27303,8 @@ "dependencies": { "is-path-inside": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", "dev": true, "requires": { "path-is-inside": "^1.0.1" @@ -23574,14 +27314,20 @@ }, "is-path-inside": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, "is-plain-obj": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true }, "is-plain-object": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" @@ -23589,26 +27335,38 @@ }, "is-regexp": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", + "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", "dev": true }, "is-stream": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-typedarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "dev": true }, "is-unicode-supported": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, "is-what": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", "dev": true }, "is-wsl": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "requires": { "is-docker": "^2.0.0" @@ -23616,30 +27374,44 @@ }, "isarray": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isbinaryfile": { "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true }, "isexe": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "isstream": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", + "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -23651,12 +27423,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "istanbul-lib-report": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", @@ -23666,10 +27442,14 @@ "dependencies": { "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -23679,6 +27459,8 @@ }, "istanbul-lib-source-maps": { "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { "debug": "^4.1.1", @@ -23690,6 +27472,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -23698,6 +27482,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -23710,10 +27496,14 @@ }, "istanbul-lib-coverage": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { "pify": "^4.0.1", @@ -23722,6 +27512,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -23729,10 +27521,14 @@ }, "pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -23740,16 +27536,22 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "istanbul-reports": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", + "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", "dev": true, "requires": { "html-escaper": "^2.0.0", @@ -23758,6 +27560,8 @@ }, "jake": { "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, "requires": { "async": "^3.2.3", @@ -23768,6 +27572,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -23775,6 +27581,8 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -23783,6 +27591,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -23791,6 +27601,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -23798,14 +27610,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -23813,6 +27631,8 @@ }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -23822,6 +27642,8 @@ }, "jasmine": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==", "dev": true, "requires": { "exit": "^0.1.2", @@ -23831,6 +27653,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -23839,6 +27663,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -23851,10 +27677,14 @@ }, "jasmine-core": { "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==", "dev": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -23863,11 +27693,15 @@ } }, "jasmine-core": { - "version": "4.1.1", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.2.0.tgz", + "integrity": "sha512-OcFpBrIhnbmb9wfI8cqPSJ50pv3Wg4/NSgoZIqHzIwO/2a9qivJWzv8hUvaREIMYYJBas6AvfXATFdVuzzCqVw==", "dev": true }, "jasmine-spec-reporter": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-7.0.0.tgz", + "integrity": "sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==", "dev": true, "requires": { "colors": "1.4.0" @@ -23875,10 +27709,14 @@ }, "jasminewd2": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==", "dev": true }, "jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { "@types/node": "*", @@ -23888,10 +27726,14 @@ "dependencies": { "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -23901,10 +27743,14 @@ }, "js-tokens": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -23913,42 +27759,62 @@ }, "jsbn": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", "dev": true }, "jsesc": { "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-schema": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true }, "json5": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", "dev": true }, "jsonc-parser": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", "dev": true }, "jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", @@ -23957,10 +27823,14 @@ }, "jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, "jsonwebtoken": { "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", "dev": true, "requires": { "jws": "^3.2.2", @@ -23977,12 +27847,16 @@ "dependencies": { "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "jsprim": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -23993,6 +27867,8 @@ }, "jszip": { "version": "3.10.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz", + "integrity": "sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q==", "dev": true, "requires": { "lie": "~3.3.0", @@ -24003,6 +27879,8 @@ "dependencies": { "readable-stream": { "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -24016,6 +27894,8 @@ }, "string_decoder": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" @@ -24025,6 +27905,8 @@ }, "jwa": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dev": true, "requires": { "buffer-equal-constant-time": "1.0.1", @@ -24034,6 +27916,8 @@ }, "jws": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "dev": true, "requires": { "jwa": "^1.4.1", @@ -24041,7 +27925,9 @@ } }, "karma": { - "version": "6.3.20", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", + "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -24072,6 +27958,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -24080,6 +27968,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -24092,6 +27982,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -24099,6 +27991,8 @@ }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { "minimist": "^1.2.6" @@ -24106,10 +28000,14 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -24123,12 +28021,16 @@ }, "yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } }, "karma-chrome-launcher": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", "dev": true, "requires": { "which": "^1.2.1" @@ -24136,6 +28038,8 @@ "dependencies": { "which": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -24145,6 +28049,8 @@ }, "karma-coverage-istanbul-reporter": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", "dev": true, "requires": { "istanbul-lib-coverage": "^3.0.0", @@ -24156,6 +28062,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -24164,6 +28072,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -24172,7 +28082,9 @@ } }, "karma-jasmine": { - "version": "5.0.1", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, "requires": { "jasmine-core": "^4.1.0" @@ -24180,11 +28092,15 @@ }, "karma-jasmine-html-reporter": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", + "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", "dev": true, "requires": {} }, "karma-source-map-support": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dev": true, "requires": { "source-map-support": "^0.5.5" @@ -24192,22 +28108,32 @@ }, "kind-of": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "klona": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, "known-css-properties": { "version": "0.21.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.21.0.tgz", + "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true }, "lazy-ass": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", "dev": true }, "less": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", + "integrity": "sha512-EoQp/Et7OSOVu0aJknJOtlXZsnr8XE8KwuzTHOLeVSEx8pVWUICc8Q0VYRHgzyjX78nMEyC/oztWFbgyhtNfDA==", "dev": true, "requires": { "copy-anything": "^2.0.1", @@ -24224,6 +28150,8 @@ "dependencies": { "make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "optional": true, "requires": { @@ -24233,21 +28161,29 @@ }, "mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "optional": true }, "pify": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "optional": true }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "optional": true }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "optional": true } @@ -24255,6 +28191,8 @@ }, "less-loader": { "version": "10.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-10.2.0.tgz", + "integrity": "sha512-AV5KHWvCezW27GT90WATaDnfXBv99llDbtaj4bshq6DvAihMdNjaPDcUMa6EXKLRF+P2opFenJp89BXg91XLYg==", "dev": true, "requires": { "klona": "^2.0.4" @@ -24262,6 +28200,8 @@ }, "levn": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", @@ -24269,10 +28209,14 @@ } }, "libphonenumber-js": { - "version": "1.10.6" + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.7.tgz", + "integrity": "sha512-jZXLCCWMe1b/HXkjiLeYt2JsytZMcqH26jLFIdzFDFF0xvSUWrYKyvPlyPG+XJzEyKUFbcZxLdWGMwQsWaHDxQ==" }, "license-webpack-plugin": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", "dev": true, "requires": { "webpack-sources": "^3.0.0" @@ -24280,6 +28224,8 @@ }, "lie": { "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { "immediate": "~3.0.5" @@ -24287,10 +28233,14 @@ }, "lines-and-columns": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "listr2": { "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", "dev": true, "requires": { "cli-truncate": "^2.1.0", @@ -24305,83 +28255,123 @@ }, "loader-runner": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, "loader-utils": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "dev": true }, "locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "requires": { "p-locate": "^4.1.0" } }, "lodash": { "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.camelcase": { - "version": "4.3.0" + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "lodash.debounce": { "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, "lodash.includes": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "dev": true }, "lodash.isboolean": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "dev": true }, "lodash.isempty": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", "dev": true }, "lodash.isfunction": { "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", "dev": true }, "lodash.isinteger": { "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", "dev": true }, "lodash.isnumber": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", "dev": true }, "lodash.isobject": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", "dev": true }, "lodash.isplainobject": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true }, "lodash.isstring": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "dev": true }, "lodash.merge": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "lodash.once": { "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, "lodash.sortby": { "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", "dev": true }, "lodash.truncate": { "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, "log-symbols": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { "chalk": "^4.1.0", @@ -24390,6 +28380,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -24397,6 +28389,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -24405,6 +28399,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -24412,14 +28408,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -24429,6 +28431,8 @@ }, "log-update": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", "dev": true, "requires": { "ansi-escapes": "^4.3.0", @@ -24439,6 +28443,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -24446,6 +28452,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -24453,10 +28461,14 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -24466,6 +28478,8 @@ }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -24477,6 +28491,8 @@ }, "log4js": { "version": "6.5.2", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", + "integrity": "sha512-DXtpNtt+KDOMT7RHUDIur/WsSA3rntlUh9Zg4XCdV42wUuMmbFkl38+LZ92Z5QvQA7mD5kAVkLiBSEH/tvUB8A==", "dev": true, "requires": { "date-format": "^4.0.10", @@ -24487,25 +28503,35 @@ } }, "long": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "longest-streak": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, "loose-envify": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "lru-cache": { - "version": "7.10.1", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", + "integrity": "sha512-OIP3DwzRZDfLg9B9VP/huWBlpvbkmbfiBy8xmsXp4RPmE4A3MhwNozc5ZJ3fWnSg8fDcdlE/neRTPG2ycEKliw==", "dev": true }, "magic-string": { "version": "0.26.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", + "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", "dev": true, "requires": { "sourcemap-codec": "^1.4.8" @@ -24513,6 +28539,8 @@ }, "make-dir": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { "semver": "^6.0.0" @@ -24520,12 +28548,16 @@ "dependencies": { "semver": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "make-fetch-happen": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", "dev": true, "requires": { "agentkeepalive": "^4.1.3", @@ -24548,6 +28580,8 @@ "dependencies": { "@npmcli/fs": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, "requires": { "@gar/promisify": "^1.0.1", @@ -24556,6 +28590,8 @@ }, "@npmcli/move-file": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "dev": true, "requires": { "mkdirp": "^1.0.4", @@ -24564,6 +28600,8 @@ }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -24572,6 +28610,8 @@ }, "cacache": { "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, "requires": { "@npmcli/fs": "^1.0.0", @@ -24596,6 +28636,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -24608,6 +28650,8 @@ }, "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24615,6 +28659,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -24622,6 +28668,8 @@ }, "ssri": { "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -24631,20 +28679,30 @@ }, "map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, "material-colors": { - "version": "1.2.6" + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" }, "material-design-icons-iconfont": { - "version": "6.7.0" + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/material-design-icons-iconfont/-/material-design-icons-iconfont-6.7.0.tgz", + "integrity": "sha512-lSj71DgVv20kO0kGbs42icDzbRot61gEDBLQACzkUuznRQBUYmbxzEkGU6dNBb5fRWHMaScYlAXX96HQ4/cJWA==" }, "mathml-tag-names": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true }, "mdast-util-from-markdown": { "version": "0.8.5", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", + "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", "dev": true, "requires": { "@types/mdast": "^3.0.0", @@ -24656,6 +28714,8 @@ }, "mdast-util-to-markdown": { "version": "0.6.5", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz", + "integrity": "sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -24668,21 +28728,29 @@ }, "mdast-util-to-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", "dev": true }, "media-typer": { "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, "memfs": { - "version": "3.4.4", + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", "dev": true, "requires": { - "fs-monkey": "1.0.3" + "fs-monkey": "^1.0.3" } }, "meow": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -24701,6 +28769,8 @@ "dependencies": { "hosted-git-info": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -24708,6 +28778,8 @@ }, "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24715,6 +28787,8 @@ }, "normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -24725,32 +28799,46 @@ }, "type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true }, "yargs-parser": { "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } }, "merge-descriptors": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", "dev": true }, "merge-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, "micromark": { "version": "2.11.4", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", + "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", "dev": true, "requires": { "debug": "^4.0.0", @@ -24759,6 +28847,8 @@ }, "micromatch": { "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { "braces": "^3.0.2", @@ -24767,14 +28857,20 @@ }, "mime": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { "mime-db": "1.52.0" @@ -24782,14 +28878,20 @@ }, "mimic-fn": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "mini-css-extract-plugin": { "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", + "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", "dev": true, "requires": { "schema-utils": "^4.0.0" @@ -24797,6 +28899,8 @@ "dependencies": { "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -24809,10 +28913,14 @@ }, "minimalistic-assert": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimatch": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -24820,10 +28928,14 @@ }, "minimist": { "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -24832,7 +28944,9 @@ } }, "minipass": { - "version": "3.1.6", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", + "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -24840,6 +28954,8 @@ }, "minipass-collect": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24847,6 +28963,8 @@ }, "minipass-fetch": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", "dev": true, "requires": { "encoding": "^0.1.12", @@ -24857,6 +28975,8 @@ }, "minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24864,6 +28984,8 @@ }, "minipass-json-stream": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", "dev": true, "requires": { "jsonparse": "^1.3.1", @@ -24872,6 +28994,8 @@ }, "minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24879,6 +29003,8 @@ }, "minipass-sized": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -24886,6 +29012,8 @@ }, "minizlib": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, "requires": { "minipass": "^3.0.0", @@ -24894,10 +29022,14 @@ }, "mkdirp": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, "mocha": { "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, "peer": true, "requires": { @@ -24927,11 +29059,15 @@ "dependencies": { "argparse": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, "peer": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "peer": true, "requires": { @@ -24941,11 +29077,15 @@ }, "escape-string-regexp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "peer": true }, "find-up": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "peer": true, "requires": { @@ -24955,6 +29095,8 @@ }, "glob": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "peer": true, "requires": { @@ -24968,6 +29110,8 @@ "dependencies": { "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "peer": true, "requires": { @@ -24978,11 +29122,15 @@ }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "peer": true }, "js-yaml": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "peer": true, "requires": { @@ -24991,6 +29139,8 @@ }, "locate-path": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "peer": true, "requires": { @@ -24999,11 +29149,15 @@ }, "ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "peer": true }, "p-limit": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "peer": true, "requires": { @@ -25012,6 +29166,8 @@ }, "p-locate": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "peer": true, "requires": { @@ -25020,6 +29176,8 @@ }, "supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "peer": true, "requires": { @@ -25028,6 +29186,8 @@ }, "yargs": { "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "peer": true, "requires": { @@ -25042,6 +29202,8 @@ }, "yargs-parser": { "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, "peer": true } @@ -25049,6 +29211,8 @@ }, "mochawesome": { "version": "7.1.3", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", + "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -25065,6 +29229,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -25072,6 +29238,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -25080,6 +29248,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -25087,14 +29257,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -25104,6 +29280,8 @@ }, "mochawesome-report-generator": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", + "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", "dev": true, "requires": { "chalk": "^4.1.2", @@ -25122,6 +29300,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -25129,6 +29309,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -25137,6 +29319,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -25144,10 +29328,14 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -25157,10 +29345,14 @@ }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -25169,14 +29361,20 @@ } }, "moment": { - "version": "2.29.3" + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", + "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" }, "ms": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "requires": { "dns-packet": "^5.2.2", @@ -25185,18 +29383,26 @@ }, "mute-stream": { "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nanoid": { "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "natural-compare": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "needle": { "version": "2.9.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.9.1.tgz", + "integrity": "sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==", "dev": true, "optional": true, "requires": { @@ -25207,6 +29413,8 @@ "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "optional": true, "requires": { @@ -25217,14 +29425,20 @@ }, "negotiator": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "ng-qrcode": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-7.0.0.tgz", + "integrity": "sha512-Mx7nf8rtGMVYxGe2qfy8/JNiCnxKD7uFsqpP2Hm5eJSQrOEapQl9FR0yuK0I4MMQorJ7s8mZZDxmszQiH8R2Kg==", "requires": { "qrcode": "^1.5.0", "tslib": "^2.4.0" @@ -25232,6 +29446,8 @@ }, "ngx-color": { "version": "7.3.3", + "resolved": "https://registry.npmjs.org/ngx-color/-/ngx-color-7.3.3.tgz", + "integrity": "sha512-RyMIFMC5/aYYD/jkfStOUjr3gQfTGhgiiMxuZEfxt2o4GYmb3C/06C1o0S6Mj9qHAcKlG6soioq2MzdhtIswHw==", "requires": { "@ctrl/tinycolor": "^3.4.0", "material-colors": "^1.2.6", @@ -25240,12 +29456,16 @@ }, "ngx-quicklink": { "version": "0.2.7", + "resolved": "https://registry.npmjs.org/ngx-quicklink/-/ngx-quicklink-0.2.7.tgz", + "integrity": "sha512-5ZSUCu79dTqLNqDTsXDzofaSjB1ddOxfSMUVR4gmg0mDI2M/6G/ASgs9tVM2LoR8on3wp2ExLGHOHvzg7qWkRA==", "requires": { "tslib": "^2.0.0" } }, "nice-napi": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "dev": true, "optional": true, "requires": { @@ -25255,14 +29475,20 @@ }, "node-addon-api": { "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, "node-forge": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, "node-gyp": { "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", "dev": true, "requires": { "env-paths": "^2.2.0", @@ -25279,6 +29505,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -25287,6 +29515,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -25299,6 +29529,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -25307,15 +29539,21 @@ } }, "node-gyp-build": { - "version": "4.4.0", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.5.0.tgz", + "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "dev": true }, "node-releases": { "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", "dev": true }, "nopt": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "dev": true, "requires": { "abbrev": "1" @@ -25323,6 +29561,8 @@ }, "normalize-package-data": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.0.tgz", + "integrity": "sha512-m+GL22VXJKkKbw62ZaBBjv8u6IE3UI4Mh5QakIqs3fWiKe0Xyi6L97hakwZK41/LD4R/2ly71Bayx0NLMwLA/g==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", @@ -25333,18 +29573,26 @@ }, "normalize-path": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "normalize-range": { "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, "normalize-selector": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha512-dxvWdI8gw6eAvk9BlPffgEoGfM7AdijoCwOEJge3e3ulT2XLgmU7KvvxprOaCu05Q1uGRHmOhHe1r6emZoKyFw==", "dev": true }, "npm-bundled": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", "dev": true, "requires": { "npm-normalize-package-bin": "^1.0.1" @@ -25352,6 +29600,8 @@ }, "npm-install-checks": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", "dev": true, "requires": { "semver": "^7.1.1" @@ -25359,10 +29609,14 @@ }, "npm-normalize-package-bin": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, "npm-package-arg": { "version": "9.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.0.2.tgz", + "integrity": "sha512-v/miORuX8cndiOheW8p2moNuPJ7QhcFh9WGlTorruG8hXSA23vMTEp5hTCmDxic0nD8KHhj/NQgFuySD3GYY3g==", "dev": true, "requires": { "hosted-git-info": "^5.0.0", @@ -25371,7 +29625,9 @@ } }, "npm-packlist": { - "version": "5.1.0", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", + "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", "dev": true, "requires": { "glob": "^8.0.1", @@ -25382,6 +29638,8 @@ }, "npm-pick-manifest": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", "dev": true, "requires": { "npm-install-checks": "^5.0.0", @@ -25392,6 +29650,8 @@ }, "npm-registry-fetch": { "version": "13.1.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.1.1.tgz", + "integrity": "sha512-5p8rwe6wQPLJ8dMqeTnA57Dp9Ox6GH9H60xkyJup07FmVlu3Mk7pf/kIIpl9gaN5bM8NM+UUx3emUWvDNTt39w==", "dev": true, "requires": { "make-fetch-happen": "^10.0.6", @@ -25405,10 +29665,14 @@ "dependencies": { "@tootallnate/once": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "cacache": { "version": "16.1.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.1.tgz", + "integrity": "sha512-VDKN+LHyCQXaaYZ7rA/qtkURU+/yYhviUdvqEv2LT6QPZU8jpyzEkEVAcKlKLt5dJ5BRp11ym8lo3NKLluEPLg==", "dev": true, "requires": { "@npmcli/fs": "^2.1.0", @@ -25433,6 +29697,8 @@ }, "http-proxy-agent": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { "@tootallnate/once": "2", @@ -25441,7 +29707,9 @@ } }, "make-fetch-happen": { - "version": "10.1.7", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.1.8.tgz", + "integrity": "sha512-0ASJbG12Au6+N5I84W+8FhGS6iM8MyzvZady+zaQAu+6IOaESFzCLLD0AR1sAFF3Jufi8bxm586ABN6hWd3k7g==", "dev": true, "requires": { "agentkeepalive": "^4.2.1", @@ -25464,6 +29732,8 @@ }, "minipass-fetch": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.0.tgz", + "integrity": "sha512-H9U4UVBGXEyyWJnqYDCLp1PwD8XIkJ4akNHp1aGVI+2Ym7wQMlxDKi4IB4JbmyU+pl9pEs/cVrK6cOuvmbK4Sg==", "dev": true, "requires": { "encoding": "^0.1.13", @@ -25474,6 +29744,8 @@ }, "socks-proxy-agent": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -25485,6 +29757,8 @@ }, "npm-run-path": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { "path-key": "^3.0.0" @@ -25492,6 +29766,8 @@ }, "npmlog": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, "requires": { "are-we-there-yet": "^3.0.0", @@ -25502,6 +29778,8 @@ }, "nth-check": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -25509,10 +29787,14 @@ }, "num2fraction": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true }, "nx": { "version": "13.1.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-13.1.3.tgz", + "integrity": "sha512-clM0NQhQKYkqcNz2E3uYRMLwhp2L/9dBhJhQi9XBX4IAyA2gWAomhRIlLm5Xxg3g4h1xwSpP3eJ5t89VikY8Pw==", "dev": true, "requires": { "@nrwl/cli": "*" @@ -25520,21 +29802,31 @@ }, "oauth-sign": { "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { - "version": "4.1.1" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", "dev": true }, "object-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -25545,10 +29837,14 @@ }, "obuf": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -25556,10 +29852,14 @@ }, "on-headers": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" @@ -25567,6 +29867,8 @@ }, "onetime": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" @@ -25574,6 +29876,8 @@ }, "open": { "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { "define-lazy-prop": "^2.0.0", @@ -25583,10 +29887,14 @@ }, "opener": { "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optionator": { "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { "deep-is": "^0.1.3", @@ -25599,6 +29907,8 @@ }, "ora": { "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { "bl": "^4.1.0", @@ -25614,6 +29924,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -25621,6 +29933,8 @@ }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -25629,6 +29943,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -25636,14 +29952,20 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -25653,26 +29975,36 @@ }, "os-tmpdir": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, "ospath": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", "dev": true }, "p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "requires": { "p-limit": "^2.2.0" } }, "p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { "aggregate-error": "^3.0.0" @@ -25680,6 +30012,8 @@ }, "p-retry": { "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "dev": true, "requires": { "@types/retry": "0.12.0", @@ -25688,15 +30022,21 @@ "dependencies": { "retry": { "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true } } }, "p-try": { - "version": "2.2.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "pacote": { "version": "13.3.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.3.0.tgz", + "integrity": "sha512-auhJAUlfC2TALo6I0s1vFoPvVFgWGx+uz/PnIojTTgkGwlK3Np8sGJ0ghfFhiuzJXTZoTycMLk8uLskdntPbDw==", "dev": true, "requires": { "@npmcli/git": "^3.0.0", @@ -25724,10 +30064,14 @@ }, "pako": { "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parent-module": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -25735,6 +30079,8 @@ }, "parse-entities": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "dev": true, "requires": { "character-entities": "^1.0.0", @@ -25747,6 +30093,8 @@ }, "parse-json": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -25757,14 +30105,20 @@ }, "parse-node-version": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", "dev": true }, "parse5": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", "optional": true }, "parse5-html-rewriting-stream": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", "dev": true, "requires": { "parse5": "^6.0.1", @@ -25773,12 +30127,16 @@ "dependencies": { "parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true } } }, "parse5-htmlparser2-tree-adapter": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { "parse5": "^6.0.1" @@ -25786,12 +30144,16 @@ "dependencies": { "parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true } } }, "parse5-sax-parser": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", "dev": true, "requires": { "parse5": "^6.0.1" @@ -25799,67 +30161,99 @@ "dependencies": { "parse5": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true } } }, "parseurl": { "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "path-exists": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" }, "path-is-absolute": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-is-inside": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "dev": true }, "path-key": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", "dev": true }, "path-type": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, "pend": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true }, "performance-now": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "dev": true }, "picocolors": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true }, "pinkie": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, "pinkie-promise": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { "pinkie": "^2.0.0" @@ -25867,6 +30261,8 @@ }, "piscina": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", "dev": true, "requires": { "eventemitter-asyncresource": "^1.0.0", @@ -25877,16 +30273,22 @@ }, "pkg-dir": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" } }, "pngjs": { - "version": "5.0.0" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" }, "postcss": { "version": "8.4.13", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", + "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", "dev": true, "requires": { "nanoid": "^3.3.3", @@ -25896,6 +30298,8 @@ }, "postcss-attribute-case-insensitive": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.1.tgz", + "integrity": "sha512-wrt2VndqSLJpyBRNz9OmJcgnhI9MaongeWgapdBuUMu2a/KNJ8SENesG4SdiTnQwGO9b1VKbTWYAfCPeokLqZQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.10" @@ -25903,6 +30307,8 @@ }, "postcss-clamp": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25910,6 +30316,8 @@ }, "postcss-color-functional-notation": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.3.tgz", + "integrity": "sha512-5fbr6FzFzjwHXKsVnkmEYrJYG8VNNzvD1tAXaPPWR97S6rhKI5uh2yOfV5TAzhDkZoq4h+chxEplFDc8GeyFtw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25917,6 +30325,8 @@ }, "postcss-color-hex-alpha": { "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25924,6 +30334,8 @@ }, "postcss-color-rebeccapurple": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.0.tgz", + "integrity": "sha512-1jtE5AKnZcKq4pjOrltFHcbEM2/IvtbD1OdhZ/wqds18//bh0UmQkffcCkzDJU+/vGodfIsVQeKn+45CJvX9Bw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25931,6 +30343,8 @@ }, "postcss-custom-media": { "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25938,6 +30352,8 @@ }, "postcss-custom-properties": { "version": "12.1.8", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.8.tgz", + "integrity": "sha512-8rbj8kVu00RQh2fQF81oBqtduiANu4MIxhyf0HbbStgPtnFlWn0yiaYTpLHrPnJbffVY1s9apWsIoVZcc68FxA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25945,6 +30361,8 @@ }, "postcss-custom-selectors": { "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -25952,6 +30370,8 @@ }, "postcss-dir-pseudo-class": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.4.tgz", + "integrity": "sha512-I8epwGy5ftdzNWEYok9VjW9whC4xnelAtbajGv4adql4FIF09rnrxnA9Y8xSHN47y7gqFIv10C5+ImsLeJpKBw==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.9" @@ -25959,6 +30379,8 @@ }, "postcss-double-position-gradients": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.1.tgz", + "integrity": "sha512-jM+CGkTs4FcG53sMPjrrGE0rIvLDdCrqMzgDC5fLI7JHDO7o6QG8C5TQBtExb13hdBdoH9C2QVbG4jo2y9lErQ==", "dev": true, "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -25967,6 +30389,8 @@ }, "postcss-env-function": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -25974,6 +30398,8 @@ }, "postcss-focus-visible": { "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.9" @@ -25981,6 +30407,8 @@ }, "postcss-focus-within": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.9" @@ -25988,16 +30416,22 @@ }, "postcss-font-variant": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true, "requires": {} }, "postcss-gap-properties": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.3.tgz", + "integrity": "sha512-rPPZRLPmEKgLk/KlXMqRaNkYTUpE7YC+bOIQFN5xcu1Vp11Y4faIXv6/Jpft6FMnl6YRxZqDZG0qQOW80stzxQ==", "dev": true, "requires": {} }, "postcss-html": { "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", "dev": true, "requires": { "htmlparser2": "^3.10.0" @@ -26005,6 +30439,8 @@ }, "postcss-image-set-function": { "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.6.tgz", + "integrity": "sha512-KfdC6vg53GC+vPd2+HYzsZ6obmPqOk6HY09kttU19+Gj1nC3S3XBVEXDHxkhxTohgZqzbUb94bKXvKDnYWBm/A==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -26012,6 +30448,8 @@ }, "postcss-import": { "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", "dev": true, "requires": { "postcss-value-parser": "^4.0.0", @@ -26021,11 +30459,15 @@ }, "postcss-initial": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "dev": true, "requires": {} }, "postcss-lab-function": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.0.tgz", + "integrity": "sha512-Zb1EO9DGYfa3CP8LhINHCcTTCTLI+R3t7AX2mKsDzdgVQ/GkCpHOTgOr6HBHslP7XDdVbqgHW5vvRPMdVANQ8w==", "dev": true, "requires": { "@csstools/postcss-progressive-custom-properties": "^1.1.0", @@ -26034,6 +30476,8 @@ }, "postcss-less": { "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", "dev": true, "requires": { "postcss": "^7.0.14" @@ -26041,10 +30485,14 @@ "dependencies": { "picocolors": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { "picocolors": "^0.2.1", @@ -26053,12 +30501,16 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "postcss-loader": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "requires": { "cosmiconfig": "^7.0.0", @@ -26068,25 +30520,35 @@ }, "postcss-logical": { "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", "dev": true, "requires": {} }, "postcss-media-minmax": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "dev": true, "requires": {} }, "postcss-media-query-parser": { "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", "dev": true }, "postcss-modules-extract-imports": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { "icss-utils": "^5.0.0", @@ -26096,6 +30558,8 @@ }, "postcss-modules-scope": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" @@ -26103,13 +30567,17 @@ }, "postcss-modules-values": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { "icss-utils": "^5.0.0" } }, "postcss-nesting": { - "version": "10.1.8", + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.10.tgz", + "integrity": "sha512-lqd7LXCq0gWc0wKXtoKDru5wEUNjm3OryLVNRZ8OnW8km6fSNUuFrjEhU3nklxXE2jvd4qrox566acgh+xQt8w==", "dev": true, "requires": { "@csstools/selector-specificity": "^2.0.0", @@ -26118,20 +30586,28 @@ }, "postcss-opacity-percentage": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.2.tgz", + "integrity": "sha512-lyUfF7miG+yewZ8EAk9XUBIlrHyUE6fijnesuz+Mj5zrIHIEw6KcIZSOk/elVMqzLvREmXB83Zi/5QpNRYd47w==", "dev": true }, "postcss-overflow-shorthand": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.3.tgz", + "integrity": "sha512-CxZwoWup9KXzQeeIxtgOciQ00tDtnylYIlJBBODqkgS/PU2jISuWOL/mYLHmZb9ZhZiCaNKsCRiLp22dZUtNsg==", "dev": true, "requires": {} }, "postcss-page-break": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "dev": true, "requires": {} }, "postcss-place": { "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.4.tgz", + "integrity": "sha512-MrgKeiiu5OC/TETQO45kV3npRjOFxEHthsqGtkh3I1rPbZSbXGD/lZVi9j13cYh+NA8PIAPyk6sGjT9QbRyvSg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" @@ -26139,6 +30615,8 @@ }, "postcss-preset-env": { "version": "7.5.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.5.0.tgz", + "integrity": "sha512-0BJzWEfCdTtK2R3EiKKSdkE51/DI/BwnhlnicSW482Ym6/DGHud8K0wGLcdjip1epVX0HKo4c8zzTeV/SkiejQ==", "dev": true, "requires": { "@csstools/postcss-color-function": "^1.1.0", @@ -26189,7 +30667,9 @@ } }, "postcss-pseudo-class-any-link": { - "version": "7.1.4", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.5.tgz", + "integrity": "sha512-nSGKGScwFTaaV8Cyi27W9FegX3l3b7tmNxujxmykI/j3++cBAiq8fTUAU3ZK0s2aneN2T8cTUvKdNedzp3JIEA==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.10" @@ -26197,15 +30677,21 @@ }, "postcss-replace-overflow-wrap": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "dev": true, "requires": {} }, "postcss-resolve-nested-selector": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", "dev": true }, "postcss-safe-parser": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", "dev": true, "requires": { "postcss": "^7.0.26" @@ -26213,10 +30699,14 @@ "dependencies": { "picocolors": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { "picocolors": "^0.2.1", @@ -26225,12 +30715,16 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "postcss-sass": { "version": "0.4.4", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.4.4.tgz", + "integrity": "sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg==", "dev": true, "requires": { "gonzales-pe": "^4.3.0", @@ -26239,10 +30733,14 @@ "dependencies": { "picocolors": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { "picocolors": "^0.2.1", @@ -26251,12 +30749,16 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "postcss-scss": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", "dev": true, "requires": { "postcss": "^7.0.6" @@ -26264,10 +30766,14 @@ "dependencies": { "picocolors": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { "picocolors": "^0.2.1", @@ -26276,12 +30782,16 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "postcss-selector-not": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", + "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -26289,6 +30799,8 @@ }, "postcss-selector-parser": { "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -26297,39 +30809,57 @@ }, "postcss-syntax": { "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", "dev": true, "requires": {} }, "postcss-value-parser": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "prelude-ls": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prettier": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "pretty-bytes": { "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true }, "proc-log": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", "dev": true }, "process-nextick-args": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "promise-inflight": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "dev": true }, "promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "requires": { "err-code": "^2.0.2", @@ -26338,6 +30868,8 @@ }, "prop-types": { "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { "loose-envify": "^1.4.0", @@ -26347,6 +30879,8 @@ }, "protobufjs": { "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -26365,6 +30899,8 @@ }, "protractor": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-7.0.0.tgz", + "integrity": "sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==", "dev": true, "requires": { "@types/q": "^0.0.32", @@ -26386,14 +30922,20 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -26402,6 +30944,8 @@ }, "chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -26413,6 +30957,8 @@ }, "cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { "string-width": "^4.2.0", @@ -26422,10 +30968,14 @@ "dependencies": { "ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" @@ -26435,6 +30985,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -26442,10 +30994,14 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -26458,6 +31014,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -26465,10 +31023,14 @@ }, "source-map": { "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true }, "source-map-support": { "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { "source-map": "^0.5.6" @@ -26476,6 +31038,8 @@ }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -26483,10 +31047,14 @@ }, "supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -26496,10 +31064,14 @@ "dependencies": { "ansi-regex": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -26507,6 +31079,8 @@ }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" @@ -26516,10 +31090,14 @@ }, "y18n": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { "cliui": "^6.0.0", @@ -26537,6 +31115,8 @@ }, "yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -26547,6 +31127,8 @@ }, "proxy-addr": { "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { "forwarded": "0.2.0", @@ -26555,25 +31137,35 @@ "dependencies": { "ipaddr.js": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true } } }, "proxy-from-env": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", "dev": true }, "prr": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", "dev": true, "optional": true }, "psl": { - "version": "1.8.0", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, "pump": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -26582,18 +31174,26 @@ }, "punycode": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "q": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", "dev": true }, "qjobs": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true }, "qrcode": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.0.tgz", + "integrity": "sha512-9MgRpgVc+/+47dFvQeD6U2s0Z92EsKzcHogtum4QB+UNd025WOJSHvn/hjk9xmzj7Stj95CyUAs31mrjxliEsQ==", "requires": { "dijkstrajs": "^1.0.1", "encode-utf8": "^1.0.3", @@ -26603,12 +31203,16 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "cliui": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -26617,15 +31221,21 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "wrap-ansi": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -26633,10 +31243,14 @@ } }, "y18n": { - "version": "4.0.3" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yargs": { "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -26653,6 +31267,8 @@ }, "yargs-parser": { "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -26662,18 +31278,26 @@ }, "qs": { "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -26681,10 +31305,14 @@ }, "range-parser": { "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", @@ -26695,10 +31323,14 @@ }, "react-is": { "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, "read-cache": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, "requires": { "pify": "^2.3.0" @@ -26706,6 +31338,8 @@ }, "read-package-json": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", + "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", "dev": true, "requires": { "glob": "^8.0.1", @@ -26716,6 +31350,8 @@ }, "read-package-json-fast": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.0", @@ -26724,6 +31360,8 @@ }, "read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", @@ -26734,10 +31372,14 @@ "dependencies": { "hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -26748,16 +31390,22 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } }, "read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { "find-up": "^4.1.0", @@ -26767,12 +31415,16 @@ "dependencies": { "type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } }, "readable-stream": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -26782,6 +31434,8 @@ }, "readdirp": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -26789,6 +31443,8 @@ }, "redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { "indent-string": "^4.0.0", @@ -26797,14 +31453,20 @@ }, "reflect-metadata": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, "regenerate": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -26812,10 +31474,14 @@ }, "regenerator-runtime": { "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regenerator-transform": { "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", "dev": true, "requires": { "@babel/runtime": "^7.8.4" @@ -26823,14 +31489,20 @@ }, "regex-parser": { "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, "regexpp": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { - "version": "5.0.1", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", "dev": true, "requires": { "regenerate": "^1.4.2", @@ -26843,10 +31515,14 @@ }, "regjsgen": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "regjsparser": { "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -26854,12 +31530,16 @@ "dependencies": { "jsesc": { "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } }, "remark": { "version": "13.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", + "integrity": "sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==", "dev": true, "requires": { "remark-parse": "^9.0.0", @@ -26869,6 +31549,8 @@ }, "remark-parse": { "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz", + "integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==", "dev": true, "requires": { "mdast-util-from-markdown": "^0.8.0" @@ -26876,6 +31558,8 @@ }, "remark-stringify": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-9.0.1.tgz", + "integrity": "sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==", "dev": true, "requires": { "mdast-util-to-markdown": "^0.6.0" @@ -26883,10 +31567,14 @@ }, "repeat-string": { "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true }, "request": { "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -26913,6 +31601,8 @@ "dependencies": { "http-signature": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -26922,6 +31612,8 @@ }, "jsprim": { "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", @@ -26932,33 +31624,47 @@ }, "uuid": { "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true } } }, "request-progress": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, "requires": { "throttleit": "^1.0.0" } }, "require-directory": { - "version": "2.1.1" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "require-main-filename": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "requires-port": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { "is-core-module": "^2.8.1", @@ -26968,10 +31674,14 @@ }, "resolve-from": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resolve-url-loader": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", "dev": true, "requires": { "adjust-sourcemap-loader": "^4.0.0", @@ -26983,6 +31693,8 @@ "dependencies": { "loader-utils": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, "requires": { "big.js": "^5.2.2", @@ -26992,12 +31704,16 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { "onetime": "^5.1.0", @@ -27006,18 +31722,26 @@ }, "retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true }, "reusify": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rfdc": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, "rimraf": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -27025,6 +31749,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -27033,6 +31759,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -27045,6 +31773,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -27054,10 +31784,14 @@ }, "run-async": { "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true }, "run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" @@ -27065,20 +31799,28 @@ }, "rxjs": { "version": "7.5.5", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", + "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", "requires": { "tslib": "^2.1.0" } }, "safe-buffer": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safer-buffer": { "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "sass": { "version": "1.51.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.51.0.tgz", + "integrity": "sha512-haGdpTgywJTvHC2b91GSq+clTKGbtkkZmVAb82jZQN/wTy6qs8DdFm2lhEQbEwrY0QDRgSQ3xDurqM977C3noA==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -27088,6 +31830,8 @@ }, "sass-loader": { "version": "12.6.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", "dev": true, "requires": { "klona": "^2.0.4", @@ -27096,6 +31840,8 @@ }, "saucelabs": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" @@ -27103,6 +31849,8 @@ "dependencies": { "agent-base": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -27110,6 +31858,8 @@ }, "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -27117,6 +31867,8 @@ }, "https-proxy-agent": { "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, "requires": { "agent-base": "^4.3.0", @@ -27127,10 +31879,14 @@ }, "sax": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, "schema-utils": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { "@types/json-schema": "^7.0.5", @@ -27140,6 +31896,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -27150,21 +31908,29 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true } } }, "select-hose": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "selenium-webdriver": { "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, "requires": { "jszip": "^3.1.3", @@ -27175,6 +31941,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -27183,6 +31951,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -27195,6 +31965,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -27202,6 +31974,8 @@ }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -27209,6 +31983,8 @@ }, "tmp": { "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", "dev": true, "requires": { "os-tmpdir": "~1.0.1" @@ -27218,6 +31994,8 @@ }, "selfsigned": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", + "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", "dev": true, "requires": { "node-forge": "^1" @@ -27225,6 +32003,8 @@ }, "semver": { "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -27232,6 +32012,8 @@ "dependencies": { "lru-cache": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { "yallist": "^4.0.0" @@ -27241,6 +32023,8 @@ }, "semver-dsl": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha512-e8BOaTo007E3dMuQQTnPdalbKTABKNS7UxoBIDnwOqRa+QwMrCPjynB8zAlPF6xlqUfdLPPLIJ13hJNmhtq8Ng==", "dev": true, "requires": { "semver": "^5.3.0" @@ -27248,12 +32032,16 @@ "dependencies": { "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "send": { "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { "debug": "2.6.9", @@ -27273,6 +32061,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -27280,26 +32070,36 @@ "dependencies": { "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "mime": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "ms": { "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "statuses": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } }, "serialize-javascript": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -27307,6 +32107,8 @@ }, "serve-index": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -27320,6 +32122,8 @@ "dependencies": { "debug": { "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" @@ -27327,10 +32131,14 @@ }, "depd": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "http-errors": { "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { "depd": "~1.1.2", @@ -27341,20 +32149,28 @@ }, "inherits": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "ms": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "setprototypeof": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true } } }, "serve-static": { "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -27364,18 +32180,26 @@ } }, "set-blocking": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "setimmediate": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, "setprototypeof": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "shallow-clone": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" @@ -27383,6 +32207,8 @@ }, "shebang-command": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" @@ -27390,10 +32216,14 @@ }, "shebang-regex": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "side-channel": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", "dev": true, "requires": { "call-bind": "^1.0.0", @@ -27403,14 +32233,20 @@ }, "signal-exit": { "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "slash": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slice-ansi": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -27420,6 +32256,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -27427,6 +32265,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -27434,16 +32274,22 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true } } }, "smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true }, "socket.io": { "version": "4.5.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", + "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -27456,10 +32302,14 @@ }, "socket.io-adapter": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", + "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", "dev": true }, "socket.io-parser": { - "version": "4.0.4", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", + "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", "dev": true, "requires": { "@types/component-emitter": "^1.2.10", @@ -27469,6 +32319,8 @@ }, "sockjs": { "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", @@ -27478,6 +32330,8 @@ }, "socks": { "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", "dev": true, "requires": { "ip": "^1.1.5", @@ -27486,6 +32340,8 @@ }, "socks-proxy-agent": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "dev": true, "requires": { "agent-base": "^6.0.2", @@ -27495,14 +32351,20 @@ }, "source-map": { "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true }, "source-map-js": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, "source-map-loader": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", + "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", "dev": true, "requires": { "abab": "^2.0.5", @@ -27512,6 +32374,8 @@ "dependencies": { "iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -27521,6 +32385,8 @@ }, "source-map-resolve": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "dev": true, "requires": { "atob": "^2.1.2", @@ -27529,6 +32395,8 @@ }, "source-map-support": { "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -27537,16 +32405,22 @@ "dependencies": { "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "sourcemap-codec": { "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "spdx-correct": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -27555,10 +32429,14 @@ }, "spdx-exceptions": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -27567,10 +32445,14 @@ }, "spdx-license-ids": { "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "spdy": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -27582,6 +32464,8 @@ }, "spdy-transport": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { "debug": "^4.1.0", @@ -27594,14 +32478,20 @@ }, "specificity": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", "dev": true }, "sprintf-js": { "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", "dev": true }, "sshpk": { "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -27617,6 +32507,8 @@ }, "ssri": { "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, "requires": { "minipass": "^3.1.1" @@ -27624,10 +32516,14 @@ }, "statuses": { "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true }, "streamroller": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", + "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", "dev": true, "requires": { "date-format": "^4.0.10", @@ -27637,6 +32533,8 @@ "dependencies": { "fs-extra": { "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -27648,6 +32546,8 @@ }, "string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { "safe-buffer": "~5.2.0" @@ -27655,12 +32555,16 @@ "dependencies": { "safe-buffer": { "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true } } }, "string-width": { "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -27669,20 +32573,28 @@ }, "strip-ansi": { "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { "ansi-regex": "^5.0.1" } }, "strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-final-newline": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { "min-indent": "^1.0.0" @@ -27690,14 +32602,20 @@ }, "strip-json-comments": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "style-search": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true }, "stylelint": { "version": "13.13.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.13.1.tgz", + "integrity": "sha512-Mv+BQr5XTUrKqAXmpqm6Ddli6Ief+AiPZkRsIrAoUKFuq/ElkUh9ZMYxXD0iQNZ5ADghZKLOWz1h7hTClB7zgQ==", "dev": true, "requires": { "@stylelint/postcss-css-in-js": "^0.37.2", @@ -27752,6 +32670,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -27759,6 +32679,8 @@ }, "autoprefixer": { "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", "dev": true, "requires": { "browserslist": "^4.12.0", @@ -27772,10 +32694,14 @@ }, "balanced-match": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, "chalk": { "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -27784,6 +32710,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -27791,18 +32719,26 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "has-flag": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "picocolors": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { "picocolors": "^0.2.1", @@ -27811,10 +32747,14 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -27824,11 +32764,15 @@ }, "stylelint-config-recommended": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz", + "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==", "dev": true, "requires": {} }, "stylelint-config-standard": { "version": "22.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-22.0.0.tgz", + "integrity": "sha512-uQVNi87SHjqTm8+4NIP5NMAyY/arXrBgimaaT7skvRfE9u3JKXRK9KBkbr4pVmeciuCcs64kAdjlxfq6Rur7Hw==", "dev": true, "requires": { "stylelint-config-recommended": "^5.0.0" @@ -27836,6 +32780,8 @@ }, "stylelint-scss": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.21.0.tgz", + "integrity": "sha512-CMI2wSHL+XVlNExpauy/+DbUcB/oUZLARDtMIXkpV/5yd8nthzylYd1cdHeDMJVBXeYHldsnebUX6MoV5zPW4A==", "dev": true, "requires": { "lodash": "^4.17.15", @@ -27847,6 +32793,8 @@ }, "stylus": { "version": "0.57.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.57.0.tgz", + "integrity": "sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==", "dev": true, "requires": { "css": "^3.0.0", @@ -27859,6 +32807,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -27867,6 +32817,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -27879,6 +32831,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -27888,6 +32842,8 @@ }, "stylus-loader": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-6.2.0.tgz", + "integrity": "sha512-5dsDc7qVQGRoc6pvCL20eYgRUxepZ9FpeK28XhdXaIPP6kXr6nI1zAAKFQgP5OBkOfKaURp4WUpJzspg1f01Gg==", "dev": true, "requires": { "fast-glob": "^3.2.7", @@ -27897,6 +32853,8 @@ }, "sugarss": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", "dev": true, "requires": { "postcss": "^7.0.2" @@ -27904,10 +32862,14 @@ "dependencies": { "picocolors": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, "postcss": { "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { "picocolors": "^0.2.1", @@ -27916,12 +32878,16 @@ }, "source-map": { "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, "supports-color": { "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -27929,18 +32895,26 @@ }, "supports-preserve-symlinks-flag": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "svg-tags": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "symbol-observable": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true }, "table": { "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -27952,6 +32926,8 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" @@ -27959,6 +32935,8 @@ }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" @@ -27966,10 +32944,14 @@ }, "color-name": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "slice-ansi": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { "ansi-styles": "^4.0.0", @@ -27981,10 +32963,14 @@ }, "tapable": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar": { "version": "6.1.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", "dev": true, "requires": { "chownr": "^2.0.0", @@ -27997,6 +32983,8 @@ }, "tar-stream": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "requires": { "bl": "^4.0.3", @@ -28008,10 +32996,14 @@ }, "tcomb": { "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", "dev": true }, "tcomb-validation": { "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", "dev": true, "requires": { "tcomb": "^3.0.0" @@ -28019,6 +33011,8 @@ }, "terser": { "version": "5.13.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", + "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", "dev": true, "requires": { "acorn": "^8.5.0", @@ -28029,10 +33023,14 @@ "dependencies": { "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "source-map": { "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, "requires": { "whatwg-url": "^7.0.0" @@ -28042,6 +33040,8 @@ }, "terser-webpack-plugin": { "version": "5.3.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", + "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.7", @@ -28053,6 +33053,8 @@ "dependencies": { "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -28063,15 +33065,21 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -28083,6 +33091,8 @@ }, "test-exclude": { "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { "@istanbuljs/schema": "^0.1.2", @@ -28092,6 +33102,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -28100,6 +33112,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -28112,6 +33126,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -28121,25 +33137,37 @@ }, "text-table": { "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "throttleit": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", "dev": true }, "through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "thunky": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "tinycolor2": { - "version": "1.4.2" + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" }, "tmp": { "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "requires": { "rimraf": "^3.0.0" @@ -28147,10 +33175,14 @@ }, "to-fast-properties": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true }, "to-regex-range": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" @@ -28158,10 +33190,14 @@ }, "toidentifier": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tough-cookie": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { "psl": "^1.1.28", @@ -28170,6 +33206,8 @@ }, "tr46": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -28177,18 +33215,26 @@ }, "tree-kill": { "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, "trim-newlines": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "trough": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", "dev": true }, "tsconfig-paths": { "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -28199,6 +33245,8 @@ "dependencies": { "json5": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "requires": { "minimist": "^1.2.0" @@ -28207,10 +33255,14 @@ } }, "tslib": { - "version": "2.4.0" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "tslint": { "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "peer": true, "requires": { @@ -28231,6 +33283,8 @@ "dependencies": { "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "peer": true, "requires": { @@ -28240,16 +33294,22 @@ }, "commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "peer": true }, "diff": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "peer": true }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "peer": true, "requires": { @@ -28263,6 +33323,8 @@ }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "peer": true, "requires": { @@ -28271,6 +33333,8 @@ }, "mkdirp": { "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "peer": true, "requires": { @@ -28279,16 +33343,22 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, "peer": true }, "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true, "peer": true }, "tsutils": { "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "peer": true, "requires": { @@ -28299,6 +33369,8 @@ }, "tsutils": { "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -28306,12 +33378,16 @@ "dependencies": { "tslib": { "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "tunnel-agent": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, "requires": { "safe-buffer": "^5.0.1" @@ -28319,14 +33395,20 @@ }, "tv4": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", "dev": true }, "tweetnacl": { "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, "type-check": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" @@ -28334,10 +33416,14 @@ }, "type-fest": { "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true }, "type-is": { "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", @@ -28346,29 +33432,41 @@ }, "typed-assert": { "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", "dev": true }, "typedarray-to-buffer": { "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "dev": true, "requires": { "is-typedarray": "^1.0.0" } }, "typescript": { - "version": "4.7.3", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true }, "ua-parser-js": { "version": "0.7.31", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", + "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", "dev": true }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -28377,14 +33475,20 @@ }, "unicode-match-property-value-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "unified": { "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", "dev": true, "requires": { "bail": "^1.0.0", @@ -28397,12 +33501,16 @@ "dependencies": { "is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } }, "unique-filename": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" @@ -28410,6 +33518,8 @@ }, "unique-slug": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" @@ -28417,6 +33527,8 @@ }, "unist-util-find-all-after": { "version": "3.0.2", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz", + "integrity": "sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ==", "dev": true, "requires": { "unist-util-is": "^4.0.0" @@ -28424,10 +33536,14 @@ }, "unist-util-is": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", "dev": true }, "unist-util-stringify-position": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", "dev": true, "requires": { "@types/unist": "^2.0.2" @@ -28435,18 +33551,36 @@ }, "universalify": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, "untildify": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" @@ -28454,21 +33588,31 @@ }, "util-deprecate": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "utils-merge": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, "uuid": { - "version": "8.3.2" + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "validate-npm-package-license": { "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -28477,6 +33621,8 @@ }, "validate-npm-package-name": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", "dev": true, "requires": { "builtins": "^5.0.0" @@ -28484,13 +33630,19 @@ }, "validator": { "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", "dev": true }, "vary": { - "version": "1.1.2" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" }, "verror": { "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", "dev": true, "requires": { "assert-plus": "^1.0.0", @@ -28500,6 +33652,8 @@ }, "vfile": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -28510,6 +33664,8 @@ }, "vfile-message": { "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -28518,13 +33674,19 @@ }, "void-elements": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true }, "walkdir": { - "version": "0.4.1" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", + "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==" }, "watchpack": { "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -28533,6 +33695,8 @@ }, "wbuf": { "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { "minimalistic-assert": "^1.0.0" @@ -28540,6 +33704,8 @@ }, "wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "requires": { "defaults": "^1.0.3" @@ -28547,6 +33713,8 @@ }, "webdriver-js-extender": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, "requires": { "@types/selenium-webdriver": "^3.0.0", @@ -28555,6 +33723,8 @@ }, "webdriver-manager": { "version": "12.1.8", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.8.tgz", + "integrity": "sha512-qJR36SXG2VwKugPcdwhaqcLQOD7r8P2Xiv9sfNbfZrKBnX243iAkOueX1yAmeNgIKhJ3YAT/F2gq6IiEZzahsg==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -28572,14 +33742,20 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "ansi-styles": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, "brace-expansion": { "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -28588,6 +33764,8 @@ }, "chalk": { "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -28599,6 +33777,8 @@ }, "glob": { "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -28611,10 +33791,14 @@ }, "ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "minimatch": { "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -28622,6 +33806,8 @@ }, "rimraf": { "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { "glob": "^7.1.3" @@ -28629,10 +33815,14 @@ }, "semver": { "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "strip-ansi": { "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -28640,16 +33830,22 @@ }, "supports-color": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true } } }, "webidl-conversions": { "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", "dev": true }, "webpack": { "version": "5.72.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", + "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.3", @@ -28678,8 +33874,16 @@ "webpack-sources": "^3.2.3" }, "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "ajv": { "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -28690,15 +33894,21 @@ }, "ajv-keywords": { "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "json-schema-traverse": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "schema-utils": { "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", @@ -28710,6 +33920,8 @@ }, "webpack-dev-middleware": { "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "dev": true, "requires": { "colorette": "^2.0.10", @@ -28721,6 +33933,8 @@ "dependencies": { "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -28733,6 +33947,8 @@ }, "webpack-dev-server": { "version": "4.9.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz", + "integrity": "sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", @@ -28767,6 +33983,8 @@ "dependencies": { "schema-utils": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", @@ -28777,6 +33995,8 @@ }, "ws": { "version": "8.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.0.tgz", + "integrity": "sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==", "dev": true, "requires": {} } @@ -28784,6 +34004,8 @@ }, "webpack-merge": { "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -28792,10 +34014,14 @@ }, "webpack-sources": { "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, "webpack-subresource-integrity": { "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", "dev": true, "requires": { "typed-assert": "^1.0.8" @@ -28803,6 +34029,8 @@ }, "websocket-driver": { "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { "http-parser-js": ">=0.5.1", @@ -28812,10 +34040,14 @@ }, "websocket-extensions": { "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-url": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -28825,16 +34057,22 @@ }, "which": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" }, "wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { "string-width": "^1.0.2 || 2 || 3 || 4" @@ -28842,19 +34080,27 @@ }, "wildcard": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, "word-wrap": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, "workerpool": { "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true, "peer": true }, "wrap-ansi": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -28863,27 +34109,37 @@ "dependencies": { "ansi-styles": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { "color-convert": "^2.0.1" } }, "color-convert": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, "wrappy": { "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "write-file-atomic": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -28894,11 +34150,15 @@ }, "ws": { "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "requires": {} }, "xml2js": { "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "requires": { "sax": ">=0.6.0", @@ -28907,21 +34167,31 @@ }, "xmlbuilder": { "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "y18n": { - "version": "5.0.8" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "yaml": { "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { "version": "17.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz", + "integrity": "sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -28935,16 +34205,22 @@ "dependencies": { "yargs-parser": { "version": "21.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", "dev": true } } }, "yargs-parser": { "version": "20.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.0.0.tgz", + "integrity": "sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA==", "dev": true }, "yargs-unparser": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "peer": true, "requires": { @@ -28956,16 +34232,22 @@ "dependencies": { "camelcase": { "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "peer": true }, "decamelize": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "peer": true }, "is-plain-obj": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "peer": true } @@ -28973,6 +34255,8 @@ }, "yauzl": { "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "requires": { "buffer-crc32": "~0.2.3", @@ -28981,17 +34265,23 @@ }, "yocto-queue": { "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "peer": true }, "zone.js": { "version": "0.11.6", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.6.tgz", + "integrity": "sha512-umJqFtKyZlPli669gB1gOrRE9hxUUGkZr7mo878z+NEBJZZixJkKeVYfnoLa7g25SseUDc92OZrMKKHySyJrFg==", "requires": { "tslib": "^2.3.0" } }, "zwitch": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", "dev": true } } diff --git a/console/package.json b/console/package.json index bbcec24eac..2db0c1dc52 100644 --- a/console/package.json +++ b/console/package.json @@ -12,18 +12,18 @@ }, "private": true, "dependencies": { - "@angular/animations": "^14.0.1", - "@angular/cdk": "^14.0.1", - "@angular/common": "^14.0.1", - "@angular/compiler": "^14.0.1", - "@angular/core": "^14.0.1", - "@angular/forms": "^14.0.1", - "@angular/material": "^14.0.1", - "@angular/material-moment-adapter": "^14.0.1", - "@angular/platform-browser": "^14.0.1", - "@angular/platform-browser-dynamic": "^14.0.1", - "@angular/router": "^14.0.1", - "@angular/service-worker": "^14.0.1", + "@angular/animations": "^14.0.4", + "@angular/cdk": "^14.0.4", + "@angular/common": "^14.0.4", + "@angular/compiler": "^14.0.4", + "@angular/core": "^14.0.4", + "@angular/forms": "^14.0.4", + "@angular/material": "^14.0.4", + "@angular/material-moment-adapter": "^14.0.4", + "@angular/platform-browser": "^14.0.4", + "@angular/platform-browser-dynamic": "^14.0.4", + "@angular/router": "^14.0.4", + "@angular/service-worker": "^14.0.4", "@ctrl/ngx-codemirror": "^5.1.1", "@grpc/grpc-js": "^1.5.7", "@ngx-translate/core": "^14.0.0", @@ -36,7 +36,7 @@ "codemirror": "^5.65.0", "cors": "^2.8.5", "file-saver": "^2.0.5", - "google-proto-files": "^2.5.0", + "google-proto-files": "^3.0.0", "google-protobuf": "^3.19.4", "grpc-web": "^1.3.0", "libphonenumber-js": "^1.10.6", @@ -52,32 +52,32 @@ "zone.js": "~0.11.4" }, "devDependencies": { - "@angular-devkit/build-angular": "^14.0.1", - "@angular-eslint/builder": "^14.0.0-alpha.3", - "@angular-eslint/eslint-plugin": "^14.0.0-alpha.3", - "@angular-eslint/eslint-plugin-template": "^14.0.0-alpha.3", - "@angular-eslint/schematics": "^14.0.0-alpha.3", - "@angular-eslint/template-parser": "^14.0.0-alpha.3", - "@angular/cli": "^14.0.1", - "@angular/compiler-cli": "^14.0.1", - "@angular/language-service": "^14.0.1", + "@angular-devkit/build-angular": "^14.0.4", + "@angular-eslint/builder": "^14.0.0", + "@angular-eslint/eslint-plugin": "^14.0.0", + "@angular-eslint/eslint-plugin-template": "^14.0.0", + "@angular-eslint/schematics": "^14.0.0", + "@angular-eslint/template-parser": "^14.0.0", + "@angular/cli": "^14.0.4", + "@angular/compiler-cli": "^14.0.4", + "@angular/language-service": "^14.0.4", "@types/jasmine": "~4.0.3", "@types/jasminewd2": "~2.0.10", "@types/jsonwebtoken": "^8.5.5", "@types/node": "^17.0.42", - "@typescript-eslint/eslint-plugin": "5.25.0", - "@typescript-eslint/parser": "5.27.0", + "@typescript-eslint/eslint-plugin": "5.30.4", + "@typescript-eslint/parser": "5.30.4", "codelyzer": "^6.0.0", "cypress": "^10.1.0", "cypress-terminal-report": "^4.0.1", - "eslint": "^8.17.0", - "jasmine-core": "~4.1.1", + "eslint": "^8.18.0", + "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", "jsonwebtoken": "^8.5.1", - "karma": "~6.3.16", + "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~5.0.1", + "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.0.0", "mochawesome": "^7.1.2", "prettier": "^2.4.1", diff --git a/console/src/index.html b/console/src/index.html index 3cf1482886..2fe19fbca6 100644 --- a/console/src/index.html +++ b/console/src/index.html @@ -1,34 +1,31 @@ - + - - + Console - - - + + + - - + + - - - - + + + - + - - \ No newline at end of file + From d7988563e5a4617c336bd06ff93b3291904399a4 Mon Sep 17 00:00:00 2001 From: Silvan Date: Fri, 8 Jul 2022 13:04:29 +0200 Subject: [PATCH 015/116] fix: update login names on user trigger bulk (#3934) --- internal/query/user.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/query/user.go b/internal/query/user.go index a4a4bea7d6..23b4adbe05 100644 --- a/internal/query/user.go +++ b/internal/query/user.go @@ -295,6 +295,7 @@ var ( func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userID string, queries ...SearchQuery) (*User, error) { if shouldTriggerBulk { projection.UserProjection.TriggerBulk(ctx) + projection.LoginNameProjection.TriggerBulk(ctx) } instanceID := authz.GetInstance(ctx).InstanceID() @@ -317,6 +318,7 @@ func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userI func (q *Queries) GetUser(ctx context.Context, shouldTriggerBulk bool, queries ...SearchQuery) (*User, error) { if shouldTriggerBulk { projection.UserProjection.TriggerBulk(ctx) + projection.LoginNameProjection.TriggerBulk(ctx) } instanceID := authz.GetInstance(ctx).InstanceID() @@ -389,6 +391,7 @@ func (q *Queries) GetHumanPhone(ctx context.Context, userID string, queries ...S func (q *Queries) GeNotifyUser(ctx context.Context, shouldTriggered bool, userID string, queries ...SearchQuery) (*NotifyUser, error) { if shouldTriggered { projection.UserProjection.TriggerBulk(ctx) + projection.LoginNameProjection.TriggerBulk(ctx) } instanceID := authz.GetInstance(ctx).InstanceID() From 3189f5d91133dbf4ac15ae0b88e8146505659860 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Mon, 11 Jul 2022 10:18:49 +0200 Subject: [PATCH 016/116] docs: add saas to zitadel cloud (#3941) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef73fa1bf2..ee9aebc8b0 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ With ZITADEL you rely on a battle tested, hardened and extensible turnkey soluti ## Get started -### ZITADEL Cloud +### ZITADEL Cloud (SaaS) The easiest way to get started with ZITADEL is to use our public cloud offering. Currently ZITADEL V2 Beta is available, head over to [https://zitadel.cloud](https://zitadel.cloud) and create your first ZITADEL instance for free. From ec8ae51f4ed50cd81857c371f8d59909be98ffe6 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 11 Jul 2022 21:59:11 +0200 Subject: [PATCH 017/116] chore: update zitadel version and fix an issue with cockroachdb >=v22 (#3937) --- deploy/knative/zitadel-knative-service.yaml | 4 ++-- docs/docs/guides/installation/configure/docker-compose.yaml | 2 +- .../installation/loadbalancing-example/docker-compose.yaml | 2 +- docs/docs/guides/installation/run/docker-compose.yaml | 2 +- docs/docs/guides/installation/run/knative.mdx | 2 +- docs/docs/guides/installation/run/linux.mdx | 4 ++-- docs/docs/guides/installation/run/macos.mdx | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/deploy/knative/zitadel-knative-service.yaml b/deploy/knative/zitadel-knative-service.yaml index 77682d48d4..fb7b87f4e8 100644 --- a/deploy/knative/zitadel-knative-service.yaml +++ b/deploy/knative/zitadel-knative-service.yaml @@ -7,7 +7,7 @@ spec: template: metadata: annotations: - client.knative.dev/user-image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.33-amd64 + client.knative.dev/user-image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 creationTimestamp: null spec: containerConcurrency: 0 @@ -30,7 +30,7 @@ spec: value: zitadel.default.127.0.0.1.sslip.io - name: ZITADEL_S3DEFAULTINSTANCE_CUSTOMDOMAIN value: zitadel.default.127.0.0.1.sslip.io - image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.33-amd64 + image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 name: user-container ports: - containerPort: 8080 diff --git a/docs/docs/guides/installation/configure/docker-compose.yaml b/docs/docs/guides/installation/configure/docker-compose.yaml index 14a855945a..c93301e5ee 100644 --- a/docs/docs/guides/installation/configure/docker-compose.yaml +++ b/docs/docs/guides/installation/configure/docker-compose.yaml @@ -6,7 +6,7 @@ services: restart: 'always' networks: - 'zitadel' - image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.33-amd64' + image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64' command: 'start-from-init --config /example-zitadel-config.yaml --config /example-zitadel-secrets.yaml --steps /example-zitadel-init-steps.yaml --masterkey "${ZITADEL_MASTERKEY}" --tlsMode disabled' depends_on: chown: diff --git a/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml b/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml index 22df9694ba..9098943108 100644 --- a/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml +++ b/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml @@ -15,7 +15,7 @@ services: restart: 'always' networks: - 'zitadel' - image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.33-amd64' + image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64' command: 'start-from-init --config /example-zitadel-config.yaml --config /example-zitadel-secrets.yaml --steps /example-zitadel-init-steps.yaml --masterkey "${ZITADEL_MASTERKEY}" --tlsMode external' depends_on: chown: diff --git a/docs/docs/guides/installation/run/docker-compose.yaml b/docs/docs/guides/installation/run/docker-compose.yaml index dee9c55a21..23a055bf4c 100644 --- a/docs/docs/guides/installation/run/docker-compose.yaml +++ b/docs/docs/guides/installation/run/docker-compose.yaml @@ -5,7 +5,7 @@ services: restart: 'always' networks: - 'zitadel' - image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.33-amd64' + image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64' command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled' environment: - 'ZITADEL_DATABASE_HOST=db' diff --git a/docs/docs/guides/installation/run/knative.mdx b/docs/docs/guides/installation/run/knative.mdx index fe16b2da13..32a29e9fd1 100644 --- a/docs/docs/guides/installation/run/knative.mdx +++ b/docs/docs/guides/installation/run/knative.mdx @@ -35,7 +35,7 @@ kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/depl # start zitadel kn service create zitadel \ ---image ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.33-amd64 \ +--image ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 \ --port 8080 \ --env ZITADEL_DATABASE_HOST=cockroachdb \ --env ZITADEL_EXTERNALSECURE=false \ diff --git a/docs/docs/guides/installation/run/linux.mdx b/docs/docs/guides/installation/run/linux.mdx index 292c7acb4b..5652d5d419 100644 --- a/docs/docs/guides/installation/run/linux.mdx +++ b/docs/docs/guides/installation/run/linux.mdx @@ -7,10 +7,10 @@ ZITADEL is tested against CockroachDB v22.1.0 and Ubuntu 20.04. ```bash # Run a CockroachDB instance -cockroach start-single-node --insecure --background --http-addr :9090 +cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost # Download the zitadel binary -curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.24 | grep "browser_download_url.*zitadel_Linux_$(uname -i).tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel +curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.39 | grep "browser_download_url.*zitadel_Linux_$(uname -i).tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel # Run the zitadel binary ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled diff --git a/docs/docs/guides/installation/run/macos.mdx b/docs/docs/guides/installation/run/macos.mdx index ae80407c5d..e60e3c1253 100644 --- a/docs/docs/guides/installation/run/macos.mdx +++ b/docs/docs/guides/installation/run/macos.mdx @@ -8,7 +8,7 @@ ZITADEL is tested against CockroachDB v22.1.0. Run a CockroachDB instance ```bash -cockroach start-single-node --insecure --background --http-addr :9090 +cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost ``` # Download and Install ZITADEL @@ -23,7 +23,7 @@ brew install zitadel/tap/zitadel ```bash export MY_ARCHITECTURE="arm64 or amd64 depeding on your mac" -curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.24 | grep "browser_download_url.*zitadel_Darwin_${MY_ARCHITECTURE}.tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel +curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.39 | grep "browser_download_url.*zitadel_Darwin_${MY_ARCHITECTURE}.tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel ``` Run ZITADEL From 2cf097332cccea7e1a3ba9b0999627f83b8ce936 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Tue, 12 Jul 2022 10:03:44 +0200 Subject: [PATCH 018/116] fix: add new org settings member role (#3944) * fix: add new role to iam members * fix: add new role to iam members * fix: add new role to iam members * fix: add new role to iam members * fix: add new role to iam members * fix: add new role to iam members * fix: add new role to iam members --- cmd/defaults.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index 8f4cc9d6d0..e6c1117181 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -686,6 +686,17 @@ InternalAuthZ: - "project.grant.read" - "project.grant.member.read" - "project.grant.user.grant.read" + - Role: "ORG_SETTINGS_MANAGER" + Permissions: + - "org.read" + - "org.write" + - "org.member.read" + - "org.idp.read" + - "org.idp.write" + - "org.idp.delete" + - "policy.read" + - "policy.write" + - "policy.delete" - Role: "ORG_USER_PERMISSION_EDITOR" Permissions: - "org.read" From 325651c96ef6befe25dbe31e115c622e82bf6e34 Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Tue, 12 Jul 2022 10:24:05 +0200 Subject: [PATCH 019/116] docs(installation): document masterkey config (#3947) --- docs/docs/guides/installation/configure/configure.mdx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/installation/configure/configure.mdx index 33b9384f05..0baef5e745 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/installation/configure/configure.mdx @@ -35,6 +35,15 @@ All configuration properties are also configurable via environemnt variables. Prefix the key with *ZITADEL\_*, uppercase the propery and join sections by an underscore _. For example, if you want to configure the default ZITADEL IAM admin username and password, make sure the ZITADEL binary runtime has the variables *ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_USERNAME* and *ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_PASSWORD* set. +## Masterkey + +The masterkey is used to AES256-encrypt other generated encryption keys. +It needs to have 32 bytes. +You can pass the masterkey in eighter of three possible ways to the zitadel binary: +- By value: Use the flag `--masterkey My_Master_Key_Which_Has_32_Bytes` +- By environment variable `ZITADEL_MASTERKEY`: Use the flag `--masterkeyFromEnv` +- By file: Use the flag `--masterkeyFile /path/to/file` + ## Passing the configuration Date: Tue, 12 Jul 2022 10:43:45 +0200 Subject: [PATCH 020/116] docs(installation): fix typo (#3948) --- docs/docs/guides/installation/configure/configure.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/installation/configure/configure.mdx index 0baef5e745..15db50eb24 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/installation/configure/configure.mdx @@ -39,7 +39,7 @@ For example, if you want to configure the default ZITADEL IAM admin username and The masterkey is used to AES256-encrypt other generated encryption keys. It needs to have 32 bytes. -You can pass the masterkey in eighter of three possible ways to the zitadel binary: +You can pass the masterkey in either of three possible ways to the zitadel binary: - By value: Use the flag `--masterkey My_Master_Key_Which_Has_32_Bytes` - By environment variable `ZITADEL_MASTERKEY`: Use the flag `--masterkeyFromEnv` - By file: Use the flag `--masterkeyFile /path/to/file` From fa4bc47b3e5532f7f0bc2109102a2b43ffc5c825 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 12 Jul 2022 15:38:47 +0200 Subject: [PATCH 021/116] feat: specify org member roles in org setup (#3950) --- docs/docs/apis/proto/admin.md | 1 + internal/api/grpc/admin/org.go | 1 + internal/command/org.go | 8 +++++++- proto/zitadel/admin.proto | 2 ++ 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/docs/apis/proto/admin.md b/docs/docs/apis/proto/admin.md index 4b8106d53c..d8b8a8332a 100644 --- a/docs/docs/apis/proto/admin.md +++ b/docs/docs/apis/proto/admin.md @@ -3642,6 +3642,7 @@ this is en empty request | ----- | ---- | ----------- | ----------- | | org | SetUpOrgRequest.Org | - | message.required: true
| | [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) user.human | SetUpOrgRequest.Human | oneof field for the user managing the organisation | | +| roles | repeated string | specify Org Member Roles for the provided user (default is ORG_OWNER if roles are empty) | | diff --git a/internal/api/grpc/admin/org.go b/internal/api/grpc/admin/org.go index 71ad86d9a4..3ac515aa7c 100644 --- a/internal/api/grpc/admin/org.go +++ b/internal/api/grpc/admin/org.go @@ -66,6 +66,7 @@ func (s *Server) SetUpOrg(ctx context.Context, req *admin_pb.SetUpOrgRequest) (* Name: req.Org.Name, CustomDomain: req.Org.Domain, Human: human, + Roles: req.Roles, }, userIDs...) if err != nil { return nil, err diff --git a/internal/command/org.go b/internal/command/org.go index bf7f7a18f6..eb195505b3 100644 --- a/internal/command/org.go +++ b/internal/command/org.go @@ -19,6 +19,7 @@ type OrgSetup struct { Name string CustomDomain string Human AddHuman + Roles []string } func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, userIDs ...string) (string, *domain.ObjectDetails, error) { @@ -35,10 +36,15 @@ func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, userIDs ...string) orgAgg := org.NewAggregate(orgID) userAgg := user_repo.NewAggregate(userID, orgID) + roles := []string{domain.RoleOrgOwner} + if len(o.Roles) > 0 { + roles = o.Roles + } + validations := []preparation.Validation{ AddOrgCommand(ctx, orgAgg, o.Name, userIDs...), AddHumanCommand(userAgg, &o.Human, c.userPasswordAlg, c.userEncryption), - c.AddOrgMemberCommand(orgAgg, userID, domain.RoleOrgOwner), + c.AddOrgMemberCommand(orgAgg, userID, roles...), } if o.CustomDomain != "" { validations = append(validations, AddOrgDomain(orgAgg, o.CustomDomain)) diff --git a/proto/zitadel/admin.proto b/proto/zitadel/admin.proto index 2217a8bd97..fceb2a2848 100644 --- a/proto/zitadel/admin.proto +++ b/proto/zitadel/admin.proto @@ -3099,6 +3099,8 @@ message SetUpOrgRequest { // oneof field for the user managing the organisation Human human = 2; } + // specify Org Member Roles for the provided user (default is ORG_OWNER if roles are empty) + repeated string roles = 3; } message SetUpOrgResponse { From 0ffdc973017a3e9a8b6292426aa02670ffb59d3d Mon Sep 17 00:00:00 2001 From: Jay <48990649+juergrinaldi@users.noreply.github.com> Date: Thu, 14 Jul 2022 11:43:36 +0200 Subject: [PATCH 022/116] Docs UI (#3901) * test css change for max to have a look * changed a font color (just a test for git push) * changing some UI colors according to CI/CD colors * changing font color hero button Co-authored-by: Jay --- docs/src/css/custom.css | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index 0aabd2ffa1..c9d827e971 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -72,14 +72,14 @@ :root { --ifm-navbar-background-color: #ffffff; --ifm-footer-background-color: #f4f4f4; - --ifm-menu-color-background-active: #f2f5ff; - --ifm-menu-color-active: #5469d4; + --ifm-menu-color-background-active: #7E21CE10; + --ifm-menu-color-active: #7E21CE; --ifm-menu-color-background-hover: #f7fafc; --ifm-font-color-base: #6b7280; --ifm-link-color: #5469d4; --ifm-menu-color: #697386; --ifm-footer-link-color: #000000; - --ifm-color-primary: #5469d4; + --ifm-color-primary: #7E21CE; --ifm-color-primary-dark: #4d61cf; --ifm-color-primary-darker: #4356c9; --ifm-color-primary-darkest: #3a4cc3; /* 293bb9 */ @@ -161,7 +161,7 @@ } :root[data-theme="dark"] .navbar:not(.navbar-sidebar--show) { - background-color: rgba(31, 41, 55, 0.5019607843137255); + background-color: #15173580; backdrop-filter: saturate(110%) blur(5px); } @@ -238,8 +238,8 @@ h2 { --ifm-menu-color-background-active: #ffffff10; --ifm-menu-color-active: #ffffff; --ifm-menu-color-background-hover: #3c405850; - --ifm-font-color-base: #c1c9d2; - --ifm-menu-color: #a3acb9; + --ifm-font-color-base: #DDDDDD; + --ifm-menu-color: #DDDDDD; --ifm-link-color: #ff2069; --docsearch-searchbox-background: #454a66; --docsearch-searchbox-focus-background: #454a66; @@ -258,9 +258,9 @@ h2 { --ifm-color-primary-lightest: #ff90b4; --ifm-background-color: #141735; --ifm-hero-background-color: #0f1022; - --ifm-hero-text-color: var(--ifm-font-color-base); + --ifm-hero-text-color: #ffffff; --get-started-bg: var(--ifm-font-color-base); - --get-started: #059669; + --get-started: #FF1F69; --ifm-footer-color: #ffffff50; --ifm-heading-color: #ffffff; --ifm-font-color-base: #c1c9d2; @@ -285,7 +285,6 @@ h2 { --apisystembackground: linear-gradient(40deg, #6E695090, #6E695090); --apiassetbackground: linear-gradient(40deg, #3c4257, #3c4257); --overlaycolor: #ffffff15; - --ifm-hero-text-color: #023c2a; } .get-started:hover { From 36d0f9668b4fcaa29130908ab1a1f2021bf62e52 Mon Sep 17 00:00:00 2001 From: mffap Date: Thu, 14 Jul 2022 11:52:04 +0200 Subject: [PATCH 023/116] fix(docs): image zoom plugin (#3946) fix: image zoom plugin Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> --- docs/docusaurus.config.js | 12 ++++++++++-- docs/package.json | 1 + docs/yarn.lock | 9 ++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index cd85593451..d05787361c 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -19,7 +19,15 @@ module.exports = { }, ], themeConfig: { - zoomSelector: ".markdown :not(em) > img", + zoom: { + selector: '.markdown :not(em) > img', + background: { + light: 'rgb(243, 244, 246)', + dark: 'rgb(55, 59, 82)' + }, + // options you can specify via https://github.com/francoischalifour/medium-zoom#usage + config: {} + }, announcementBar: { id: 'documentation', content: @@ -170,5 +178,5 @@ module.exports = { }, ], ], - plugins: [require.resolve("plugin-image-zoom")], + plugins: [require.resolve("docusaurus-plugin-image-zoom")], }; diff --git a/docs/package.json b/docs/package.json index f5632fe653..8be38247f6 100644 --- a/docs/package.json +++ b/docs/package.json @@ -82,6 +82,7 @@ "cssnano": "5.1.7", "cssnano-preset-advanced": "5.3.3", "dns-packet": "5.3.1", + "docusaurus-plugin-image-zoom": "^0.1.1", "docusaurus-plugin-plausible": "^0.0.5", "eastasianwidth": "0.2.0", "enhanced-resolve": "5.9.3", diff --git a/docs/yarn.lock b/docs/yarn.lock index 6fc2a6ed38..0aba367184 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -3855,6 +3855,13 @@ dns-packet@5.3.1, dns-packet@^5.2.2: dependencies: "@leichtgewicht/ip-codec" "^2.0.1" +docusaurus-plugin-image-zoom@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/docusaurus-plugin-image-zoom/-/docusaurus-plugin-image-zoom-0.1.1.tgz#f5e16ae568f7b74e8a357ee67ea7922521f64539" + integrity sha512-cJXo5TKh9OR1gE4B5iS5ovLWYYDFwatqRm00iXFPOaShZG99l5tgkDKgbQPAwSL9wg4I+wz3aMwkOtDhMIpKDQ== + dependencies: + medium-zoom "^1.0.6" + docusaurus-plugin-plausible@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/docusaurus-plugin-plausible/-/docusaurus-plugin-plausible-0.0.5.tgz#d113f7d82c09a3945e88227265b599ba1904bfb9" @@ -5573,7 +5580,7 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -medium-zoom@^1.0.4: +medium-zoom@^1.0.4, medium-zoom@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/medium-zoom/-/medium-zoom-1.0.6.tgz#9247f21ca9313d8bbe9420aca153a410df08d027" integrity sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg== From 7ef9dcbf505716436ea7ca94d8e26493e6d2fefe Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Fri, 15 Jul 2022 13:59:58 +0200 Subject: [PATCH 024/116] docs(installation): inline file contents (#3974) * docs(installation): align knative style * some fixes in configure section * show file contents inline --- .../guides/installation/configure/compose.mdx | 23 ++++++++++++--- .../installation/configure/configure.mdx | 3 +- .../guides/installation/configure/helm.mdx | 13 +++++++-- .../installation/configure/linuxunix.mdx | 20 ++++++++++--- ...g-example.md => loadbalancing-example.mdx} | 28 +++++++++++++++---- docs/docs/guides/installation/run/compose.mdx | 9 +++++- docs/docs/guides/installation/run/knative.mdx | 24 ++++++++-------- docs/docs/guides/installation/run/linux.mdx | 6 ++-- docs/package.json | 1 + docs/yarn.lock | 8 ++++++ 10 files changed, 104 insertions(+), 31 deletions(-) rename docs/docs/guides/installation/loadbalancing-example/{loadbalancing-example.md => loadbalancing-example.mdx} (71%) diff --git a/docs/docs/guides/installation/configure/compose.mdx b/docs/docs/guides/installation/configure/compose.mdx index 654498f023..ba9702542b 100644 --- a/docs/docs/guides/installation/configure/compose.mdx +++ b/docs/docs/guides/installation/configure/compose.mdx @@ -1,10 +1,25 @@ +import CodeBlock from '@theme/CodeBlock'; +import DockerComposeSource from '!!raw-loader!./docker-compose.yaml' +import ExampleZITADELConfigSource from '!!raw-loader!./example-zitadel-config.yaml' +import ExampleZITADELSecretsSource from '!!raw-loader!./example-zitadel-secrets.yaml' +import ExampleZITADELInitStepsSource from '!!raw-loader!./example-zitadel-init-steps.yaml' + The docker compose example mounts the example zitadel configuration files to the ZITADEL container. By executing the commands below, you will download the following files: -- [docker-compose.yaml](./docker-compose.yaml) -- [example-zitadel-config.yaml](./example-zitadel-config.yaml) -- [example-zitadel-secrets.yaml](./example-zitadel-secrets.yaml) -- [example-zitadel-init-steps.yaml](./example-zitadel-init-steps.yaml) + +
docker-compose.yaml + {DockerComposeSource} +
+
example-zitadel-config.yaml + {ExampleZITADELConfigSource} +
+
example-zitadel-secrets.yaml + {ExampleZITADELSecretsSource} +
+
example-zitadel-init-steps.yaml + {ExampleZITADELInitStepsSource} +
```bash # Download the docker compose example configuration for a secure CockroachDB. For example: diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/installation/configure/configure.mdx index 15db50eb24..7f06b44667 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/installation/configure/configure.mdx @@ -48,9 +48,8 @@ You can pass the masterkey in either of three possible ways to the zitadel binar example-zitadel-values.yaml + {ExampleZITADELValuesSource} + +
example-zitadel-values-secrets.yaml + {ExampleZITADELValuesSecretsSource} +
```bash # Download and adjust the example configuration file containing standard configuration diff --git a/docs/docs/guides/installation/configure/linuxunix.mdx b/docs/docs/guides/installation/configure/linuxunix.mdx index 366fc006d2..22589f4ba2 100644 --- a/docs/docs/guides/installation/configure/linuxunix.mdx +++ b/docs/docs/guides/installation/configure/linuxunix.mdx @@ -1,9 +1,21 @@ +import CodeBlock from '@theme/CodeBlock'; +import ExampleZITADELConfigSource from '!!raw-loader!./example-zitadel-config.yaml' +import ExampleZITADELSecretsSource from '!!raw-loader!./example-zitadel-secrets.yaml' +import ExampleZITADELInitStepsSource from '!!raw-loader!./example-zitadel-init-steps.yaml' + ### Configure by Files By executing the commands below, you will download the following files: -- [example-zitadel-config.yaml](./example-zitadel-config.yaml) -- [example-zitadel-secrets.yaml](./example-zitadel-secrets.yaml) -- [example-zitadel-init-steps.yaml](./example-zitadel-init-steps.yaml) + +
example-zitadel-config.yaml + {ExampleZITADELConfigSource} +
+
example-zitadel-secrets.yaml + {ExampleZITADELSecretsSource} +
+
example-zitadel-init-steps.yaml + {ExampleZITADELInitStepsSource} +
```bash # Download and adjust the example configuration file containing standard configuration @@ -44,5 +56,5 @@ export ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_PASSWORD="RootPassword1!" export ZITADEL_MASTERKEY="$(tr -dc A-Za-z0-9 docker-compose.yaml + {DockerComposeSource} + +
example-traefik.yaml + {ExampleTraefikSource} +
+
example-zitadel-config.yaml + {ExampleZITADELConfigSource} +
+
example-zitadel-secrets.yaml + {ExampleZITADELSecretsSource} +
+
example-zitadel-init-steps.yaml + {ExampleZITADELInitStepsSource} +
```bash # Download the docker compose example configuration. For example: diff --git a/docs/docs/guides/installation/run/compose.mdx b/docs/docs/guides/installation/run/compose.mdx index 86b63263f9..e5b3fbe672 100644 --- a/docs/docs/guides/installation/run/compose.mdx +++ b/docs/docs/guides/installation/run/compose.mdx @@ -1,6 +1,13 @@ +import CodeBlock from '@theme/CodeBlock'; +import DockerComposeSource from '!!raw-loader!./docker-compose.yaml' + The setup is tested against Docker version 20.10.17 and Docker Compose version v2.2.3 -By executing the commands below, you will download the file [docker-compose.yaml](./docker-compose.yaml) +By executing the commands below, you will download the following file: + +
docker-compose.yaml + {DockerComposeSource} +
```bash # Download the docker compose example configuration. For example: diff --git a/docs/docs/guides/installation/run/knative.mdx b/docs/docs/guides/installation/run/knative.mdx index 32a29e9fd1..28a77221c2 100644 --- a/docs/docs/guides/installation/run/knative.mdx +++ b/docs/docs/guides/installation/run/knative.mdx @@ -6,16 +6,16 @@ Follow the [Knative quickstart guide](https://knative.dev/docs/getting-started/q It is basically 4 commands on Mac: ```bash -#install knative +# Install knative brew install knative/client/kn -#install knative quickstart sandbox +# Install knative quickstart sandbox brew install knative-sandbox/kn-plugins/quickstart -#install kind +# Install kind brew install kind -#install quickstart cluster +# Install quickstart cluster kn quickstart kind ``` That will get you a ready to go knative/kubernetes environment. @@ -29,11 +29,11 @@ kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/depl ``` -## Start ZITADEL with Knative +## Start ZITADEL with Knative + +Either use the kn binary... + ```bash - -# start zitadel - kn service create zitadel \ --image ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 \ --port 8080 \ @@ -46,15 +46,17 @@ kn service create zitadel \ --arg "start-from-init" --arg "--masterkey" --arg "MasterkeyNeedsToHave32Characters" ``` -or use the knative service yaml +... or use the knative service yaml ```bash kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/deploy/knative/zitadel-knative-service.yaml ``` -## Get started with ZIDATEL +## Get started with ZITADEL + +Get ZITADEL URL + ```bash -#get ZIDATEL URL kn services list NAME URL LATEST AGE CONDITIONS READY REASON diff --git a/docs/docs/guides/installation/run/linux.mdx b/docs/docs/guides/installation/run/linux.mdx index 5652d5d419..819de99ff2 100644 --- a/docs/docs/guides/installation/run/linux.mdx +++ b/docs/docs/guides/installation/run/linux.mdx @@ -3,12 +3,14 @@ Download a `cockroach` binary as described [in the CockroachDB docs](https://www.cockroachlabs.com/docs/v22.1/install-cockroachdb). ZITADEL is tested against CockroachDB v22.1.0 and Ubuntu 20.04. -## Run CockroachDB and ZITADEL +## Run CockroachDB ```bash -# Run a CockroachDB instance cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost +``` +## Run ZITADEL +```bash # Download the zitadel binary curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.39 | grep "browser_download_url.*zitadel_Linux_$(uname -i).tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel diff --git a/docs/package.json b/docs/package.json index 8be38247f6..bac30c0d4f 100644 --- a/docs/package.json +++ b/docs/package.json @@ -140,6 +140,7 @@ "postcss-zindex": "5.1.0", "prismjs": "1.28.0", "raw-body": "2.5.1", + "raw-loader": "^4.0.2", "react": "^17.0.2", "react-dev-utils": "12.0.1", "react-dom": "^17.0.2", diff --git a/docs/yarn.lock b/docs/yarn.lock index 0aba367184..cf47fd1ff5 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -6578,6 +6578,14 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" From 9b6dad18cb74b253426137fc443708930a00cb92 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Mon, 18 Jul 2022 10:42:32 +0200 Subject: [PATCH 025/116] feat: provide metrics endpoint (#3902) * feat: provide metrics endpoint * config * enable otel metrics by default Co-authored-by: Florian Forster --- cmd/defaults.yaml | 5 ++ cmd/start/config.go | 7 +++ internal/api/api.go | 10 ++++ internal/telemetry/metrics/config/config.go | 57 ++++--------------- internal/telemetry/metrics/metrics.go | 4 -- internal/telemetry/metrics/otel/config.go | 6 ++ .../telemetry/metrics/otel/open_telemetry.go | 6 ++ internal/telemetry/otel/resource.go | 25 ++++++++ .../telemetry/tracing/otel/open_telemetry.go | 11 +--- 9 files changed, 72 insertions(+), 59 deletions(-) create mode 100644 internal/telemetry/otel/resource.go diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index e6c1117181..2fd816a780 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -3,6 +3,11 @@ Log: Formatter: Format: text +# Exposes metrics on /debug/metrics +Metrics: + # Select type otel (OpenTelemetry) or none (disables collection and endpoint) + Type: otel + # Port ZITADEL will listen on Port: 8080 # Port ZITADEL is exposed on, it can differ from port e.g. if you proxy the traffic diff --git a/cmd/start/config.go b/cmd/start/config.go index ad7d161704..045ebf16bd 100644 --- a/cmd/start/config.go +++ b/cmd/start/config.go @@ -22,6 +22,7 @@ import ( "github.com/zitadel/zitadel/internal/database" "github.com/zitadel/zitadel/internal/query/projection" static_config "github.com/zitadel/zitadel/internal/static/config" + metrics "github.com/zitadel/zitadel/internal/telemetry/metrics/config" tracing "github.com/zitadel/zitadel/internal/telemetry/tracing/config" ) @@ -37,6 +38,7 @@ type Config struct { WebAuthNName string Database database.Config Tracing tracing.Config + Metrics metrics.Config Projections projection.Config Auth auth_es.Config Admin admin_es.Config @@ -65,12 +67,17 @@ func MustNewConfig(v *viper.Viper) *Config { mapstructure.StringToSliceHookFunc(","), )), ) + logging.OnError(err).Fatal("unable to read config") + err = config.Log.SetLogger() logging.OnError(err).Fatal("unable to set logger") err = config.Tracing.NewTracer() logging.OnError(err).Fatal("unable to set tracer") + err = config.Metrics.NewMeter() + logging.OnError(err).Fatal("unable to set meter") + return config } diff --git a/internal/api/api.go b/internal/api/api.go index d2bc29f106..4fd1f2b816 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -17,6 +17,7 @@ import ( http_util "github.com/zitadel/zitadel/internal/api/http" "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/query" + "github.com/zitadel/zitadel/internal/telemetry/metrics" "github.com/zitadel/zitadel/internal/telemetry/tracing" ) @@ -132,6 +133,7 @@ func (a *API) healthHandler() http.Handler { handler.HandleFunc("/healthz", handleHealth) handler.HandleFunc("/ready", handleReadiness(checks)) handler.HandleFunc("/validate", handleValidate(checks)) + handler.Handle("/metrics", metricsExporter()) return handler } @@ -175,3 +177,11 @@ func validate(ctx context.Context, validations []ValidationFunction) []error { } return errs } + +func metricsExporter() http.Handler { + exporter := metrics.GetExporter() + if exporter == nil { + return http.NotFoundHandler() + } + return exporter +} diff --git a/internal/telemetry/metrics/config/config.go b/internal/telemetry/metrics/config/config.go index 000763249f..270cc77165 100644 --- a/internal/telemetry/metrics/config/config.go +++ b/internal/telemetry/metrics/config/config.go @@ -1,65 +1,30 @@ package config import ( - "encoding/json" - "github.com/zitadel/zitadel/internal/errors" - "github.com/zitadel/zitadel/internal/telemetry/metrics" "github.com/zitadel/zitadel/internal/telemetry/metrics/otel" ) -type MetricsConfig struct { +type Config struct { Type string - Config metrics.Config + Config map[string]interface{} `mapstructure:",remain"` } -var meter = map[string]func() metrics.Config{ - "otel": func() metrics.Config { return &otel.Config{} }, - "none": func() metrics.Config { return &NoMetrics{} }, - "": func() metrics.Config { return &NoMetrics{} }, +var meter = map[string]func(map[string]interface{}) error{ + "otel": otel.NewTracerFromConfig, + "none": NoMetrics, + "": NoMetrics, } -func (c *MetricsConfig) UnmarshalJSON(data []byte) error { - var rc struct { - Type string - Config json.RawMessage - } - - if err := json.Unmarshal(data, &rc); err != nil { - return errors.ThrowInternal(err, "METER-4M9so", "error parsing config") - } - - c.Type = rc.Type - - var err error - c.Config, err = newMetricsConfig(c.Type, rc.Config) - if err != nil { - return err - } - - return c.Config.NewMetrics() -} - -func newMetricsConfig(tracerType string, configData []byte) (metrics.Config, error) { - t, ok := meter[tracerType] +func (c *Config) NewMeter() error { + t, ok := meter[c.Type] if !ok { - return nil, errors.ThrowInternalf(nil, "METER-3M0ps", "config type %s not supported", tracerType) + return errors.ThrowInternalf(nil, "METER-Dfqsx", "config type %s not supported", c.Type) } - metricsConfig := t() - if len(configData) == 0 { - return metricsConfig, nil - } - - if err := json.Unmarshal(configData, metricsConfig); err != nil { - return nil, errors.ThrowInternal(err, "METER-4M9sf", "Could not read config: %v") - } - - return metricsConfig, nil + return t(c.Config) } -type NoMetrics struct{} - -func (_ *NoMetrics) NewMetrics() error { +func NoMetrics(_ map[string]interface{}) error { return nil } diff --git a/internal/telemetry/metrics/metrics.go b/internal/telemetry/metrics/metrics.go index 380ec3c846..675cc35c9f 100644 --- a/internal/telemetry/metrics/metrics.go +++ b/internal/telemetry/metrics/metrics.go @@ -26,10 +26,6 @@ type Metrics interface { RegisterValueObserver(name, description string, callbackFunc metric.Int64ObserverFunc) error } -type Config interface { - NewMetrics() error -} - var M Metrics func GetExporter() http.Handler { diff --git a/internal/telemetry/metrics/otel/config.go b/internal/telemetry/metrics/otel/config.go index c26e78a1fe..b811e36ce0 100644 --- a/internal/telemetry/metrics/otel/config.go +++ b/internal/telemetry/metrics/otel/config.go @@ -8,6 +8,12 @@ type Config struct { MeterName string } +func NewTracerFromConfig(rawConfig map[string]interface{}) (err error) { + c := new(Config) + c.MeterName, _ = rawConfig["metername"].(string) + return c.NewMetrics() +} + func (c *Config) NewMetrics() (err error) { metrics.M, err = NewMetrics(c.MeterName) return err diff --git a/internal/telemetry/metrics/otel/open_telemetry.go b/internal/telemetry/metrics/otel/open_telemetry.go index 696e9d5294..9150e6cd6b 100644 --- a/internal/telemetry/metrics/otel/open_telemetry.go +++ b/internal/telemetry/metrics/otel/open_telemetry.go @@ -15,6 +15,7 @@ import ( caos_errs "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/telemetry/metrics" + otel_resource "github.com/zitadel/zitadel/internal/telemetry/otel" ) type Metrics struct { @@ -26,6 +27,10 @@ type Metrics struct { } func NewMetrics(meterName string) (metrics.Metrics, error) { + resource, err := otel_resource.ResourceWithService() + if err != nil { + return nil, err + } exporter, err := prometheus.New( prometheus.Config{}, controller.New( @@ -34,6 +39,7 @@ func NewMetrics(meterName string) (metrics.Metrics, error) { aggregation.CumulativeTemporalitySelector(), processor.WithMemory(true), ), + controller.WithResource(resource), ), ) if err != nil { diff --git a/internal/telemetry/otel/resource.go b/internal/telemetry/otel/resource.go new file mode 100644 index 0000000000..dac46e70e4 --- /dev/null +++ b/internal/telemetry/otel/resource.go @@ -0,0 +1,25 @@ +package otel + +import ( + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/sdk/resource" + semconv "go.opentelemetry.io/otel/semconv/v1.7.0" + + "github.com/zitadel/zitadel/cmd/build" +) + +func ResourceWithService() (*resource.Resource, error) { + attributes := []attribute.KeyValue{ + semconv.ServiceNameKey.String("ZITADEL"), + } + if build.Version() != "" { + attributes = append(attributes, semconv.ServiceVersionKey.String(build.Version())) + } + return resource.Merge( + resource.Default(), + resource.NewWithAttributes( + semconv.SchemaURL, + attributes..., + ), + ) +} diff --git a/internal/telemetry/tracing/otel/open_telemetry.go b/internal/telemetry/tracing/otel/open_telemetry.go index a3de6fb414..9bffe230e8 100644 --- a/internal/telemetry/tracing/otel/open_telemetry.go +++ b/internal/telemetry/tracing/otel/open_telemetry.go @@ -6,11 +6,10 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/propagation" - "go.opentelemetry.io/otel/sdk/resource" sdk_trace "go.opentelemetry.io/otel/sdk/trace" - semconv "go.opentelemetry.io/otel/semconv/v1.7.0" api_trace "go.opentelemetry.io/otel/trace" + otel_resource "github.com/zitadel/zitadel/internal/telemetry/otel" "github.com/zitadel/zitadel/internal/telemetry/tracing" ) @@ -20,13 +19,7 @@ type Tracer struct { } func NewTracer(sampler sdk_trace.Sampler, exporter sdk_trace.SpanExporter) (*Tracer, error) { - resource, err := resource.Merge( - resource.Default(), - resource.NewWithAttributes( - semconv.SchemaURL, - semconv.ServiceNameKey.String("ZITADEL"), - ), - ) + resource, err := otel_resource.ResourceWithService() if err != nil { return nil, err } From 966bbec87769cd0c8c76b486b1cbcc2a1e10df1a Mon Sep 17 00:00:00 2001 From: mffap Date: Mon, 18 Jul 2022 17:16:45 +0200 Subject: [PATCH 026/116] chore(docs): add chat and discussions to navi (#3991) --- docs/docusaurus.config.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index d05787361c..c72f543e0f 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -85,6 +85,16 @@ module.exports = { label: "GitHub", position: "right", }, + { + href: "https://zitadel.com/chat", + label: "Chat", + position: "right", + }, + { + label: "Discussions", + position: "right", + href: "https://github.com/zitadel/zitadel/discussions", + }, ], }, footer: { From 931152bb73cb061034ef8ca0e4f988b63e5571fa Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Mon, 18 Jul 2022 21:30:19 +0200 Subject: [PATCH 027/116] chore: Update issue templates (#3979) --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/okr.md | 13 ------------- .github/ISSUE_TEMPLATE/story.md | 14 -------------- .github/ISSUE_TEMPLATE/task.md | 5 +---- 4 files changed, 2 insertions(+), 32 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/okr.md delete mode 100644 .github/ISSUE_TEMPLATE/story.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 559c5e17db..f355035e53 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -2,7 +2,7 @@ name: "\U0001F41B Bug report" about: Create a report to help us improve title: '' -labels: bug +labels: 'state: triage, type: bug' assignees: '' --- diff --git a/.github/ISSUE_TEMPLATE/okr.md b/.github/ISSUE_TEMPLATE/okr.md deleted file mode 100644 index f084c738ce..0000000000 --- a/.github/ISSUE_TEMPLATE/okr.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: OKR -about: The objective key result is an overarching goal that we are working towards. -title: '' -labels: OKR -assignees: '' - ---- - -OKR description - -- [ ] Link to subordinate story -- [ ] Link to subordinate story diff --git a/.github/ISSUE_TEMPLATE/story.md b/.github/ISSUE_TEMPLATE/story.md deleted file mode 100644 index c9813719f3..0000000000 --- a/.github/ISSUE_TEMPLATE/story.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: Story -about: A story describes the basic objective and contains several tasks that are to - be implemented -title: '' -labels: story -assignees: '' - ---- - -As a [type of user], I want [a goal or objective], so that [customer benefit or value]. - -- [ ] Link to subordinate task -- [ ] Link to subordinate task diff --git a/.github/ISSUE_TEMPLATE/task.md b/.github/ISSUE_TEMPLATE/task.md index 2b27a56071..babd0a023d 100644 --- a/.github/ISSUE_TEMPLATE/task.md +++ b/.github/ISSUE_TEMPLATE/task.md @@ -3,16 +3,13 @@ name: Task about: A task describes what is to be implemented and which acceptance criteria must be met. title: '' -labels: task +labels: 'state: triage' assignees: '' --- Description -- [ ] Todo -- [ ] Todo - **Acceptance criteria** - [ ] ... - [ ] ... From 2707461ea64ded47647ace7a3d728f8bc3c2d3db Mon Sep 17 00:00:00 2001 From: Silvan Date: Tue, 19 Jul 2022 09:07:37 +0200 Subject: [PATCH 028/116] fix(login): trigger bulk on reset password (#3970) Co-authored-by: Livio Spring --- internal/api/ui/login/password_reset_handler.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/ui/login/password_reset_handler.go b/internal/api/ui/login/password_reset_handler.go index ef567732a9..0513d2c7df 100644 --- a/internal/api/ui/login/password_reset_handler.go +++ b/internal/api/ui/login/password_reset_handler.go @@ -23,7 +23,7 @@ func (l *Login) handlePasswordReset(w http.ResponseWriter, r *http.Request) { l.renderInitPassword(w, r, authReq, authReq.UserID, "", err) return } - user, err := l.query.GetUser(setContext(r.Context(), authReq.UserOrgID), false, loginName) + user, err := l.query.GetUser(setContext(r.Context(), authReq.UserOrgID), true, loginName) if err != nil { l.renderPasswordResetDone(w, r, authReq, err) return From 95481c2e0b0b7fdf0dd115f5ffb721628cff1d0d Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 20 Jul 2022 11:20:49 +0200 Subject: [PATCH 029/116] feat: allow system config changes (#3876) * feat: run repeatable setup steps * feat: react to system config changes * renaming --- cmd/setup/config_change.go | 60 +++++++++ cmd/setup/setup.go | 22 ++-- internal/command/instance.go | 49 ++++++++ internal/command/instance_domain.go | 84 ++++++++++--- internal/command/system_model.go | 184 ++++++++++++++++++++++++++++ internal/migration/command.go | 31 +++-- internal/migration/migration.go | 41 +++++-- 7 files changed, 424 insertions(+), 47 deletions(-) create mode 100644 cmd/setup/config_change.go create mode 100644 internal/command/system_model.go diff --git a/cmd/setup/config_change.go b/cmd/setup/config_change.go new file mode 100644 index 0000000000..d996b9d4d7 --- /dev/null +++ b/cmd/setup/config_change.go @@ -0,0 +1,60 @@ +package setup + +import ( + "context" + + "github.com/zitadel/zitadel/internal/command" + "github.com/zitadel/zitadel/internal/config/systemdefaults" + "github.com/zitadel/zitadel/internal/eventstore" +) + +type externalConfigChange struct { + es *eventstore.Eventstore + ExternalDomain string `json:"externalDomain"` + ExternalSecure bool `json:"externalSecure"` + ExternalPort uint16 `json:"externalPort"` + + currentExternalDomain string + currentExternalSecure bool + currentExternalPort uint16 +} + +func (mig *externalConfigChange) SetLastExecution(lastRun map[string]interface{}) { + mig.currentExternalDomain, _ = lastRun["externalDomain"].(string) + externalPort, _ := lastRun["externalPort"].(float64) + mig.currentExternalPort = uint16(externalPort) + mig.currentExternalSecure, _ = lastRun["externalSecure"].(bool) +} + +func (mig *externalConfigChange) Check() bool { + return mig.currentExternalSecure != mig.ExternalSecure || + mig.currentExternalPort != mig.ExternalPort || + mig.currentExternalDomain != mig.ExternalDomain +} + +func (mig *externalConfigChange) Execute(ctx context.Context) error { + cmd, err := command.StartCommands(mig.es, + systemdefaults.SystemDefaults{}, + nil, + nil, + nil, + mig.ExternalDomain, + mig.ExternalSecure, + mig.ExternalPort, + nil, + nil, + nil, + nil, + nil, + nil, + nil) + + if err != nil { + return err + } + return cmd.ChangeSystemConfig(ctx, mig.currentExternalDomain, mig.currentExternalPort, mig.currentExternalSecure) +} + +func (mig *externalConfigChange) String() string { + return "config_change" +} diff --git a/cmd/setup/setup.go b/cmd/setup/setup.go index 5a92329230..e562d28e93 100644 --- a/cmd/setup/setup.go +++ b/cmd/setup/setup.go @@ -54,6 +54,8 @@ func Flags(cmd *cobra.Command) { } func Setup(config *Config, steps *Steps, masterKey string) { + logging.Info("setup started") + dbClient, err := database.Connect(config.Database) logging.OnError(err).Fatal("unable to connect to database") @@ -76,6 +78,15 @@ func Setup(config *Config, steps *Steps, masterKey string) { steps.S3DefaultInstance.externalSecure = config.ExternalSecure steps.S3DefaultInstance.externalPort = config.ExternalPort + repeatableSteps := []migration.RepeatableMigration{ + &externalConfigChange{ + es: eventstoreClient, + ExternalDomain: config.ExternalDomain, + ExternalPort: config.ExternalPort, + ExternalSecure: config.ExternalSecure, + }, + } + ctx := context.Background() err = migration.Migrate(ctx, eventstoreClient, steps.s1ProjectionTable) logging.OnError(err).Fatal("unable to migrate step 1") @@ -83,14 +94,9 @@ func Setup(config *Config, steps *Steps, masterKey string) { logging.OnError(err).Fatal("unable to migrate step 2") err = migration.Migrate(ctx, eventstoreClient, steps.S3DefaultInstance) logging.OnError(err).Fatal("unable to migrate step 3") -} -func initSteps(v *viper.Viper, files ...string) func() { - return func() { - for _, file := range files { - v.SetConfigFile(file) - err := v.MergeInConfig() - logging.WithFields("file", file).OnError(err).Warn("unable to read setup file") - } + for _, repeatableStep := range repeatableSteps { + err = migration.Migrate(ctx, eventstoreClient, repeatableStep) + logging.OnError(err).Fatalf("unable to migrate repeatable step: %s", repeatableStep.String()) } } diff --git a/internal/command/instance.go b/internal/command/instance.go index 4db7158d6f..f99e68d12b 100644 --- a/internal/command/instance.go +++ b/internal/command/instance.go @@ -398,6 +398,41 @@ func (c *Commands) SetDefaultOrg(ctx context.Context, orgID string) (*domain.Obj }, nil } +func (c *Commands) ChangeSystemConfig(ctx context.Context, externalDomain string, externalPort uint16, externalSecure bool) error { + validations, err := c.prepareChangeSystemConfig(externalDomain, externalPort, externalSecure)(ctx, c.eventstore.Filter) + if err != nil { + return err + } + for instanceID, instanceValidations := range validations { + if len(instanceValidations.Validations) == 0 { + continue + } + ctx := authz.WithConsole(authz.WithInstanceID(ctx, instanceID), instanceValidations.ProjectID, instanceValidations.ConsoleAppID) + cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, instanceValidations.Validations...) + if err != nil { + return err + } + _, err = c.eventstore.Push(ctx, cmds...) + if err != nil { + return err + } + } + return nil +} + +func (c *Commands) prepareChangeSystemConfig(externalDomain string, externalPort uint16, externalSecure bool) func(ctx context.Context, filter preparation.FilterToQueryReducer) (map[string]*SystemConfigChangesValidation, error) { + return func(ctx context.Context, filter preparation.FilterToQueryReducer) (map[string]*SystemConfigChangesValidation, error) { + if externalDomain == "" || externalPort == 0 { + return nil, nil + } + writeModel, err := getSystemConfigWriteModel(ctx, filter, externalDomain, c.externalDomain, externalPort, c.externalPort, externalSecure, c.externalSecure) + if err != nil { + return nil, err + } + return writeModel.NewChangedEvents(c), nil + } +} + func prepareAddInstance(a *instance.Aggregate, instanceName string, defaultLanguage language.Tag) preparation.Validation { return func() (preparation.CreateCommands, error) { return func(ctx context.Context, filter preparation.FilterToQueryReducer) ([]eventstore.Command, error) { @@ -494,3 +529,17 @@ func getInstanceWriteModel(ctx context.Context, filter preparation.FilterToQuery err = writeModel.Reduce() return writeModel, err } + +func getSystemConfigWriteModel(ctx context.Context, filter preparation.FilterToQueryReducer, externalDomain, newExternalDomain string, externalPort, newExternalPort uint16, externalSecure, newExternalSecure bool) (*SystemConfigWriteModel, error) { + writeModel := NewSystemConfigWriteModel(externalDomain, newExternalDomain, externalPort, newExternalPort, externalSecure, newExternalSecure) + events, err := filter(ctx, writeModel.Query()) + if err != nil { + return nil, err + } + if len(events) == 0 { + return writeModel, nil + } + writeModel.AppendEvents(events...) + err = writeModel.Reduce() + return writeModel, err +} diff --git a/internal/command/instance_domain.go b/internal/command/instance_domain.go index 80fd2e53cd..a0db372c1e 100644 --- a/internal/command/instance_domain.go +++ b/internal/command/instance_domain.go @@ -95,33 +95,68 @@ func (c *Commands) addInstanceDomain(a *instance.Aggregate, instanceDomain strin events := []eventstore.Command{ instance.NewDomainAddedEvent(ctx, &a.Aggregate, instanceDomain, generated), } - appWriteModel, err := getOIDCAppWriteModel(ctx, filter, authz.GetInstance(ctx).ProjectID(), authz.GetInstance(ctx).ConsoleApplicationID(), "") + consoleChangeEvent, err := c.updateConsoleRedirectURIs(ctx, filter, instanceDomain) if err != nil { return nil, err } - if appWriteModel.State.Exists() { - redirectUrls := append(appWriteModel.RedirectUris, http.BuildHTTP(instanceDomain, c.externalPort, c.externalSecure)+consoleRedirectPath) - logoutUrls := append(appWriteModel.PostLogoutRedirectUris, http.BuildHTTP(instanceDomain, c.externalPort, c.externalSecure)+consolePostLogoutPath) - consoleChangeEvent, err := project.NewOIDCConfigChangedEvent( - ctx, - ProjectAggregateFromWriteModel(&appWriteModel.WriteModel), - appWriteModel.AppID, - []project.OIDCConfigChanges{ - project.ChangeRedirectURIs(redirectUrls), - project.ChangePostLogoutRedirectURIs(logoutUrls), - }, - ) - if err != nil { - return nil, err - } - events = append(events, consoleChangeEvent) - } - - return events, nil + return append(events, consoleChangeEvent), nil }, nil } } +func (c *Commands) prepareUpdateConsoleRedirectURIs(instanceDomain string) preparation.Validation { + return func() (preparation.CreateCommands, error) { + if instanceDomain = strings.TrimSpace(instanceDomain); instanceDomain == "" { + return nil, errors.ThrowInvalidArgument(nil, "INST-E3j3s", "Errors.Invalid.Argument") + } + return func(ctx context.Context, filter preparation.FilterToQueryReducer) ([]eventstore.Command, error) { + consoleChangeEvent, err := c.updateConsoleRedirectURIs(ctx, filter, instanceDomain) + if err != nil { + return nil, err + } + return []eventstore.Command{ + consoleChangeEvent, + }, nil + }, nil + } +} + +func (c *Commands) updateConsoleRedirectURIs(ctx context.Context, filter preparation.FilterToQueryReducer, instanceDomain string) (*project.OIDCConfigChangedEvent, error) { + appWriteModel, err := getOIDCAppWriteModel(ctx, filter, authz.GetInstance(ctx).ProjectID(), authz.GetInstance(ctx).ConsoleApplicationID(), "") + if err != nil { + return nil, err + } + if !appWriteModel.State.Exists() { + return nil, nil + } + redirectURI := http.BuildHTTP(instanceDomain, c.externalPort, c.externalSecure) + consoleRedirectPath + changes := make([]project.OIDCConfigChanges, 0, 2) + if !containsURI(appWriteModel.RedirectUris, redirectURI) { + changes = append(changes, project.ChangeRedirectURIs(append(appWriteModel.RedirectUris, redirectURI))) + } + postLogoutRedirectURI := http.BuildHTTP(instanceDomain, c.externalPort, c.externalSecure) + consolePostLogoutPath + if !containsURI(appWriteModel.PostLogoutRedirectUris, postLogoutRedirectURI) { + changes = append(changes, project.ChangePostLogoutRedirectURIs(append(appWriteModel.PostLogoutRedirectUris, postLogoutRedirectURI))) + } + return project.NewOIDCConfigChangedEvent( + ctx, + ProjectAggregateFromWriteModel(&appWriteModel.WriteModel), + appWriteModel.AppID, + changes, + ) +} + +//checkUpdateConsoleRedirectURIs validates if the required console uri is present in the redirect_uris and post_logout_redirect_uris +//it will return true only if present in both list, otherwise false +func (c *Commands) checkUpdateConsoleRedirectURIs(instanceDomain string, redirectURIs, postLogoutRedirectURIs []string) bool { + redirectURI := http.BuildHTTP(instanceDomain, c.externalPort, c.externalSecure) + consoleRedirectPath + if !containsURI(redirectURIs, redirectURI) { + return false + } + postLogoutRedirectURI := http.BuildHTTP(instanceDomain, c.externalPort, c.externalSecure) + consolePostLogoutPath + return containsURI(postLogoutRedirectURIs, postLogoutRedirectURI) +} + func setPrimaryInstanceDomain(a *instance.Aggregate, instanceDomain string) preparation.Validation { return func() (preparation.CreateCommands, error) { if instanceDomain = strings.TrimSpace(instanceDomain); instanceDomain == "" { @@ -174,3 +209,12 @@ func getInstanceDomainWriteModel(ctx context.Context, filter preparation.FilterT err = domainWriteModel.Reduce() return domainWriteModel, err } + +func containsURI(uris []string, uri string) bool { + for _, u := range uris { + if u == uri { + return true + } + } + return false +} diff --git a/internal/command/system_model.go b/internal/command/system_model.go new file mode 100644 index 0000000000..9ed0684f6b --- /dev/null +++ b/internal/command/system_model.go @@ -0,0 +1,184 @@ +package command + +import ( + "strings" + + "github.com/zitadel/zitadel/internal/command/preparation" + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/repository/instance" + "github.com/zitadel/zitadel/internal/repository/project" +) + +type SystemConfigWriteModel struct { + eventstore.WriteModel + + Instances map[string]*systemConfigChangesInstanceModel + externalDomain string + externalPort uint16 + externalSecure bool + newExternalDomain string + newExternalPort uint16 + newExternalSecure bool +} + +type systemConfigChangesInstanceModel struct { + Domains []string + GeneratedDomain string + ProjectID string + ConsoleAppID string + RedirectUris []string + PostLogoutRedirectUris []string +} + +func NewSystemConfigWriteModel(externalDomain, newExternalDomain string, externalPort, newExternalPort uint16, externalSecure, newExternalSecure bool) *SystemConfigWriteModel { + return &SystemConfigWriteModel{ + WriteModel: eventstore.WriteModel{}, + Instances: make(map[string]*systemConfigChangesInstanceModel), + externalDomain: externalDomain, + externalPort: externalPort, + externalSecure: externalSecure, + newExternalDomain: newExternalDomain, + newExternalPort: newExternalPort, + newExternalSecure: newExternalSecure, + } +} + +func (wm *SystemConfigWriteModel) Reduce() error { + for _, event := range wm.Events { + switch e := event.(type) { + case *instance.InstanceAddedEvent: + wm.Instances[e.Aggregate().InstanceID] = &systemConfigChangesInstanceModel{} + case *instance.InstanceRemovedEvent: + delete(wm.Instances, e.Aggregate().InstanceID) + case *instance.DomainAddedEvent: + if !e.Generated && e.Domain != wm.externalDomain && e.Domain != wm.newExternalDomain { + continue + } + if e.Generated && !strings.HasSuffix(e.Domain, wm.externalDomain) && !strings.HasSuffix(e.Domain, wm.newExternalDomain) { + continue + } + wm.Instances[e.Aggregate().InstanceID].Domains = append(wm.Instances[e.Aggregate().InstanceID].Domains, e.Domain) + case *instance.DomainRemovedEvent: + domains := wm.Instances[e.Aggregate().InstanceID].Domains + for i, domain := range domains { + if domain == e.Domain { + domains[i] = domains[len(domains)-1] + domains[len(domains)-1] = "" + wm.Instances[e.Aggregate().InstanceID].Domains = domains[:len(domains)-1] + break + } + } + case *instance.ProjectSetEvent: + wm.Instances[e.Aggregate().InstanceID].ProjectID = e.ProjectID + case *instance.ConsoleSetEvent: + wm.Instances[e.Aggregate().InstanceID].ConsoleAppID = e.AppID + case *project.OIDCConfigAddedEvent: + if wm.Instances[e.Aggregate().InstanceID].ConsoleAppID != e.AppID { + continue + } + wm.Instances[e.Aggregate().InstanceID].RedirectUris = e.RedirectUris + wm.Instances[e.Aggregate().InstanceID].PostLogoutRedirectUris = e.PostLogoutRedirectUris + case *project.OIDCConfigChangedEvent: + if wm.Instances[e.Aggregate().InstanceID].ConsoleAppID != e.AppID { + continue + } + if e.RedirectUris != nil { + wm.Instances[e.Aggregate().InstanceID].RedirectUris = *e.RedirectUris + } + if e.PostLogoutRedirectUris != nil { + wm.Instances[e.Aggregate().InstanceID].PostLogoutRedirectUris = *e.PostLogoutRedirectUris + } + } + } + return nil +} + +func (wm *SystemConfigWriteModel) Query() *eventstore.SearchQueryBuilder { + return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes(instance.AggregateType). + EventTypes( + instance.InstanceAddedEventType, + instance.InstanceRemovedEventType, + instance.InstanceDomainAddedEventType, + instance.InstanceDomainRemovedEventType, + instance.ProjectSetEventType, + instance.ConsoleSetEventType, + ). + Or(). + AggregateTypes(project.AggregateType). + EventTypes( + project.OIDCConfigAddedType, + project.OIDCConfigChangedType, + ). + Builder() +} + +type SystemConfigChangesValidation struct { + ProjectID string + ConsoleAppID string + Validations []preparation.Validation + InstanceID string +} + +func (wm *SystemConfigWriteModel) NewChangedEvents(commands *Commands) map[string]*SystemConfigChangesValidation { + var newCustomDomainExists, isInstanceOfCustomDomain bool + var instanceOfCustomDomain string + cmds := make(map[string]*SystemConfigChangesValidation) + for i, inst := range wm.Instances { + cmds[i] = &SystemConfigChangesValidation{ + InstanceID: i, + ProjectID: inst.ProjectID, + ConsoleAppID: inst.ConsoleAppID, + } + //check each instance separately for changes (using the generated domain) and check if there's an existing custom domain + newCustomDomainExists, isInstanceOfCustomDomain = wm.changeConfig(cmds[i], inst, commands) + if isInstanceOfCustomDomain || newCustomDomainExists { + instanceOfCustomDomain = i + } + } + //handle the custom domain at last + if newCustomDomainExists { + //if the domain itself already exists, then only check if the uris of the console app exist as well + wm.changeURIs(cmds[instanceOfCustomDomain], wm.Instances[instanceOfCustomDomain], commands, wm.newExternalDomain) + return cmds + } + //otherwise the add instance domain will take care of the uris + cmds[instanceOfCustomDomain].Validations = append(cmds[instanceOfCustomDomain].Validations, commands.addInstanceDomain(instance.NewAggregate(instanceOfCustomDomain), wm.newExternalDomain, false)) + return cmds +} + +func (wm *SystemConfigWriteModel) changeConfig(validation *SystemConfigChangesValidation, inst *systemConfigChangesInstanceModel, commands *Commands) (newCustomDomainExists, isInstanceOfCustomDomain bool) { + var newGeneratedDomain string + var newGeneratedDomainExists bool + for _, domain := range inst.Domains { + if domain == wm.newExternalDomain { + newCustomDomainExists = true + continue + } + if domain != wm.newExternalDomain && strings.HasSuffix(domain, wm.newExternalDomain) { + newGeneratedDomainExists = true + } + if !newCustomDomainExists && domain == wm.externalDomain { + isInstanceOfCustomDomain = true + } + if domain != wm.externalDomain && strings.HasSuffix(domain, wm.externalDomain) { + newGeneratedDomain = strings.TrimSuffix(domain, wm.externalDomain) + wm.newExternalDomain + } + } + if newGeneratedDomainExists { + //if the domain itself already exists, then only check if the uris of the console app exist as well + wm.changeURIs(validation, inst, commands, newGeneratedDomain) + return newCustomDomainExists, isInstanceOfCustomDomain + } + //otherwise the add instance domain will take care of the uris + validation.Validations = append(validation.Validations, commands.addInstanceDomain(instance.NewAggregate(validation.InstanceID), newGeneratedDomain, true)) + return newCustomDomainExists, isInstanceOfCustomDomain +} + +func (wm *SystemConfigWriteModel) changeURIs(validation *SystemConfigChangesValidation, inst *systemConfigChangesInstanceModel, commands *Commands, domain string) { + if commands.checkUpdateConsoleRedirectURIs(domain, inst.RedirectUris, inst.PostLogoutRedirectUris) { + return + } + validation.Validations = append(validation.Validations, commands.prepareUpdateConsoleRedirectURIs(domain)) +} diff --git a/internal/migration/command.go b/internal/migration/command.go index 16ac4eb188..5e43b35b37 100644 --- a/internal/migration/command.go +++ b/internal/migration/command.go @@ -15,20 +15,23 @@ import ( type SetupStep struct { eventstore.BaseEvent `json:"-"` migration Migration - Name string `json:"name"` - Error error `json:"error,omitempty"` + Name string `json:"name"` + Error error `json:"error,omitempty"` + LastRun interface{} `json:"lastRun,omitempty"` } func (s *SetupStep) UnmarshalJSON(data []byte) error { fields := struct { - Name string `json:"name,"` - Error *errors.CaosError `json:"error"` + Name string `json:"name,"` + Error *errors.CaosError `json:"error"` + LastRun map[string]interface{} `json:"lastRun,omitempty"` }{} if err := json.Unmarshal(data, &fields); err != nil { return err } s.Name = fields.Name s.Error = fields.Error + s.LastRun = fields.LastRun return nil } @@ -46,15 +49,21 @@ func setupStartedCmd(migration Migration) eventstore.Command { func setupDoneCmd(migration Migration, err error) eventstore.Command { ctx := authz.SetCtxData(service.WithService(context.Background(), "system"), authz.CtxData{UserID: "system", OrgID: "SYSTEM", ResourceOwner: "SYSTEM"}) + typ := doneType + var lastRun interface{} + if repeatable, ok := migration.(RepeatableMigration); ok { + typ = repeatableDoneType + lastRun = repeatable + } + if err != nil { + typ = failedType + } + s := &SetupStep{ migration: migration, Name: migration.String(), Error: err, - } - - typ := doneType - if err != nil { - typ = failedType + LastRun: lastRun, } s.BaseEvent = *eventstore.NewBaseEventForPush( @@ -75,7 +84,8 @@ func (s *SetupStep) UniqueConstraints() []*eventstore.EventUniqueConstraint { return []*eventstore.EventUniqueConstraint{ eventstore.NewAddGlobalEventUniqueConstraint("migration_started", s.migration.String(), "Errors.Step.Started.AlreadyExists"), } - case failedType: + case failedType, + repeatableDoneType: return []*eventstore.EventUniqueConstraint{ eventstore.NewRemoveGlobalEventUniqueConstraint("migration_started", s.migration.String()), } @@ -90,6 +100,7 @@ func RegisterMappers(es *eventstore.Eventstore) { es.RegisterFilterEventMapper(startedType, SetupMapper) es.RegisterFilterEventMapper(doneType, SetupMapper) es.RegisterFilterEventMapper(failedType, SetupMapper) + es.RegisterFilterEventMapper(repeatableDoneType, SetupMapper) } func SetupMapper(event *repository.Event) (eventstore.Event, error) { diff --git a/internal/migration/migration.go b/internal/migration/migration.go index 0dc5d14564..2f27a3715c 100644 --- a/internal/migration/migration.go +++ b/internal/migration/migration.go @@ -10,11 +10,12 @@ import ( ) const ( - startedType = eventstore.EventType("system.migration.started") - doneType = eventstore.EventType("system.migration.done") - failedType = eventstore.EventType("system.migration.failed") - aggregateType = eventstore.AggregateType("system") - aggregateID = "SYSTEM" + startedType = eventstore.EventType("system.migration.started") + doneType = eventstore.EventType("system.migration.done") + failedType = eventstore.EventType("system.migration.failed") + repeatableDoneType = eventstore.EventType("system.migration.repeatable.done") + aggregateType = eventstore.AggregateType("system") + aggregateID = "SYSTEM" ) type Migration interface { @@ -22,7 +23,15 @@ type Migration interface { Execute(context.Context) error } +type RepeatableMigration interface { + Migration + SetLastExecution(lastRun map[string]interface{}) + Check() bool +} + func Migrate(ctx context.Context, es *eventstore.Eventstore, migration Migration) (err error) { + logging.Infof("verify migration %s", migration.String()) + if should, err := shouldExec(ctx, es, migration); !should || err != nil { return err } @@ -31,6 +40,7 @@ func Migrate(ctx context.Context, es *eventstore.Eventstore, migration Migration return err } + logging.Infof("starting migration %s", migration.String()) err = migration.Execute(ctx) logging.OnError(err).Error("migration failed") @@ -48,7 +58,7 @@ func shouldExec(ctx context.Context, es *eventstore.Eventstore, migration Migrat AddQuery(). AggregateTypes(aggregateType). AggregateIDs(aggregateID). - EventTypes(startedType, doneType, failedType). + EventTypes(startedType, doneType, repeatableDoneType, failedType). Builder()) if err != nil { return false, err @@ -68,10 +78,23 @@ func shouldExec(ctx context.Context, es *eventstore.Eventstore, migration Migrat switch event.Type() { case startedType, failedType: isStarted = !isStarted - case doneType: - return false, nil + case doneType, + repeatableDoneType: + repeatable, ok := migration.(RepeatableMigration) + if !ok { + return false, nil + } + isStarted = false + repeatable.SetLastExecution(e.LastRun.(map[string]interface{})) } } - return !isStarted, nil + if isStarted { + return false, nil + } + repeatable, ok := migration.(RepeatableMigration) + if !ok { + return true, nil + } + return repeatable.Check(), nil } From 6a3689e05a3b2b3f6933a2a800ea067b36c59d64 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Thu, 21 Jul 2022 11:15:35 +0200 Subject: [PATCH 030/116] fix(console): username overflow when suffix is shown (#4007) * fix(console): username overflow when suffix * rm logs --- .../src/app/modules/form-field/form-field.component.scss | 8 ++++++-- .../pages/users/user-create/user-create.component.scss | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/console/src/app/modules/form-field/form-field.component.scss b/console/src/app/modules/form-field/form-field.component.scss index c27b21a59b..c91924a894 100644 --- a/console/src/app/modules/form-field/form-field.component.scss +++ b/console/src/app/modules/form-field/form-field.component.scss @@ -9,7 +9,7 @@ .ng-untouched { .cnsl-error { visibility: hidden; - transition: visibility .2 ease; + transition: visibility 0.2 ease; } } @@ -24,10 +24,14 @@ [cnslSuffix] { position: absolute; - right: .5rem; + right: 0.5rem; top: 9px; height: inherit; vertical-align: middle; + max-width: 150px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } input { diff --git a/console/src/app/pages/users/user-create/user-create.component.scss b/console/src/app/pages/users/user-create/user-create.component.scss index 5cbf979da4..2610b6db2a 100644 --- a/console/src/app/pages/users/user-create/user-create.component.scss +++ b/console/src/app/pages/users/user-create/user-create.component.scss @@ -1,5 +1,5 @@ .user-create-main-content { - max-width: 35rem; + max-width: 45rem; @media only screen and (max-width: 500px) { padding: 0 0.5rem; From 91206967b4aea705f0cbd9122ab06538c21ae58c Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 21 Jul 2022 13:46:59 +0200 Subject: [PATCH 031/116] fix: reset custom org domain policy (#4014) --- internal/api/grpc/admin/domain_policy.go | 14 +++++++++++--- internal/command/org_policy_domain.go | 19 +++++++++++++------ internal/command/org_policy_domain_test.go | 5 ++++- internal/command/policy_org_model.go | 2 ++ 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/internal/api/grpc/admin/domain_policy.go b/internal/api/grpc/admin/domain_policy.go index 78288b235e..c86ca13723 100644 --- a/internal/api/grpc/admin/domain_policy.go +++ b/internal/api/grpc/admin/domain_policy.go @@ -68,12 +68,12 @@ func (s *Server) UpdateCustomDomainPolicy(ctx context.Context, req *admin_pb.Upd }, nil } -func (s *Server) ResetCustomDomainPolicyTo(ctx context.Context, req *admin_pb.ResetCustomDomainPolicyToDefaultRequest) (*admin_pb.ResetCustomDomainPolicyToDefaultResponse, error) { - err := s.command.RemoveOrgDomainPolicy(ctx, req.OrgId) +func (s *Server) ResetCustomDomainPolicyToDefault(ctx context.Context, req *admin_pb.ResetCustomDomainPolicyToDefaultRequest) (*admin_pb.ResetCustomDomainPolicyToDefaultResponse, error) { + details, err := s.command.RemoveOrgDomainPolicy(ctx, req.OrgId) if err != nil { return nil, err } - return nil, nil //TOOD: return data + return &admin_pb.ResetCustomDomainPolicyToDefaultResponse{Details: object.DomainToChangeDetailsPb(details)}, nil } func domainPolicyToDomain(userLoginMustBeDomain, validateOrgDomains, smtpSenderAddressMatchesInstanceDomain bool) *domain.DomainPolicy { @@ -161,6 +161,14 @@ func (s *Server) GetCustomOrgIAMPolicy(ctx context.Context, req *admin_pb.GetCus return &admin_pb.GetCustomOrgIAMPolicyResponse{Policy: policy_grpc.DomainPolicyToOrgIAMPb(policy)}, nil } +func (s *Server) ResetCustomOrgIAMPolicyToDefault(ctx context.Context, req *admin_pb.ResetCustomOrgIAMPolicyToDefaultRequest) (*admin_pb.ResetCustomOrgIAMPolicyToDefaultResponse, error) { + details, err := s.command.RemoveOrgDomainPolicy(ctx, req.OrgId) + if err != nil { + return nil, err + } + return &admin_pb.ResetCustomOrgIAMPolicyToDefaultResponse{Details: object.DomainToChangeDetailsPb(details)}, nil +} + func updateOrgIAMPolicyToDomain(req *admin_pb.UpdateOrgIAMPolicyRequest) *domain.DomainPolicy { return &domain.DomainPolicy{ UserLoginMustBeDomain: req.UserLoginMustBeDomain, diff --git a/internal/command/org_policy_domain.go b/internal/command/org_policy_domain.go index 3b1f1354a3..7b49c02413 100644 --- a/internal/command/org_policy_domain.go +++ b/internal/command/org_policy_domain.go @@ -71,21 +71,28 @@ func (c *Commands) ChangeOrgDomainPolicy(ctx context.Context, resourceOwner stri return orgWriteModelToDomainPolicy(existingPolicy), nil } -func (c *Commands) RemoveOrgDomainPolicy(ctx context.Context, orgID string) error { +func (c *Commands) RemoveOrgDomainPolicy(ctx context.Context, orgID string) (*domain.ObjectDetails, error) { if orgID == "" { - return caos_errs.ThrowInvalidArgument(nil, "Org-3H8fs", "Errors.ResourceOwnerMissing") + return nil, caos_errs.ThrowInvalidArgument(nil, "Org-3H8fs", "Errors.ResourceOwnerMissing") } existingPolicy, err := c.orgDomainPolicyWriteModelByID(ctx, orgID) if err != nil { - return err + return nil, err } if existingPolicy.State == domain.PolicyStateUnspecified || existingPolicy.State == domain.PolicyStateRemoved { - return caos_errs.ThrowNotFound(nil, "ORG-Dvsh3", "Errors.Org.DomainPolicy.NotFound") + return nil, caos_errs.ThrowNotFound(nil, "ORG-Dvsh3", "Errors.Org.DomainPolicy.NotFound") } orgAgg := OrgAggregateFromWriteModel(&existingPolicy.PolicyDomainWriteModel.WriteModel) - _, err = c.eventstore.Push(ctx, org.NewDomainPolicyRemovedEvent(ctx, orgAgg)) - return err + pushedEvents, err := c.eventstore.Push(ctx, org.NewDomainPolicyRemovedEvent(ctx, orgAgg)) + if err != nil { + return nil, err + } + err = AppendAndReduce(existingPolicy, pushedEvents...) + if err != nil { + return nil, err + } + return writeModelToObjectDetails(&existingPolicy.PolicyDomainWriteModel.WriteModel), nil } func (c *Commands) getOrgDomainPolicy(ctx context.Context, orgID string) (*domain.DomainPolicy, error) { diff --git a/internal/command/org_policy_domain_test.go b/internal/command/org_policy_domain_test.go index 249a0283ac..17f7420570 100644 --- a/internal/command/org_policy_domain_test.go +++ b/internal/command/org_policy_domain_test.go @@ -384,13 +384,16 @@ func TestCommandSide_RemoveDomainPolicy(t *testing.T) { r := &Commands{ eventstore: tt.fields.eventstore, } - err := r.RemoveOrgDomainPolicy(tt.args.ctx, tt.args.orgID) + got, err := r.RemoveOrgDomainPolicy(tt.args.ctx, tt.args.orgID) if tt.res.err == nil { assert.NoError(t, err) } if tt.res.err != nil && !tt.res.err(err) { t.Errorf("got wrong err: %v ", err) } + if tt.res.err == nil { + assert.Equal(t, tt.res.want, got) + } }) } } diff --git a/internal/command/policy_org_model.go b/internal/command/policy_org_model.go index e989dd6e2f..73434489ea 100644 --- a/internal/command/policy_org_model.go +++ b/internal/command/policy_org_model.go @@ -33,6 +33,8 @@ func (wm *PolicyDomainWriteModel) Reduce() error { if e.SMTPSenderAddressMatchesInstanceDomain != nil { wm.SMTPSenderAddressMatchesInstanceDomain = *e.SMTPSenderAddressMatchesInstanceDomain } + case *policy.DomainPolicyRemovedEvent: + wm.State = domain.PolicyStateRemoved } } return wm.WriteModel.Reduce() From 5da72dee92035217c74fcb55810c199ea8b09470 Mon Sep 17 00:00:00 2001 From: mffap Date: Thu, 21 Jul 2022 13:53:06 +0200 Subject: [PATCH 032/116] fix(docs): primary domain scope (#3999) primary domain scope --- docs/docs/guides/customization/branding.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/customization/branding.md b/docs/docs/guides/customization/branding.md index 5b23774287..e706966dd9 100644 --- a/docs/docs/guides/customization/branding.md +++ b/docs/docs/guides/customization/branding.md @@ -41,7 +41,7 @@ The primary domain scope will restrict the login to your organization, so only u See the following link as an example. Users will be able to register and login to the organization that verified the @caos.ch domain only. ``` -https://accounts.zitadel.ch/oauth/v2/authorize?client_id=69234247558357051%40zitadel&scope=openid%20profile%20urn%3Azitadel%3Aiam%3Aorg%3Adomain%3Aprimary%3Acaos.ch&redirect_uri=https%3A%2F%2Fconsole.zitadel.ch%2Fauth%2Fcallback&state=testd&response_type=code&nonce=test&code_challenge=UY30LKMy4bZFwF7Oyk6BpJemzVblLRf0qmFT8rskUW0 +https://{your_domain.zitadel.cloud}/oauth/v2/authorize?client_id=69234247558357051%40zitadel&scope=openid%20profile%20urn%3Azitadel%3Aiam%3Aorg%3Adomain%3Aprimary%3Acaos.ch&redirect_uri=https%3A%2F%2Fconsole.zitadel.ch%2Fauth%2Fcallback&state=testd&response_type=code&nonce=test&code_challenge=UY30LKMy4bZFwF7Oyk6BpJemzVblLRf0qmFT8rskUW0 ``` :::info From 0cc548e3f84f5ab6e4a47a1aa3371ea0146476be Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Fri, 22 Jul 2022 09:06:16 +0200 Subject: [PATCH 033/116] fix(console): asset path on signout route, stop event propagation in actions table (#4016) fix: asset path, stop event propagation in actions table --- .../action-table/action-table.component.html | 96 ++++++++++++------- .../pages/signedout/signedout.component.html | 4 +- 2 files changed, 65 insertions(+), 35 deletions(-) diff --git a/console/src/app/pages/actions/action-table/action-table.component.html b/console/src/app/pages/actions/action-table/action-table.component.html index 1e8754f4a5..3846b8552f 100644 --- a/console/src/app/pages/actions/action-table/action-table.component.html +++ b/console/src/app/pages/actions/action-table/action-table.component.html @@ -1,22 +1,28 @@ - +
-
@@ -24,48 +30,61 @@ - - + + - - + + - + - + - + @@ -73,8 +92,14 @@ - - +
- + [indeterminate]="selection.hasValue() && !isAllSelected()" + > - + {{ 'FLOWS.ID' | translate }} {{ action?.id }} {{ 'FLOWS.ID' | translate }}{{ action?.id }} {{ 'FLOWS.NAME' | translate }} {{ action?.name }} {{ 'FLOWS.NAME' | translate }}{{ action?.name }} {{ 'FLOWS.STATE' | translate }} {{ 'FLOWS.STATE' | translate }} - - {{'FLOWS.STATES.'+action.state | translate}} + + {{ 'FLOWS.STATES.' + action.state | translate }} {{ 'FLOWS.TIMEOUT' | translate }} {{ 'FLOWS.TIMEOUT' | translate }} - {{key.timeout | durationToSeconds}} + {{ key.timeout | durationToSeconds }} {{ 'FLOWS.ALLOWEDTOFAIL' | translate }} {{ 'FLOWS.ALLOWEDTOFAIL' | translate }} - {{action.allowedToFail}} + {{ action.allowedToFail }} - @@ -82,12 +107,17 @@
- -
\ No newline at end of file + +
diff --git a/console/src/app/pages/signedout/signedout.component.html b/console/src/app/pages/signedout/signedout.component.html index c05e784caa..89313532e5 100644 --- a/console/src/app/pages/signedout/signedout.component.html +++ b/console/src/app/pages/signedout/signedout.component.html @@ -1,9 +1,9 @@
- zitadel logo + zitadel logo - zitadel logo + zitadel logo

{{ 'USER.SIGNEDOUT' | translate }}

From aed70105083c888202cfe796edd7d5a8e8cd0861 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Fri, 22 Jul 2022 12:08:39 +0200 Subject: [PATCH 034/116] fix: scheduling (#3978) * fix: improve scheduling * build pre-release * fix: locker * fix: user handler and print stack in case of panic in reducer * chore: remove sentry * fix: improve handler projection and implement tests * more tests * fix: race condition in tests * Update internal/eventstore/repository/sql/query.go Co-authored-by: Silvan * fix: implemented suggested changes * fix: lock statement Co-authored-by: Silvan --- .releaserc.js | 2 +- README.md | 10 - cmd/defaults.yaml | 6 +- go.mod | 7 +- go.sum | 94 +- .../eventsourcing/handler/styling.go | 26 +- .../eventsourcing/spooler/spooler.go | 10 +- .../repository/eventsourcing/view/sequence.go | 4 +- .../repository/eventsourcing/view/styling.go | 4 +- internal/api/api.go | 2 - internal/api/assets/asset.go | 7 +- .../server/middleware/sentry_interceptor.go | 34 - internal/api/grpc/server/server.go | 1 - .../eventsourcing/handler/handler.go | 20 + .../eventsourcing/handler/idp_config.go | 25 +- .../eventsourcing/handler/idp_providers.go | 25 +- .../handler/org_project_mapping.go | 24 +- .../eventsourcing/handler/refresh_token.go | 24 +- .../repository/eventsourcing/handler/token.go | 24 +- .../repository/eventsourcing/handler/user.go | 26 +- .../handler/user_external_idps.go | 24 +- .../eventsourcing/handler/user_session.go | 24 +- .../eventsourcing/spooler/spooler.go | 10 +- .../eventsourcing/view/external_idps.go | 4 +- .../eventsourcing/view/idp_configs.go | 4 +- .../eventsourcing/view/idp_providers.go | 4 +- .../eventsourcing/view/org_project_mapping.go | 4 +- .../eventsourcing/view/refresh_token.go | 4 +- .../repository/eventsourcing/view/sequence.go | 4 +- .../repository/eventsourcing/view/token.go | 4 +- .../repository/eventsourcing/view/user.go | 4 +- .../eventsourcing/view/user_session.go | 4 +- internal/eventstore/eventstore.go | 9 + internal/eventstore/eventstore_test.go | 16 +- .../handler/crdb/current_sequence.go | 8 +- .../eventstore/handler/crdb/db_mock_test.go | 58 +- .../eventstore/handler/crdb/handler_stmt.go | 98 +- .../handler/crdb/handler_stmt_test.go | 178 ++- internal/eventstore/handler/crdb/lock.go | 55 +- internal/eventstore/handler/crdb/lock_test.go | 63 +- internal/eventstore/handler/handler.go | 7 + .../eventstore/handler/handler_projection.go | 461 +++--- .../handler/handler_projection_test.go | 1235 ++++++++--------- .../repository/mock/repository.mock.go | 17 +- .../repository/mock/repository.mock.impl.go | 10 + internal/eventstore/repository/repository.go | 6 +- .../eventstore/repository/search_query.go | 2 + internal/eventstore/repository/sql/crdb.go | 16 +- internal/eventstore/repository/sql/query.go | 23 +- internal/eventstore/search_query.go | 5 + internal/eventstore/v1/eventstore.go | 8 + .../v1/internal/repository/repository.go | 4 +- .../v1/internal/repository/sql/filter.go | 29 + .../v1/internal/repository/sql/query.go | 15 +- internal/eventstore/v1/models/search_query.go | 6 +- .../eventstore/v1/models/search_query_old.go | 6 + internal/eventstore/v1/query/handler.go | 19 +- internal/eventstore/v1/spooler/config.go | 22 +- internal/eventstore/v1/spooler/spooler.go | 75 +- .../eventstore/v1/spooler/spooler_test.go | 5 +- internal/query/app.go | 2 +- internal/query/authn_key.go | 2 +- internal/query/domain_policy.go | 2 +- internal/query/failed_events.go | 2 +- internal/query/idp.go | 2 +- internal/query/instance.go | 2 +- internal/query/lockout_policy.go | 2 +- internal/query/login_policy.go | 2 +- internal/query/org.go | 2 +- internal/query/password_age_policy.go | 4 +- internal/query/password_complexity_policy.go | 4 +- internal/query/privacy_policy.go | 4 +- internal/query/project.go | 2 +- internal/query/project_grant.go | 2 +- internal/query/project_role.go | 2 +- internal/query/projection/config.go | 22 +- internal/query/projection/key.go | 2 +- internal/query/projection/projection.go | 6 +- internal/query/user.go | 12 +- internal/query/user_grant.go | 2 +- internal/query/user_metadata.go | 4 +- internal/query/user_personal_access_token.go | 2 +- internal/view/repository/sequence.go | 27 +- 83 files changed, 1494 insertions(+), 1544 deletions(-) delete mode 100644 internal/api/grpc/server/middleware/sentry_interceptor.go diff --git a/.releaserc.js b/.releaserc.js index a7df798669..6500efe28c 100644 --- a/.releaserc.js +++ b/.releaserc.js @@ -3,7 +3,7 @@ module.exports = { {name: 'main'}, {name: '1.x.x', range: '1.x.x', channel: '1.x.x'}, {name: 'v2-alpha', prerelease: true}, - {name: 'auth-users', prerelease: true}, + {name: 'scheduler', prerelease: true}, ], plugins: [ "@semantic-release/commit-analyzer" diff --git a/README.md b/README.md index ee9aebc8b0..d64f9d8f0f 100644 --- a/README.md +++ b/README.md @@ -142,16 +142,6 @@ Delegate the right to assign roles to another organization Customize login and console with your design ![private_labeling](https://user-images.githubusercontent.com/1366906/123089110-d148ff80-d426-11eb-9598-32b506f6d4fd.gif) -## Usage Data - -ZITADEL components send errors and usage data to CAOS Ltd., so that we are able to identify code improvement potential. If you don't want to send this data or don't have an internet connection, pass the global flag `--disable-analytics` when using zitadelctl. For disabling ingestion for already-running components, execute the takeoff command again with the `` flag. - -We try to distinguishing the environments from which events come from. As environment identifier, we enrich the events by the domain you have configured in zitadel.yml, as soon as it's available. When it's not available and you passed the --gitops flag, we defer the environment identifier from your git repository URL. - -Besides from errors that don't clearly come from misconfiguration or cli misusage, we send an initial event when any binary is started. This is a " invoked" event along with the flags that are passed to it, except secret values of course. - -We only ingest operational data. Your ZITADEL workload data from the IAM application itself is never sent anywhere unless you chose to integrate other systems yourself. - ## Security See the policy [here](./SECURITY.md) diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index 2fd816a780..a05d1695d1 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -104,9 +104,10 @@ Machine: # JPath: "$.compute.vmId" Projections: - RequeueEvery: 10s + RequeueEvery: 60s RetryFailedAfter: 1s MaxFailureCount: 5 + ConcurrentInstances: 10 BulkLimit: 200 MaxIterators: 1 Customizations: @@ -117,6 +118,7 @@ Auth: SearchLimit: 1000 Spooler: ConcurrentWorkers: 1 + ConcurrentInstances: 10 BulkLimit: 10000 FailureCountUntilSkip: 5 @@ -124,6 +126,7 @@ Admin: SearchLimit: 1000 Spooler: ConcurrentWorkers: 1 + ConcurrentInstances: 10 BulkLimit: 10000 FailureCountUntilSkip: 5 @@ -180,6 +183,7 @@ Notification: Repository: Spooler: ConcurrentWorkers: 1 + ConcurrentInstances: 10 BulkLimit: 10000 FailureCountUntilSkip: 5 Handlers: diff --git a/go.mod b/go.mod index dde9582972..f445b14160 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,6 @@ require ( github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d github.com/duo-labs/webauthn v0.0.0-20211216225436-9a12cd078b8a github.com/envoyproxy/protoc-gen-validate v0.6.2 - github.com/getsentry/sentry-go v0.11.0 github.com/golang/glog v1.0.0 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.2 @@ -48,7 +47,7 @@ require ( github.com/stretchr/testify v1.7.1 github.com/superseriousbusiness/exifremove v0.0.0-20210330092427-6acd27eac203 github.com/ttacon/libphonenumber v1.2.1 - github.com/zitadel/logging v0.3.3 + github.com/zitadel/logging v0.3.4 github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.3 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.27.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.27.0 @@ -154,7 +153,7 @@ require ( github.com/prometheus/procfs v0.6.0 // indirect github.com/rs/xid v1.2.1 // indirect github.com/satori/go.uuid v1.2.0 // indirect - github.com/sirupsen/logrus v1.8.1 // indirect + github.com/sirupsen/logrus v1.9.0 // indirect github.com/spf13/afero v1.8.1 // indirect github.com/spf13/cast v1.4.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect @@ -170,7 +169,7 @@ require ( go.opentelemetry.io/proto/otlp v0.10.0 // indirect golang.org/x/image v0.0.0-20200927104501-e162460cd6b5 // indirect golang.org/x/mod v0.5.1 // indirect - golang.org/x/sys v0.0.0-20220209214540-3681064d5158 // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/api v0.63.0 // indirect google.golang.org/appengine v1.6.7 // indirect diff --git a/go.sum b/go.sum index 0f659ebb5f..0dd8a79643 100644 --- a/go.sum +++ b/go.sum @@ -53,20 +53,16 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f cloud.google.com/go/trace v1.0.0 h1:laKx2y7IWMjguCe5zZx6n7qLtREk4kyE69SXVC0VSN8= cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.0.0 h1:38fNtfhHY6bs22b/D6+hDzO6JR0rDzpGPD36dY2uPL4= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.0.0/go.mod h1:jE23wM1jvwSKgdGcoOkj5j9n1VWtncW36pL2bK1JU+0= -github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= @@ -78,14 +74,12 @@ github.com/Masterminds/squirrel v1.5.2 h1:UiOEi2ZX4RCSkpiNDQN5kro/XIBpSRk9iTqdIR github.com/Masterminds/squirrel v1.5.2/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= -github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/VictoriaMetrics/fastcache v1.8.0 h1:ybZqS7kRy8YVzYsI09GLzQhs7iqS6cOEH2avtknD1SU= github.com/VictoriaMetrics/fastcache v1.8.0/go.mod h1:n7Sl+ioh/HlWeYHLSIBIE8TcZFHg/+xgvomWSS5xuEE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw= @@ -103,7 +97,6 @@ github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kd github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -112,7 +105,6 @@ github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6l github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.2.0 h1:9Re3G2TWxkE06LdMWMpcY6KV81GLXMGiYpPYUPkFAws= github.com/benbjohnson/clock v1.2.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -163,9 +155,6 @@ github.com/cockroachdb/cockroach-go/v2 v2.2.4 h1:VuiBJKut2Imgrzl+TNk+U5+GxLOh3hn github.com/cockroachdb/cockroach-go/v2 v2.2.4/go.mod h1:u3MiKYGupPPjkn3ozknpMUpxPaNLTFWAya419/zv6eI= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= @@ -173,7 +162,6 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7 github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= @@ -187,9 +175,7 @@ github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd h1:83Wprp6RO github.com/denisenkom/go-mssqldb v0.0.0-20191124224453-732737034ffd/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dop251/goja v0.0.0-20211022113120-dc8c55024d06/go.mod h1:R9ET47fwRVRPZnOGvHxxhuZcbrMCuiqOz3Rlrh4KSnk= @@ -227,7 +213,6 @@ github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5m github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -244,12 +229,9 @@ github.com/envoyproxy/protoc-gen-validate v0.6.2 h1:JiO+kJTpmYGjEodY7O1Zk8oZcNz1 github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y= github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0= -github.com/etcd-io/bbolt v1.3.3/go.mod h1:ZF2nL25h33cCyBtcyWeZ2/I3HQOfTP+0PIEvHjkjCrw= -github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod h1:duJ4Jxv5lDcvg4QuQr0oowTf7dz4/CR8NtyCooz9HL8= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -260,17 +242,12 @@ github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWp github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= github.com/fxamacker/cbor/v2 v2.2.0 h1:6eXqdDDe588rSYAi1HfZKbx6YYQO4mxQ9eC6xYpU/JQ= github.com/fxamacker/cbor/v2 v2.2.0/go.mod h1:TA1xS00nchWmaBnEIxPSE5oHLuJBAVvqrtAnWBwBCVo= -github.com/gavv/httpexpect v2.0.0+incompatible/go.mod h1:x+9tiU1YnrOvnB725RkpoLv1M62hOWzwo5OXotisrKc= -github.com/getsentry/sentry-go v0.11.0 h1:qro8uttJGvNAMr5CLcFI9CHR0aDzXl0Vs3Pmw/oTPg8= -github.com/getsentry/sentry-go v0.11.0/go.mod h1:KBQIxiZAetw62Cj8Ri964vAEWVdgfaUCn30Q3bCvANo= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.7.4 h1:QmUZXrvJ9qZ3GfWvQ+2wnW/1ePrTEJqPKMYEU3lD/DM= github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/go-check/check v0.0.0-20180628173108-788fd7840127/go.mod h1:9ES+weclKsC9YodN5RgxqK/VD9HM9JsCSh7rNhMZE98= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-errors/errors v1.0.2 h1:xMxH9j2fNg/L4hLn/4y3M0IUsn0M6Wbu/Uh9QlOfBh4= github.com/go-errors/errors v1.0.2/go.mod h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs= @@ -284,7 +261,6 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= @@ -295,7 +271,6 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= -github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= @@ -371,7 +346,6 @@ github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8l github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.7.1-0.20190724094224-574c33c3df38/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/certificate-transparency-go v1.0.21 h1:Yf1aXowfZ2nuboBsg7iYGLmwsOARdV86pfH3g95wXmE= @@ -506,17 +480,11 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1: github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= -github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= -github.com/iris-contrib/jade v1.1.3/go.mod h1:H/geBymxJhShH5kecoiOCSssPX7QWYH7UaeZTSWddIk= -github.com/iris-contrib/pongo2 v0.0.1/go.mod h1:Ssh+00+3GAZqSQb30AvBRNxBx7rf0GqwkjqxNd0u65g= -github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= @@ -586,14 +554,8 @@ github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7 github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k3a/html2text v1.0.8 h1:rVanLhKilpnJUJs/CNKWzMC4YaQINGxK0rSG8ssmnV0= github.com/k3a/html2text v1.0.8/go.mod h1:ieEXykM67iT8lTvEWBh6fhpH4B23kB9OMKPdIBmgUqA= -github.com/kataras/golog v0.0.10/go.mod h1:yJ8YKCmyL+nWjERB90Qwn+bdyBZsaQwU3bTVFgkFIp8= -github.com/kataras/iris/v12 v12.1.8/go.mod h1:LMYy4VlP67TQ3Zgriz8RE2h2kMZV2SgMYbq3UhfoFmE= -github.com/kataras/neffos v0.0.14/go.mod h1:8lqADm8PnbeFfL7CLXh1WHw53dG27MC3pgi2R1rmoTE= -github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7Dro= -github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kevinburke/go-types v0.0.0-20210723172823-2deba1f80ba7 h1:K8qael4LemsmJCGt+ccI8b0fCNFDttmEu3qtpFt3G0M= github.com/kevinburke/go-types v0.0.0-20210723172823-2deba1f80ba7/go.mod h1:/Pk5i/SqYdYv1cie5wGwoZ4P6TpgMi+Yf58mtJSHdOw= github.com/kevinburke/rest v0.0.0-20210506044642-5611499aa33c h1:hnbwWED5rIu+UaMkLR3JtnscMVGqp35lfzQwLuZAAUY= @@ -603,14 +565,11 @@ github.com/kevinburke/twilio-go v0.0.0-20210327194925-1623146bcf73/go.mod h1:Fm9 github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.14.2 h1:S0OHlFk/Gbon/yauFJ4FfJJF5V0fc5HbBTJazi28pRw= github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= @@ -628,8 +587,6 @@ github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/labstack/echo/v4 v4.1.11/go.mod h1:i541M3Fj6f76NZtHSj7TXnyM8n2gaodfvfxNnFqi74g= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= @@ -653,7 +610,6 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -679,12 +635,9 @@ github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71 github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= -github.com/microcosm-cc/bluemonday v1.0.2/go.mod h1:iVP4YcDBq+n/5fb23BhYFvIMq/leAFZyRl6bYmGDlGc= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= @@ -717,7 +670,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/muesli/clusters v0.0.0-20180605185049-a07a36e67d36/go.mod h1:mw5KDqUj0eLj/6DUNINLVJNoPTFkEuGMHtJsXLviLkY= github.com/muesli/clusters v0.0.0-20200529215643-2700303c1762 h1:p4A2Jx7Lm3NV98VRMKlyWd3nqf8obft8NfXlAUmqd3I= github.com/muesli/clusters v0.0.0-20200529215643-2700303c1762/go.mod h1:mw5KDqUj0eLj/6DUNINLVJNoPTFkEuGMHtJsXLviLkY= @@ -744,9 +696,7 @@ github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= @@ -760,14 +710,11 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= -github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -825,19 +772,15 @@ github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v0.0.0-20200227202807-02e2044944cc/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -849,6 +792,8 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= @@ -858,26 +803,20 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ github.com/sony/sonyflake v1.0.0 h1:MpU6Ro7tfXwgn2l5eluf9xQvQJDROTBImNCfRXn/YeM= github.com/sony/sonyflake v1.0.0/go.mod h1:Jv3cfhf/UFtolOTTRd3q4Nl6ENqM+KfyZ5PseKfZGF4= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.8.1 h1:izYHOT71f9iZ7iq37Uqjael60/vYC6vMtzedudZ0zEk= github.com/spf13/afero v1.8.1/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0= github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= @@ -907,31 +846,17 @@ github.com/ttacon/libphonenumber v1.2.1/go.mod h1:E0TpmdVMq5dyVlQ7oenAkhsLu86OkU github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.6.0/go.mod h1:FstJa9V+Pj9vQ7OJie2qMHdwemEDaDiSdBnvPM1Su9w= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/wcharczuk/go-chart/v2 v2.1.0 h1:tY2slqVQ6bN+yHSnDYwZebLQFkphK4WNrVwnt7CJZ2I= github.com/wcharczuk/go-chart/v2 v2.1.0/go.mod h1:yx7MvAVNcP/kN9lKXM/NTce4au4DFN99j6i1OwDclNA= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20200730060457-89a2a8a1fb0b h1:tnWgqoOBmInkt5pbLjagwNVjjT4RdJhFHzL1ebCSRh8= github.com/xrash/smetrics v0.0.0-20200730060457-89a2a8a1fb0b/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= @@ -941,6 +866,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zitadel/logging v0.3.3 h1:/nAoki9HFJK+qMLBVY5Jhbfp/6o3YLK49Tw5j2oRhjM= github.com/zitadel/logging v0.3.3/go.mod h1:aPpLQhE+v6ocNK0TWrBrd363hZ95KcI17Q1ixAQwZF0= +github.com/zitadel/logging v0.3.4 h1:9hZsTjMMTE3X2LUi0xcF9Q9EdLo+FAezeu52ireBbHM= +github.com/zitadel/logging v0.3.4/go.mod h1:aPpLQhE+v6ocNK0TWrBrd363hZ95KcI17Q1ixAQwZF0= github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.3 h1:Z0WrhhjPLrbywD+6226Ca7Mvt9VKAU3J/ojYq24CUEY= github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.3/go.mod h1:uoJw5Xc6HXfnQbNZiLbld9dED0/8UMu0M4gOipTRZBA= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -1013,7 +940,6 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= @@ -1025,7 +951,6 @@ golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191205180655-e7c4368fe9dd/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191227163750-53104e6ec876/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -1088,7 +1013,6 @@ golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1098,7 +1022,6 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1173,7 +1096,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1184,7 +1106,6 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1255,6 +1176,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1275,13 +1198,11 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190327201419-c70d86f8b7cf/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1527,12 +1448,10 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1549,7 +1468,6 @@ gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/admin/repository/eventsourcing/handler/styling.go b/internal/admin/repository/eventsourcing/handler/styling.go index 71b14c944c..3b598a6ac8 100644 --- a/internal/admin/repository/eventsourcing/handler/styling.go +++ b/internal/admin/repository/eventsourcing/handler/styling.go @@ -73,30 +73,26 @@ func (m *Styling) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (m *Styling) EventQuery() (*models.SearchQuery, error) { - sequences, err := m.view.GetLatestStylingSequences() +func (m *Styling) EventQuery(instanceIDs ...string) (*models.SearchQuery, error) { + sequences, err := m.view.GetLatestStylingSequences(instanceIDs...) if err != nil { return nil, err } - query := models.NewSearchQuery() - instances := make([]string, 0) + searchQuery := models.NewSearchQuery() for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { + var seq uint64 + for _, instanceID := range instanceIDs { + if sequence.InstanceID == instanceID { + seq = sequence.CurrentSequence break } } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). + searchQuery.AddQuery(). AggregateTypeFilter(m.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). + LatestSequenceFilter(seq). InstanceIDFilter(sequence.InstanceID) } - return query.AddQuery(). - AggregateTypeFilter(m.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return searchQuery, nil } func (m *Styling) Reduce(event *models.Event) (err error) { @@ -299,7 +295,7 @@ func (m *Styling) generateColorPaletteRGBA255(hex string) map[string]string { if ok { palette["500"] = cssRGB(color500.RGB255()) } - + color600, ok := colorful.MakeColor(gamut.Darker(defaultColor, 0.06)) if ok { palette["600"] = cssRGB(color600.RGB255()) diff --git a/internal/admin/repository/eventsourcing/spooler/spooler.go b/internal/admin/repository/eventsourcing/spooler/spooler.go index 1722fb61b9..6ab695fd75 100644 --- a/internal/admin/repository/eventsourcing/spooler/spooler.go +++ b/internal/admin/repository/eventsourcing/spooler/spooler.go @@ -15,15 +15,17 @@ type SpoolerConfig struct { BulkLimit uint64 FailureCountUntilSkip uint64 ConcurrentWorkers int + ConcurrentInstances int Handlers handler.Configs } func StartSpooler(c SpoolerConfig, es v1.Eventstore, view *view.View, sql *sql.DB, static static.Storage) *spooler.Spooler { spoolerConfig := spooler.Config{ - Eventstore: es, - Locker: &locker{dbClient: sql}, - ConcurrentWorkers: c.ConcurrentWorkers, - ViewHandlers: handler.Register(c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, static), + Eventstore: es, + Locker: &locker{dbClient: sql}, + ConcurrentWorkers: c.ConcurrentWorkers, + ConcurrentInstances: c.ConcurrentInstances, + ViewHandlers: handler.Register(c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, static), } spool := spoolerConfig.New() spool.Start() diff --git a/internal/admin/repository/eventsourcing/view/sequence.go b/internal/admin/repository/eventsourcing/view/sequence.go index 413c66663e..e026a6c0cc 100644 --- a/internal/admin/repository/eventsourcing/view/sequence.go +++ b/internal/admin/repository/eventsourcing/view/sequence.go @@ -19,8 +19,8 @@ func (v *View) latestSequence(viewName, instanceID string) (*repository.CurrentS return repository.LatestSequence(v.Db, sequencesTable, viewName, instanceID) } -func (v *View) latestSequences(viewName string) ([]*repository.CurrentSequence, error) { - return repository.LatestSequences(v.Db, sequencesTable, viewName) +func (v *View) latestSequences(viewName string, instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return repository.LatestSequences(v.Db, sequencesTable, viewName, instanceIDs...) } func (v *View) AllCurrentSequences(db string) ([]*repository.CurrentSequence, error) { diff --git a/internal/admin/repository/eventsourcing/view/styling.go b/internal/admin/repository/eventsourcing/view/styling.go index 98517bfb38..fcecfde64c 100644 --- a/internal/admin/repository/eventsourcing/view/styling.go +++ b/internal/admin/repository/eventsourcing/view/styling.go @@ -27,8 +27,8 @@ func (v *View) GetLatestStylingSequence(instanceID string) (*global_view.Current return v.latestSequence(stylingTyble, instanceID) } -func (v *View) GetLatestStylingSequences() ([]*global_view.CurrentSequence, error) { - return v.latestSequences(stylingTyble) +func (v *View) GetLatestStylingSequences(instanceIDs ...string) ([]*global_view.CurrentSequence, error) { + return v.latestSequences(stylingTyble, instanceIDs...) } func (v *View) ProcessedStylingSequence(event *models.Event) error { diff --git a/internal/api/api.go b/internal/api/api.go index 4fd1f2b816..9fdea186f5 100644 --- a/internal/api/api.go +++ b/internal/api/api.go @@ -6,7 +6,6 @@ import ( "net/http" "strings" - sentryhttp "github.com/getsentry/sentry-go/http" "github.com/gorilla/mux" "github.com/improbable-eng/grpc-web/go/grpcweb" "github.com/zitadel/logging" @@ -67,7 +66,6 @@ func (a *API) RegisterServer(ctx context.Context, grpcServer server.Server) erro func (a *API) RegisterHandler(prefix string, handler http.Handler) { prefix = strings.TrimSuffix(prefix, "/") subRouter := a.router.PathPrefix(prefix).Name(prefix).Subrouter() - subRouter.Use(sentryhttp.New(sentryhttp.Options{}).Handle) subRouter.PathPrefix("").Handler(http.StripPrefix(prefix, handler)) } diff --git a/internal/api/assets/asset.go b/internal/api/assets/asset.go index 1f2fba98e5..3ff3feeda7 100644 --- a/internal/api/assets/asset.go +++ b/internal/api/assets/asset.go @@ -8,7 +8,6 @@ import ( "strings" "time" - sentryhttp "github.com/getsentry/sentry-go/http" "github.com/gorilla/mux" "github.com/zitadel/logging" @@ -89,7 +88,7 @@ func NewHandler(commands *command.Commands, verifier *authz.TokenVerifier, authC verifier.RegisterServer("Assets-API", "assets", AssetsService_AuthMethods) router := mux.NewRouter() - router.Use(sentryhttp.New(sentryhttp.Options{}).Handle, instanceInterceptor) + router.Use(instanceInterceptor) RegisterRoutes(router, h) router.PathPrefix("/{owner}").Methods("GET").HandlerFunc(DownloadHandleFunc(h, h.GetFile())) return http_util.CopyHeadersToContext(http_mw.CORSInterceptor(router)) @@ -117,6 +116,10 @@ func UploadHandleFunc(s AssetsService, uploader Uploader) func(http.ResponseWrit ctx := r.Context() ctxData := authz.GetCtxData(ctx) err := r.ParseMultipartForm(maxMemory) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } file, handler, err := r.FormFile(paramFile) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) diff --git a/internal/api/grpc/server/middleware/sentry_interceptor.go b/internal/api/grpc/server/middleware/sentry_interceptor.go deleted file mode 100644 index c4f83a304a..0000000000 --- a/internal/api/grpc/server/middleware/sentry_interceptor.go +++ /dev/null @@ -1,34 +0,0 @@ -package middleware - -import ( - "context" - - "github.com/getsentry/sentry-go" - "google.golang.org/grpc" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" -) - -func SentryHandler() grpc.UnaryServerInterceptor { - return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - return sendErrToSentry(ctx, req, handler) - } -} - -func sendErrToSentry(ctx context.Context, req interface{}, handler grpc.UnaryHandler) (interface{}, error) { - resp, err := handler(ctx, req) - code := status.Code(err) - switch code { - case codes.Canceled, - codes.Unknown, - codes.DeadlineExceeded, - codes.ResourceExhausted, - codes.Aborted, - codes.Unimplemented, - codes.Internal, - codes.Unavailable, - codes.DataLoss: - sentry.CaptureException(err) - } - return resp, err -} diff --git a/internal/api/grpc/server/server.go b/internal/api/grpc/server/server.go index 9b932393af..c077d8f560 100644 --- a/internal/api/grpc/server/server.go +++ b/internal/api/grpc/server/server.go @@ -30,7 +30,6 @@ func CreateServer(verifier *authz.TokenVerifier, authConfig authz.Config, querie grpc_middleware.ChainUnaryServer( middleware.DefaultTracingServer(), middleware.MetricsHandler(metricTypes, grpc_api.Probes...), - middleware.SentryHandler(), middleware.NoCacheInterceptor(), middleware.ErrorHandler(), middleware.InstanceInterceptor(queries, hostHeaderName, system_pb.SystemService_MethodPrefix), diff --git a/internal/auth/repository/eventsourcing/handler/handler.go b/internal/auth/repository/eventsourcing/handler/handler.go index fbefb081fb..59f50554d5 100644 --- a/internal/auth/repository/eventsourcing/handler/handler.go +++ b/internal/auth/repository/eventsourcing/handler/handler.go @@ -8,8 +8,10 @@ import ( "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view" sd "github.com/zitadel/zitadel/internal/config/systemdefaults" v1 "github.com/zitadel/zitadel/internal/eventstore/v1" + "github.com/zitadel/zitadel/internal/eventstore/v1/models" "github.com/zitadel/zitadel/internal/eventstore/v1/query" query2 "github.com/zitadel/zitadel/internal/query" + "github.com/zitadel/zitadel/internal/view/repository" ) type Configs map[string]*Config @@ -75,3 +77,21 @@ func (h *handler) QueryLimit() uint64 { func withInstanceID(ctx context.Context, instanceID string) context.Context { return authz.WithInstanceID(ctx, instanceID) } + +func newSearchQuery(sequences []*repository.CurrentSequence, aggregateTypes []models.AggregateType, instanceIDs []string) *models.SearchQuery { + searchQuery := models.NewSearchQuery() + for _, sequence := range sequences { + var seq uint64 + for _, instanceID := range instanceIDs { + if sequence.InstanceID == instanceID { + seq = sequence.CurrentSequence + break + } + } + searchQuery.AddQuery(). + AggregateTypeFilter(aggregateTypes...). + LatestSequenceFilter(seq). + InstanceIDFilter(sequence.InstanceID) + } + return searchQuery +} diff --git a/internal/auth/repository/eventsourcing/handler/idp_config.go b/internal/auth/repository/eventsourcing/handler/idp_config.go index b849d91aac..f5eec3f65d 100644 --- a/internal/auth/repository/eventsourcing/handler/idp_config.go +++ b/internal/auth/repository/eventsourcing/handler/idp_config.go @@ -62,31 +62,12 @@ func (i *IDPConfig) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (i *IDPConfig) EventQuery() (*models.SearchQuery, error) { - sequences, err := i.view.GetLatestIDPConfigSequences() +func (i *IDPConfig) EventQuery(instanceIDs ...string) (*models.SearchQuery, error) { + sequences, err := i.view.GetLatestIDPConfigSequences(instanceIDs...) if err != nil { return nil, err } - - query := models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(i.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(i.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, i.AggregateTypes(), instanceIDs), nil } func (i *IDPConfig) Reduce(event *models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/handler/idp_providers.go b/internal/auth/repository/eventsourcing/handler/idp_providers.go index 0e478831d0..817b8cf949 100644 --- a/internal/auth/repository/eventsourcing/handler/idp_providers.go +++ b/internal/auth/repository/eventsourcing/handler/idp_providers.go @@ -76,30 +76,13 @@ func (i *IDPProvider) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (i *IDPProvider) EventQuery() (*models.SearchQuery, error) { - sequences, err := i.view.GetLatestIDPProviderSequences() +func (i *IDPProvider) EventQuery(instanceIDs ...string) (*models.SearchQuery, error) { + sequences, err := i.view.GetLatestIDPProviderSequences(instanceIDs...) if err != nil { return nil, err } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(i.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(i.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + + return newSearchQuery(sequences, i.AggregateTypes(), instanceIDs), nil } func (i *IDPProvider) Reduce(event *models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/handler/org_project_mapping.go b/internal/auth/repository/eventsourcing/handler/org_project_mapping.go index 506fc2eebe..d4a87dfc75 100644 --- a/internal/auth/repository/eventsourcing/handler/org_project_mapping.go +++ b/internal/auth/repository/eventsourcing/handler/org_project_mapping.go @@ -62,30 +62,12 @@ func (p *OrgProjectMapping) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (p *OrgProjectMapping) EventQuery() (*es_models.SearchQuery, error) { - sequences, err := p.view.GetLatestOrgProjectMappingSequences() +func (p *OrgProjectMapping) EventQuery(instanceIDs ...string) (*es_models.SearchQuery, error) { + sequences, err := p.view.GetLatestOrgProjectMappingSequences(instanceIDs...) if err != nil { return nil, err } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(p.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(p.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, p.AggregateTypes(), instanceIDs), nil } func (p *OrgProjectMapping) Reduce(event *es_models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/handler/refresh_token.go b/internal/auth/repository/eventsourcing/handler/refresh_token.go index 4ee5508b40..465d5f6a1c 100644 --- a/internal/auth/repository/eventsourcing/handler/refresh_token.go +++ b/internal/auth/repository/eventsourcing/handler/refresh_token.go @@ -66,30 +66,12 @@ func (t *RefreshToken) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (t *RefreshToken) EventQuery() (*es_models.SearchQuery, error) { - sequences, err := t.view.GetLatestRefreshTokenSequences() +func (t *RefreshToken) EventQuery(instanceIDs ...string) (*es_models.SearchQuery, error) { + sequences, err := t.view.GetLatestRefreshTokenSequences(instanceIDs...) if err != nil { return nil, err } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(t.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(t.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, t.AggregateTypes(), instanceIDs), nil } func (t *RefreshToken) Reduce(event *es_models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/handler/token.go b/internal/auth/repository/eventsourcing/handler/token.go index 1090301727..ddc2d982ec 100644 --- a/internal/auth/repository/eventsourcing/handler/token.go +++ b/internal/auth/repository/eventsourcing/handler/token.go @@ -72,30 +72,12 @@ func (p *Token) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (t *Token) EventQuery() (*es_models.SearchQuery, error) { - sequences, err := t.view.GetLatestTokenSequences() +func (t *Token) EventQuery(instanceIDs ...string) (*es_models.SearchQuery, error) { + sequences, err := t.view.GetLatestTokenSequences(instanceIDs...) if err != nil { return nil, err } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(t.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(t.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, t.AggregateTypes(), instanceIDs), nil } func (t *Token) Reduce(event *es_models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/handler/user.go b/internal/auth/repository/eventsourcing/handler/user.go index f49cc44d3a..4ef26886ea 100644 --- a/internal/auth/repository/eventsourcing/handler/user.go +++ b/internal/auth/repository/eventsourcing/handler/user.go @@ -74,30 +74,12 @@ func (u *User) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (u *User) EventQuery() (*es_models.SearchQuery, error) { - sequences, err := u.view.GetLatestUserSequences() +func (u *User) EventQuery(instanceIDs ...string) (*es_models.SearchQuery, error) { + sequences, err := u.view.GetLatestUserSequences(instanceIDs...) if err != nil { return nil, err } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(u.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(u.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, u.AggregateTypes(), instanceIDs), nil } func (u *User) Reduce(event *es_models.Event) (err error) { @@ -176,6 +158,7 @@ func (u *User) ProcessUser(event *es_models.Event) (err error) { if err != nil { return err } + user = &view_model.UserView{} for _, e := range events { if err = user.AppendEvent(e); err != nil { return err @@ -198,6 +181,7 @@ func (u *User) ProcessUser(event *es_models.Event) (err error) { if err != nil { return err } + user = &view_model.UserView{} for _, e := range events { if err = user.AppendEvent(e); err != nil { return err diff --git a/internal/auth/repository/eventsourcing/handler/user_external_idps.go b/internal/auth/repository/eventsourcing/handler/user_external_idps.go index d8c5885dc8..e8304528e6 100644 --- a/internal/auth/repository/eventsourcing/handler/user_external_idps.go +++ b/internal/auth/repository/eventsourcing/handler/user_external_idps.go @@ -77,30 +77,12 @@ func (i *ExternalIDP) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (i *ExternalIDP) EventQuery() (*es_models.SearchQuery, error) { - sequences, err := i.view.GetLatestExternalIDPSequences() +func (i *ExternalIDP) EventQuery(instanceIDs ...string) (*es_models.SearchQuery, error) { + sequences, err := i.view.GetLatestExternalIDPSequences(instanceIDs...) if err != nil { return nil, err } - query := es_models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(i.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(i.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, i.AggregateTypes(), instanceIDs), nil } func (i *ExternalIDP) Reduce(event *es_models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/handler/user_session.go b/internal/auth/repository/eventsourcing/handler/user_session.go index 6e285bee39..8e3b77eb93 100644 --- a/internal/auth/repository/eventsourcing/handler/user_session.go +++ b/internal/auth/repository/eventsourcing/handler/user_session.go @@ -72,30 +72,12 @@ func (u *UserSession) CurrentSequence(instanceID string) (uint64, error) { return sequence.CurrentSequence, nil } -func (u *UserSession) EventQuery() (*models.SearchQuery, error) { - sequences, err := u.view.GetLatestUserSessionSequences() +func (u *UserSession) EventQuery(instanceIDs ...string) (*models.SearchQuery, error) { + sequences, err := u.view.GetLatestUserSessionSequences(instanceIDs...) if err != nil { return nil, err } - query := models.NewSearchQuery() - instances := make([]string, 0) - for _, sequence := range sequences { - for _, instance := range instances { - if sequence.InstanceID == instance { - break - } - } - instances = append(instances, sequence.InstanceID) - query.AddQuery(). - AggregateTypeFilter(u.AggregateTypes()...). - LatestSequenceFilter(sequence.CurrentSequence). - InstanceIDFilter(sequence.InstanceID) - } - return query.AddQuery(). - AggregateTypeFilter(u.AggregateTypes()...). - LatestSequenceFilter(0). - ExcludedInstanceIDsFilter(instances...). - SearchQuery(), nil + return newSearchQuery(sequences, u.AggregateTypes(), instanceIDs), nil } func (u *UserSession) Reduce(event *models.Event) (err error) { diff --git a/internal/auth/repository/eventsourcing/spooler/spooler.go b/internal/auth/repository/eventsourcing/spooler/spooler.go index 551da52bfd..a45c53a870 100644 --- a/internal/auth/repository/eventsourcing/spooler/spooler.go +++ b/internal/auth/repository/eventsourcing/spooler/spooler.go @@ -16,15 +16,17 @@ type SpoolerConfig struct { BulkLimit uint64 FailureCountUntilSkip uint64 ConcurrentWorkers int + ConcurrentInstances int Handlers handler.Configs } func StartSpooler(c SpoolerConfig, es v1.Eventstore, view *view.View, client *sql.DB, systemDefaults sd.SystemDefaults, queries *query.Queries) *spooler.Spooler { spoolerConfig := spooler.Config{ - Eventstore: es, - Locker: &locker{dbClient: client}, - ConcurrentWorkers: c.ConcurrentWorkers, - ViewHandlers: handler.Register(c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, systemDefaults, queries), + Eventstore: es, + Locker: &locker{dbClient: client}, + ConcurrentWorkers: c.ConcurrentWorkers, + ConcurrentInstances: c.ConcurrentInstances, + ViewHandlers: handler.Register(c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, systemDefaults, queries), } spool := spoolerConfig.New() spool.Start() diff --git a/internal/auth/repository/eventsourcing/view/external_idps.go b/internal/auth/repository/eventsourcing/view/external_idps.go index c5fc01dfb5..913a145d19 100644 --- a/internal/auth/repository/eventsourcing/view/external_idps.go +++ b/internal/auth/repository/eventsourcing/view/external_idps.go @@ -60,8 +60,8 @@ func (v *View) GetLatestExternalIDPSequence(instanceID string) (*global_view.Cur return v.latestSequence(externalIDPTable, instanceID) } -func (v *View) GetLatestExternalIDPSequences() ([]*global_view.CurrentSequence, error) { - return v.latestSequences(externalIDPTable) +func (v *View) GetLatestExternalIDPSequences(instanceIDs ...string) ([]*global_view.CurrentSequence, error) { + return v.latestSequences(externalIDPTable, instanceIDs...) } func (v *View) ProcessedExternalIDPSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/idp_configs.go b/internal/auth/repository/eventsourcing/view/idp_configs.go index be10ca80e1..1755eba81a 100644 --- a/internal/auth/repository/eventsourcing/view/idp_configs.go +++ b/internal/auth/repository/eventsourcing/view/idp_configs.go @@ -45,8 +45,8 @@ func (v *View) GetLatestIDPConfigSequence(instanceID string) (*global_view.Curre return v.latestSequence(idpConfigTable, instanceID) } -func (v *View) GetLatestIDPConfigSequences() ([]*global_view.CurrentSequence, error) { - return v.latestSequences(idpConfigTable) +func (v *View) GetLatestIDPConfigSequences(instanceIDs ...string) ([]*global_view.CurrentSequence, error) { + return v.latestSequences(idpConfigTable, instanceIDs...) } func (v *View) ProcessedIDPConfigSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/idp_providers.go b/internal/auth/repository/eventsourcing/view/idp_providers.go index 68793c4935..4219dbeb41 100644 --- a/internal/auth/repository/eventsourcing/view/idp_providers.go +++ b/internal/auth/repository/eventsourcing/view/idp_providers.go @@ -65,8 +65,8 @@ func (v *View) GetLatestIDPProviderSequence(instanceID string) (*global_view.Cur return v.latestSequence(idpProviderTable, instanceID) } -func (v *View) GetLatestIDPProviderSequences() ([]*global_view.CurrentSequence, error) { - return v.latestSequences(idpProviderTable) +func (v *View) GetLatestIDPProviderSequences(instanceIDs ...string) ([]*global_view.CurrentSequence, error) { + return v.latestSequences(idpProviderTable, instanceIDs...) } func (v *View) ProcessedIDPProviderSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/org_project_mapping.go b/internal/auth/repository/eventsourcing/view/org_project_mapping.go index 5fb99b6a13..16798544c0 100644 --- a/internal/auth/repository/eventsourcing/view/org_project_mapping.go +++ b/internal/auth/repository/eventsourcing/view/org_project_mapping.go @@ -44,8 +44,8 @@ func (v *View) GetLatestOrgProjectMappingSequence(instanceID string) (*repositor return v.latestSequence(orgPrgojectMappingTable, instanceID) } -func (v *View) GetLatestOrgProjectMappingSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(orgPrgojectMappingTable) +func (v *View) GetLatestOrgProjectMappingSequences(instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return v.latestSequences(orgPrgojectMappingTable, instanceIDs...) } func (v *View) ProcessedOrgProjectMappingSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/refresh_token.go b/internal/auth/repository/eventsourcing/view/refresh_token.go index fca9f59fc4..1c3ea58a2c 100644 --- a/internal/auth/repository/eventsourcing/view/refresh_token.go +++ b/internal/auth/repository/eventsourcing/view/refresh_token.go @@ -69,8 +69,8 @@ func (v *View) GetLatestRefreshTokenSequence(instanceID string) (*repository.Cur return v.latestSequence(refreshTokenTable, instanceID) } -func (v *View) GetLatestRefreshTokenSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(refreshTokenTable) +func (v *View) GetLatestRefreshTokenSequences(instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return v.latestSequences(refreshTokenTable, instanceIDs...) } func (v *View) ProcessedRefreshTokenSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/sequence.go b/internal/auth/repository/eventsourcing/view/sequence.go index 8f1c720e6f..831a3e9aa2 100644 --- a/internal/auth/repository/eventsourcing/view/sequence.go +++ b/internal/auth/repository/eventsourcing/view/sequence.go @@ -19,8 +19,8 @@ func (v *View) latestSequence(viewName, instanceID string) (*repository.CurrentS return repository.LatestSequence(v.Db, sequencesTable, viewName, instanceID) } -func (v *View) latestSequences(viewName string) ([]*repository.CurrentSequence, error) { - return repository.LatestSequences(v.Db, sequencesTable, viewName) +func (v *View) latestSequences(viewName string, instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return repository.LatestSequences(v.Db, sequencesTable, viewName, instanceIDs...) } func (v *View) updateSpoolerRunSequence(viewName string) error { diff --git a/internal/auth/repository/eventsourcing/view/token.go b/internal/auth/repository/eventsourcing/view/token.go index 8335a06473..c333e9fe36 100644 --- a/internal/auth/repository/eventsourcing/view/token.go +++ b/internal/auth/repository/eventsourcing/view/token.go @@ -80,8 +80,8 @@ func (v *View) GetLatestTokenSequence(instanceID string) (*repository.CurrentSeq return v.latestSequence(tokenTable, instanceID) } -func (v *View) GetLatestTokenSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(tokenTable) +func (v *View) GetLatestTokenSequences(instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return v.latestSequences(tokenTable, instanceIDs...) } func (v *View) ProcessedTokenSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/user.go b/internal/auth/repository/eventsourcing/view/user.go index bbc5d3e1e5..dd56664a9d 100644 --- a/internal/auth/repository/eventsourcing/view/user.go +++ b/internal/auth/repository/eventsourcing/view/user.go @@ -143,8 +143,8 @@ func (v *View) GetLatestUserSequence(instanceID string) (*repository.CurrentSequ return v.latestSequence(userTable, instanceID) } -func (v *View) GetLatestUserSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(userTable) +func (v *View) GetLatestUserSequences(instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return v.latestSequences(userTable, instanceIDs...) } func (v *View) ProcessedUserSequence(event *models.Event) error { diff --git a/internal/auth/repository/eventsourcing/view/user_session.go b/internal/auth/repository/eventsourcing/view/user_session.go index 27c4b3023f..7c39a98ace 100644 --- a/internal/auth/repository/eventsourcing/view/user_session.go +++ b/internal/auth/repository/eventsourcing/view/user_session.go @@ -60,8 +60,8 @@ func (v *View) GetLatestUserSessionSequence(instanceID string) (*repository.Curr return v.latestSequence(userSessionTable, instanceID) } -func (v *View) GetLatestUserSessionSequences() ([]*repository.CurrentSequence, error) { - return v.latestSequences(userSessionTable) +func (v *View) GetLatestUserSessionSequences(instanceIDs ...string) ([]*repository.CurrentSequence, error) { + return v.latestSequences(userSessionTable, instanceIDs...) } func (v *View) ProcessedUserSessionSequence(event *models.Event) error { diff --git a/internal/eventstore/eventstore.go b/internal/eventstore/eventstore.go index 0641b349ac..5340b0c3e5 100644 --- a/internal/eventstore/eventstore.go +++ b/internal/eventstore/eventstore.go @@ -186,6 +186,15 @@ func (es *Eventstore) LatestSequence(ctx context.Context, queryFactory *SearchQu return es.repo.LatestSequence(ctx, query) } +//InstanceIDs returns the instance ids found by the search query +func (es *Eventstore) InstanceIDs(ctx context.Context, queryFactory *SearchQueryBuilder) ([]string, error) { + query, err := queryFactory.build(authz.GetInstance(ctx).InstanceID()) + if err != nil { + return nil, err + } + return es.repo.InstanceIDs(ctx, query) +} + type QueryReducer interface { reducer //Query returns the SearchQueryFactory for the events needed in reducer diff --git a/internal/eventstore/eventstore_test.go b/internal/eventstore/eventstore_test.go index a6da55cd26..b9b496791c 100644 --- a/internal/eventstore/eventstore_test.go +++ b/internal/eventstore/eventstore_test.go @@ -688,10 +688,11 @@ func TestEventstore_aggregatesToEvents(t *testing.T) { } type testRepo struct { - events []*repository.Event - sequence uint64 - err error - t *testing.T + events []*repository.Event + sequence uint64 + instances []string + err error + t *testing.T } func (repo *testRepo) Health(ctx context.Context) error { @@ -735,6 +736,13 @@ func (repo *testRepo) LatestSequence(ctx context.Context, queryFactory *reposito return repo.sequence, nil } +func (repo *testRepo) InstanceIDs(ctx context.Context, queryFactory *repository.SearchQuery) ([]string, error) { + if repo.err != nil { + return nil, repo.err + } + return repo.instances, nil +} + func TestEventstore_Push(t *testing.T) { type args struct { events []Command diff --git a/internal/eventstore/handler/crdb/current_sequence.go b/internal/eventstore/handler/crdb/current_sequence.go index 5f381c922b..3859237cfc 100644 --- a/internal/eventstore/handler/crdb/current_sequence.go +++ b/internal/eventstore/handler/crdb/current_sequence.go @@ -6,12 +6,14 @@ import ( "strconv" "strings" + "github.com/lib/pq" + "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/eventstore" ) const ( - currentSequenceStmtFormat = `SELECT current_sequence, aggregate_type, instance_id FROM %s WHERE projection_name = $1 FOR UPDATE` + currentSequenceStmtFormat = `SELECT current_sequence, aggregate_type, instance_id FROM %s WHERE projection_name = $1 AND instance_id = ANY ($2) FOR UPDATE` updateCurrentSequencesStmtFormat = `UPSERT INTO %s (projection_name, aggregate_type, current_sequence, instance_id, timestamp) VALUES ` ) @@ -22,8 +24,8 @@ type instanceSequence struct { sequence uint64 } -func (h *StatementHandler) currentSequences(ctx context.Context, query func(context.Context, string, ...interface{}) (*sql.Rows, error)) (currentSequences, error) { - rows, err := query(ctx, h.currentSequenceStmt, h.ProjectionName) +func (h *StatementHandler) currentSequences(ctx context.Context, query func(context.Context, string, ...interface{}) (*sql.Rows, error), instanceIDs []string) (currentSequences, error) { + rows, err := query(ctx, h.currentSequenceStmt, h.ProjectionName, pq.StringArray(instanceIDs)) if err != nil { return nil, err } diff --git a/internal/eventstore/handler/crdb/db_mock_test.go b/internal/eventstore/handler/crdb/db_mock_test.go index 260a30d5d4..39e08194ad 100644 --- a/internal/eventstore/handler/crdb/db_mock_test.go +++ b/internal/eventstore/handler/crdb/db_mock_test.go @@ -8,6 +8,7 @@ import ( "time" "github.com/DATA-DOG/go-sqlmock" + "github.com/lib/pq" "github.com/zitadel/zitadel/internal/eventstore" ) @@ -123,34 +124,40 @@ func expectSavePointRelease() func(sqlmock.Sqlmock) { } } -func expectCurrentSequence(tableName, projection string, seq uint64, aggregateType, instanceID string) func(sqlmock.Sqlmock) { +func expectCurrentSequence(tableName, projection string, seq uint64, aggregateType string, instanceIDs []string) func(sqlmock.Sqlmock) { + rows := sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"}) + for _, instanceID := range instanceIDs { + rows.AddRow(seq, aggregateType, instanceID) + } return func(m sqlmock.Sqlmock) { - m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM ` + tableName + ` WHERE projection_name = \$1 FOR UPDATE`). + m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM `+tableName+` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\) FOR UPDATE`). WithArgs( projection, + pq.StringArray(instanceIDs), ). WillReturnRows( - sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"}). - AddRow(seq, aggregateType, instanceID), + rows, ) } } -func expectCurrentSequenceErr(tableName, projection string, err error) func(sqlmock.Sqlmock) { +func expectCurrentSequenceErr(tableName, projection string, instanceIDs []string, err error) func(sqlmock.Sqlmock) { return func(m sqlmock.Sqlmock) { - m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM ` + tableName + ` WHERE projection_name = \$1 FOR UPDATE`). + m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM `+tableName+` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\) FOR UPDATE`). WithArgs( projection, + pq.StringArray(instanceIDs), ). WillReturnError(err) } } -func expectCurrentSequenceNoRows(tableName, projection string) func(sqlmock.Sqlmock) { +func expectCurrentSequenceNoRows(tableName, projection string, instanceIDs []string) func(sqlmock.Sqlmock) { return func(m sqlmock.Sqlmock) { - m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM ` + tableName + ` WHERE projection_name = \$1 FOR UPDATE`). + m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM `+tableName+` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\) FOR UPDATE`). WithArgs( projection, + pq.StringArray(instanceIDs), ). WillReturnRows( sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"}), @@ -158,11 +165,12 @@ func expectCurrentSequenceNoRows(tableName, projection string) func(sqlmock.Sqlm } } -func expectCurrentSequenceScanErr(tableName, projection string) func(sqlmock.Sqlmock) { +func expectCurrentSequenceScanErr(tableName, projection string, instanceIDs []string) func(sqlmock.Sqlmock) { return func(m sqlmock.Sqlmock) { - m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM ` + tableName + ` WHERE projection_name = \$1 FOR UPDATE`). + m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM `+tableName+` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\) FOR UPDATE`). WithArgs( projection, + pq.StringArray(instanceIDs), ). WillReturnRows( sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"}). @@ -286,12 +294,34 @@ func expectLock(lockTable, workerName string, d time.Duration, instanceID string ` \(locker_id, locked_until, projection_name, instance_id\) VALUES \(\$1, now\(\)\+\$2::INTERVAL, \$3\, \$4\)`+ ` ON CONFLICT \(projection_name, instance_id\)`+ ` DO UPDATE SET locker_id = \$1, locked_until = now\(\)\+\$2::INTERVAL`+ - ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = \$4 AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). + ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = ANY \(\$5\) AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). WithArgs( workerName, float64(d), projectionName, instanceID, + pq.StringArray{instanceID}, + ). + WillReturnResult( + sqlmock.NewResult(1, 1), + ) + } +} + +func expectLockMultipleInstances(lockTable, workerName string, d time.Duration, instanceID1, instanceID2 string) func(sqlmock.Sqlmock) { + return func(m sqlmock.Sqlmock) { + m.ExpectExec(`INSERT INTO `+lockTable+ + ` \(locker_id, locked_until, projection_name, instance_id\) VALUES \(\$1, now\(\)\+\$2::INTERVAL, \$3\, \$4\), \(\$1, now\(\)\+\$2::INTERVAL, \$3\, \$5\)`+ + ` ON CONFLICT \(projection_name, instance_id\)`+ + ` DO UPDATE SET locker_id = \$1, locked_until = now\(\)\+\$2::INTERVAL`+ + ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = ANY \(\$6\) AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). + WithArgs( + workerName, + float64(d), + projectionName, + instanceID1, + instanceID2, + pq.StringArray{instanceID1, instanceID2}, ). WillReturnResult( sqlmock.NewResult(1, 1), @@ -305,12 +335,13 @@ func expectLockNoRows(lockTable, workerName string, d time.Duration, instanceID ` \(locker_id, locked_until, projection_name, instance_id\) VALUES \(\$1, now\(\)\+\$2::INTERVAL, \$3\, \$4\)`+ ` ON CONFLICT \(projection_name, instance_id\)`+ ` DO UPDATE SET locker_id = \$1, locked_until = now\(\)\+\$2::INTERVAL`+ - ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = \$4 AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). + ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = ANY \(\$5\) AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). WithArgs( workerName, float64(d), projectionName, instanceID, + pq.StringArray{instanceID}, ). WillReturnResult(driver.ResultNoRows) } @@ -322,12 +353,13 @@ func expectLockErr(lockTable, workerName string, d time.Duration, instanceID str ` \(locker_id, locked_until, projection_name, instance_id\) VALUES \(\$1, now\(\)\+\$2::INTERVAL, \$3\, \$4\)`+ ` ON CONFLICT \(projection_name, instance_id\)`+ ` DO UPDATE SET locker_id = \$1, locked_until = now\(\)\+\$2::INTERVAL`+ - ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = \$4 AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). + ` WHERE `+lockTable+`\.projection_name = \$3 AND `+lockTable+`\.instance_id = ANY \(\$5\) AND \(`+lockTable+`\.locker_id = \$1 OR `+lockTable+`\.locked_until < now\(\)\)`). WithArgs( workerName, float64(d), projectionName, instanceID, + pq.StringArray{instanceID}, ). WillReturnError(err) } diff --git a/internal/eventstore/handler/crdb/handler_stmt.go b/internal/eventstore/handler/crdb/handler_stmt.go index 58459703fd..7aa921fd90 100644 --- a/internal/eventstore/handler/crdb/handler_stmt.go +++ b/internal/eventstore/handler/crdb/handler_stmt.go @@ -10,7 +10,6 @@ import ( "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/eventstore" "github.com/zitadel/zitadel/internal/eventstore/handler" - "github.com/zitadel/zitadel/internal/telemetry/tracing" ) var ( @@ -75,84 +74,62 @@ func NewStatementHandler( bulkLimit: config.BulkLimit, Locker: NewLocker(config.Client, config.LockTable, config.ProjectionHandlerConfig.ProjectionName), } - h.ProjectionHandler = handler.NewProjectionHandler(config.ProjectionHandlerConfig, h.reduce, h.Update, h.SearchQuery) + h.ProjectionHandler = handler.NewProjectionHandler(ctx, config.ProjectionHandlerConfig, h.reduce, h.Update, h.SearchQuery, h.Lock, h.Unlock) err := h.Init(ctx, config.InitCheck) logging.OnError(err).Fatal("unable to initialize projections") - go h.Process( - ctx, - h.reduce, - h.Update, - h.Lock, - h.Unlock, - h.SearchQuery, - ) - h.Subscribe(h.aggregates...) return h } -func (h *StatementHandler) TriggerBulk(ctx context.Context) { - ctx, span := tracing.NewSpan(ctx) - var err error - defer span.EndWithError(err) - - err = h.ProjectionHandler.TriggerBulk(ctx, h.Lock, h.Unlock) - logging.OnError(err).WithField("projection", h.ProjectionName).Warn("unable to trigger bulk") -} - -func (h *StatementHandler) SearchQuery(ctx context.Context) (*eventstore.SearchQueryBuilder, uint64, error) { - sequences, err := h.currentSequences(ctx, h.client.QueryContext) +func (h *StatementHandler) SearchQuery(ctx context.Context, instanceIDs []string) (*eventstore.SearchQueryBuilder, uint64, error) { + sequences, err := h.currentSequences(ctx, h.client.QueryContext, instanceIDs) if err != nil { return nil, 0, err } queryBuilder := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).Limit(h.bulkLimit) + for _, aggregateType := range h.aggregates { - instances := make([]string, 0) - for _, sequence := range sequences[aggregateType] { - instances = appendToIgnoredInstances(instances, sequence.instanceID) + for _, instanceID := range instanceIDs { + var seq uint64 + for _, sequence := range sequences[aggregateType] { + if sequence.instanceID == instanceID { + seq = sequence.sequence + break + } + } queryBuilder. AddQuery(). AggregateTypes(aggregateType). - SequenceGreater(sequence.sequence). - InstanceID(sequence.instanceID) + SequenceGreater(seq). + InstanceID(instanceID) } - queryBuilder. - AddQuery(). - AggregateTypes(aggregateType). - SequenceGreater(0). - ExcludedInstanceID(instances...) } return queryBuilder, h.bulkLimit, nil } -func appendToIgnoredInstances(instances []string, id string) []string { - for _, instance := range instances { - if instance == id { - return instances - } - } - return append(instances, id) -} - //Update implements handler.Update -func (h *StatementHandler) Update(ctx context.Context, stmts []*handler.Statement, reduce handler.Reduce) (unexecutedStmts []*handler.Statement, err error) { +func (h *StatementHandler) Update(ctx context.Context, stmts []*handler.Statement, reduce handler.Reduce) (index int, err error) { if len(stmts) == 0 { - return nil, nil + return -1, nil + } + instanceIDs := make([]string, 0, len(stmts)) + for _, stmt := range stmts { + instanceIDs = appendToInstanceIDs(instanceIDs, stmt.InstanceID) } tx, err := h.client.BeginTx(ctx, nil) if err != nil { - return stmts, errors.ThrowInternal(err, "CRDB-e89Gq", "begin failed") + return -1, errors.ThrowInternal(err, "CRDB-e89Gq", "begin failed") } - sequences, err := h.currentSequences(ctx, tx.QueryContext) + sequences, err := h.currentSequences(ctx, tx.QueryContext, instanceIDs) if err != nil { tx.Rollback() - return stmts, err + return -1, err } //checks for events between create statement and current sequence @@ -162,7 +139,7 @@ func (h *StatementHandler) Update(ctx context.Context, stmts []*handler.Statemen previousStmts, err := h.fetchPreviousStmts(ctx, tx, stmts[0].Sequence, stmts[0].InstanceID, sequences, reduce) if err != nil { tx.Rollback() - return stmts, err + return -1, err } stmts = append(previousStmts, stmts...) } @@ -173,27 +150,19 @@ func (h *StatementHandler) Update(ctx context.Context, stmts []*handler.Statemen err = h.updateCurrentSequences(tx, sequences) if err != nil { tx.Rollback() - return stmts, err + return -1, err } } if err = tx.Commit(); err != nil { - return stmts, err + return -1, err } - if lastSuccessfulIdx == -1 && len(stmts) > 0 { - return stmts, handler.ErrSomeStmtsFailed + if lastSuccessfulIdx < len(stmts)-1 { + return lastSuccessfulIdx, handler.ErrSomeStmtsFailed } - unexecutedStmts = make([]*handler.Statement, len(stmts)-(lastSuccessfulIdx+1)) - copy(unexecutedStmts, stmts[lastSuccessfulIdx+1:]) - stmts = nil - - if len(unexecutedStmts) > 0 { - return unexecutedStmts, handler.ErrSomeStmtsFailed - } - - return unexecutedStmts, nil + return lastSuccessfulIdx, nil } func (h *StatementHandler) fetchPreviousStmts(ctx context.Context, tx *sql.Tx, stmtSeq uint64, instanceID string, sequences currentSequences, reduce handler.Reduce) (previousStmts []*handler.Statement, err error) { @@ -316,3 +285,12 @@ func updateSequences(sequences currentSequences, stmt *handler.Statement) { sequence: stmt.Sequence, }) } + +func appendToInstanceIDs(instances []string, id string) []string { + for _, instance := range instances { + if instance == id { + return instances + } + } + return append(instances, id) +} diff --git a/internal/eventstore/handler/crdb/handler_stmt_test.go b/internal/eventstore/handler/crdb/handler_stmt_test.go index 326226b7ea..125bb77ddd 100644 --- a/internal/eventstore/handler/crdb/handler_stmt_test.go +++ b/internal/eventstore/handler/crdb/handler_stmt_test.go @@ -4,6 +4,7 @@ import ( "context" "database/sql" "errors" + "fmt" "reflect" "testing" "time" @@ -61,9 +62,13 @@ func TestProjectionHandler_SearchQuery(t *testing.T) { aggregates []eventstore.AggregateType bulkLimit uint64 } + type args struct { + instanceIDs []string + } tests := []struct { name string fields fields + args args want want }{ { @@ -74,13 +79,16 @@ func TestProjectionHandler_SearchQuery(t *testing.T) { aggregates: []eventstore.AggregateType{"testAgg"}, bulkLimit: 5, }, + args: args{ + instanceIDs: []string{"instanceID1"}, + }, want: want{ limit: 0, isErr: func(err error) bool { return errors.Is(err, sql.ErrTxDone) }, expectations: []mockExpectation{ - expectCurrentSequenceErr("my_sequences", "my_projection", sql.ErrTxDone), + expectCurrentSequenceErr("my_sequences", "my_projection", []string{"instanceID1"}, sql.ErrTxDone), }, SearchQueryBuilder: nil, }, @@ -93,24 +101,56 @@ func TestProjectionHandler_SearchQuery(t *testing.T) { aggregates: []eventstore.AggregateType{"testAgg"}, bulkLimit: 5, }, + args: args{ + instanceIDs: []string{"instanceID1"}, + }, want: want{ limit: 5, isErr: func(err error) bool { return err == nil }, expectations: []mockExpectation{ - expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID1"}), }, SearchQueryBuilder: eventstore. NewSearchQueryBuilder(eventstore.ColumnsEvent). AddQuery(). AggregateTypes("testAgg"). SequenceGreater(5). - InstanceID("instanceID"). + InstanceID("instanceID1"). + Builder(). + Limit(5), + }, + }, + { + name: "multiple instances", + fields: fields{ + sequenceTable: "my_sequences", + projectionName: "my_projection", + aggregates: []eventstore.AggregateType{"testAgg"}, + bulkLimit: 5, + }, + args: args{ + instanceIDs: []string{"instanceID1", "instanceID2"}, + }, + want: want{ + limit: 5, + isErr: func(err error) bool { + return err == nil + }, + expectations: []mockExpectation{ + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID1", "instanceID2"}), + }, + SearchQueryBuilder: eventstore. + NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes("testAgg"). + SequenceGreater(5). + InstanceID("instanceID1"). Or(). AggregateTypes("testAgg"). - SequenceGreater(0). - ExcludedInstanceID("instanceID"). + SequenceGreater(5). + InstanceID("instanceID2"). Builder(). Limit(5), }, @@ -140,7 +180,7 @@ func TestProjectionHandler_SearchQuery(t *testing.T) { expectation(mock) } - query, limit, err := h.SearchQuery(context.Background()) + query, limit, err := h.SearchQuery(context.Background(), tt.args.instanceIDs) if !tt.want.isErr(err) { t.Errorf("ProjectionHandler.prepareBulkStmts() error = %v", err) return @@ -211,13 +251,14 @@ func TestStatementHandler_Update(t *testing.T) { aggregateType: "agg", sequence: 6, previousSequence: 0, + instanceID: "instanceID", }), }, }, want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequenceErr("my_sequences", "my_projection", sql.ErrTxDone), + expectCurrentSequenceErr("my_sequences", "my_projection", []string{"instanceID"}, sql.ErrTxDone), expectRollback(), }, isErr: func(err error) bool { @@ -241,13 +282,14 @@ func TestStatementHandler_Update(t *testing.T) { aggregateType: "agg", sequence: 6, previousSequence: 0, + instanceID: "instanceID", }), }, }, want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}), expectRollback(), }, isErr: func(err error) bool { @@ -272,6 +314,7 @@ func TestStatementHandler_Update(t *testing.T) { aggregateType: "testAgg", sequence: 7, previousSequence: 6, + instanceID: "instanceID", }, []handler.Column{ { @@ -284,7 +327,7 @@ func TestStatementHandler_Update(t *testing.T) { want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}), expectCommit(), }, isErr: func(err error) bool { @@ -322,7 +365,7 @@ func TestStatementHandler_Update(t *testing.T) { want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "agg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "agg", []string{"instanceID"}), expectSavePoint(), expectCreate("my_projection", []string{"col"}, []string{"$1"}), expectSavePointRelease(), @@ -364,7 +407,7 @@ func TestStatementHandler_Update(t *testing.T) { want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "agg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "agg", []string{"instanceID"}), expectSavePoint(), expectCreate("my_projection", []string{"col"}, []string{"$1"}), expectSavePointRelease(), @@ -399,7 +442,7 @@ func TestStatementHandler_Update(t *testing.T) { want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}), expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "testAgg", "instanceID"), expectCommit(), }, @@ -431,7 +474,7 @@ func TestStatementHandler_Update(t *testing.T) { want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}), expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "testAgg", "instanceID"), expectCommit(), }, @@ -470,13 +513,14 @@ func TestStatementHandler_Update(t *testing.T) { want: want{ expectations: []mockExpectation{ expectBegin(), - expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", "instanceID"), + expectCurrentSequence("my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}), expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "testAgg", "instanceID"), expectCommit(), }, isErr: func(err error) bool { return errors.Is(err, nil) }, + stmtsLen: 1, }, }, } @@ -488,17 +532,18 @@ func TestStatementHandler_Update(t *testing.T) { } defer client.Close() - h := NewStatementHandler(context.Background(), StatementHandlerConfig{ - ProjectionHandlerConfig: handler.ProjectionHandlerConfig{ - ProjectionName: "my_projection", - HandlerConfig: handler.HandlerConfig{ + h := &StatementHandler{ + ProjectionHandler: &handler.ProjectionHandler{ + Handler: handler.Handler{ Eventstore: tt.fields.eventstore, }, - RequeueEvery: 0, + ProjectionName: "my_projection", }, - SequenceTable: "my_sequences", - Client: client, - }) + sequenceTable: "my_sequences", + currentSequenceStmt: fmt.Sprintf(currentSequenceStmtFormat, "my_sequences"), + updateSequencesBaseStmt: fmt.Sprintf(updateCurrentSequencesStmtFormat, "my_sequences"), + client: client, + } h.aggregates = tt.fields.aggregates @@ -506,12 +551,12 @@ func TestStatementHandler_Update(t *testing.T) { expectation(mock) } - stmts, err := h.Update(tt.args.ctx, tt.args.stmts, tt.args.reduce) + index, err := h.Update(tt.args.ctx, tt.args.stmts, tt.args.reduce) if !tt.want.isErr(err) { t.Errorf("StatementHandler.Update() error = %v", err) } - if err == nil && tt.want.stmtsLen != len(stmts) { - t.Errorf("wrong stmts length: want: %d got %d", tt.want.stmtsLen, len(stmts)) + if err == nil && tt.want.stmtsLen != index { + t.Errorf("wrong stmts length: want: %d got %d", tt.want.stmtsLen, index) } mock.MatchExpectationsInOrder(true) @@ -696,17 +741,12 @@ func TestProjectionHandler_fetchPreviousStmts(t *testing.T) { h := &StatementHandler{ aggregates: tt.fields.aggregates, } - h.ProjectionHandler = handler.NewProjectionHandler(handler.ProjectionHandlerConfig{ - HandlerConfig: handler.HandlerConfig{ + h.ProjectionHandler = &handler.ProjectionHandler{ + Handler: handler.Handler{ Eventstore: tt.fields.eventstore, }, ProjectionName: "my_projection", - RequeueEvery: 0, - }, - h.reduce, - h.Update, - h.SearchQuery, - ) + } stmts, err := h.fetchPreviousStmts(tt.args.ctx, nil, tt.args.stmtSeq, "", tt.args.sequences, tt.args.reduce) if !tt.want.isErr(err) { t.Errorf("ProjectionHandler.prepareBulkStmts() error = %v", err) @@ -1311,7 +1351,8 @@ func TestStatementHandler_currentSequence(t *testing.T) { aggregates []eventstore.AggregateType } type args struct { - stmt handler.Statement + stmt handler.Statement + instanceIDs []string } type want struct { expectations []mockExpectation @@ -1338,7 +1379,7 @@ func TestStatementHandler_currentSequence(t *testing.T) { return errors.Is(err, sql.ErrConnDone) }, expectations: []mockExpectation{ - expectCurrentSequenceErr("my_table", "my_projection", sql.ErrConnDone), + expectCurrentSequenceErr("my_table", "my_projection", nil, sql.ErrConnDone), }, }, }, @@ -1350,14 +1391,15 @@ func TestStatementHandler_currentSequence(t *testing.T) { aggregates: []eventstore.AggregateType{"agg"}, }, args: args{ - stmt: handler.Statement{}, + stmt: handler.Statement{}, + instanceIDs: []string{"instanceID"}, }, want: want{ isErr: func(err error) bool { return errors.Is(err, nil) }, expectations: []mockExpectation{ - expectCurrentSequenceNoRows("my_table", "my_projection"), + expectCurrentSequenceNoRows("my_table", "my_projection", []string{"instanceID"}), }, sequences: currentSequences{}, }, @@ -1370,14 +1412,15 @@ func TestStatementHandler_currentSequence(t *testing.T) { aggregates: []eventstore.AggregateType{"agg"}, }, args: args{ - stmt: handler.Statement{}, + stmt: handler.Statement{}, + instanceIDs: []string{"instanceID"}, }, want: want{ isErr: func(err error) bool { return errors.Is(err, sql.ErrTxDone) }, expectations: []mockExpectation{ - expectCurrentSequenceScanErr("my_table", "my_projection"), + expectCurrentSequenceScanErr("my_table", "my_projection", []string{"instanceID"}), }, sequences: currentSequences{}, }, @@ -1390,14 +1433,15 @@ func TestStatementHandler_currentSequence(t *testing.T) { aggregates: []eventstore.AggregateType{"agg"}, }, args: args{ - stmt: handler.Statement{}, + stmt: handler.Statement{}, + instanceIDs: []string{"instanceID"}, }, want: want{ isErr: func(err error) bool { return errors.Is(err, nil) }, expectations: []mockExpectation{ - expectCurrentSequence("my_table", "my_projection", 5, "agg", "instanceID"), + expectCurrentSequence("my_table", "my_projection", 5, "agg", []string{"instanceID"}), }, sequences: currentSequences{ "agg": []*instanceSequence{ @@ -1409,15 +1453,48 @@ func TestStatementHandler_currentSequence(t *testing.T) { }, }, }, + { + name: "multiple found", + fields: fields{ + sequenceTable: "my_table", + projectionName: "my_projection", + aggregates: []eventstore.AggregateType{"agg"}, + }, + args: args{ + stmt: handler.Statement{}, + instanceIDs: []string{"instanceID1", "instanceID2"}, + }, + want: want{ + isErr: func(err error) bool { + return errors.Is(err, nil) + }, + expectations: []mockExpectation{ + expectCurrentSequence("my_table", "my_projection", 5, "agg", []string{"instanceID1", "instanceID2"}), + }, + sequences: currentSequences{ + "agg": []*instanceSequence{ + { + sequence: 5, + instanceID: "instanceID1", + }, + { + sequence: 5, + instanceID: "instanceID2", + }, + }, + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewStatementHandler(context.Background(), StatementHandlerConfig{ - ProjectionHandlerConfig: handler.ProjectionHandlerConfig{ + h := &StatementHandler{ + ProjectionHandler: &handler.ProjectionHandler{ ProjectionName: tt.fields.projectionName, }, - SequenceTable: tt.fields.sequenceTable, - }) + sequenceTable: tt.fields.sequenceTable, + currentSequenceStmt: fmt.Sprintf(currentSequenceStmtFormat, tt.fields.sequenceTable), + } h.aggregates = tt.fields.aggregates @@ -1440,7 +1517,7 @@ func TestStatementHandler_currentSequence(t *testing.T) { t.Fatalf("unexpected err in begin: %v", err) } - seq, err := h.currentSequences(context.Background(), tx.QueryContext) + seq, err := h.currentSequences(context.Background(), tx.QueryContext, tt.args.instanceIDs) if !tt.want.isErr(err) { t.Errorf("unexpected error: %v", err) } @@ -1615,12 +1692,13 @@ func TestStatementHandler_updateCurrentSequence(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewStatementHandler(context.Background(), StatementHandlerConfig{ - ProjectionHandlerConfig: handler.ProjectionHandlerConfig{ + h := &StatementHandler{ + ProjectionHandler: &handler.ProjectionHandler{ ProjectionName: tt.fields.projectionName, }, - SequenceTable: tt.fields.sequenceTable, - }) + sequenceTable: tt.fields.sequenceTable, + updateSequencesBaseStmt: fmt.Sprintf(updateCurrentSequencesStmtFormat, tt.fields.sequenceTable), + } h.aggregates = tt.fields.aggregates diff --git a/internal/eventstore/handler/crdb/lock.go b/internal/eventstore/handler/crdb/lock.go index cb8e2408cc..bc7894efa4 100644 --- a/internal/eventstore/handler/crdb/lock.go +++ b/internal/eventstore/handler/crdb/lock.go @@ -4,8 +4,11 @@ import ( "context" "database/sql" "fmt" + "strconv" + "strings" "time" + "github.com/lib/pq" "github.com/zitadel/logging" "github.com/zitadel/zitadel/internal/errors" @@ -14,20 +17,20 @@ import ( const ( lockStmtFormat = "INSERT INTO %[1]s" + - " (locker_id, locked_until, projection_name, instance_id) VALUES ($1, now()+$2::INTERVAL, $3, $4)" + + " (locker_id, locked_until, projection_name, instance_id) VALUES %[2]s" + " ON CONFLICT (projection_name, instance_id)" + " DO UPDATE SET locker_id = $1, locked_until = now()+$2::INTERVAL" + - " WHERE %[1]s.projection_name = $3 AND %[1]s.instance_id = $4 AND (%[1]s.locker_id = $1 OR %[1]s.locked_until < now())" + " WHERE %[1]s.projection_name = $3 AND %[1]s.instance_id = ANY ($%[3]d) AND (%[1]s.locker_id = $1 OR %[1]s.locked_until < now())" ) type Locker interface { - Lock(ctx context.Context, lockDuration time.Duration, instanceID string) <-chan error - Unlock(instanceID string) error + Lock(ctx context.Context, lockDuration time.Duration, instanceIDs ...string) <-chan error + Unlock(instanceIDs ...string) error } type locker struct { client *sql.DB - lockStmt string + lockStmt func(values string, instances int) string workerName string projectionName string } @@ -36,25 +39,27 @@ func NewLocker(client *sql.DB, lockTable, projectionName string) Locker { workerName, err := id.SonyFlakeGenerator().Next() logging.OnError(err).Panic("unable to generate lockID") return &locker{ - client: client, - lockStmt: fmt.Sprintf(lockStmtFormat, lockTable), + client: client, + lockStmt: func(values string, instances int) string { + return fmt.Sprintf(lockStmtFormat, lockTable, values, instances) + }, workerName: workerName, projectionName: projectionName, } } -func (h *locker) Lock(ctx context.Context, lockDuration time.Duration, instanceID string) <-chan error { +func (h *locker) Lock(ctx context.Context, lockDuration time.Duration, instanceIDs ...string) <-chan error { errs := make(chan error) - go h.handleLock(ctx, errs, lockDuration, instanceID) + go h.handleLock(ctx, errs, lockDuration, instanceIDs...) return errs } -func (h *locker) handleLock(ctx context.Context, errs chan error, lockDuration time.Duration, instanceID string) { +func (h *locker) handleLock(ctx context.Context, errs chan error, lockDuration time.Duration, instanceIDs ...string) { renewLock := time.NewTimer(0) for { select { case <-renewLock.C: - errs <- h.renewLock(ctx, lockDuration, instanceID) + errs <- h.renewLock(ctx, lockDuration, instanceIDs...) //refresh the lock 500ms before it times out. 500ms should be enough for one transaction renewLock.Reset(lockDuration - (500 * time.Millisecond)) case <-ctx.Done(): @@ -65,24 +70,38 @@ func (h *locker) handleLock(ctx context.Context, errs chan error, lockDuration t } } -func (h *locker) renewLock(ctx context.Context, lockDuration time.Duration, instanceID string) error { - //the unit of crdb interval is seconds (https://www.cockroachlabs.com/docs/stable/interval.html). - res, err := h.client.ExecContext(ctx, h.lockStmt, h.workerName, lockDuration.Seconds(), h.projectionName, instanceID) +func (h *locker) renewLock(ctx context.Context, lockDuration time.Duration, instanceIDs ...string) error { + lockStmt, values := h.lockStatement(lockDuration, instanceIDs) + res, err := h.client.ExecContext(ctx, lockStmt, values...) if err != nil { return errors.ThrowInternal(err, "CRDB-uaDoR", "unable to execute lock") } - if rows, _ := res.RowsAffected(); rows == 0 { return errors.ThrowAlreadyExists(nil, "CRDB-mmi4J", "projection already locked") } - return nil } -func (h *locker) Unlock(instanceID string) error { - _, err := h.client.Exec(h.lockStmt, h.workerName, float64(0), h.projectionName, instanceID) +func (h *locker) Unlock(instanceIDs ...string) error { + lockStmt, values := h.lockStatement(0, instanceIDs) + _, err := h.client.Exec(lockStmt, values...) if err != nil { return errors.ThrowUnknown(err, "CRDB-JjfwO", "unlock failed") } return nil } + +func (h *locker) lockStatement(lockDuration time.Duration, instanceIDs []string) (string, []interface{}) { + valueQueries := make([]string, len(instanceIDs)) + values := make([]interface{}, len(instanceIDs)+4) + values[0] = h.workerName + //the unit of crdb interval is seconds (https://www.cockroachlabs.com/docs/stable/interval.html). + values[1] = lockDuration.Seconds() + values[2] = h.projectionName + for i, instanceID := range instanceIDs { + valueQueries[i] = "($1, now()+$2::INTERVAL, $3, $" + strconv.Itoa(i+4) + ")" + values[i+3] = instanceID + } + values[len(values)-1] = pq.StringArray(instanceIDs) + return h.lockStmt(strings.Join(valueQueries, ", "), len(values)), values +} diff --git a/internal/eventstore/handler/crdb/lock_test.go b/internal/eventstore/handler/crdb/lock_test.go index 3b0177ea62..24ce3a8aa4 100644 --- a/internal/eventstore/handler/crdb/lock_test.go +++ b/internal/eventstore/handler/crdb/lock_test.go @@ -32,7 +32,7 @@ func TestStatementHandler_handleLock(t *testing.T) { lockDuration time.Duration ctx context.Context errMock *errsMock - instanceID string + instanceIDs []string } tests := []struct { name string @@ -56,7 +56,7 @@ func TestStatementHandler_handleLock(t *testing.T) { successfulIters: 2, shouldErr: true, }, - instanceID: "instanceID", + instanceIDs: []string{"instanceID"}, }, }, { @@ -74,7 +74,25 @@ func TestStatementHandler_handleLock(t *testing.T) { errs: make(chan error), successfulIters: 2, }, - instanceID: "instanceID", + instanceIDs: []string{"instanceID"}, + }, + }, + { + name: "success with multiple", + want: want{ + expectations: []mockExpectation{ + expectLockMultipleInstances(lockTable, workerName, 2, "instanceID1", "instanceID2"), + expectLockMultipleInstances(lockTable, workerName, 2, "instanceID1", "instanceID2"), + }, + }, + args: args{ + lockDuration: 2 * time.Second, + ctx: context.Background(), + errMock: &errsMock{ + errs: make(chan error), + successfulIters: 2, + }, + instanceIDs: []string{"instanceID1", "instanceID2"}, }, }, } @@ -88,7 +106,9 @@ func TestStatementHandler_handleLock(t *testing.T) { projectionName: projectionName, client: client, workerName: workerName, - lockStmt: fmt.Sprintf(lockStmtFormat, lockTable), + lockStmt: func(values string, instances int) string { + return fmt.Sprintf(lockStmtFormat, lockTable, values, instances) + }, } for _, expectation := range tt.want.expectations { @@ -99,7 +119,7 @@ func TestStatementHandler_handleLock(t *testing.T) { go tt.args.errMock.handleErrs(t, cancel) - go h.handleLock(ctx, tt.args.errMock.errs, tt.args.lockDuration, tt.args.instanceID) + go h.handleLock(ctx, tt.args.errMock.errs, tt.args.lockDuration, tt.args.instanceIDs...) <-ctx.Done() @@ -118,7 +138,7 @@ func TestStatementHandler_renewLock(t *testing.T) { } type args struct { lockDuration time.Duration - instanceID string + instanceIDs []string } tests := []struct { name string @@ -137,7 +157,7 @@ func TestStatementHandler_renewLock(t *testing.T) { }, args: args{ lockDuration: 1 * time.Second, - instanceID: "instanceID", + instanceIDs: []string{"instanceID"}, }, }, { @@ -152,7 +172,7 @@ func TestStatementHandler_renewLock(t *testing.T) { }, args: args{ lockDuration: 2 * time.Second, - instanceID: "instanceID", + instanceIDs: []string{"instanceID"}, }, }, { @@ -167,7 +187,22 @@ func TestStatementHandler_renewLock(t *testing.T) { }, args: args{ lockDuration: 3 * time.Second, - instanceID: "instanceID", + instanceIDs: []string{"instanceID"}, + }, + }, + { + name: "success with multiple", + want: want{ + expectations: []mockExpectation{ + expectLockMultipleInstances(lockTable, workerName, 3, "instanceID1", "instanceID2"), + }, + isErr: func(err error) bool { + return errors.Is(err, nil) + }, + }, + args: args{ + lockDuration: 3 * time.Second, + instanceIDs: []string{"instanceID1", "instanceID2"}, }, }, } @@ -181,14 +216,16 @@ func TestStatementHandler_renewLock(t *testing.T) { projectionName: projectionName, client: client, workerName: workerName, - lockStmt: fmt.Sprintf(lockStmtFormat, lockTable), + lockStmt: func(values string, instances int) string { + return fmt.Sprintf(lockStmtFormat, lockTable, values, instances) + }, } for _, expectation := range tt.want.expectations { expectation(mock) } - err = h.renewLock(context.Background(), tt.args.lockDuration, tt.args.instanceID) + err = h.renewLock(context.Background(), tt.args.lockDuration, tt.args.instanceIDs...) if !tt.want.isErr(err) { t.Errorf("unexpected error = %v", err) } @@ -253,7 +290,9 @@ func TestStatementHandler_Unlock(t *testing.T) { projectionName: projectionName, client: client, workerName: workerName, - lockStmt: fmt.Sprintf(lockStmtFormat, lockTable), + lockStmt: func(values string, instances int) string { + return fmt.Sprintf(lockStmtFormat, lockTable, values, instances) + }, } for _, expectation := range tt.want.expectations { diff --git a/internal/eventstore/handler/handler.go b/internal/eventstore/handler/handler.go index feb7367511..1944cfd0ba 100644 --- a/internal/eventstore/handler/handler.go +++ b/internal/eventstore/handler/handler.go @@ -27,3 +27,10 @@ func (h *Handler) Subscribe(aggregates ...eventstore.AggregateType) { func (h *Handler) SubscribeEvents(types map[eventstore.AggregateType][]eventstore.EventType) { h.Sub = eventstore.SubscribeEventTypes(h.EventQueue, types) } + +func (h *Handler) Unsubscribe() { + if h.Sub == nil { + return + } + h.Sub.Unsubscribe() +} diff --git a/internal/eventstore/handler/handler_projection.go b/internal/eventstore/handler/handler_projection.go index 43afa682f1..e495caf71a 100644 --- a/internal/eventstore/handler/handler_projection.go +++ b/internal/eventstore/handler/handler_projection.go @@ -2,13 +2,13 @@ package handler import ( "context" + "errors" "runtime/debug" - "sort" - "sync" "time" "github.com/zitadel/logging" + "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/eventstore" ) @@ -16,241 +16,207 @@ const systemID = "system" type ProjectionHandlerConfig struct { HandlerConfig - ProjectionName string - RequeueEvery time.Duration - RetryFailedAfter time.Duration + ProjectionName string + RequeueEvery time.Duration + RetryFailedAfter time.Duration + Retries uint + ConcurrentInstances uint } //Update updates the projection with the given statements -type Update func(context.Context, []*Statement, Reduce) (unexecutedStmts []*Statement, err error) +type Update func(context.Context, []*Statement, Reduce) (index int, err error) //Reduce reduces the given event to a statement //which is used to update the projection type Reduce func(eventstore.Event) (*Statement, error) +//SearchQuery generates the search query to lookup for events +type SearchQuery func(ctx context.Context, instanceIDs []string) (query *eventstore.SearchQueryBuilder, queryLimit uint64, err error) + //Lock is used for mutex handling if needed on the projection -type Lock func(context.Context, time.Duration, string) <-chan error +type Lock func(context.Context, time.Duration, ...string) <-chan error //Unlock releases the mutex of the projection -type Unlock func(string) error - -//SearchQuery generates the search query to lookup for events -type SearchQuery func(ctx context.Context) (query *eventstore.SearchQueryBuilder, queryLimit uint64, err error) +type Unlock func(...string) error type ProjectionHandler struct { Handler - - requeueAfter time.Duration - shouldBulk *time.Timer - bulkMu sync.Mutex - bulkLocked bool - execBulk executeBulk - - retryFailedAfter time.Duration - shouldPush *time.Timer - pushSet bool - - ProjectionName string - - lockMu sync.Mutex - stmts []*Statement + ProjectionName string + reduce Reduce + update Update + searchQuery SearchQuery + triggerProjection *time.Timer + lock Lock + unlock Unlock + requeueAfter time.Duration + retryFailedAfter time.Duration + retries int + concurrentInstances int } func NewProjectionHandler( + ctx context.Context, config ProjectionHandlerConfig, reduce Reduce, update Update, query SearchQuery, + lock Lock, + unlock Unlock, ) *ProjectionHandler { + concurrentInstances := int(config.ConcurrentInstances) + if concurrentInstances < 1 { + concurrentInstances = 1 + } h := &ProjectionHandler{ - Handler: NewHandler(config.HandlerConfig), - ProjectionName: config.ProjectionName, - requeueAfter: config.RequeueEvery, - // first bulk is instant on startup - shouldBulk: time.NewTimer(0), - shouldPush: time.NewTimer(0), - retryFailedAfter: config.RetryFailedAfter, + Handler: NewHandler(config.HandlerConfig), + ProjectionName: config.ProjectionName, + reduce: reduce, + update: update, + searchQuery: query, + lock: lock, + unlock: unlock, + requeueAfter: config.RequeueEvery, + triggerProjection: time.NewTimer(0), // first trigger is instant on startup + retryFailedAfter: config.RetryFailedAfter, + retries: int(config.Retries), + concurrentInstances: concurrentInstances, } - h.execBulk = h.prepareExecuteBulk(query, reduce, update) + go h.subscribe(ctx) - //unitialized timer - //https://github.com/golang/go/issues/12721 - <-h.shouldPush.C + go h.schedule(ctx) - if config.RequeueEvery <= 0 { - if !h.shouldBulk.Stop() { - <-h.shouldBulk.C - } - logging.WithFields("projection", h.ProjectionName).Info("starting handler without requeue") - return h - } else if config.RequeueEvery < 500*time.Millisecond { - logging.WithFields("projection", h.ProjectionName).Fatal("requeue every must be greater 500ms or <= 0") - } - logging.WithFields("projection", h.ProjectionName).Info("starting handler") return h } -func (h *ProjectionHandler) ResetShouldBulk() { - if h.requeueAfter > 0 { - h.shouldBulk.Reset(h.requeueAfter) +//Trigger handles all events for the provided instances (or current instance from context if non specified) +//by calling FetchEvents and Process until the amount of events is smaller than the BulkLimit +func (h *ProjectionHandler) Trigger(ctx context.Context, instances ...string) error { + ids := []string{authz.GetInstance(ctx).InstanceID()} + if len(instances) > 0 { + ids = instances } -} - -func (h *ProjectionHandler) triggerShouldPush(after time.Duration) { - if !h.pushSet { - h.pushSet = true - h.shouldPush.Reset(after) - } -} - -//Process waits for several conditions: -// if context is canceled the function gracefully shuts down -// if an event occures it reduces the event -// if the internal timer expires the handler will check -// for unprocessed events on eventstore -func (h *ProjectionHandler) Process( - ctx context.Context, - reduce Reduce, - update Update, - lock Lock, - unlock Unlock, - query SearchQuery, -) { - //handle panic - defer func() { - cause := recover() - logging.WithFields("projection", h.ProjectionName, "cause", cause, "stack", string(debug.Stack())).Error("projection handler paniced") - }() - for { - select { - case <-ctx.Done(): - if h.pushSet { - h.push(context.Background(), update, reduce) + events, hasLimitExceeded, err := h.FetchEvents(ctx, ids...) + if err != nil { + return err + } + if len(events) == 0 { + return nil + } + _, err = h.Process(ctx, events...) + if err != nil { + return err + } + if !hasLimitExceeded { + return nil + } + } +} + +//Process handles multiple events by reducing them to statements and updating the projection +func (h *ProjectionHandler) Process(ctx context.Context, events ...eventstore.Event) (index int, err error) { + if len(events) == 0 { + return 0, nil + } + index = -1 + statements := make([]*Statement, len(events)) + for i, event := range events { + statements[i], err = h.reduce(event) + if err != nil { + return index, err + } + } + for retry := 0; retry <= h.retries; retry++ { + index, err = h.update(ctx, statements[index+1:], h.reduce) + if err != nil && !errors.Is(err, ErrSomeStmtsFailed) { + return index, err + } + if err == nil { + return index, nil + } + time.Sleep(h.retryFailedAfter) + } + return index, err +} + +//FetchEvents checks the current sequences and filters for newer events +func (h *ProjectionHandler) FetchEvents(ctx context.Context, instances ...string) ([]eventstore.Event, bool, error) { + eventQuery, eventsLimit, err := h.searchQuery(ctx, instances) + if err != nil { + return nil, false, err + } + events, err := h.Eventstore.Filter(ctx, eventQuery) + if err != nil { + return nil, false, err + } + return events, int(eventsLimit) == len(events), err +} + +func (h *ProjectionHandler) subscribe(ctx context.Context) { + ctx, cancel := context.WithCancel(ctx) + defer func() { + err := recover() + if err != nil { + h.Handler.Unsubscribe() + logging.WithFields("projection", h.ProjectionName).Errorf("subscription panicked: %v", err) + } + cancel() + }() + for firstEvent := range h.EventQueue { + events := checkAdditionalEvents(h.EventQueue, firstEvent) + + index, err := h.Process(ctx, events...) + if err != nil || index < len(events)-1 { + logging.WithFields("projection", h.ProjectionName).WithError(err).Error("unable to process all events from subscription") + } + } +} + +func (h *ProjectionHandler) schedule(ctx context.Context) { + ctx, cancel := context.WithCancel(ctx) + defer func() { + err := recover() + if err != nil { + logging.WithFields("projection", h.ProjectionName, "cause", err, "stack", string(debug.Stack())).Error("schedule panicked") + } + cancel() + }() + for range h.triggerProjection.C { + ids, err := h.Eventstore.InstanceIDs(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsInstanceIDs).AddQuery().ExcludedInstanceID("").Builder()) + if err != nil { + logging.WithFields("projection", h.ProjectionName).WithError(err).Error("instance ids") + h.triggerProjection.Reset(h.requeueAfter) + continue + } + for i := 0; i < len(ids); i = i + h.concurrentInstances { + max := i + h.concurrentInstances + if max > len(ids) { + max = len(ids) } - h.shutdown() - return - case event := <-h.EventQueue: - if err := h.processEvent(ctx, event, reduce); err != nil { - logging.WithFields("projection", h.ProjectionName).WithError(err).Warn("process failed") + instances := ids[i:max] + lockCtx, cancelLock := context.WithCancel(ctx) + errs := h.lock(lockCtx, h.requeueAfter, instances...) + //wait until projection is locked + if err, ok := <-errs; err != nil || !ok { + cancelLock() + logging.WithFields("projection", h.ProjectionName).OnError(err).Warn("initial lock failed") continue } - h.triggerShouldPush(0) - case <-h.shouldBulk.C: - h.bulkMu.Lock() - h.bulkLocked = true - h.bulk(ctx, lock, unlock) - h.ResetShouldBulk() - h.bulkLocked = false - h.bulkMu.Unlock() - default: - //lower prio select with push - select { - case <-ctx.Done(): - if h.pushSet { - h.push(context.Background(), update, reduce) - } - h.shutdown() - return - case event := <-h.EventQueue: - if err := h.processEvent(ctx, event, reduce); err != nil { - logging.WithFields("projection", h.ProjectionName).WithError(err).Warn("process failed") - continue - } - h.triggerShouldPush(0) - case <-h.shouldBulk.C: - h.bulkMu.Lock() - h.bulkLocked = true - h.bulk(ctx, lock, unlock) - h.ResetShouldBulk() - h.bulkLocked = false - h.bulkMu.Unlock() - case <-h.shouldPush.C: - h.push(ctx, update, reduce) - h.ResetShouldBulk() + go h.cancelOnErr(lockCtx, errs, cancelLock) + err = h.Trigger(lockCtx, instances...) + if err != nil { + logging.WithFields("projection", h.ProjectionName, "instanceIDs", instances).WithError(err).Error("trigger failed") } + + cancelLock() + unlockErr := h.unlock(instances...) + logging.WithFields("projection", h.ProjectionName).OnError(unlockErr).Warn("unable to unlock") } + h.triggerProjection.Reset(h.requeueAfter) } } -func (h *ProjectionHandler) processEvent( - ctx context.Context, - event eventstore.Event, - reduce Reduce, -) error { - stmt, err := reduce(event) - if err != nil { - logging.New().WithError(err).Warn("unable to process event") - return err - } - - h.lockMu.Lock() - defer h.lockMu.Unlock() - - h.stmts = append(h.stmts, stmt) - - return nil -} - -func (h *ProjectionHandler) TriggerBulk( - ctx context.Context, - lock Lock, - unlock Unlock, -) error { - if !h.shouldBulk.Stop() { - //make sure to flush shouldBulk chan - select { - case <-h.shouldBulk.C: - default: - } - } - defer h.ResetShouldBulk() - - h.bulkMu.Lock() - if h.bulkLocked { - logging.WithFields("projection", h.ProjectionName).Debugf("waiting for existing bulk to finish") - h.bulkMu.Unlock() - return nil - } - h.bulkLocked = true - defer func() { - h.bulkLocked = false - h.bulkMu.Unlock() - }() - - return h.bulk(ctx, lock, unlock) -} - -func (h *ProjectionHandler) bulk( - ctx context.Context, - lock Lock, - unlock Unlock, -) error { - ctx, cancel := context.WithCancel(ctx) - defer cancel() - - errs := lock(ctx, h.requeueAfter, systemID) - //wait until projection is locked - if err, ok := <-errs; err != nil || !ok { - logging.WithFields("projection", h.ProjectionName).OnError(err).Warn("initial lock failed") - return err - } - go h.cancelOnErr(ctx, errs, cancel) - - execErr := h.execBulk(ctx) - logging.WithFields("projection", h.ProjectionName).OnError(execErr).Warn("unable to execute") - - unlockErr := unlock(systemID) - logging.WithFields("projection", h.ProjectionName).OnError(unlockErr).Warn("unable to unlock") - - if execErr != nil { - return execErr - } - - return unlockErr -} - func (h *ProjectionHandler) cancelOnErr(ctx context.Context, errs <-chan error, cancel func()) { for { select { @@ -268,98 +234,15 @@ func (h *ProjectionHandler) cancelOnErr(ctx context.Context, errs <-chan error, } } -type executeBulk func(ctx context.Context) error - -func (h *ProjectionHandler) prepareExecuteBulk( - query SearchQuery, - reduce Reduce, - update Update, -) executeBulk { - return func(ctx context.Context) error { - for { - select { - case <-ctx.Done(): - return nil - default: - hasLimitExeeded, err := h.fetchBulkStmts(ctx, query, reduce) - if err != nil || len(h.stmts) == 0 { - logging.WithFields("projection", h.ProjectionName).OnError(err).Warn("unable to fetch stmts") - return err - } - - if err = h.push(ctx, update, reduce); err != nil { - return err - } - - if !hasLimitExeeded { - return nil - } - } +func checkAdditionalEvents(eventQueue chan eventstore.Event, event eventstore.Event) []eventstore.Event { + events := make([]eventstore.Event, 1) + events[0] = event + for { + select { + case event := <-eventQueue: + events = append(events, event) + default: + return events } } } - -func (h *ProjectionHandler) fetchBulkStmts( - ctx context.Context, - query SearchQuery, - reduce Reduce, -) (limitExeeded bool, err error) { - eventQuery, eventsLimit, err := query(ctx) - if err != nil { - logging.WithFields("projection", h.ProjectionName).WithError(err).Warn("unable to create event query") - return false, err - } - - events, err := h.Eventstore.Filter(ctx, eventQuery) - if err != nil { - logging.WithFields("projection", h.ProjectionName).WithError(err).Info("Unable to bulk fetch events") - return false, err - } - - for _, event := range events { - if err = h.processEvent(ctx, event, reduce); err != nil { - logging.WithFields("projection", h.ProjectionName, "sequence", event.Sequence(), "instanceID", event.Aggregate().InstanceID).WithError(err).Warn("unable to process event in bulk") - return false, err - } - } - - return len(events) == int(eventsLimit), nil -} - -func (h *ProjectionHandler) push( - ctx context.Context, - update Update, - reduce Reduce, -) (err error) { - h.lockMu.Lock() - defer h.lockMu.Unlock() - - sort.Slice(h.stmts, func(i, j int) bool { - return h.stmts[i].Sequence < h.stmts[j].Sequence - }) - - h.stmts, err = update(ctx, h.stmts, reduce) - h.pushSet = len(h.stmts) > 0 - - if h.pushSet { - h.triggerShouldPush(h.retryFailedAfter) - return nil - } - - h.shouldPush.Stop() - - return err -} - -func (h *ProjectionHandler) shutdown() { - h.lockMu.Lock() - defer h.lockMu.Unlock() - h.Sub.Unsubscribe() - if !h.shouldBulk.Stop() { - <-h.shouldBulk.C - } - if !h.shouldPush.Stop() { - <-h.shouldPush.C - } - logging.New().Info("stop processing") -} diff --git a/internal/eventstore/handler/handler_projection_test.go b/internal/eventstore/handler/handler_projection_test.go index 6c1b337865..ada896b89e 100644 --- a/internal/eventstore/handler/handler_projection_test.go +++ b/internal/eventstore/handler/handler_projection_test.go @@ -3,12 +3,14 @@ package handler import ( "context" "errors" - "reflect" "sync" "testing" "time" - "github.com/golang/mock/gomock" + "github.com/stretchr/testify/assert" + + "github.com/zitadel/zitadel/internal/api/authz" + "github.com/zitadel/zitadel/internal/api/service" "github.com/zitadel/zitadel/internal/eventstore" "github.com/zitadel/zitadel/internal/eventstore/repository" es_repo_mock "github.com/zitadel/zitadel/internal/eventstore/repository/mock" @@ -25,34 +27,19 @@ var ( ErrUpdate = errors.New("update err") ) -func newTestStatement(aggType eventstore.AggregateType, seq, previousSeq uint64) *Statement { - return &Statement{ - AggregateType: aggType, - Sequence: seq, - PreviousSequence: previousSeq, - } -} - -func initTimer() *time.Timer { - t := time.NewTimer(0) - <-t.C - return t -} - -func TestProjectionHandler_processEvent(t *testing.T) { +func TestProjectionHandler_Trigger(t *testing.T) { type fields struct { - stmts []*Statement - pushSet bool - shouldPush *time.Timer + reduce Reduce + update Update + query SearchQuery + eventstore func(t *testing.T) *eventstore.Eventstore } type args struct { - ctx context.Context - event eventstore.Event - reduce Reduce + ctx context.Context + instances []string } type want struct { isErr func(err error) bool - stmts []*Statement } tests := []struct { name string @@ -61,104 +48,318 @@ func TestProjectionHandler_processEvent(t *testing.T) { want want }{ { - name: "reduce fails", - fields: fields{ - stmts: nil, - pushSet: false, - shouldPush: nil, + "query error", + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return nil + }, + query: testQuery(nil, 0, ErrQuery), }, - args: args{ + args{ + context.Background(), + nil, + }, + want{isErr: func(err error) bool { + return errors.Is(err, ErrQuery) + }}, + }, + { + "no events", + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectFilterEvents(), + ) + }, + query: testQuery( + eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes("test"). + Builder(), + 5, + nil), + }, + args{ + context.Background(), + nil, + }, + want{ + isErr: func(err error) bool { + return err == nil + }, + }, + }, + { + "process error", + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectFilterEvents( + &repository.Event{ + ID: "id", + Sequence: 1, + PreviousAggregateSequence: 0, + CreationDate: time.Now(), + Type: "test.added", + Version: "v1", + AggregateID: "testid", + AggregateType: "testAgg", + }, + ), + ) + }, + query: testQuery( + eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes("test"). + Builder(), + 5, + nil), reduce: testReduceErr(ErrReduce), }, - want: want{ + args{ + context.Background(), + nil, + }, + want{ isErr: func(err error) bool { return errors.Is(err, ErrReduce) }, - stmts: nil, }, }, { - name: "single new stmt", - fields: fields{ - stmts: nil, - pushSet: false, - shouldPush: initTimer(), + "process ok", + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectFilterEvents( + &repository.Event{ + ID: "id", + Sequence: 1, + PreviousAggregateSequence: 0, + CreationDate: time.Now(), + Type: "test.added", + Version: "v1", + AggregateID: "testid", + AggregateType: "testAgg", + }, + ), + ) + }, + query: testQuery( + eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes("test"). + Builder(), + 5, + nil), + reduce: testReduce(newTestStatement("testAgg", 1, 0)), + update: testUpdate(t, 1, 0, nil), }, - args: args{ - reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + args{ + context.Background(), + nil, }, - want: want{ + want{ isErr: func(err error) bool { return err == nil }, - stmts: []*Statement{ - newTestStatement("aggregate1", 1, 0), - }, }, }, { - name: "existing stmts", - fields: fields{ - stmts: []*Statement{ - newTestStatement("aggregate1", 1, 0), + "process limit exceeded ok", + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t). + ExpectFilterEvents( + &repository.Event{ + ID: "id", + Sequence: 1, + PreviousAggregateSequence: 0, + CreationDate: time.Now(), + Type: "test.added", + Version: "v1", + AggregateID: "testid", + AggregateType: "testAgg", + }, + ).ExpectFilterEvents(), + ) }, - pushSet: false, - shouldPush: initTimer(), + query: testQuery( + eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes("test"). + Builder(), + 1, + nil), + reduce: testReduce(newTestStatement("testAgg", 1, 0)), + update: testUpdate(t, 1, 0, nil), }, - args: args{ - reduce: testReduce(newTestStatement("aggregate1", 2, 1)), + args{ + context.Background(), + nil, }, - want: want{ + want{ isErr: func(err error) bool { return err == nil }, - stmts: []*Statement{ - newTestStatement("aggregate1", 1, 0), - newTestStatement("aggregate1", 2, 1), - }, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewProjectionHandler(ProjectionHandlerConfig{ - HandlerConfig: HandlerConfig{ - Eventstore: nil, + h := &ProjectionHandler{ + Handler: Handler{ + Eventstore: tt.fields.eventstore(t), }, - ProjectionName: "", - RequeueEvery: -1, - }, - nil, - nil, - nil, - ) - h.stmts = tt.fields.stmts - h.pushSet = tt.fields.pushSet - h.shouldPush = tt.fields.shouldPush + ProjectionName: "test", + reduce: tt.fields.reduce, + update: tt.fields.update, + searchQuery: tt.fields.query, + } - err := h.processEvent(tt.args.ctx, tt.args.event, tt.args.reduce) + err := h.Trigger(tt.args.ctx, tt.args.instances...) if !tt.want.isErr(err) { t.Errorf("unexpected error %v", err) } - if !reflect.DeepEqual(tt.want.stmts, h.stmts) { - t.Errorf("unexpected stmts\n want: %v\n got: %v", tt.want.stmts, h.stmts) - } }) } } -func TestProjectionHandler_fetchBulkStmts(t *testing.T) { +func TestProjectionHandler_Process(t *testing.T) { + type fields struct { + reduce Reduce + update Update + } type args struct { ctx context.Context - query SearchQuery - reduce Reduce + events []eventstore.Event } type want struct { - shouldLimitExeeded bool - isErr func(error) bool + isErr func(err error) bool + index int + } + tests := []struct { + name string + fields fields + args args + want want + }{ + { + name: "no events", + fields: fields{}, + args: args{}, + want: want{ + isErr: func(err error) bool { + return err == nil + }, + index: 0, + }, + }, + { + name: "reduce fails", + fields: fields{ + reduce: testReduceErr(ErrReduce), + }, + args: args{ + events: []eventstore.Event{newTestEvent("id", "description", nil)}, + }, + want: want{ + isErr: func(err error) bool { + return errors.Is(err, ErrReduce) + }, + index: -1, + }, + }, + { + name: "stmt failed", + fields: fields{ + reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + update: testUpdate(t, 1, -1, ErrSomeStmtsFailed), + }, + args: args{ + events: []eventstore.Event{newTestEvent("id", "description", nil)}, + }, + want: want{ + isErr: func(err error) bool { + return errors.Is(err, ErrSomeStmtsFailed) + }, + index: -1, + }, + }, + { + name: "stmt error", + fields: fields{ + reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + update: testUpdate(t, 1, -1, errors.New("some error")), + }, + args: args{ + events: []eventstore.Event{newTestEvent("id", "description", nil)}, + }, + want: want{ + isErr: func(err error) bool { + return err.Error() == "some error" + }, + index: -1, + }, + }, + { + name: "stmt succeeded", + fields: fields{ + reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + update: testUpdate(t, 1, 0, nil), + }, + args: args{ + events: []eventstore.Event{newTestEvent("id", "description", nil)}, + }, + want: want{ + isErr: func(err error) bool { + return err == nil + }, + index: 0, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + h := NewProjectionHandler( + context.Background(), + ProjectionHandlerConfig{ + HandlerConfig: HandlerConfig{ + Eventstore: nil, + }, + ProjectionName: "test", + RequeueEvery: -1, + }, + tt.fields.reduce, + tt.fields.update, + nil, + nil, + nil, + ) + + index, err := h.Process(tt.args.ctx, tt.args.events...) + if !tt.want.isErr(err) { + t.Errorf("unexpected error %v", err) + } + assert.Equal(t, tt.want.index, index) + }) + } +} + +func TestProjectionHandler_FetchEvents(t *testing.T) { + type args struct { + ctx context.Context + instanceIDs []string + } + type want struct { + limitExceeded bool + isErr func(error) bool } type fields struct { eventstore *eventstore.Eventstore + query SearchQuery } tests := []struct { name string @@ -169,13 +370,13 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { { name: "query returns err", args: args{ - ctx: context.Background(), - query: testQuery(nil, 0, ErrQuery), - reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + ctx: context.Background(), + }, + fields: fields{ + query: testQuery(nil, 0, ErrQuery), }, - fields: fields{}, want: want{ - shouldLimitExeeded: false, + limitExceeded: false, isErr: func(err error) bool { return errors.Is(err, ErrQuery) }, @@ -185,6 +386,11 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { name: "eventstore returns err", args: args{ ctx: context.Background(), + }, + fields: fields{ + eventstore: eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectFilterEventsError(ErrFilter), + ), query: testQuery( eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). AddQuery(). @@ -193,15 +399,9 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { 5, nil, ), - reduce: testReduce(newTestStatement("test", 1, 0)), - }, - fields: fields{ - eventstore: eventstore.NewEventstore( - es_repo_mock.NewRepo(t).ExpectFilterEventsError(ErrFilter), - ), }, want: want{ - shouldLimitExeeded: false, + limitExceeded: false, isErr: func(err error) bool { return errors.Is(err, ErrFilter) }, @@ -211,6 +411,11 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { name: "no events found", args: args{ ctx: context.Background(), + }, + fields: fields{ + eventstore: eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectFilterEvents(), + ), query: testQuery( eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). AddQuery(). @@ -219,15 +424,9 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { 5, nil, ), - reduce: testReduce(newTestStatement("test", 1, 0)), - }, - fields: fields{ - eventstore: eventstore.NewEventstore( - es_repo_mock.NewRepo(t).ExpectFilterEvents(), - ), }, want: want{ - shouldLimitExeeded: false, + limitExceeded: false, isErr: func(err error) bool { return err == nil }, @@ -237,6 +436,32 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { name: "found events smaller than limit", args: args{ ctx: context.Background(), + }, + fields: fields{ + eventstore: eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectFilterEvents( + &repository.Event{ + ID: "id", + Sequence: 1, + PreviousAggregateSequence: 0, + CreationDate: time.Now(), + Type: "test.added", + Version: "v1", + AggregateID: "testid", + AggregateType: "testAgg", + }, + &repository.Event{ + ID: "id", + Sequence: 2, + PreviousAggregateSequence: 1, + CreationDate: time.Now(), + Type: "test.changed", + Version: "v1", + AggregateID: "testid", + AggregateType: "testAgg", + }, + ), + ), query: testQuery( eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). AddQuery(). @@ -245,7 +470,18 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { 5, nil, ), - reduce: testReduce(newTestStatement("test", 1, 0)), + }, + want: want{ + limitExceeded: false, + isErr: func(err error) bool { + return err == nil + }, + }, + }, + { + name: "found events exceeds limit", + args: args{ + ctx: context.Background(), }, fields: fields{ eventstore: eventstore.NewEventstore( @@ -272,18 +508,6 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { }, ), ), - }, - want: want{ - shouldLimitExeeded: false, - isErr: func(err error) bool { - return err == nil - }, - }, - }, - { - name: "found events exeed limit", - args: args{ - ctx: context.Background(), query: testQuery( eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). AddQuery(). @@ -292,36 +516,9 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { 2, nil, ), - reduce: testReduce(newTestStatement("test", 1, 0)), - }, - fields: fields{ - eventstore: eventstore.NewEventstore( - es_repo_mock.NewRepo(t).ExpectFilterEvents( - &repository.Event{ - ID: "id", - Sequence: 1, - PreviousAggregateSequence: 0, - CreationDate: time.Now(), - Type: "test.added", - Version: "v1", - AggregateID: "testid", - AggregateType: "testAgg", - }, - &repository.Event{ - ID: "id", - Sequence: 2, - PreviousAggregateSequence: 1, - CreationDate: time.Now(), - Type: "test.changed", - Version: "v1", - AggregateID: "testid", - AggregateType: "testAgg", - }, - ), - ), }, want: want{ - shouldLimitExeeded: true, + limitExceeded: true, isErr: func(err error) bool { return err == nil }, @@ -331,116 +528,265 @@ func TestProjectionHandler_fetchBulkStmts(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { h := &ProjectionHandler{ - lockMu: sync.Mutex{}, Handler: Handler{ Eventstore: tt.fields.eventstore, }, - shouldPush: initTimer(), + searchQuery: tt.fields.query, } - gotLimitExeeded, err := h.fetchBulkStmts(tt.args.ctx, tt.args.query, tt.args.reduce) + _, limitExceeded, err := h.FetchEvents(tt.args.ctx, tt.args.instanceIDs...) if !tt.want.isErr(err) { t.Errorf("ProjectionHandler.prepareBulkStmts() error = %v", err) return } - if gotLimitExeeded != tt.want.shouldLimitExeeded { - t.Errorf("ProjectionHandler.prepareBulkStmts() = %v, want %v", gotLimitExeeded, tt.want.shouldLimitExeeded) + if limitExceeded != tt.want.limitExceeded { + t.Errorf("ProjectionHandler.prepareBulkStmts() = %v, want %v", limitExceeded, tt.want.limitExceeded) } }) } } -func TestProjectionHandler_push(t *testing.T) { - type fields struct { - stmts []*Statement - pushSet bool - } +func TestProjection_subscribe(t *testing.T) { type args struct { - ctx context.Context - previousLock time.Duration - update Update - reduce Reduce + ctx context.Context } - type want struct { - isErr func(err error) bool - minExecution time.Duration + type fields struct { + reduce Reduce + update Update + events []eventstore.Event } tests := []struct { name string - fields fields args args - want want + fields fields }{ { - name: "previous lock", - fields: fields{ - stmts: []*Statement{ - newTestStatement("aggregate1", 1, 0), - newTestStatement("aggregate1", 2, 1), + "panic", + args{ + ctx: context.Background(), + }, + fields{ + reduce: nil, + update: nil, + events: []eventstore.Event{ + newTestEvent("id", "", nil), }, - pushSet: true, - }, - args: args{ - ctx: context.Background(), - previousLock: 200 * time.Millisecond, - update: testUpdate(t, 2, nil), - reduce: testReduce(newTestStatement("aggregate1", 1, 0)), - }, - want: want{ - isErr: func(err error) bool { return err == nil }, - minExecution: 200 * time.Millisecond, }, }, { - name: "error in update", - fields: fields{ - stmts: []*Statement{ - newTestStatement("aggregate1", 1, 0), - newTestStatement("aggregate1", 2, 1), + "error", + args{ + ctx: context.Background(), + }, + fields{ + reduce: testReduceErr(ErrReduce), + update: nil, + events: []eventstore.Event{ + newTestEvent("id", "", nil), }, - pushSet: true, }, - args: args{ - ctx: context.Background(), - update: testUpdate(t, 2, errors.New("some error")), - reduce: testReduce(newTestStatement("test", 1, 0)), + }, + { + "not all statement", + args{ + ctx: context.Background(), }, - want: want{ - isErr: func(err error) bool { return err.Error() == "some error" }, + fields{ + reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + update: testUpdate(t, 1, 0, ErrSomeStmtsFailed), + events: []eventstore.Event{ + newTestEvent("id", "", nil), + }, + }, + }, + { + "single event ok", + args{ + ctx: context.Background(), + }, + fields{ + reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + update: testUpdate(t, 1, 1, nil), + events: []eventstore.Event{ + newTestEvent("id", "", nil), + }, + }, + }, + { + "multiple events ok", + args{ + ctx: context.Background(), + }, + fields{ + reduce: testReduce(newTestStatement("aggregate1", 1, 0)), + update: testUpdate(t, 2, 2, nil), + events: []eventstore.Event{ + newTestEvent("id", "", nil), + newTestEvent("id2", "", nil), + }, }, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - h := NewProjectionHandler(ProjectionHandlerConfig{ - HandlerConfig: HandlerConfig{}, + h := &ProjectionHandler{ + Handler: Handler{ + EventQueue: make(chan eventstore.Event, 10), + }, + reduce: tt.fields.reduce, + update: tt.fields.update, + } + ctx, cancel := context.WithCancel(tt.args.ctx) + go func() { + //changed go h.subscribe(ctx) to this to be able to ignore logs easily + t.Helper() + h.subscribe(ctx) + }() + for _, event := range tt.fields.events { + h.EventQueue <- event + } + time.Sleep(1 * time.Second) + cancel() + }) + } +} + +func TestProjection_schedule(t *testing.T) { + type args struct { + ctx context.Context + } + type fields struct { + reduce Reduce + update Update + eventstore func(t *testing.T) *eventstore.Eventstore + triggerProjection *time.Timer + lock *lockMock + unlock *unlockMock + query SearchQuery + } + type want struct { + locksCount int + lockCanceled bool + unlockCount int + } + tests := []struct { + name string + args args + fields fields + want want + }{ + { + "panic", + args{ + ctx: context.Background(), }, - nil, - nil, - nil, - ) - h.stmts = tt.fields.stmts - h.pushSet = tt.fields.pushSet - if tt.args.previousLock > 0 { - h.lockMu.Lock() - go func() { - <-time.After(tt.args.previousLock) - h.lockMu.Unlock() - }() + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return nil + }, + }, + want{}, + }, + { + "filter instance ids error", + args{ + ctx: context.Background(), + }, + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectInstanceIDsError(ErrFilter), + ) + }, + triggerProjection: time.NewTimer(0), + }, + want{ + locksCount: 0, + lockCanceled: false, + unlockCount: 0, + }, + }, + { + "lock error", + args{ + ctx: context.Background(), + }, + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectInstanceIDs("instanceID1"), + ) + }, + triggerProjection: time.NewTimer(0), + lock: &lockMock{ + errWait: 100 * time.Millisecond, + firstErr: ErrLock, + canceled: make(chan bool, 1), + }, + }, + want{ + locksCount: 1, + lockCanceled: true, + unlockCount: 0, + }, + }, + { + "trigger error", + args{ + ctx: context.Background(), + }, + fields{ + eventstore: func(t *testing.T) *eventstore.Eventstore { + return eventstore.NewEventstore( + es_repo_mock.NewRepo(t).ExpectInstanceIDs("instanceID1"), + ) + }, + triggerProjection: time.NewTimer(0), + lock: &lockMock{ + canceled: make(chan bool, 1), + firstErr: nil, + errWait: 100 * time.Millisecond, + }, + unlock: &unlockMock{}, + query: testQuery(nil, 0, ErrQuery), + }, + want{ + locksCount: 1, + lockCanceled: true, + unlockCount: 1, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + h := &ProjectionHandler{ + Handler: Handler{ + EventQueue: make(chan eventstore.Event, 10), + Eventstore: tt.fields.eventstore(t), + }, + reduce: tt.fields.reduce, + update: tt.fields.update, + searchQuery: tt.fields.query, + lock: tt.fields.lock.lock(), + unlock: tt.fields.unlock.unlock(), + triggerProjection: tt.fields.triggerProjection, + requeueAfter: 10 * time.Second, + concurrentInstances: 1, } - start := time.Now() - if err := h.push(tt.args.ctx, tt.args.update, tt.args.reduce); !tt.want.isErr(err) { - t.Errorf("ProjectionHandler.push() error = %v", err) + ctx, cancel := context.WithCancel(tt.args.ctx) + go func() { + //changed go h.schedule(ctx) to this to be able to ignore logs easily + t.Helper() + h.schedule(ctx) + }() + + time.Sleep(1 * time.Second) + if tt.fields.lock != nil { + tt.fields.lock.check(t, tt.want.locksCount, tt.want.lockCanceled) } - executionTime := time.Since(start) - if tt.want.minExecution.Truncate(executionTime) > 0 { - t.Errorf("expected execution time >= %v got %v", tt.want.minExecution, executionTime) - } - if h.pushSet { - t.Error("expected push set to be false") - } - if len(h.stmts) != 0 { - t.Errorf("expected stmts to be nil but was %v", h.stmts) + if tt.fields.unlock != nil { + tt.fields.unlock.check(t, tt.want.unlockCount) } + cancel() }) } } @@ -491,374 +837,51 @@ func Test_cancelOnErr(t *testing.T) { } } -func TestProjectionHandler_bulk(t *testing.T) { - type args struct { - ctx context.Context - executeBulk *executeBulkMock - lock *lockMock - unlock *unlockMock - } - type res struct { - lockCount int - lockCanceled bool - executeBulkCount int - executeBulkCanceled bool - unlockCount int - isErr func(error) bool - } - tests := []struct { - name string - args args - res res - }{ - { - name: "lock fails", - args: args{ - ctx: context.Background(), - executeBulk: &executeBulkMock{}, - lock: &lockMock{ - firstErr: ErrLock, - errWait: time.Duration(500 * time.Millisecond), - }, - unlock: &unlockMock{}, - }, - res: res{ - lockCount: 1, - executeBulkCount: 0, - unlockCount: 0, - isErr: func(err error) bool { - return errors.Is(err, ErrLock) - }, - }, - }, - { - name: "unlock fails", - args: args{ - ctx: context.Background(), - executeBulk: &executeBulkMock{}, - lock: &lockMock{ - err: nil, - errWait: time.Duration(500 * time.Millisecond), - }, - unlock: &unlockMock{ - err: ErrUnlock, - }, - }, - res: res{ - lockCount: 1, - executeBulkCount: 1, - unlockCount: 1, - isErr: func(err error) bool { - return errors.Is(err, ErrUnlock) - }, - }, - }, - { - name: "no error", - args: args{ - ctx: context.Background(), - executeBulk: &executeBulkMock{}, - lock: &lockMock{ - err: nil, - errWait: time.Duration(500 * time.Millisecond), - canceled: make(chan bool, 1), - }, - unlock: &unlockMock{ - err: nil, - }, - }, - res: res{ - lockCount: 1, - executeBulkCount: 1, - unlockCount: 1, - isErr: func(err error) bool { - return errors.Is(err, nil) - }, - }, - }, - { - name: "ctx canceled before lock", - args: args{ - ctx: canceledCtx(), - executeBulk: &executeBulkMock{}, - lock: &lockMock{ - err: nil, - errWait: time.Duration(500 * time.Millisecond), - canceled: make(chan bool, 1), - }, - unlock: &unlockMock{ - err: nil, - }, - }, - res: res{ - lockCount: 1, - lockCanceled: true, - executeBulkCount: 0, - unlockCount: 0, - isErr: func(err error) bool { - return errors.Is(err, nil) - }, - }, - }, - { - name: "2nd lock fails", - args: args{ - ctx: context.Background(), - executeBulk: &executeBulkMock{ - canceled: make(chan bool, 1), - waitForCancel: true, - }, - lock: &lockMock{ - firstErr: nil, - err: ErrLock, - errWait: time.Duration(100 * time.Millisecond), - canceled: make(chan bool, 1), - }, - unlock: &unlockMock{ - err: nil, - }, - }, - res: res{ - lockCount: 1, - lockCanceled: true, - executeBulkCount: 1, - unlockCount: 1, - isErr: func(err error) bool { - return errors.Is(err, nil) - }, - }, - }, - { - name: "bulk fails", - args: args{ - ctx: context.Background(), - executeBulk: &executeBulkMock{ - canceled: make(chan bool, 1), - err: ErrBulk, - waitForCancel: false, - }, - lock: &lockMock{ - firstErr: nil, - err: nil, - errWait: time.Duration(100 * time.Millisecond), - canceled: make(chan bool, 1), - }, - unlock: &unlockMock{ - err: nil, - }, - }, - res: res{ - lockCount: 1, - lockCanceled: true, - executeBulkCount: 1, - unlockCount: 1, - isErr: func(err error) bool { - return errors.Is(err, ErrBulk) - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - h := NewProjectionHandler(ProjectionHandlerConfig{ - HandlerConfig: HandlerConfig{}, - ProjectionName: "", - RequeueEvery: -1, - }, - tt.args.executeBulk.Reduce, - tt.args.executeBulk.Update, - tt.args.executeBulk.Query, - ) - h.Eventstore = tt.args.executeBulk.es(t) - err := h.bulk(tt.args.ctx, tt.args.lock.lock(), tt.args.unlock.unlock()) - if !tt.res.isErr(err) { - t.Errorf("unexpected error %v", err) - } - tt.args.lock.check(t, tt.res.lockCount, tt.res.lockCanceled) - tt.args.executeBulk.check(t, tt.res.executeBulkCount, tt.res.executeBulkCanceled) - tt.args.unlock.check(t, tt.res.unlockCount) - }) +func newTestStatement(aggType eventstore.AggregateType, seq, previousSeq uint64) *Statement { + return &Statement{ + AggregateType: aggType, + Sequence: seq, + PreviousSequence: previousSeq, } } -func TestProjectionHandler_prepareExecuteBulk(t *testing.T) { - type fields struct { - Handler Handler - SequenceTable string - stmts []*Statement - pushSet bool - shouldPush *time.Timer - } - type args struct { - ctx context.Context - query SearchQuery - reduce Reduce - update Update - } - type want struct { - isErr func(error) bool - } - tests := []struct { - name string - fields fields - args args - want want - }{ - { - name: "ctx done", - args: args{ - ctx: canceledCtx(), - }, - want: want{ - isErr: func(err error) bool { - return err == nil - }, - }, - }, - { - name: "fetch fails", - fields: fields{}, - args: args{ - query: testQuery(nil, 10, ErrNoProjection), - ctx: context.Background(), - }, - want: want{ - isErr: func(err error) bool { - return errors.Is(err, ErrNoProjection) - }, - }, - }, - { - name: "push fails", - fields: fields{ - Handler: NewHandler(HandlerConfig{ - eventstore.NewEventstore( - es_repo_mock.NewRepo(t).ExpectFilterEvents( - &repository.Event{ - ID: "id2", - Sequence: 1, - PreviousAggregateSequence: 0, - CreationDate: time.Now(), - Type: "test.added", - Version: "v1", - AggregateID: "testid", - AggregateType: "testAgg", - }, - &repository.Event{ - ID: "id2", - Sequence: 2, - PreviousAggregateSequence: 1, - CreationDate: time.Now(), - Type: "test.changed", - Version: "v1", - AggregateID: "testid", - AggregateType: "testAgg", - }, - ), - ), - }, - ), - shouldPush: initTimer(), - }, - args: args{ - update: testUpdate(t, 2, ErrUpdate), - query: testQuery( - eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). - AddQuery(). - AggregateTypes("testAgg"). - Builder(), - 10, - nil, - ), - reduce: testReduce( - newTestStatement("aggregate1", 2, 1), - ), - ctx: context.Background(), - }, - want: want{ - isErr: func(err error) bool { - return errors.Is(err, ErrUpdate) - }, - }, - }, - { - name: "success", - fields: fields{ - Handler: NewHandler(HandlerConfig{ - eventstore.NewEventstore( - es_repo_mock.NewRepo(t).ExpectFilterEvents( - &repository.Event{ - ID: "id2", - Sequence: 1, - PreviousAggregateSequence: 0, - CreationDate: time.Now(), - Type: "test.added", - Version: "v1", - AggregateID: "testid", - AggregateType: "testAgg", - }, - &repository.Event{ - ID: "id2", - Sequence: 2, - PreviousAggregateSequence: 1, - CreationDate: time.Now(), - Type: "test.changed", - Version: "v1", - AggregateID: "testid", - AggregateType: "testAgg", - }, - ), - ), - }, - ), - shouldPush: initTimer(), - }, - args: args{ - update: testUpdate(t, 2, nil), - query: testQuery( - eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). - AddQuery(). - AggregateTypes("testAgg"). - Builder(), - 10, - nil, - ), - reduce: testReduce( - newTestStatement("aggregate1", 0, 1), - ), - ctx: context.Background(), - }, - want: want{ - isErr: func(err error) bool { - return errors.Is(err, nil) - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - h := &ProjectionHandler{ - Handler: tt.fields.Handler, - lockMu: sync.Mutex{}, - stmts: tt.fields.stmts, - pushSet: tt.fields.pushSet, - shouldPush: tt.fields.shouldPush, - } - execBulk := h.prepareExecuteBulk(tt.args.query, tt.args.reduce, tt.args.update) - err := execBulk(tt.args.ctx) - if !tt.want.isErr(err) { - t.Errorf("unexpected err %v", err) - } - }) +// testEvent implements the Event interface +type testEvent struct { + eventstore.BaseEvent + + description string + data func() interface{} +} + +func newTestEvent(id, description string, data func() interface{}) *testEvent { + return &testEvent{ + description: description, + data: data, + BaseEvent: *eventstore.NewBaseEventForPush( + service.WithService(authz.NewMockContext("instanceID", "resourceOwner", "editorUser"), "editorService"), + eventstore.NewAggregate(authz.NewMockContext("zitadel", "caos", "adlerhurst"), id, "test.aggregate", "v1"), + "test.event", + ), } } -func testUpdate(t *testing.T, expectedStmtCount int, returnedErr error) Update { - return func(ctx context.Context, stmts []*Statement, reduce Reduce) ([]*Statement, error) { +func (e *testEvent) Data() interface{} { + if e.data == nil { + return nil + } + return e.data() +} + +func (e *testEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint { + return nil +} + +func testUpdate(t *testing.T, expectedStmtCount, returnedIndex int, returnedErr error) Update { + return func(ctx context.Context, stmts []*Statement, reduce Reduce) (int, error) { if expectedStmtCount != len(stmts) { t.Errorf("expected %d stmts got %d", expectedStmtCount, len(stmts)) } - return []*Statement{}, returnedErr + return returnedIndex, returnedErr } } @@ -875,70 +898,15 @@ func testReduceErr(err error) Reduce { } func testQuery(query *eventstore.SearchQueryBuilder, limit uint64, err error) SearchQuery { - return func(ctx context.Context) (*eventstore.SearchQueryBuilder, uint64, error) { + return func(ctx context.Context, instanceIDs []string) (*eventstore.SearchQueryBuilder, uint64, error) { return query, limit, err } } -type executeBulkMock struct { - callCount int - err error - waitForCancel bool - canceled chan bool -} - -func (m *executeBulkMock) Query(context.Context) (*eventstore.SearchQueryBuilder, uint64, error) { - m.callCount++ - if m.err != nil { - return nil, 0, m.err - } - return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).AddQuery().SequenceGreater(0).Builder(), 0, nil -} -func (m *executeBulkMock) Reduce(eventstore.Event) (*Statement, error) { - return nil, nil -} -func (m *executeBulkMock) Update(ctx context.Context, stmts []*Statement, reduce Reduce) (unexecutedStmts []*Statement, err error) { - return nil, nil -} - -func (m *executeBulkMock) es(t *testing.T) *eventstore.Eventstore { - mock := es_repo_mock.NewRepo(t) - mock.EXPECT().Filter(gomock.Any(), gomock.Any()).AnyTimes().Return(nil, nil) - return eventstore.NewEventstore(mock) -} - -func (m *executeBulkMock) executeBulk() executeBulk { - return func(ctx context.Context) error { - m.callCount++ - if m.waitForCancel { - select { - case <-ctx.Done(): - m.canceled <- true - return nil - case <-time.After(500 * time.Millisecond): - } - } - return m.err - } -} - -func (m *executeBulkMock) check(t *testing.T, callCount int, shouldBeCalled bool) { - t.Helper() - if callCount != m.callCount { - t.Errorf("wrong call count: expected %v got: %v", m.callCount, callCount) - } - if shouldBeCalled { - select { - case <-m.canceled: - default: - t.Error("bulk should be canceled but wasn't") - } - } -} - type lockMock struct { callCount int canceled chan bool + mu sync.Mutex firstErr error err error @@ -946,7 +914,9 @@ type lockMock struct { } func (m *lockMock) lock() Lock { - return func(ctx context.Context, _ time.Duration, _ string) <-chan error { + return func(ctx context.Context, _ time.Duration, _ ...string) <-chan error { + m.mu.Lock() + defer m.mu.Unlock() m.callCount++ errs := make(chan error) go func() { @@ -971,6 +941,8 @@ func (m *lockMock) lock() Lock { func (m *lockMock) check(t *testing.T, callCount int, shouldBeCanceled bool) { t.Helper() + m.mu.Lock() + defer m.mu.Unlock() if callCount != m.callCount { t.Errorf("wrong call count: expected %v got: %v", callCount, m.callCount) } @@ -986,10 +958,13 @@ func (m *lockMock) check(t *testing.T, callCount int, shouldBeCanceled bool) { type unlockMock struct { callCount int err error + mu sync.Mutex } func (m *unlockMock) unlock() Unlock { - return func(instanceID string) error { + return func(...string) error { + m.mu.Lock() + defer m.mu.Unlock() m.callCount++ return m.err } @@ -997,6 +972,8 @@ func (m *unlockMock) unlock() Unlock { func (m *unlockMock) check(t *testing.T, callCount int) { t.Helper() + m.mu.Lock() + defer m.mu.Unlock() if callCount != m.callCount { t.Errorf("wrong call count: expected %v got: %v", callCount, m.callCount) } diff --git a/internal/eventstore/repository/mock/repository.mock.go b/internal/eventstore/repository/mock/repository.mock.go index e1cf57f792..663e3a49fe 100644 --- a/internal/eventstore/repository/mock/repository.mock.go +++ b/internal/eventstore/repository/mock/repository.mock.go @@ -8,8 +8,8 @@ import ( context "context" reflect "reflect" - repository "github.com/zitadel/zitadel/internal/eventstore/repository" gomock "github.com/golang/mock/gomock" + repository "github.com/zitadel/zitadel/internal/eventstore/repository" ) // MockRepository is a mock of Repository interface. @@ -78,6 +78,21 @@ func (mr *MockRepositoryMockRecorder) Health(arg0 interface{}) *gomock.Call { return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockRepository)(nil).Health), arg0) } +// InstanceIDs mocks base method. +func (m *MockRepository) InstanceIDs(arg0 context.Context, arg1 *repository.SearchQuery) ([]string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "InstanceIDs", arg0, arg1) + ret0, _ := ret[0].([]string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// InstanceIDs indicates an expected call of InstanceIDs. +func (mr *MockRepositoryMockRecorder) InstanceIDs(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InstanceIDs", reflect.TypeOf((*MockRepository)(nil).InstanceIDs), arg0, arg1) +} + // LatestSequence mocks base method. func (m *MockRepository) LatestSequence(arg0 context.Context, arg1 *repository.SearchQuery) (uint64, error) { m.ctrl.T.Helper() diff --git a/internal/eventstore/repository/mock/repository.mock.impl.go b/internal/eventstore/repository/mock/repository.mock.impl.go index 99b09ceaf8..18032a94f5 100644 --- a/internal/eventstore/repository/mock/repository.mock.impl.go +++ b/internal/eventstore/repository/mock/repository.mock.impl.go @@ -29,6 +29,16 @@ func (m *MockRepository) ExpectFilterEventsError(err error) *MockRepository { return m } +func (m *MockRepository) ExpectInstanceIDs(instanceIDs ...string) *MockRepository { + m.EXPECT().InstanceIDs(gomock.Any(), gomock.Any()).Return(instanceIDs, nil) + return m +} + +func (m *MockRepository) ExpectInstanceIDsError(err error) *MockRepository { + m.EXPECT().InstanceIDs(gomock.Any(), gomock.Any()).Return(nil, err) + return m +} + func (m *MockRepository) ExpectPush(expectedEvents []*repository.Event, expectedUniqueConstraints ...*repository.UniqueConstraint) *MockRepository { m.EXPECT().Push(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn( func(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error { diff --git a/internal/eventstore/repository/repository.go b/internal/eventstore/repository/repository.go index afbb4d2fff..964b515257 100644 --- a/internal/eventstore/repository/repository.go +++ b/internal/eventstore/repository/repository.go @@ -8,14 +8,16 @@ import ( type Repository interface { //Health checks if the connection to the storage is available Health(ctx context.Context) error - // PushEvents adds all events of the given aggregates to the eventstreams of the aggregates. + // Push adds all events of the given aggregates to the event streams of the aggregates. // if unique constraints are pushed, they will be added to the unique table for checking unique constraint violations // This call is transaction save. The transaction will be rolled back if one event fails Push(ctx context.Context, events []*Event, uniqueConstraints ...*UniqueConstraint) error // Filter returns all events matching the given search query Filter(ctx context.Context, searchQuery *SearchQuery) (events []*Event, err error) - //LatestSequence returns the latests sequence found by the the search query + //LatestSequence returns the latest sequence found by the search query LatestSequence(ctx context.Context, queryFactory *SearchQuery) (uint64, error) + //InstanceIDs returns the instance ids found by the search query + InstanceIDs(ctx context.Context, queryFactory *SearchQuery) ([]string, error) //CreateInstance creates a new sequence for the given instance CreateInstance(ctx context.Context, instanceID string) error } diff --git a/internal/eventstore/repository/search_query.go b/internal/eventstore/repository/search_query.go index cf342c804b..d517e7e59e 100644 --- a/internal/eventstore/repository/search_query.go +++ b/internal/eventstore/repository/search_query.go @@ -23,6 +23,8 @@ const ( ColumnsEvent = iota + 1 //ColumnsMaxSequence represents the latest sequence of the filtered events ColumnsMaxSequence + // ColumnsInstanceIDs represents the instance ids of the filtered events + ColumnsInstanceIDs columnsCount ) diff --git a/internal/eventstore/repository/sql/crdb.go b/internal/eventstore/repository/sql/crdb.go index e352272539..28c466f9b5 100644 --- a/internal/eventstore/repository/sql/crdb.go +++ b/internal/eventstore/repository/sql/crdb.go @@ -218,7 +218,7 @@ func (db *CRDB) Filter(ctx context.Context, searchQuery *repository.SearchQuery) return events, nil } -//LatestSequence returns the latests sequence found by the the search query +//LatestSequence returns the latest sequence found by the search query func (db *CRDB) LatestSequence(ctx context.Context, searchQuery *repository.SearchQuery) (uint64, error) { var seq Sequence err := query(ctx, db, searchQuery, &seq) @@ -228,6 +228,16 @@ func (db *CRDB) LatestSequence(ctx context.Context, searchQuery *repository.Sear return uint64(seq), nil } +//InstanceIDs returns the instance ids found by the search query +func (db *CRDB) InstanceIDs(ctx context.Context, searchQuery *repository.SearchQuery) ([]string, error) { + var ids []string + err := query(ctx, db, searchQuery, &ids) + if err != nil { + return nil, err + } + return ids, nil +} + func (db *CRDB) db() *sql.DB { return db.client } @@ -262,6 +272,10 @@ func (db *CRDB) maxSequenceQuery() string { return "SELECT MAX(event_sequence) FROM eventstore.events" } +func (db *CRDB) instanceIDsQuery() string { + return "SELECT DISTINCT instance_id FROM eventstore.events" +} + func (db *CRDB) columnName(col repository.Field) string { switch col { case repository.FieldAggregateID: diff --git a/internal/eventstore/repository/sql/query.go b/internal/eventstore/repository/sql/query.go index de78f20686..b0977654cb 100644 --- a/internal/eventstore/repository/sql/query.go +++ b/internal/eventstore/repository/sql/query.go @@ -22,6 +22,7 @@ type querier interface { placeholder(query string) string eventQuery() string maxSequenceQuery() string + instanceIDsQuery() string db() *sql.DB orderByEventSequence(desc bool) string } @@ -36,7 +37,7 @@ func query(ctx context.Context, criteria querier, searchQuery *repository.Search } query += where - if searchQuery.Columns != repository.ColumnsMaxSequence { + if searchQuery.Columns == repository.ColumnsEvent { query += criteria.orderByEventSequence(searchQuery.Desc) } @@ -76,6 +77,8 @@ func prepareColumns(criteria querier, columns repository.Columns) (string, func( switch columns { case repository.ColumnsMaxSequence: return criteria.maxSequenceQuery(), maxSequenceScanner + case repository.ColumnsInstanceIDs: + return criteria.instanceIDsQuery(), instanceIDsScanner case repository.ColumnsEvent: return criteria.eventQuery(), eventsScanner default: @@ -95,6 +98,22 @@ func maxSequenceScanner(row scan, dest interface{}) (err error) { return z_errors.ThrowInternal(err, "SQL-bN5xg", "something went wrong") } +func instanceIDsScanner(scanner scan, dest interface{}) (err error) { + ids, ok := dest.(*[]string) + if !ok { + return z_errors.ThrowInvalidArgument(nil, "SQL-Begh2", "type must be an array of string") + } + var id string + err = scanner(&id) + if err != nil { + logging.WithError(err).Warn("unable to scan row") + return z_errors.ThrowInternal(err, "SQL-DEFGe", "unable to scan row") + } + *ids = append(*ids, id) + + return nil +} + func eventsScanner(scanner scan, dest interface{}) (err error) { events, ok := dest.(*[]*repository.Event) if !ok { @@ -157,7 +176,7 @@ func prepareCondition(criteria querier, filters [][]*repository.Filter) (clause var err error value, err = json.Marshal(value) if err != nil { - logging.New().WithError(err).Warn("unable to marshal search value") + logging.WithError(err).Warn("unable to marshal search value") continue } } diff --git a/internal/eventstore/search_query.go b/internal/eventstore/search_query.go index 4a3fb486f5..c697cf9236 100644 --- a/internal/eventstore/search_query.go +++ b/internal/eventstore/search_query.go @@ -39,6 +39,8 @@ const ( ColumnsEvent Columns = repository.ColumnsEvent // ColumnsMaxSequence represents the latest sequence of the filtered events ColumnsMaxSequence Columns = repository.ColumnsMaxSequence + // ColumnsInstanceIDs represents the instance ids of the filtered events + ColumnsInstanceIDs Columns = repository.ColumnsInstanceIDs ) // AggregateType is the object name @@ -278,6 +280,9 @@ func (query *SearchQuery) eventTypeFilter() *repository.Filter { } func (query *SearchQuery) aggregateTypeFilter() *repository.Filter { + if len(query.aggregateTypes) < 1 { + return nil + } if len(query.aggregateTypes) == 1 { return repository.NewFilter(repository.FieldAggregateType, repository.AggregateType(query.aggregateTypes[0]), repository.OperationEquals) } diff --git a/internal/eventstore/v1/eventstore.go b/internal/eventstore/v1/eventstore.go index c7f62420f9..53d3a5a8a8 100644 --- a/internal/eventstore/v1/eventstore.go +++ b/internal/eventstore/v1/eventstore.go @@ -13,6 +13,7 @@ type Eventstore interface { Health(ctx context.Context) error FilterEvents(ctx context.Context, searchQuery *models.SearchQuery) (events []*models.Event, err error) Subscribe(aggregates ...models.AggregateType) *Subscription + InstanceIDs(ctx context.Context, searchQuery *models.SearchQuery) ([]string, error) } var _ Eventstore = (*eventstore)(nil) @@ -37,3 +38,10 @@ func (es *eventstore) FilterEvents(ctx context.Context, searchQuery *models.Sear func (es *eventstore) Health(ctx context.Context) error { return es.repo.Health(ctx) } + +func (es *eventstore) InstanceIDs(ctx context.Context, searchQuery *models.SearchQuery) ([]string, error) { + if err := searchQuery.Validate(); err != nil { + return nil, err + } + return es.repo.InstanceIDs(ctx, models.FactoryFromSearchQuery(searchQuery)) +} diff --git a/internal/eventstore/v1/internal/repository/repository.go b/internal/eventstore/v1/internal/repository/repository.go index 31fa4a2896..8f7d1e4697 100644 --- a/internal/eventstore/v1/internal/repository/repository.go +++ b/internal/eventstore/v1/internal/repository/repository.go @@ -11,6 +11,8 @@ type Repository interface { // Filter returns all events matching the given search query Filter(ctx context.Context, searchQuery *models.SearchQueryFactory) (events []*models.Event, err error) - //LatestSequence returns the latests sequence found by the the search query + //LatestSequence returns the latest sequence found by the search query LatestSequence(ctx context.Context, queryFactory *models.SearchQueryFactory) (uint64, error) + //InstanceIDs returns the instance ids found by the search query + InstanceIDs(ctx context.Context, queryFactory *models.SearchQueryFactory) ([]string, error) } diff --git a/internal/eventstore/v1/internal/repository/sql/filter.go b/internal/eventstore/v1/internal/repository/sql/filter.go index fa9f4091d0..ab339e00b6 100644 --- a/internal/eventstore/v1/internal/repository/sql/filter.go +++ b/internal/eventstore/v1/internal/repository/sql/filter.go @@ -5,6 +5,7 @@ import ( "database/sql" "github.com/zitadel/logging" + "github.com/zitadel/zitadel/internal/errors" es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models" "github.com/zitadel/zitadel/internal/telemetry/tracing" @@ -60,3 +61,31 @@ func (db *SQL) LatestSequence(ctx context.Context, queryFactory *es_models.Searc } return uint64(*sequence), nil } + +func (db *SQL) InstanceIDs(ctx context.Context, queryFactory *es_models.SearchQueryFactory) ([]string, error) { + query, _, values, rowScanner := buildQuery(queryFactory) + if query == "" { + return nil, errors.ThrowInvalidArgument(nil, "SQL-Sfwg2", "invalid query factory") + } + + rows, err := db.client.Query(query, values...) + if err != nil { + logging.New().WithError(err).Info("query failed") + return nil, errors.ThrowInternal(err, "SQL-Sfg3r", "unable to filter instance ids") + } + defer rows.Close() + + ids := make([]string, 0) + + for rows.Next() { + var id string + err := rowScanner(rows.Scan, &id) + if err != nil { + return nil, err + } + + ids = append(ids, id) + } + + return ids, nil +} diff --git a/internal/eventstore/v1/internal/repository/sql/query.go b/internal/eventstore/v1/internal/repository/sql/query.go index a4d36596ad..c8251d64e8 100644 --- a/internal/eventstore/v1/internal/repository/sql/query.go +++ b/internal/eventstore/v1/internal/repository/sql/query.go @@ -44,7 +44,7 @@ func buildQuery(queryFactory *es_models.SearchQueryFactory) (query string, limit } query += where - if searchQuery.Columns != es_models.Columns_Max_Sequence { + if searchQuery.Columns == es_models.Columns_Event { query += " ORDER BY event_sequence" if searchQuery.Desc { query += " DESC" @@ -104,6 +104,19 @@ func prepareColumns(columns es_models.Columns) (string, func(s scan, dest interf } return z_errors.ThrowInternal(err, "SQL-bN5xg", "something went wrong") } + case es_models.Columns_InstanceIDs: + return "SELECT DISTINCT instance_id FROM eventstore.events", func(row scan, dest interface{}) (err error) { + instanceID, ok := dest.(*string) + if !ok { + return z_errors.ThrowInvalidArgument(nil, "SQL-Fef5h", "type must be *string]") + } + err = row(instanceID) + if err != nil { + logging.New().WithError(err).Warn("unable to scan row") + return z_errors.ThrowInternal(err, "SQL-SFef3", "unable to scan row") + } + return nil + } case es_models.Columns_Event: return selectStmt, func(row scan, dest interface{}) (err error) { event, ok := dest.(*es_models.Event) diff --git a/internal/eventstore/v1/models/search_query.go b/internal/eventstore/v1/models/search_query.go index e2a8c90420..7f0179ee9e 100644 --- a/internal/eventstore/v1/models/search_query.go +++ b/internal/eventstore/v1/models/search_query.go @@ -41,6 +41,7 @@ type Columns int32 const ( Columns_Event = iota Columns_Max_Sequence + Columns_InstanceIDs //insert new columns-types before this columnsCount because count is needed for validation columnsCount ) @@ -48,7 +49,7 @@ const ( //FactoryFromSearchQuery is deprecated because it's for migration purposes. use NewSearchQueryFactory func FactoryFromSearchQuery(q *SearchQuery) *SearchQueryFactory { factory := &SearchQueryFactory{ - columns: Columns_Event, + columns: q.Columns, desc: q.Desc, limit: q.Limit, queries: make([]*query, len(q.Queries)), @@ -232,6 +233,9 @@ func (q *query) eventTypeFilter() *Filter { } func (q *query) aggregateTypeFilter() *Filter { + if len(q.aggregateTypes) < 1 { + return nil + } if len(q.aggregateTypes) == 1 { return NewFilter(Field_AggregateType, q.aggregateTypes[0], Operation_Equals) } diff --git a/internal/eventstore/v1/models/search_query_old.go b/internal/eventstore/v1/models/search_query_old.go index 08d81343af..eed8da3ce7 100644 --- a/internal/eventstore/v1/models/search_query_old.go +++ b/internal/eventstore/v1/models/search_query_old.go @@ -8,6 +8,7 @@ import ( //SearchQuery is deprecated. Use SearchQueryFactory type SearchQuery struct { + Columns Columns Limit uint64 Desc bool Filters []*Filter @@ -27,6 +28,11 @@ func NewSearchQuery() *SearchQuery { } } +func (q *SearchQuery) SetColumn(columns Columns) *SearchQuery { + q.Columns = columns + return q +} + func (q *SearchQuery) AddQuery() *Query { query := &Query{ searchQuery: q, diff --git a/internal/eventstore/v1/query/handler.go b/internal/eventstore/v1/query/handler.go index 7118e7bc2f..a60709832b 100755 --- a/internal/eventstore/v1/query/handler.go +++ b/internal/eventstore/v1/query/handler.go @@ -2,9 +2,9 @@ package query import ( "context" + "runtime/debug" "time" - "github.com/getsentry/sentry-go" "github.com/zitadel/logging" v1 "github.com/zitadel/zitadel/internal/eventstore/v1" @@ -17,7 +17,7 @@ const ( type Handler interface { ViewModel() string - EventQuery() (*models.SearchQuery, error) + EventQuery(instanceIDs ...string) (*models.SearchQuery, error) Reduce(*models.Event) error OnError(event *models.Event, err error) error OnSuccess() error @@ -37,14 +37,13 @@ func ReduceEvent(handler Handler, event *models.Event) { err := recover() if err != nil { - sentry.CurrentHub().Recover(err) handler.Subscription().Unsubscribe() - logging.WithFields("HANDL-SAFe1").Errorf("reduce panicked: %v", err) + logging.WithFields("cause", err, "stack", string(debug.Stack())).Error("reduce panicked") } }() currentSequence, err := handler.CurrentSequence(event.InstanceID) if err != nil { - logging.New().WithError(err).Warn("unable to get current sequence") + logging.WithError(err).Warn("unable to get current sequence") return } @@ -58,14 +57,14 @@ func ReduceEvent(handler Handler, event *models.Event) { unprocessedEvents, err := handler.Eventstore().FilterEvents(context.Background(), searchQuery) if err != nil { - logging.WithFields("HANDL-L6YH1", "sequence", event.Sequence).Warn("filter failed") + logging.WithFields("sequence", event.Sequence).Warn("filter failed") return } for _, unprocessedEvent := range unprocessedEvents { currentSequence, err := handler.CurrentSequence(unprocessedEvent.InstanceID) if err != nil { - logging.Log("HANDL-BmpkC").WithError(err).Warn("unable to get current sequence") + logging.WithError(err).Warn("unable to get current sequence") return } if unprocessedEvent.Sequence < currentSequence { @@ -78,12 +77,12 @@ func ReduceEvent(handler Handler, event *models.Event) { } err = handler.Reduce(unprocessedEvent) - logging.WithFields("HANDL-V42TI", "sequence", unprocessedEvent.Sequence).OnError(err).Warn("reduce failed") + logging.WithFields("sequence", unprocessedEvent.Sequence).OnError(err).Warn("reduce failed") } if len(unprocessedEvents) == eventLimit { - logging.WithFields("QUERY-BSqe9", "sequence", event.Sequence).Warn("didnt process event") + logging.WithFields("sequence", event.Sequence).Warn("didnt process event") return } err = handler.Reduce(event) - logging.WithFields("HANDL-wQDL2", "sequence", event.Sequence).OnError(err).Warn("reduce failed") + logging.WithFields("sequence", event.Sequence).OnError(err).Warn("reduce failed") } diff --git a/internal/eventstore/v1/spooler/config.go b/internal/eventstore/v1/spooler/config.go index eb96d9e619..04f5b7e659 100644 --- a/internal/eventstore/v1/spooler/config.go +++ b/internal/eventstore/v1/spooler/config.go @@ -11,10 +11,11 @@ import ( ) type Config struct { - Eventstore v1.Eventstore - Locker Locker - ViewHandlers []query.Handler - ConcurrentWorkers int + Eventstore v1.Eventstore + Locker Locker + ViewHandlers []query.Handler + ConcurrentWorkers int + ConcurrentInstances int } func (c *Config) New() *Spooler { @@ -27,11 +28,12 @@ func (c *Config) New() *Spooler { }) return &Spooler{ - handlers: c.ViewHandlers, - lockID: lockID, - eventstore: c.Eventstore, - locker: c.Locker, - queue: make(chan *spooledHandler, len(c.ViewHandlers)), - workers: c.ConcurrentWorkers, + handlers: c.ViewHandlers, + lockID: lockID, + eventstore: c.Eventstore, + locker: c.Locker, + queue: make(chan *spooledHandler, len(c.ViewHandlers)), + workers: c.ConcurrentWorkers, + concurrentInstances: c.ConcurrentInstances, } } diff --git a/internal/eventstore/v1/spooler/spooler.go b/internal/eventstore/v1/spooler/spooler.go index 5a244cc80a..9233b10391 100644 --- a/internal/eventstore/v1/spooler/spooler.go +++ b/internal/eventstore/v1/spooler/spooler.go @@ -2,11 +2,11 @@ package spooler import ( "context" + "runtime/debug" "strconv" "sync" "time" - "github.com/getsentry/sentry-go" "github.com/zitadel/logging" v1 "github.com/zitadel/zitadel/internal/eventstore/v1" @@ -19,12 +19,13 @@ import ( const systemID = "system" type Spooler struct { - handlers []query.Handler - locker Locker - lockID string - eventstore v1.Eventstore - workers int - queue chan *spooledHandler + handlers []query.Handler + locker Locker + lockID string + eventstore v1.Eventstore + workers int + queue chan *spooledHandler + concurrentInstances int } type Locker interface { @@ -33,9 +34,10 @@ type Locker interface { type spooledHandler struct { query.Handler - locker Locker - queuedAt time.Time - eventstore v1.Eventstore + locker Locker + queuedAt time.Time + eventstore v1.Eventstore + concurrentInstances int } func (s *Spooler) Start() { @@ -55,7 +57,7 @@ func (s *Spooler) Start() { } go func() { for _, handler := range s.handlers { - s.queue <- &spooledHandler{Handler: handler, locker: s.locker, queuedAt: time.Now(), eventstore: s.eventstore} + s.queue <- &spooledHandler{Handler: handler, locker: s.locker, queuedAt: time.Now(), eventstore: s.eventstore, concurrentInstances: s.concurrentInstances} } }() } @@ -73,7 +75,7 @@ func (s *spooledHandler) load(workerID string) { err := recover() if err != nil { - sentry.CurrentHub().Recover(err) + logging.WithFields("cause", err, "stack", string(debug.Stack())).Error("reduce panicked") } }() ctx, cancel := context.WithCancel(context.Background()) @@ -82,29 +84,50 @@ func (s *spooledHandler) load(workerID string) { if <-hasLocked { for { - events, err := s.query(ctx) + ids, err := s.eventstore.InstanceIDs(ctx, models.NewSearchQuery().SetColumn(models.Columns_InstanceIDs).AddQuery().ExcludedInstanceIDsFilter("").SearchQuery()) if err != nil { errs <- err break } - err = s.process(ctx, events, workerID) - if err != nil { - errs <- err - break - } - if uint64(len(events)) < s.QueryLimit() { - // no more events to process - // stop chan - if ctx.Err() == nil { - errs <- nil + for i := 0; i < len(ids); i = i + s.concurrentInstances { + max := i + s.concurrentInstances + if max > len(ids) { + max = len(ids) + } + err = s.processInstances(ctx, workerID, ids[i:max]...) + if err != nil { + errs <- err } - break } + if ctx.Err() == nil { + errs <- nil + } + break } } <-ctx.Done() } +func (s *spooledHandler) processInstances(ctx context.Context, workerID string, ids ...string) error { + for { + events, err := s.query(ctx, ids...) + if err != nil { + return err + } + if len(events) == 0 { + return nil + } + err = s.process(ctx, events, workerID) + if err != nil { + return err + } + if uint64(len(events)) < s.QueryLimit() { + // no more events to process + return nil + } + } +} + func (s *spooledHandler) awaitError(cancel func(), errs chan error, workerID string) { select { case err := <-errs: @@ -135,8 +158,8 @@ func (s *spooledHandler) process(ctx context.Context, events []*models.Event, wo return err } -func (s *spooledHandler) query(ctx context.Context) ([]*models.Event, error) { - query, err := s.EventQuery() +func (s *spooledHandler) query(ctx context.Context, instanceIDs ...string) ([]*models.Event, error) { + query, err := s.EventQuery(instanceIDs...) if err != nil { return nil, err } diff --git a/internal/eventstore/v1/spooler/spooler_test.go b/internal/eventstore/v1/spooler/spooler_test.go index 57934fba60..e971812296 100644 --- a/internal/eventstore/v1/spooler/spooler_test.go +++ b/internal/eventstore/v1/spooler/spooler_test.go @@ -47,7 +47,7 @@ func (h *testHandler) Subscription() *v1.Subscription { return nil } -func (h *testHandler) EventQuery() (*models.SearchQuery, error) { +func (h *testHandler) EventQuery(instanceIDs ...string) (*models.SearchQuery, error) { if h.queryError != nil { return nil, h.queryError } @@ -111,6 +111,9 @@ func (es *eventstoreStub) PushAggregates(ctx context.Context, in ...*models.Aggr func (es *eventstoreStub) LatestSequence(ctx context.Context, in *models.SearchQueryFactory) (uint64, error) { return 0, nil } +func (es *eventstoreStub) InstanceIDs(ctx context.Context, in *models.SearchQuery) ([]string, error) { + return nil, nil +} func (es *eventstoreStub) V2() *eventstore.Eventstore { return nil } diff --git a/internal/query/app.go b/internal/query/app.go index a6afd7e1dd..063c25b3bd 100644 --- a/internal/query/app.go +++ b/internal/query/app.go @@ -208,7 +208,7 @@ var ( func (q *Queries) AppByProjectAndAppID(ctx context.Context, shouldTriggerBulk bool, projectID, appID string) (*App, error) { if shouldTriggerBulk { - projection.AppProjection.TriggerBulk(ctx) + projection.AppProjection.Trigger(ctx) } stmt, scan := prepareAppQuery() diff --git a/internal/query/authn_key.go b/internal/query/authn_key.go index 74d7e1d12e..e84e1a8e91 100644 --- a/internal/query/authn_key.go +++ b/internal/query/authn_key.go @@ -124,7 +124,7 @@ func (q *Queries) SearchAuthNKeys(ctx context.Context, queries *AuthNKeySearchQu func (q *Queries) GetAuthNKeyByID(ctx context.Context, shouldTriggerBulk bool, id string, queries ...SearchQuery) (*AuthNKey, error) { if shouldTriggerBulk { - projection.AuthNKeyProjection.TriggerBulk(ctx) + projection.AuthNKeyProjection.Trigger(ctx) } query, scan := prepareAuthNKeyQuery() diff --git a/internal/query/domain_policy.go b/internal/query/domain_policy.go index 78efdab0f0..510145ec3f 100644 --- a/internal/query/domain_policy.go +++ b/internal/query/domain_policy.go @@ -82,7 +82,7 @@ var ( func (q *Queries) DomainPolicyByOrg(ctx context.Context, shouldTriggerBulk bool, orgID string) (*DomainPolicy, error) { if shouldTriggerBulk { - projection.DomainPolicyProjection.TriggerBulk(ctx) + projection.DomainPolicyProjection.Trigger(ctx) } stmt, scan := prepareDomainPolicyQuery() diff --git a/internal/query/failed_events.go b/internal/query/failed_events.go index 0825375dbc..3e7b0c9bfa 100644 --- a/internal/query/failed_events.go +++ b/internal/query/failed_events.go @@ -115,7 +115,7 @@ func (q *FailedEventSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuil return query } -func prepareFailedEventQuery() (sq.SelectBuilder, func(*sql.Row) (*FailedEvent, error)) { +func prepareFailedEventQuery(instanceIDs ...string) (sq.SelectBuilder, func(*sql.Row) (*FailedEvent, error)) { return sq.Select( FailedEventsColumnProjectionName.identifier(), FailedEventsColumnFailedSequence.identifier(), diff --git a/internal/query/idp.go b/internal/query/idp.go index 5bf8bb847c..2e6ea3e7e6 100644 --- a/internal/query/idp.go +++ b/internal/query/idp.go @@ -182,7 +182,7 @@ var ( //IDPByIDAndResourceOwner searches for the requested id in the context of the resource owner and IAM func (q *Queries) IDPByIDAndResourceOwner(ctx context.Context, shouldTriggerBulk bool, id, resourceOwner string) (*IDP, error) { if shouldTriggerBulk { - projection.IDPProjection.TriggerBulk(ctx) + projection.IDPProjection.Trigger(ctx) } stmt, scan := prepareIDPByIDQuery() diff --git a/internal/query/instance.go b/internal/query/instance.go index ebe47fcbf8..ced139aed8 100644 --- a/internal/query/instance.go +++ b/internal/query/instance.go @@ -159,7 +159,7 @@ func (q *Queries) SearchInstances(ctx context.Context, queries *InstanceSearchQu func (q *Queries) Instance(ctx context.Context, shouldTriggerBulk bool) (*Instance, error) { if shouldTriggerBulk { - projection.InstanceProjection.TriggerBulk(ctx) + projection.InstanceProjection.Trigger(ctx) } stmt, scan := prepareInstanceDomainQuery(authz.GetInstance(ctx).RequestedDomain()) diff --git a/internal/query/lockout_policy.go b/internal/query/lockout_policy.go index 23654318b0..1b14bf1256 100644 --- a/internal/query/lockout_policy.go +++ b/internal/query/lockout_policy.go @@ -77,7 +77,7 @@ var ( func (q *Queries) LockoutPolicyByOrg(ctx context.Context, shouldTriggerBulk bool, orgID string) (*LockoutPolicy, error) { if shouldTriggerBulk { - projection.LockoutPolicyProjection.TriggerBulk(ctx) + projection.LockoutPolicyProjection.Trigger(ctx) } stmt, scan := prepareLockoutPolicyQuery() diff --git a/internal/query/login_policy.go b/internal/query/login_policy.go index 26c9209909..6c3512e0dd 100644 --- a/internal/query/login_policy.go +++ b/internal/query/login_policy.go @@ -141,7 +141,7 @@ var ( func (q *Queries) LoginPolicyByID(ctx context.Context, shouldTriggerBulk bool, orgID string) (*LoginPolicy, error) { if shouldTriggerBulk { - projection.LoginPolicyProjection.TriggerBulk(ctx) + projection.LoginPolicyProjection.Trigger(ctx) } query, scan := prepareLoginPolicyQuery() diff --git a/internal/query/org.go b/internal/query/org.go index 19cbd47558..4d2dcb966f 100644 --- a/internal/query/org.go +++ b/internal/query/org.go @@ -88,7 +88,7 @@ func (q *OrgSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuilder { func (q *Queries) OrgByID(ctx context.Context, shouldTriggerBulk bool, id string) (*Org, error) { if shouldTriggerBulk { - projection.OrgProjection.TriggerBulk(ctx) + projection.OrgProjection.Trigger(ctx) } stmt, scan := prepareOrgQuery() diff --git a/internal/query/password_age_policy.go b/internal/query/password_age_policy.go index faf432b8f7..14ffc4669b 100644 --- a/internal/query/password_age_policy.go +++ b/internal/query/password_age_policy.go @@ -76,7 +76,7 @@ var ( func (q *Queries) PasswordAgePolicyByOrg(ctx context.Context, shouldTriggerBulk bool, orgID string) (*PasswordAgePolicy, error) { if shouldTriggerBulk { - projection.PasswordAgeProjection.TriggerBulk(ctx) + projection.PasswordAgeProjection.Trigger(ctx) } stmt, scan := preparePasswordAgePolicyQuery() @@ -106,7 +106,7 @@ func (q *Queries) PasswordAgePolicyByOrg(ctx context.Context, shouldTriggerBulk func (q *Queries) DefaultPasswordAgePolicy(ctx context.Context, shouldTriggerBulk bool) (*PasswordAgePolicy, error) { if shouldTriggerBulk { - projection.PasswordAgeProjection.TriggerBulk(ctx) + projection.PasswordAgeProjection.Trigger(ctx) } stmt, scan := preparePasswordAgePolicyQuery() diff --git a/internal/query/password_complexity_policy.go b/internal/query/password_complexity_policy.go index aa9eac6873..8f58b8a43a 100644 --- a/internal/query/password_complexity_policy.go +++ b/internal/query/password_complexity_policy.go @@ -33,7 +33,7 @@ type PasswordComplexityPolicy struct { func (q *Queries) PasswordComplexityPolicyByOrg(ctx context.Context, shouldTriggerBulk bool, orgID string) (*PasswordComplexityPolicy, error) { if shouldTriggerBulk { - projection.PasswordComplexityProjection.TriggerBulk(ctx) + projection.PasswordComplexityProjection.Trigger(ctx) } stmt, scan := preparePasswordComplexityPolicyQuery() @@ -63,7 +63,7 @@ func (q *Queries) PasswordComplexityPolicyByOrg(ctx context.Context, shouldTrigg func (q *Queries) DefaultPasswordComplexityPolicy(ctx context.Context, shouldTriggerBulk bool) (*PasswordComplexityPolicy, error) { if shouldTriggerBulk { - projection.PasswordComplexityProjection.TriggerBulk(ctx) + projection.PasswordComplexityProjection.Trigger(ctx) } stmt, scan := preparePasswordComplexityPolicyQuery() diff --git a/internal/query/privacy_policy.go b/internal/query/privacy_policy.go index 39c7f9bf87..9fa2cad170 100644 --- a/internal/query/privacy_policy.go +++ b/internal/query/privacy_policy.go @@ -81,7 +81,7 @@ var ( func (q *Queries) PrivacyPolicyByOrg(ctx context.Context, shouldTriggerBulk bool, orgID string) (*PrivacyPolicy, error) { if shouldTriggerBulk { - projection.PrivacyPolicyProjection.TriggerBulk(ctx) + projection.PrivacyPolicyProjection.Trigger(ctx) } stmt, scan := preparePrivacyPolicyQuery() @@ -111,7 +111,7 @@ func (q *Queries) PrivacyPolicyByOrg(ctx context.Context, shouldTriggerBulk bool func (q *Queries) DefaultPrivacyPolicy(ctx context.Context, shouldTriggerBulk bool) (*PrivacyPolicy, error) { if shouldTriggerBulk { - projection.PrivacyPolicyProjection.TriggerBulk(ctx) + projection.PrivacyPolicyProjection.Trigger(ctx) } stmt, scan := preparePrivacyPolicyQuery() diff --git a/internal/query/project.go b/internal/query/project.go index 9bd1b4e4e0..1f7dd3fdbc 100644 --- a/internal/query/project.go +++ b/internal/query/project.go @@ -96,7 +96,7 @@ type ProjectSearchQueries struct { func (q *Queries) ProjectByID(ctx context.Context, shouldTriggerBulk bool, id string) (*Project, error) { if shouldTriggerBulk { - projection.ProjectProjection.TriggerBulk(ctx) + projection.ProjectProjection.Trigger(ctx) } stmt, scan := prepareProjectQuery() diff --git a/internal/query/project_grant.go b/internal/query/project_grant.go index 8b7812a629..e802780209 100644 --- a/internal/query/project_grant.go +++ b/internal/query/project_grant.go @@ -103,7 +103,7 @@ type ProjectGrantSearchQueries struct { func (q *Queries) ProjectGrantByID(ctx context.Context, shouldTriggerBulk bool, id string) (*ProjectGrant, error) { if shouldTriggerBulk { - projection.ProjectGrantProjection.TriggerBulk(ctx) + projection.ProjectGrantProjection.Trigger(ctx) } stmt, scan := prepareProjectGrantQuery() diff --git a/internal/query/project_role.go b/internal/query/project_role.go index d42dff261f..75cc71fadf 100644 --- a/internal/query/project_role.go +++ b/internal/query/project_role.go @@ -78,7 +78,7 @@ type ProjectRoleSearchQueries struct { func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool, queries *ProjectRoleSearchQueries) (projects *ProjectRoles, err error) { if shouldTriggerBulk { - projection.ProjectRoleProjection.TriggerBulk(ctx) + projection.ProjectRoleProjection.Trigger(ctx) } query, scan := prepareProjectRolesQuery() diff --git a/internal/query/projection/config.go b/internal/query/projection/config.go index eb3fae3ae9..abb5306b1b 100644 --- a/internal/query/projection/config.go +++ b/internal/query/projection/config.go @@ -5,17 +5,19 @@ import ( ) type Config struct { - RequeueEvery time.Duration - RetryFailedAfter time.Duration - MaxFailureCount uint - BulkLimit uint64 - Customizations map[string]CustomConfig - MaxIterators int + RequeueEvery time.Duration + RetryFailedAfter time.Duration + MaxFailureCount uint + ConcurrentInstances uint + BulkLimit uint64 + Customizations map[string]CustomConfig + MaxIterators int } type CustomConfig struct { - RequeueEvery *time.Duration - RetryFailedAfter *time.Duration - MaxFailureCount *uint - BulkLimit *uint64 + RequeueEvery *time.Duration + RetryFailedAfter *time.Duration + MaxFailureCount *uint + ConcurrentInstances *uint + BulkLimit *uint64 } diff --git a/internal/query/projection/key.go b/internal/query/projection/key.go index 91ba200ea8..29ec2a2ea9 100644 --- a/internal/query/projection/key.go +++ b/internal/query/projection/key.go @@ -83,8 +83,8 @@ func newKeyProjection(ctx context.Context, config crdb.StatementHandlerConfig, k crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys("fk_public_ref_keys")), ), ) - p.StatementHandler = crdb.NewStatementHandler(ctx, config) p.encryptionAlgorithm = keyEncryptionAlgorithm + p.StatementHandler = crdb.NewStatementHandler(ctx, config) return p } diff --git a/internal/query/projection/projection.go b/internal/query/projection/projection.go index 1995831dfa..71b977c470 100644 --- a/internal/query/projection/projection.go +++ b/internal/query/projection/projection.go @@ -68,8 +68,10 @@ func Start(ctx context.Context, sqlClient *sql.DB, es *eventstore.Eventstore, co HandlerConfig: handler.HandlerConfig{ Eventstore: es, }, - RequeueEvery: config.RequeueEvery, - RetryFailedAfter: config.RetryFailedAfter, + RequeueEvery: config.RequeueEvery, + RetryFailedAfter: config.RetryFailedAfter, + Retries: config.MaxFailureCount, + ConcurrentInstances: config.ConcurrentInstances, }, Client: sqlClient, SequenceTable: CurrentSeqTable, diff --git a/internal/query/user.go b/internal/query/user.go index 23b4adbe05..be75173b78 100644 --- a/internal/query/user.go +++ b/internal/query/user.go @@ -294,8 +294,8 @@ var ( func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userID string, queries ...SearchQuery) (*User, error) { if shouldTriggerBulk { - projection.UserProjection.TriggerBulk(ctx) - projection.LoginNameProjection.TriggerBulk(ctx) + projection.UserProjection.Trigger(ctx) + projection.LoginNameProjection.Trigger(ctx) } instanceID := authz.GetInstance(ctx).InstanceID() @@ -317,8 +317,8 @@ func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userI func (q *Queries) GetUser(ctx context.Context, shouldTriggerBulk bool, queries ...SearchQuery) (*User, error) { if shouldTriggerBulk { - projection.UserProjection.TriggerBulk(ctx) - projection.LoginNameProjection.TriggerBulk(ctx) + projection.UserProjection.Trigger(ctx) + projection.LoginNameProjection.Trigger(ctx) } instanceID := authz.GetInstance(ctx).InstanceID() @@ -390,8 +390,8 @@ func (q *Queries) GetHumanPhone(ctx context.Context, userID string, queries ...S func (q *Queries) GeNotifyUser(ctx context.Context, shouldTriggered bool, userID string, queries ...SearchQuery) (*NotifyUser, error) { if shouldTriggered { - projection.UserProjection.TriggerBulk(ctx) - projection.LoginNameProjection.TriggerBulk(ctx) + projection.UserProjection.Trigger(ctx) + projection.LoginNameProjection.Trigger(ctx) } instanceID := authz.GetInstance(ctx).InstanceID() diff --git a/internal/query/user_grant.go b/internal/query/user_grant.go index 69cd293e69..70a2702c38 100644 --- a/internal/query/user_grant.go +++ b/internal/query/user_grant.go @@ -193,7 +193,7 @@ var ( func (q *Queries) UserGrant(ctx context.Context, shouldTriggerBulk bool, queries ...SearchQuery) (*UserGrant, error) { if shouldTriggerBulk { - projection.UserGrantProjection.TriggerBulk(ctx) + projection.UserGrantProjection.Trigger(ctx) } query, scan := prepareUserGrantQuery() diff --git a/internal/query/user_metadata.go b/internal/query/user_metadata.go index 473a449f2d..b8b79321ba 100644 --- a/internal/query/user_metadata.go +++ b/internal/query/user_metadata.go @@ -73,7 +73,7 @@ var ( func (q *Queries) GetUserMetadataByKey(ctx context.Context, shouldTriggerBulk bool, userID, key string, queries ...SearchQuery) (*UserMetadata, error) { if shouldTriggerBulk { - projection.UserMetadataProjection.TriggerBulk(ctx) + projection.UserMetadataProjection.Trigger(ctx) } query, scan := prepareUserMetadataQuery() @@ -96,7 +96,7 @@ func (q *Queries) GetUserMetadataByKey(ctx context.Context, shouldTriggerBulk bo func (q *Queries) SearchUserMetadata(ctx context.Context, shouldTriggerBulk bool, userID string, queries *UserMetadataSearchQueries) (*UserMetadataList, error) { if shouldTriggerBulk { - projection.UserMetadataProjection.TriggerBulk(ctx) + projection.UserMetadataProjection.Trigger(ctx) } query, scan := prepareUserMetadataListQuery() diff --git a/internal/query/user_personal_access_token.go b/internal/query/user_personal_access_token.go index ec1ea7d9d8..e25e823b2c 100644 --- a/internal/query/user_personal_access_token.go +++ b/internal/query/user_personal_access_token.go @@ -82,7 +82,7 @@ type PersonalAccessTokenSearchQueries struct { func (q *Queries) PersonalAccessTokenByID(ctx context.Context, shouldTriggerBulk bool, id string, queries ...SearchQuery) (*PersonalAccessToken, error) { if shouldTriggerBulk { - projection.PersonalAccessTokenProjection.TriggerBulk(ctx) + projection.PersonalAccessTokenProjection.Trigger(ctx) } query, scan := preparePersonalAccessTokenQuery() diff --git a/internal/view/repository/sequence.go b/internal/view/repository/sequence.go index 6e1b85e5ac..8c4b5b0d76 100644 --- a/internal/view/repository/sequence.go +++ b/internal/view/repository/sequence.go @@ -55,8 +55,9 @@ func (key sequenceSearchKey) ToColumnName() string { } type sequenceSearchQuery struct { - key sequenceSearchKey - value string + key sequenceSearchKey + method domain.SearchMethod + value interface{} } func (q *sequenceSearchQuery) GetKey() ColumnKey { @@ -64,7 +65,7 @@ func (q *sequenceSearchQuery) GetKey() ColumnKey { } func (q *sequenceSearchQuery) GetMethod() domain.SearchMethod { - return domain.SearchMethodEquals + return q.method } func (q *sequenceSearchQuery) GetValue() interface{} { @@ -94,7 +95,7 @@ func (s *sequenceSearchRequest) GetAsc() bool { func (s *sequenceSearchRequest) GetQueries() []SearchQuery { result := make([]SearchQuery, len(s.queries)) for i, q := range s.queries { - result[i] = &sequenceSearchQuery{key: q.key, value: q.value} + result[i] = &sequenceSearchQuery{key: q.key, value: q.value, method: q.method} } return result } @@ -147,8 +148,8 @@ func UpdateCurrentSequences(db *gorm.DB, table string, currentSequences []*Curre func LatestSequence(db *gorm.DB, table, viewName, instanceID string) (*CurrentSequence, error) { searchQueries := []SearchQuery{ - &sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyViewName), value: viewName}, - &sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyInstanceID), value: instanceID}, + &sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyViewName), value: viewName, method: domain.SearchMethodEquals}, + &sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyInstanceID), value: instanceID, method: domain.SearchMethodIsOneOf}, } // ensure highest sequence of view @@ -168,13 +169,15 @@ func LatestSequence(db *gorm.DB, table, viewName, instanceID string) (*CurrentSe return nil, caos_errs.ThrowInternalf(err, "VIEW-9LyCB", "unable to get latest sequence of %s", viewName) } -func LatestSequences(db *gorm.DB, table, viewName string) ([]*CurrentSequence, error) { - searchQueries := make([]SearchQuery, 0, 2) - searchQueries = append(searchQueries) +func LatestSequences(db *gorm.DB, table, viewName string, instanceIDs ...string) ([]*CurrentSequence, error) { + searchQueries := []sequenceSearchQuery{ + {key: sequenceSearchKey(SequenceSearchKeyViewName), value: viewName, method: domain.SearchMethodEquals}, + } + if len(instanceIDs) > 0 { + searchQueries = append(searchQueries, sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyInstanceID), value: instanceIDs, method: domain.SearchMethodIsOneOf}) + } searchRequest := &sequenceSearchRequest{ - queries: []sequenceSearchQuery{ - {key: sequenceSearchKey(SequenceSearchKeyViewName), value: viewName}, - }, + queries: searchQueries, } // ensure highest sequence of view From 3855ec2ab5a0342cc125f80f1eb4115585e5b86b Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Fri, 22 Jul 2022 13:23:13 +0200 Subject: [PATCH 035/116] fix(console): SMS provider (#3949) fix: console twilio Co-authored-by: Livio Spring --- .../dialog-add-sms-provider.component.html | 2 +- .../dialog-add-sms-provider.component.ts | 24 +- .../notification-settings.component.html | 25 +- .../notification-settings.component.scss | 1 + .../notification-settings.component.ts | 79 +++- .../notification-settings.module.ts | 2 + console/src/app/services/admin.service.ts | 402 ++++++++++-------- console/src/assets/i18n/de.json | 11 + console/src/assets/i18n/en.json | 14 +- console/src/assets/i18n/fr.json | 11 + console/src/assets/i18n/it.json | 11 + 11 files changed, 368 insertions(+), 214 deletions(-) diff --git a/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.html b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.html index 49690d88b3..f9631924d4 100644 --- a/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.html +++ b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.html @@ -8,7 +8,7 @@ - + {{ 'SETTING.SMS.TWILIO.TOKEN' | translate }} diff --git a/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts index 623291234d..268232f1a6 100644 --- a/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts +++ b/console/src/app/modules/policies/notification-settings/dialog-add-sms-provider/dialog-add-sms-provider.component.ts @@ -1,10 +1,10 @@ import { Component, Inject } from '@angular/core'; -import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { AbstractControl, FormControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog'; import { - AddSMSProviderTwilioRequest, - UpdateSMSProviderTwilioRequest, - UpdateSMSProviderTwilioTokenRequest, + AddSMSProviderTwilioRequest, + UpdateSMSProviderTwilioRequest, + UpdateSMSProviderTwilioTokenRequest, } from 'src/app/proto/generated/zitadel/admin_pb'; import { SMSProvider, TwilioConfig } from 'src/app/proto/generated/zitadel/settings_pb'; import { AdminService } from 'src/app/services/admin.service'; @@ -41,13 +41,14 @@ export class DialogAddSMSProviderComponent { ) { this.twilioForm = this.fb.group({ sid: ['', [Validators.required]], - token: ['', [Validators.required]], senderNumber: ['', [Validators.required]], }); this.smsProviders = data.smsProviders; if (!!this.twilio) { this.twilioForm.patchValue(this.twilio); + } else { + this.twilioForm.addControl('token', new FormControl('', Validators.required)); } } @@ -82,14 +83,16 @@ export class DialogAddSMSProviderComponent { }); dialogRef.afterClosed().subscribe((token: string) => { - if (token) { + if (token && this.twilioProvider?.id) { const tokenReq = new UpdateSMSProviderTwilioTokenRequest(); tokenReq.setToken(token); + tokenReq.setId(this.twilioProvider.id); this.service .updateSMSProviderTwilioToken(tokenReq) .then(() => { this.toast.showInfo('SETTING.SMS.TWILIO.TOKENSET', true); + this.dialogRef.close(); }) .catch((error) => { this.toast.showError(error); @@ -110,6 +113,15 @@ export class DialogAddSMSProviderComponent { return this.twilioForm.get('sid'); } + public get twilioProvider(): SMSProvider.AsObject | undefined { + const twilioProvider: SMSProvider.AsObject | undefined = this.smsProviders.find((p) => p.twilio); + if (twilioProvider) { + return twilioProvider; + } else { + return undefined; + } + } + public get twilio(): TwilioConfig.AsObject | undefined { const twilioProvider: SMSProvider.AsObject | undefined = this.smsProviders.find((p) => p.twilio); if (twilioProvider && !!twilioProvider.twilio) { diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.html b/console/src/app/modules/policies/notification-settings/notification-settings.component.html index 1124997324..d815871431 100644 --- a/console/src/app/modules/policies/notification-settings/notification-settings.component.html +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.html @@ -75,9 +75,32 @@ active: twilio?.state === SMSProviderConfigState.SMS_PROVIDER_CONFIG_ACTIVE, inactive: twilio?.state === SMSProviderConfigState.SMS_PROVIDER_CONFIG_INACTIVE }" - > + >{{ 'SETTING.SMS.SMSPROVIDERSTATE.' + twilio?.state | translate }} + + diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.scss b/console/src/app/modules/policies/notification-settings/notification-settings.component.scss index 28ce220776..f382b0b415 100644 --- a/console/src/app/modules/policies/notification-settings/notification-settings.component.scss +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.scss @@ -49,6 +49,7 @@ display: flex; flex-direction: row; align-items: center; + width: 350px; .title { font-size: 16px; diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.component.ts b/console/src/app/modules/policies/notification-settings/notification-settings.component.ts index 6b1e1dc968..a4c48bd7b0 100644 --- a/console/src/app/modules/policies/notification-settings/notification-settings.component.ts +++ b/console/src/app/modules/policies/notification-settings/notification-settings.component.ts @@ -3,12 +3,12 @@ import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } fro import { MatDialog } from '@angular/material/dialog'; import { take } from 'rxjs'; import { - AddSMSProviderTwilioRequest, - AddSMTPConfigRequest, - UpdateSMSProviderTwilioRequest, - UpdateSMTPConfigPasswordRequest, - UpdateSMTPConfigPasswordResponse, - UpdateSMTPConfigRequest, + AddSMSProviderTwilioRequest, + AddSMTPConfigRequest, + UpdateSMSProviderTwilioRequest, + UpdateSMTPConfigPasswordRequest, + UpdateSMTPConfigPasswordResponse, + UpdateSMTPConfigRequest, } from 'src/app/proto/generated/zitadel/admin_pb'; import { DebugNotificationProvider, SMSProvider, SMSProviderConfigState } from 'src/app/proto/generated/zitadel/settings_pb'; import { AdminService } from 'src/app/services/admin.service'; @@ -16,6 +16,7 @@ import { GrpcAuthService } from 'src/app/services/grpc-auth.service'; import { ToastService } from 'src/app/services/toast.service'; import { InfoSectionType } from '../../info-section/info-section.component'; +import { WarnDialogComponent } from '../../warn-dialog/warn-dialog.component'; import { PolicyComponentServiceType } from '../policy-component-types.enum'; import { DialogAddSMSProviderComponent } from './dialog-add-sms-provider/dialog-add-sms-provider.component'; import { PasswordDialogComponent } from './password-dialog/password-dialog.component'; @@ -185,11 +186,12 @@ export class NotificationSettingsComponent implements OnInit { dialogRef.afterClosed().subscribe((req: AddSMSProviderTwilioRequest | UpdateSMSProviderTwilioRequest) => { if (req) { - if (this.hasTwilio) { + if (!!this.twilio) { this.service .updateSMSProviderTwilio(req as UpdateSMSProviderTwilioRequest) .then(() => { this.toast.showInfo('SETTING.SMS.TWILIO.ADDED', true); + this.fetchData(); }) .catch((error) => { this.toast.showError(error); @@ -199,6 +201,7 @@ export class NotificationSettingsComponent implements OnInit { .addSMSProviderTwilio(req as AddSMSProviderTwilioRequest) .then(() => { this.toast.showInfo('SETTING.SMS.TWILIO.ADDED', true); + this.fetchData(); }) .catch((error) => { this.toast.showError(error); @@ -234,6 +237,59 @@ export class NotificationSettingsComponent implements OnInit { }); } + public toggleSMSProviderState(id: string): void { + const provider = this.smsProviders.find((p) => p.id === id); + if (provider) { + if (provider.state === SMSProviderConfigState.SMS_PROVIDER_CONFIG_ACTIVE) { + this.service + .deactivateSMSProvider(id) + .then(() => { + this.toast.showInfo('SETTING.SMS.DEACTIVATED', true); + this.fetchData(); + }) + .catch((error) => { + this.toast.showError(error); + }); + } else if (provider.state === SMSProviderConfigState.SMS_PROVIDER_CONFIG_INACTIVE) { + this.service + .activateSMSProvider(id) + .then(() => { + this.toast.showInfo('SETTING.SMS.ACTIVATED', true); + this.fetchData(); + }) + .catch((error) => { + this.toast.showError(error); + }); + } + } + } + + public removeSMSProvider(id: string): void { + const dialogRef = this.dialog.open(WarnDialogComponent, { + data: { + confirmKey: 'ACTIONS.DELETE', + cancelKey: 'ACTIONS.CANCEL', + titleKey: 'SETTING.SMS.REMOVEPROVIDER', + descriptionKey: 'SETTING.SMS.REMOVEPROVIDER_DESC', + }, + width: '400px', + }); + + dialogRef.afterClosed().subscribe((resp) => { + if (resp) { + this.service + .removeSMSProvider(id) + .then(() => { + this.toast.showInfo('SETTING.SMS.TWILIO.REMOVED', true); + this.fetchData(); + }) + .catch((error) => { + this.toast.showError(error); + }); + } + }); + } + public get twilio(): SMSProvider.AsObject | undefined { return this.smsProviders.find((p) => p.twilio); } @@ -257,13 +313,4 @@ export class NotificationSettingsComponent implements OnInit { public get host(): AbstractControl | null { return this.form.get('host'); } - - public get hasTwilio(): boolean { - const twilioProvider: SMSProvider.AsObject | undefined = this.smsProviders.find((p) => p.twilio); - if (twilioProvider && !!twilioProvider.twilio) { - return true; - } else { - return false; - } - } } diff --git a/console/src/app/modules/policies/notification-settings/notification-settings.module.ts b/console/src/app/modules/policies/notification-settings/notification-settings.module.ts index ceb10ce32d..9667c2c4a7 100644 --- a/console/src/app/modules/policies/notification-settings/notification-settings.module.ts +++ b/console/src/app/modules/policies/notification-settings/notification-settings.module.ts @@ -13,6 +13,7 @@ import { CardModule } from '../../card/card.module'; import { FormFieldModule } from '../../form-field/form-field.module'; import { InfoSectionModule } from '../../info-section/info-section.module'; import { InputModule } from '../../input/input.module'; +import { WarnDialogModule } from '../../warn-dialog/warn-dialog.module'; import { DialogAddSMSProviderComponent } from './dialog-add-sms-provider/dialog-add-sms-provider.component'; import { NotificationSettingsComponent } from './notification-settings.component'; import { PasswordDialogComponent } from './password-dialog/password-dialog.component'; @@ -31,6 +32,7 @@ import { PasswordDialogComponent } from './password-dialog/password-dialog.compo InputModule, MatIconModule, FormFieldModule, + WarnDialogModule, MatSelectModule, MatProgressSpinnerModule, MatSelectModule, diff --git a/console/src/app/services/admin.service.ts b/console/src/app/services/admin.service.ts index 183ef92ceb..808facaf5a 100644 --- a/console/src/app/services/admin.service.ts +++ b/console/src/app/services/admin.service.ts @@ -1,195 +1,201 @@ import { Injectable } from '@angular/core'; import { - ActivateLabelPolicyRequest, - ActivateLabelPolicyResponse, - AddCustomDomainPolicyRequest, - AddCustomOrgIAMPolicyResponse, - AddIAMMemberRequest, - AddIAMMemberResponse, - AddIDPToLoginPolicyRequest, - AddIDPToLoginPolicyResponse, - AddJWTIDPRequest, - AddJWTIDPResponse, - AddMultiFactorToLoginPolicyRequest, - AddMultiFactorToLoginPolicyResponse, - AddOIDCIDPRequest, - AddOIDCIDPResponse, - AddSecondFactorToLoginPolicyRequest, - AddSecondFactorToLoginPolicyResponse, - AddSMSProviderTwilioRequest, - AddSMSProviderTwilioResponse, - AddSMTPConfigRequest, - AddSMTPConfigResponse, - DeactivateIDPRequest, - DeactivateIDPResponse, - GetCustomDomainClaimedMessageTextRequest, - GetCustomDomainClaimedMessageTextResponse, - GetCustomDomainPolicyRequest, - GetCustomDomainPolicyResponse, - GetCustomInitMessageTextRequest, - GetCustomInitMessageTextResponse, - GetCustomLoginTextsRequest, - GetCustomLoginTextsResponse, - GetCustomPasswordlessRegistrationMessageTextRequest, - GetCustomPasswordlessRegistrationMessageTextResponse, - GetCustomPasswordResetMessageTextRequest, - GetCustomPasswordResetMessageTextResponse, - GetCustomVerifyEmailMessageTextRequest, - GetCustomVerifyEmailMessageTextResponse, - GetCustomVerifyPhoneMessageTextRequest, - GetCustomVerifyPhoneMessageTextResponse, - GetDefaultDomainClaimedMessageTextRequest, - GetDefaultDomainClaimedMessageTextResponse, - GetDefaultInitMessageTextRequest, - GetDefaultInitMessageTextResponse, - GetDefaultLanguageRequest, - GetDefaultLanguageResponse, - GetDefaultLoginTextsRequest, - GetDefaultLoginTextsResponse, - GetDefaultPasswordlessRegistrationMessageTextRequest, - GetDefaultPasswordlessRegistrationMessageTextResponse, - GetDefaultPasswordResetMessageTextRequest, - GetDefaultPasswordResetMessageTextResponse, - GetDefaultVerifyEmailMessageTextRequest, - GetDefaultVerifyEmailMessageTextResponse, - GetDefaultVerifyPhoneMessageTextRequest, - GetDefaultVerifyPhoneMessageTextResponse, - GetDomainPolicyRequest, - GetDomainPolicyResponse, - GetFileSystemNotificationProviderRequest, - GetFileSystemNotificationProviderResponse, - GetIDPByIDRequest, - GetIDPByIDResponse, - GetLabelPolicyRequest, - GetLabelPolicyResponse, - GetLockoutPolicyRequest, - GetLockoutPolicyResponse, - GetLoginPolicyRequest, - GetLoginPolicyResponse, - GetLogNotificationProviderRequest, - GetLogNotificationProviderResponse, - GetOIDCSettingsRequest, - GetOIDCSettingsResponse, - GetPasswordAgePolicyRequest, - GetPasswordAgePolicyResponse, - GetPasswordComplexityPolicyRequest, - GetPasswordComplexityPolicyResponse, - GetPreviewLabelPolicyRequest, - GetPreviewLabelPolicyResponse, - GetPrivacyPolicyRequest, - GetPrivacyPolicyResponse, - GetSecretGeneratorRequest, - GetSecretGeneratorResponse, - GetSMSProviderRequest, - GetSMSProviderResponse, - GetSMTPConfigRequest, - GetSMTPConfigResponse, - GetSupportedLanguagesRequest, - GetSupportedLanguagesResponse, - IDPQuery, - ListFailedEventsRequest, - ListFailedEventsResponse, - ListIAMMemberRolesRequest, - ListIAMMemberRolesResponse, - ListIAMMembersRequest, - ListIAMMembersResponse, - ListIDPsRequest, - ListIDPsResponse, - ListLoginPolicyIDPsRequest, - ListLoginPolicyIDPsResponse, - ListLoginPolicyMultiFactorsRequest, - ListLoginPolicyMultiFactorsResponse, - ListLoginPolicySecondFactorsRequest, - ListLoginPolicySecondFactorsResponse, - ListSecretGeneratorsRequest, - ListSecretGeneratorsResponse, - ListSMSProvidersRequest, - ListSMSProvidersResponse, - ListViewsRequest, - ListViewsResponse, - ReactivateIDPRequest, - ReactivateIDPResponse, - RemoveFailedEventRequest, - RemoveFailedEventResponse, - RemoveIAMMemberRequest, - RemoveIAMMemberResponse, - RemoveIDPFromLoginPolicyRequest, - RemoveIDPFromLoginPolicyResponse, - RemoveIDPRequest, - RemoveIDPResponse, - RemoveLabelPolicyFontRequest, - RemoveLabelPolicyFontResponse, - RemoveLabelPolicyIconDarkRequest, - RemoveLabelPolicyIconDarkResponse, - RemoveLabelPolicyIconRequest, - RemoveLabelPolicyIconResponse, - RemoveLabelPolicyLogoDarkRequest, - RemoveLabelPolicyLogoDarkResponse, - RemoveLabelPolicyLogoRequest, - RemoveLabelPolicyLogoResponse, - RemoveMultiFactorFromLoginPolicyRequest, - RemoveMultiFactorFromLoginPolicyResponse, - RemoveSecondFactorFromLoginPolicyRequest, - RemoveSecondFactorFromLoginPolicyResponse, - ResetCustomDomainPolicyToDefaultRequest, - ResetCustomDomainPolicyToDefaultResponse, - ResetCustomLoginTextsToDefaultRequest, - ResetCustomLoginTextsToDefaultResponse, - SetCustomLoginTextsRequest, - SetCustomLoginTextsResponse, - SetDefaultDomainClaimedMessageTextRequest, - SetDefaultDomainClaimedMessageTextResponse, - SetDefaultInitMessageTextRequest, - SetDefaultInitMessageTextResponse, - SetDefaultLanguageRequest, - SetDefaultLanguageResponse, - SetDefaultPasswordlessRegistrationMessageTextRequest, - SetDefaultPasswordlessRegistrationMessageTextResponse, - SetDefaultPasswordResetMessageTextRequest, - SetDefaultPasswordResetMessageTextResponse, - SetDefaultVerifyEmailMessageTextRequest, - SetDefaultVerifyEmailMessageTextResponse, - SetDefaultVerifyPhoneMessageTextRequest, - SetDefaultVerifyPhoneMessageTextResponse, - SetUpOrgRequest, - SetUpOrgResponse, - UpdateCustomDomainPolicyRequest, - UpdateCustomDomainPolicyResponse, - UpdateDomainPolicyRequest, - UpdateDomainPolicyResponse, - UpdateIAMMemberRequest, - UpdateIAMMemberResponse, - UpdateIDPJWTConfigRequest, - UpdateIDPJWTConfigResponse, - UpdateIDPOIDCConfigRequest, - UpdateIDPOIDCConfigResponse, - UpdateIDPRequest, - UpdateIDPResponse, - UpdateLabelPolicyRequest, - UpdateLabelPolicyResponse, - UpdateLockoutPolicyRequest, - UpdateLockoutPolicyResponse, - UpdateLoginPolicyRequest, - UpdateLoginPolicyResponse, - UpdateOIDCSettingsRequest, - UpdateOIDCSettingsResponse, - UpdatePasswordAgePolicyRequest, - UpdatePasswordAgePolicyResponse, - UpdatePasswordComplexityPolicyRequest, - UpdatePasswordComplexityPolicyResponse, - UpdatePrivacyPolicyRequest, - UpdatePrivacyPolicyResponse, - UpdateSecretGeneratorRequest, - UpdateSecretGeneratorResponse, - UpdateSMSProviderTwilioRequest, - UpdateSMSProviderTwilioResponse, - UpdateSMSProviderTwilioTokenRequest, - UpdateSMSProviderTwilioTokenResponse, - UpdateSMTPConfigPasswordRequest, - UpdateSMTPConfigPasswordResponse, - UpdateSMTPConfigRequest, - UpdateSMTPConfigResponse, + ActivateLabelPolicyRequest, + ActivateLabelPolicyResponse, + ActivateSMSProviderRequest, + ActivateSMSProviderResponse, + AddCustomDomainPolicyRequest, + AddCustomOrgIAMPolicyResponse, + AddIAMMemberRequest, + AddIAMMemberResponse, + AddIDPToLoginPolicyRequest, + AddIDPToLoginPolicyResponse, + AddJWTIDPRequest, + AddJWTIDPResponse, + AddMultiFactorToLoginPolicyRequest, + AddMultiFactorToLoginPolicyResponse, + AddOIDCIDPRequest, + AddOIDCIDPResponse, + AddSecondFactorToLoginPolicyRequest, + AddSecondFactorToLoginPolicyResponse, + AddSMSProviderTwilioRequest, + AddSMSProviderTwilioResponse, + AddSMTPConfigRequest, + AddSMTPConfigResponse, + DeactivateIDPRequest, + DeactivateIDPResponse, + DeactivateSMSProviderRequest, + DeactivateSMSProviderResponse, + GetCustomDomainClaimedMessageTextRequest, + GetCustomDomainClaimedMessageTextResponse, + GetCustomDomainPolicyRequest, + GetCustomDomainPolicyResponse, + GetCustomInitMessageTextRequest, + GetCustomInitMessageTextResponse, + GetCustomLoginTextsRequest, + GetCustomLoginTextsResponse, + GetCustomPasswordlessRegistrationMessageTextRequest, + GetCustomPasswordlessRegistrationMessageTextResponse, + GetCustomPasswordResetMessageTextRequest, + GetCustomPasswordResetMessageTextResponse, + GetCustomVerifyEmailMessageTextRequest, + GetCustomVerifyEmailMessageTextResponse, + GetCustomVerifyPhoneMessageTextRequest, + GetCustomVerifyPhoneMessageTextResponse, + GetDefaultDomainClaimedMessageTextRequest, + GetDefaultDomainClaimedMessageTextResponse, + GetDefaultInitMessageTextRequest, + GetDefaultInitMessageTextResponse, + GetDefaultLanguageRequest, + GetDefaultLanguageResponse, + GetDefaultLoginTextsRequest, + GetDefaultLoginTextsResponse, + GetDefaultPasswordlessRegistrationMessageTextRequest, + GetDefaultPasswordlessRegistrationMessageTextResponse, + GetDefaultPasswordResetMessageTextRequest, + GetDefaultPasswordResetMessageTextResponse, + GetDefaultVerifyEmailMessageTextRequest, + GetDefaultVerifyEmailMessageTextResponse, + GetDefaultVerifyPhoneMessageTextRequest, + GetDefaultVerifyPhoneMessageTextResponse, + GetDomainPolicyRequest, + GetDomainPolicyResponse, + GetFileSystemNotificationProviderRequest, + GetFileSystemNotificationProviderResponse, + GetIDPByIDRequest, + GetIDPByIDResponse, + GetLabelPolicyRequest, + GetLabelPolicyResponse, + GetLockoutPolicyRequest, + GetLockoutPolicyResponse, + GetLoginPolicyRequest, + GetLoginPolicyResponse, + GetLogNotificationProviderRequest, + GetLogNotificationProviderResponse, + GetOIDCSettingsRequest, + GetOIDCSettingsResponse, + GetPasswordAgePolicyRequest, + GetPasswordAgePolicyResponse, + GetPasswordComplexityPolicyRequest, + GetPasswordComplexityPolicyResponse, + GetPreviewLabelPolicyRequest, + GetPreviewLabelPolicyResponse, + GetPrivacyPolicyRequest, + GetPrivacyPolicyResponse, + GetSecretGeneratorRequest, + GetSecretGeneratorResponse, + GetSMSProviderRequest, + GetSMSProviderResponse, + GetSMTPConfigRequest, + GetSMTPConfigResponse, + GetSupportedLanguagesRequest, + GetSupportedLanguagesResponse, + IDPQuery, + ListFailedEventsRequest, + ListFailedEventsResponse, + ListIAMMemberRolesRequest, + ListIAMMemberRolesResponse, + ListIAMMembersRequest, + ListIAMMembersResponse, + ListIDPsRequest, + ListIDPsResponse, + ListLoginPolicyIDPsRequest, + ListLoginPolicyIDPsResponse, + ListLoginPolicyMultiFactorsRequest, + ListLoginPolicyMultiFactorsResponse, + ListLoginPolicySecondFactorsRequest, + ListLoginPolicySecondFactorsResponse, + ListSecretGeneratorsRequest, + ListSecretGeneratorsResponse, + ListSMSProvidersRequest, + ListSMSProvidersResponse, + ListViewsRequest, + ListViewsResponse, + ReactivateIDPRequest, + ReactivateIDPResponse, + RemoveFailedEventRequest, + RemoveFailedEventResponse, + RemoveIAMMemberRequest, + RemoveIAMMemberResponse, + RemoveIDPFromLoginPolicyRequest, + RemoveIDPFromLoginPolicyResponse, + RemoveIDPRequest, + RemoveIDPResponse, + RemoveLabelPolicyFontRequest, + RemoveLabelPolicyFontResponse, + RemoveLabelPolicyIconDarkRequest, + RemoveLabelPolicyIconDarkResponse, + RemoveLabelPolicyIconRequest, + RemoveLabelPolicyIconResponse, + RemoveLabelPolicyLogoDarkRequest, + RemoveLabelPolicyLogoDarkResponse, + RemoveLabelPolicyLogoRequest, + RemoveLabelPolicyLogoResponse, + RemoveMultiFactorFromLoginPolicyRequest, + RemoveMultiFactorFromLoginPolicyResponse, + RemoveSecondFactorFromLoginPolicyRequest, + RemoveSecondFactorFromLoginPolicyResponse, + RemoveSMSProviderRequest, + RemoveSMSProviderResponse, + ResetCustomDomainPolicyToDefaultRequest, + ResetCustomDomainPolicyToDefaultResponse, + ResetCustomLoginTextsToDefaultRequest, + ResetCustomLoginTextsToDefaultResponse, + SetCustomLoginTextsRequest, + SetCustomLoginTextsResponse, + SetDefaultDomainClaimedMessageTextRequest, + SetDefaultDomainClaimedMessageTextResponse, + SetDefaultInitMessageTextRequest, + SetDefaultInitMessageTextResponse, + SetDefaultLanguageRequest, + SetDefaultLanguageResponse, + SetDefaultPasswordlessRegistrationMessageTextRequest, + SetDefaultPasswordlessRegistrationMessageTextResponse, + SetDefaultPasswordResetMessageTextRequest, + SetDefaultPasswordResetMessageTextResponse, + SetDefaultVerifyEmailMessageTextRequest, + SetDefaultVerifyEmailMessageTextResponse, + SetDefaultVerifyPhoneMessageTextRequest, + SetDefaultVerifyPhoneMessageTextResponse, + SetUpOrgRequest, + SetUpOrgResponse, + UpdateCustomDomainPolicyRequest, + UpdateCustomDomainPolicyResponse, + UpdateDomainPolicyRequest, + UpdateDomainPolicyResponse, + UpdateIAMMemberRequest, + UpdateIAMMemberResponse, + UpdateIDPJWTConfigRequest, + UpdateIDPJWTConfigResponse, + UpdateIDPOIDCConfigRequest, + UpdateIDPOIDCConfigResponse, + UpdateIDPRequest, + UpdateIDPResponse, + UpdateLabelPolicyRequest, + UpdateLabelPolicyResponse, + UpdateLockoutPolicyRequest, + UpdateLockoutPolicyResponse, + UpdateLoginPolicyRequest, + UpdateLoginPolicyResponse, + UpdateOIDCSettingsRequest, + UpdateOIDCSettingsResponse, + UpdatePasswordAgePolicyRequest, + UpdatePasswordAgePolicyResponse, + UpdatePasswordComplexityPolicyRequest, + UpdatePasswordComplexityPolicyResponse, + UpdatePrivacyPolicyRequest, + UpdatePrivacyPolicyResponse, + UpdateSecretGeneratorRequest, + UpdateSecretGeneratorResponse, + UpdateSMSProviderTwilioRequest, + UpdateSMSProviderTwilioResponse, + UpdateSMSProviderTwilioTokenRequest, + UpdateSMSProviderTwilioTokenResponse, + UpdateSMTPConfigPasswordRequest, + UpdateSMTPConfigPasswordResponse, + UpdateSMTPConfigRequest, + UpdateSMTPConfigResponse, } from '../proto/generated/zitadel/admin_pb'; import { SearchQuery } from '../proto/generated/zitadel/member_pb'; import { ListQuery } from '../proto/generated/zitadel/object_pb'; @@ -504,6 +510,24 @@ export class AdminService { return this.grpcService.admin.updateSMSProviderTwilio(req, null).then((resp) => resp.toObject()); } + public removeSMSProvider(id: string): Promise { + const req = new RemoveSMSProviderRequest(); + req.setId(id); + return this.grpcService.admin.removeSMSProvider(req, null).then((resp) => resp.toObject()); + } + + public activateSMSProvider(id: string): Promise { + const req = new ActivateSMSProviderRequest(); + req.setId(id); + return this.grpcService.admin.activateSMSProvider(req, null).then((resp) => resp.toObject()); + } + + public deactivateSMSProvider(id: string): Promise { + const req = new DeactivateSMSProviderRequest(); + req.setId(id); + return this.grpcService.admin.deactivateSMSProvider(req, null).then((resp) => resp.toObject()); + } + public updateSMSProviderTwilioToken( req: UpdateSMSProviderTwilioTokenRequest, ): Promise { diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index 37ff10fc84..63fbc0806c 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -106,6 +106,7 @@ "FINISHED": "Fertig", "CHANGE": "Ändern", "REACTIVATE": "Aktivieren", + "ACTIVATE": "Aktivieren", "DEACTIVATE": "Deaktivieren", "REFRESH": "Aktualisieren", "LOGIN": "Einloggen", @@ -896,11 +897,21 @@ "PROVIDER": "SMS Anbieter", "ADDPROVIDER": "Anbieter hinzufügen", "ADDPROVIDERDESCRIPTION": "Wählen Sie einen der verfügbaren Anbieter und geben Sie die erforderlichen Daten ein.", + "REMOVEPROVIDER": "Anbieter entfernen", + "REMOVEPROVIDER_DESC": "Sie sind im Begriff eine Konfiguration zu löschen. Wollen Sie fortfahren?", + "SMSPROVIDERSTATE": { + "0": "Unbekannt", + "1": "Aktiv", + "2": "Inaktiv" + }, + "ACTIVATED": "Anbieter aktiviert.", + "DEACTIVATED": "Anbieter deaktiviert.", "TWILIO": { "SID": "Sid", "TOKEN": "Token", "SENDERNUMBER": "Sender Number", "ADDED": "Twilio erfolgreich hinzugefügt.", + "REMOVED": "Twilio entfernt", "CHANGETOKEN": "Token ändern", "SETTOKEN": "Token setzen", "TOKENSET": "Token erfolgreich gesetzt." diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index fee717fb4c..fce53f87d2 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -106,6 +106,7 @@ "FINISHED": "Close", "CHANGE": "Change", "REACTIVATE": "Reactivate", + "ACTIVATE": "Activate", "DEACTIVATE": "Deactivate", "REFRESH": "Refresh", "LOGIN": "Login", @@ -874,7 +875,8 @@ "LANGUAGE": { "de": "Deutsch", "it": "Italiano", - "en": "English" + "en": "English", + "fr": "Français" }, "SMTP": { "TITLE": "SMTP Settings", @@ -895,11 +897,21 @@ "PROVIDER": "SMS Provider", "ADDPROVIDER": "Add SMS Provider", "ADDPROVIDERDESCRIPTION": "Choose one of the available providers and enter the required data.", + "REMOVEPROVIDER": "Remove Provider", + "REMOVEPROVIDER_DESC": "You are about to delete a provider configuration. Do you want to continue?", + "SMSPROVIDERSTATE": { + "0": "Unspecified", + "1": "Active", + "2": "Inactive" + }, + "ACTIVATED": "Provider activated.", + "DEACTIVATED": "Provider deactivated.", "TWILIO": { "SID": "Sid", "TOKEN": "Token", "SENDERNUMBER": "Sender Number", "ADDED": "Twilio added successfully.", + "REMOVED": "Twilio removed", "CHANGETOKEN": "Change Token", "SETTOKEN": "Set Token", "TOKENSET": "Token successfully set." diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index 0bb2e712f6..e441ec3b8c 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -106,6 +106,7 @@ "FINISHED": "Fermer", "CHANGE": "Modifier", "REACTIVATE": "Réactiver", + "ACTIVATE": "Activer", "DEACTIVATE": "Désactiver", "REFRESH": "Rafraîchir", "LOGIN": "Connexion", @@ -896,11 +897,21 @@ "PROVIDER": "Fournisseur de SMS", "ADDPROVIDER": "Ajouter un fournisseur de SMS", "ADDPROVIDERDESCRIPTION": "Choisissez l'un des fournisseurs disponibles et saisissez les données requises.", + "REMOVEPROVIDER": "Supprimer le fournisseur", + "REMOVEPROVIDER_DESC": "Vous êtes sur le point de supprimer une configuration de fournisseur. Voulez-vous continuer", + "SMSPROVIDERSTATE": { + "0": "non spécifié", + "1": "Actif", + "2": "Inactif" + }, + "ACTIVATED": "Fournisseur actif.", + "DEACTIVATED": "Fournisseur inactif.", "TWILIO": { "SID": "Sid", "TOKEN": "Jeton", "SENDERNUMBER": "Numéro d'expéditeur", "ADDED": "Twilio a été ajouté avec succès.", + "REMOVED": "Twilio a été supprimé avec succès", "CHANGETOKEN": "Changer de Token", "SETTOKEN": "Définir le jeton", "TOKENSET": "Le jeton a été défini avec succès." diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 09ce165504..b8629f3a67 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -106,6 +106,7 @@ "FINISHED": "Chiudi", "CHANGE": "Cambia", "REACTIVATE": "Riattiva", + "ACTIVATE": "Attiva", "DEACTIVATE": "Disattiva", "REFRESH": "Aggiorna", "LOGIN": "Accedi", @@ -896,11 +897,21 @@ "PROVIDER": "Fornitore SMS", "ADDPROVIDER": "Aggiungi fornitore SMS", "ADDPROVIDERDESCRIPTION": "Scegli uno dei provider disponibili e inserisci i dati richiesti.", + "REMOVEPROVIDER": "Elimina configurazione", + "REMOVEPROVIDER_DESC": "Stai per eliminare una configurazione. Vuoi continuare?", + "SMSPROVIDERSTATE": { + "0": "Non specificato", + "1": "Attivo", + "2": "Inattivo" + }, + "ACTIVATED": "Fornitore attivato.", + "DEACTIVATED": "Fornitore disattivato.", "TWILIO": { "SID": "Sid", "TOKEN": "Token", "SENDERNUMBER": "Sender Number", "ADDED": "Twilio aggiunto con successo.", + "REMOVED": "Twilio rimosso con successo.", "CHANGETOKEN": "Cambia Token", "SETTOKEN": "Cambia Token", "TOKENSET": "Token cambiato con successo." From 9fc8a436420121783a785e1f97e3ad450d1a69e5 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Fri, 22 Jul 2022 13:47:55 +0200 Subject: [PATCH 036/116] fix: handle events of PATs correctly (#4024) --- internal/user/repository/view/model/token.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/internal/user/repository/view/model/token.go b/internal/user/repository/view/model/token.go index 38125cf2a7..972f707c10 100644 --- a/internal/user/repository/view/model/token.go +++ b/internal/user/repository/view/model/token.go @@ -66,7 +66,8 @@ func TokenViewToModel(token *TokenView) *usr_model.TokenView { func (t *TokenView) AppendEventIfMyToken(event *es_models.Event) (err error) { view := new(TokenView) switch eventstore.EventType(event.Type) { - case user_repo.UserTokenAddedType: + case user_repo.UserTokenAddedType, + user_repo.PersonalAccessTokenAddedType: view.setRootData(event) err = view.setData(event) case user_repo.UserTokenRemovedType: @@ -94,6 +95,8 @@ func (t *TokenView) AppendEventIfMyToken(event *es_models.Event) (err error) { t.Deactivated = false } return nil + case user_repo.PersonalAccessTokenRemovedType: + return t.appendPATRemoved(event) default: return nil } @@ -168,6 +171,17 @@ func (t *TokenView) appendRefreshTokenRemoved(event *es_models.Event) error { return nil } +func (t *TokenView) appendPATRemoved(event *es_models.Event) error { + pat, err := eventToMap(event) + if err != nil { + return err + } + if pat["tokenId"] == t.ID && t.IsPAT { + t.Deactivated = true + } + return nil +} + func eventToMap(event *es_models.Event) (map[string]interface{}, error) { m := make(map[string]interface{}) if err := json.Unmarshal(event.Data, &m); err != nil { From 955e4d483ed2b5d85325f878bb802e358a3c7c21 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Fri, 22 Jul 2022 15:44:16 +0200 Subject: [PATCH 037/116] fix(console): show otp secret (#4030) --- .../app-secret-dialog.component.html | 46 +++++++++++++----- .../auth-factor-dialog.component.html | 48 ++++++++++++++----- .../auth-factor-dialog.component.scss | 23 +++++++++ .../auth-factor-dialog.component.ts | 5 ++ 4 files changed, 96 insertions(+), 26 deletions(-) diff --git a/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html b/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html index 091dbf26d6..2fca079282 100644 --- a/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html +++ b/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html @@ -1,33 +1,53 @@

- {{'APP.OIDC.CLIENTSECRET' | translate}} + {{ 'APP.OIDC.CLIENTSECRET' | translate }}

-

{{'APP.OIDC.CLIENTSECRET_DESCRIPTION' | translate}}

+

{{ 'APP.OIDC.CLIENTSECRET_DESCRIPTION' | translate }}

- ClientId: {{data.clientId}} -
- ClientSecret: {{data.clientSecret}} -
- {{'APP.OIDC.CLIENTSECRET_NOSECRET' | translate}} + {{ 'APP.OIDC.CLIENTSECRET_NOSECRET' | translate }}
- -
\ No newline at end of file +
diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.html b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.html index ad3dc7ea68..3fb62e7891 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.html +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.html @@ -1,15 +1,15 @@

- {{'USER.MFA.DIALOG.ADD_MFA_TITLE' | translate}} {{data?.number}} + {{ 'USER.MFA.DIALOG.ADD_MFA_TITLE' | translate }} {{ data?.number }}

-

{{'USER.MFA.DIALOG.ADD_MFA_DESCRIPTION' | translate}}

+

{{ 'USER.MFA.DIALOG.ADD_MFA_DESCRIPTION' | translate }}

- {{'USER.MFA.U2F' | translate}} + {{ 'USER.MFA.U2F' | translate }}
-

{{'USER.MFA.OTP_DIALOG_DESCRIPTION' | translate}}

+

{{ 'USER.MFA.OTP_DIALOG_DESCRIPTION' | translate }}

+ +
+ {{ otpsecret }} + +
@@ -39,25 +55,31 @@
-

{{'USER.MFA.U2F_DIALOG_DESCRIPTION' | translate}}

+

{{ 'USER.MFA.U2F_DIALOG_DESCRIPTION' | translate }}

- {{'USER.MFA.U2F_NAME' | translate}} + {{ 'USER.MFA.U2F_NAME' | translate }} -

{{u2fError}}

+

{{ u2fError }}

- -
\ No newline at end of file + diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss index 8be451056c..84ef35390c 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.scss @@ -33,6 +33,29 @@ display: flex; flex-direction: column; align-items: center; + + .qrcode-wrapper { + display: flex; + flex-direction: column; + align-items: center; + + .otp-flex { + display: flex; + align-items: center; + border: 1px solid #ffffff20; + border-radius: 0.5rem; + padding-left: 0.5rem; + justify-content: space-between; + + .overflow-auto { + overflow: auto; + + .desc { + font-size: 14px; + } + } + } + } } .u2f { diff --git a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts index 927a9e80a6..7a18557098 100644 --- a/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts +++ b/console/src/app/pages/users/user-detail/auth-user-detail/auth-factor-dialog/auth-factor-dialog.component.ts @@ -20,6 +20,8 @@ export enum AuthFactorType { }) export class AuthFactorDialogComponent { public otpurl: string = ''; + public otpsecret: string = ''; + public otpcode: string = ''; public u2fname: string = ''; @@ -29,6 +31,8 @@ export class AuthFactorDialogComponent { AuthFactorType: any = AuthFactorType; selectedType!: AuthFactorType; + + public copied: string = ''; constructor( private authService: GrpcAuthService, private toast: ToastService, @@ -48,6 +52,7 @@ export class AuthFactorDialogComponent { this.authService.addMyMultiFactorOTP().then( (otpresp) => { this.otpurl = otpresp.url; + this.otpsecret = otpresp.secret; }, (error) => { this.toast.showError(error); From ccde49b323829b11f26f22d6df8020297fbe49fe Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Mon, 25 Jul 2022 09:38:15 +0200 Subject: [PATCH 038/116] feat: extend claims of introspection response (#4018) * feat: extend claims of introspection response * update oidc lib --- docs/docs/apis/openidoauth/claims.md | 33 ++++++++++++++----------- docs/docs/apis/openidoauth/endpoints.md | 15 ++++++++--- go.mod | 2 +- go.sum | 9 ++----- internal/api/oidc/client.go | 7 ++++++ 5 files changed, 41 insertions(+), 25 deletions(-) diff --git a/docs/docs/apis/openidoauth/claims.md b/docs/docs/apis/openidoauth/claims.md index f63d694b98..4ebc9b2442 100644 --- a/docs/docs/apis/openidoauth/claims.md +++ b/docs/docs/apis/openidoauth/claims.md @@ -10,30 +10,32 @@ Please check below the matrix for an overview where which scope is asserted. | acr | No | No | Yes | No | | address | When requested | When requested | When requested amd response_type `id_token` | No | | amr | No | No | Yes | No | -| aud | No | No | Yes | When JWT | +| aud | No | Yes | Yes | When JWT | | auth_time | No | No | Yes | No | -| azp | No | No | Yes | When JWT | +| azp (client_id when Introspect) | No | Yes | Yes | When JWT | | email | When requested | When requested | When requested amd response_type `id_token` | No | | email_verified | When requested | When requested | When requested amd response_type `id_token` | No | -| exp | No | No | Yes | When JWT | +| exp | No | Yes | Yes | When JWT | | family_name | When requested | When requested | When requested amd response_type `id_token` | No | | gender | When requested | When requested | When requested amd response_type `id_token` | No | | given_name | When requested | When requested | When requested amd response_type `id_token` | No | -| iat | No | No | Yes | When JWT | -| iss | No | No | Yes | When JWT | +| iat | No | Yes | Yes | When JWT | +| iss | No | Yes | Yes | When JWT | +| jti | No | Yes | No | When JWT | | locale | When requested | When requested | When requested amd response_type `id_token` | No | | name | When requested | When requested | When requested amd response_type `id_token` | No | +| nbf | No | Yes | Yes | When JWT | | nonce | No | No | Yes | No | | phone | When requested | When requested | When requested amd response_type `id_token` | No | | phone_verified | When requested | When requested | When requested amd response_type `id_token` | No | -| preferred_username (username when Introspect ) | When requested | When requested | Yes | No | +| preferred_username (username when Introspect) | When requested | When requested | Yes | No | | sub | Yes | Yes | Yes | When JWT | | urn:zitadel:iam:org:domain:primary:{domainname} | When requested | When requested | When requested | When JWT and requested | | urn:zitadel:iam:org:project:roles:{rolename} | When requested | When requested | When requested or configured | When JWT and requested or configured | -| urn:zitadel:iam:user:metadata | When requested | When requested | When requested | When JWT and requested | -| urn:zitadel:iam:user:resourceowner:id | When requested | When requested | When requested | When JWT and requested | -| urn:zitadel:iam:user:resourceowner:name | When requested | When requested | When requested | When JWT and requested | -| urn:zitadel:iam:user:resourceowner:primary_domain | When requested | When requested | When requested | When JWT and requested | +| urn:zitadel:iam:user:metadata | When requested | When requested | When requested | When JWT and requested | +| urn:zitadel:iam:user:resourceowner:id | When requested | When requested | When requested | When JWT and requested | +| urn:zitadel:iam:user:resourceowner:name | When requested | When requested | When requested | When JWT and requested | +| urn:zitadel:iam:user:resourceowner:primary_domain | When requested | When requested | When requested | When JWT and requested | ## Standard Claims @@ -42,21 +44,24 @@ Please check below the matrix for an overview where which scope is asserted. | acr | TBA | TBA | | address | `Teufener Strasse 19, 9000 St. Gallen` | TBA | | amr | `pwd mfa` | Authentication Method References as defined in [RFC8176](https://tools.ietf.org/html/rfc8176) | -| aud | `69234237810729019` | By default all client id's and the project id is included | +| aud | `69234237810729019` | The audience of the token, by default all client id's and the project id are included | | auth_time | `1311280969` | Unix time of the authentication | | azp | `69234237810729234` | Client id of the client who requested the token | | email | `road.runner@acme.ch` | Email Address of the subject | | email_verified | `true` | Boolean if the email was verified by ZITADEL | -| exp | `1311281970` | Time the token expires as unix time | +| exp | `1311281970` | Time the token expires (as unix time) | | family_name | `Runner` | The subjects family name | | gender | `other` | Gender of the subject | | given_name | `Road` | Given name of the subject | -| iat | `1311280970` | Issued at time of the token as unix time | -| iss | `{your_domain}` | Issuing domain of a token | +| iat | `1311280970` | Time of the token was issued at (as unix time) | +| iss | `{your_domain}` | Issuing domain of a token | +| jti | `69234237813329048` | Unique id of the token | | locale | `en` | Language from the subject | | name | `Road Runner` | The subjects full name | +| nbf | `1311280970` | Time the token must not be used before (as unix time) | | nonce | `blQtVEJHNTF0WHhFQmhqZ0RqeHJsdzdkd2d...` | The nonce provided by the client | | phone | `+41 79 XXX XX XX` | Phone number provided by the user | +| phone_verified | `true` | Boolean if the phone was verified by ZITADEL | | preferred_username | `road.runner@acme.caos.ch` | ZITADEL's login name of the user. Consist of `username@primarydomain` | | sub | `77776025198584418` | Subject ID of the user | diff --git a/docs/docs/apis/openidoauth/endpoints.md b/docs/docs/apis/openidoauth/endpoints.md index 530a3a60c0..4723b8416e 100644 --- a/docs/docs/apis/openidoauth/endpoints.md +++ b/docs/docs/apis/openidoauth/endpoints.md @@ -382,9 +382,18 @@ is active and the requesting client is part of the token audience. If `active` is **true**, further information will be provided: -| Property | Description | -| --------- | ---------------------------------------------------- | -| scope | Space delimited list of scopes granted to the token. | +| Property | Description | +|------------|------------------------------------------------------------------------| +| aud | The audience of the token | +| client_id | The client_id of the application the token was issued to | +| exp | Time the token expires (as unix time) | +| iat | Time of the token was issued at (as unix time) | +| iss | Issuer of the token | +| jti | Unique id of the token | +| nbf | Time the token must not be used before (as unix time) | +| scope | Space delimited list of scopes granted to the token | +| token_type | Type of the inspected token. Value is always `Bearer` | +| username | ZITADEL's login name of the user. Consist of `username@primarydomain` | Additionally and depending on the granted scopes, information about the authorized user is provided. Check the [Claims](claims) page if a specific claims might be returned and for detailed description. diff --git a/go.mod b/go.mod index f445b14160..80c9649b6f 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/superseriousbusiness/exifremove v0.0.0-20210330092427-6acd27eac203 github.com/ttacon/libphonenumber v1.2.1 github.com/zitadel/logging v0.3.4 - github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.3 + github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.4 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.27.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.27.0 go.opentelemetry.io/otel v1.2.0 diff --git a/go.sum b/go.sum index 0dd8a79643..1c77d75086 100644 --- a/go.sum +++ b/go.sum @@ -790,7 +790,6 @@ github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMB github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -864,12 +863,10 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -github.com/zitadel/logging v0.3.3 h1:/nAoki9HFJK+qMLBVY5Jhbfp/6o3YLK49Tw5j2oRhjM= -github.com/zitadel/logging v0.3.3/go.mod h1:aPpLQhE+v6ocNK0TWrBrd363hZ95KcI17Q1ixAQwZF0= github.com/zitadel/logging v0.3.4 h1:9hZsTjMMTE3X2LUi0xcF9Q9EdLo+FAezeu52ireBbHM= github.com/zitadel/logging v0.3.4/go.mod h1:aPpLQhE+v6ocNK0TWrBrd363hZ95KcI17Q1ixAQwZF0= -github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.3 h1:Z0WrhhjPLrbywD+6226Ca7Mvt9VKAU3J/ojYq24CUEY= -github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.3/go.mod h1:uoJw5Xc6HXfnQbNZiLbld9dED0/8UMu0M4gOipTRZBA= +github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.4 h1:llGVhiHOuI2SXF6yR9s5podxe8n7Md0lpo/9cr37AkU= +github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.4/go.mod h1:uoJw5Xc6HXfnQbNZiLbld9dED0/8UMu0M4gOipTRZBA= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= @@ -1174,8 +1171,6 @@ golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/internal/api/oidc/client.go b/internal/api/oidc/client.go index 7c0326b9af..f865e57869 100644 --- a/internal/api/oidc/client.go +++ b/internal/api/oidc/client.go @@ -176,6 +176,13 @@ func (o *OPStorage) SetIntrospectionFromToken(ctx context.Context, introspection } introspection.SetScopes(token.Scopes) introspection.SetClientID(token.ApplicationID) + introspection.SetTokenType(oidc.BearerToken) + introspection.SetExpiration(token.Expiration) + introspection.SetIssuedAt(token.CreationDate) + introspection.SetNotBefore(token.CreationDate) + introspection.SetAudience(token.Audience) + introspection.SetIssuer(op.IssuerFromContext(ctx)) + introspection.SetJWTID(token.ID) return nil } } From 6bb3220186cca0deb4eae29aa38651bc36e060ae Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Mon, 25 Jul 2022 13:54:05 +0200 Subject: [PATCH 039/116] chore: speed up build (#4017) * better cache dependencies * ignore local statik.go * remove previously generated statik.go file * remove redundant .dockerignore --- .goreleaser.yaml | 2 ++ build/console/Dockerfile | 10 ++++++---- build/zitadel/Dockerfile | 18 ++++++++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 0e652407c1..cbe60f4156 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -9,6 +9,8 @@ release: before: hooks: + # this file would invalidate go source caches + - sh -c "rm openapi/statik/statik.go || true" - docker build -f build/grpc/Dockerfile -t zitadel-base:local . - docker build -f build/zitadel/Dockerfile . -t zitadel-go-test --target go-codecov -o .artifacts/codecov - docker build -f build/zitadel/Dockerfile . -t zitadel-go-base --target go-copy -o .artifacts/grpc/go-client diff --git a/build/console/Dockerfile b/build/console/Dockerfile index fd4d2d045e..7a3d5f7f79 100644 --- a/build/console/Dockerfile +++ b/build/console/Dockerfile @@ -3,10 +3,16 @@ ARG NODE_VERSION=16 ####################### ## With this step we prepare all node_modules, this helps caching the build ## Speed up this step by mounting your local node_modules directory +## We also copy and generate the source code ####################### FROM node:${NODE_VERSION} as npm-base WORKDIR /console +# Dependencies +COPY console/package.json console/package-lock.json ./ +RUN npm ci + +# Sources COPY console . COPY --from=zitadel-base:local /proto /proto COPY --from=zitadel-base:local /usr/local/bin /usr/local/bin/. @@ -24,12 +30,8 @@ COPY --from=npm-base /console/src/app/proto/generated /console/src/app/proto/gen ####################### FROM npm-base as angular-build -COPY console/package.json console/package-lock.json ./ -RUN npm ci - RUN npm run lint RUN npm run prodbuild -RUN ls -la /console/dist/console ####################### ## Only Copy Assets diff --git a/build/zitadel/Dockerfile b/build/zitadel/Dockerfile index d57b21238b..1b0b8ed2f7 100644 --- a/build/zitadel/Dockerfile +++ b/build/zitadel/Dockerfile @@ -5,18 +5,17 @@ ARG GO_VERSION=1.17 ## Speed up this step by mounting your local go mod pkg directory ####################### FROM golang:${GO_VERSION} as go-dep -RUN mkdir -p src/github.com/zitadel/zitadel WORKDIR /go/src/github.com/zitadel/zitadel #download modules -COPY . . +COPY go.mod ./ +COPY go.sum ./ RUN go mod download # install tools COPY tools ./tools RUN ./tools/install.sh - ####################### ## generates static files ####################### @@ -47,17 +46,20 @@ COPY internal/api/assets/generator internal/api/assets/generator COPY internal/config internal/config COPY internal/errors internal/errors -RUN build/zitadel/generate-grpc.sh \ - && go generate openapi/statik/generate.go \ - && mkdir -p docs/apis/assets/ \ - && go run internal/api/assets/generator/asset_generator.go -directory=internal/api/assets/generator/ -assets=docs/apis/assets/assets.md +RUN build/zitadel/generate-grpc.sh && \ + go generate openapi/statik/generate.go && \ + mkdir -p docs/apis/assets/ && \ + go run internal/api/assets/generator/asset_generator.go -directory=internal/api/assets/generator/ -assets=docs/apis/assets/assets.md ####################### ## Go base build ####################### FROM go-stub as go-base # copy remaining zitadel files -COPY . . +COPY cmd cmd +COPY internal internal +COPY pkg pkg +COPY openapi openapi ####################### ## copy for local dev From 7c491381de67b7de953b504391b02c17fa5b2421 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 25 Jul 2022 14:26:36 +0200 Subject: [PATCH 040/116] feat(console): show instance detail (#4032) feat: instance detail Co-authored-by: Livio Spring --- .../modules/info-row/info-row.component.html | 60 +++++++++++++++++++ .../modules/info-row/info-row.component.ts | 3 + .../pages/instance/instance.component.html | 57 +++++++++--------- .../pages/instance/instance.component.scss | 44 +------------- .../app/pages/instance/instance.component.ts | 15 ++++- .../src/app/pages/instance/instance.module.ts | 4 ++ console/src/app/services/admin.service.ts | 7 +++ console/src/assets/i18n/de.json | 13 ++++ console/src/assets/i18n/en.json | 13 ++++ console/src/assets/i18n/fr.json | 13 ++++ console/src/assets/i18n/it.json | 13 ++++ 11 files changed, 171 insertions(+), 71 deletions(-) diff --git a/console/src/app/modules/info-row/info-row.component.html b/console/src/app/modules/info-row/info-row.component.html index 292623a8d4..7ebc4c4c85 100644 --- a/console/src/app/modules/info-row/info-row.component.html +++ b/console/src/app/modules/info-row/info-row.component.html @@ -48,6 +48,66 @@ +
+
+

{{ 'IAM.PAGES.STATE' | translate }}

+

+ {{ 'IAM.STATE.' + instance.state | translate }} +

+
+ +
+

{{ 'RESOURCEID' | translate }}

+

{{ instance.id }}

+
+ +
+

{{ 'NAME' | translate }}

+

{{ instance.name }}

+
+ +
+

{{ 'VERSION' | translate }}

+

{{ instance.version }}

+
+ +
+

{{ 'IAM.PAGES.DOMAINLIST' | translate }}

+
+ +
+
+ +
+

{{ 'ORG.PAGES.CREATIONDATE' | translate }}

+

+ {{ instance.details.creationDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }} +

+
+ +
+

{{ 'ORG.PAGES.DATECHANGED' | translate }}

+

+ {{ instance.details.changeDate | timestampToDate | localizedDate: 'dd. MMMM YYYY, HH:mm' }} +

+
+
+

{{ 'ORG.PAGES.STATE' | translate }}

diff --git a/console/src/app/modules/info-row/info-row.component.ts b/console/src/app/modules/info-row/info-row.component.ts index 79ccb4d9b0..0b964af47a 100644 --- a/console/src/app/modules/info-row/info-row.component.ts +++ b/console/src/app/modules/info-row/info-row.component.ts @@ -1,6 +1,7 @@ import { Component, Input } from '@angular/core'; import { App, AppState } from 'src/app/proto/generated/zitadel/app_pb'; import { IDP, IDPState } from 'src/app/proto/generated/zitadel/idp_pb'; +import { InstanceDetail, State } from 'src/app/proto/generated/zitadel/instance_pb'; import { Org, OrgState } from 'src/app/proto/generated/zitadel/org_pb'; import { GrantedProject, Project, ProjectGrantState, ProjectState } from 'src/app/proto/generated/zitadel/project_pb'; import { User, UserState } from 'src/app/proto/generated/zitadel/user_pb'; @@ -13,12 +14,14 @@ import { User, UserState } from 'src/app/proto/generated/zitadel/user_pb'; export class InfoRowComponent { @Input() public user!: User.AsObject; @Input() public org!: Org.AsObject; + @Input() public instance!: InstanceDetail.AsObject; @Input() public app!: App.AsObject; @Input() public idp!: IDP.AsObject; @Input() public project!: Project.AsObject; @Input() public grantedProject!: GrantedProject.AsObject; public UserState: any = UserState; + public State: any = State; public OrgState: any = OrgState; public AppState: any = AppState; public IDPState: any = IDPState; diff --git a/console/src/app/pages/instance/instance.component.html b/console/src/app/pages/instance/instance.component.html index 5ad2bbf290..2e311ff9d9 100644 --- a/console/src/app/pages/instance/instance.component.html +++ b/console/src/app/pages/instance/instance.component.html @@ -1,32 +1,33 @@ -
-
-
-
-
-

{{ 'IAM.TITLE' | translate }}

-
-

{{ 'IAM.DESCRIPTION' | translate }}

-
- - - -
-
-
-
-

{{ 'ORG.LIST.TITLE' | translate }}

+ + + -

{{ 'ORG.LIST.DESCRIPTION' | translate }}

+ +
+ +
+

{{ 'ORG.LIST.TITLE' | translate }}

+ +

{{ 'ORG.LIST.DESCRIPTION' | translate }}

diff --git a/console/src/app/pages/instance/instance.component.scss b/console/src/app/pages/instance/instance.component.scss index 69494c47e3..ea9a2c1a1c 100644 --- a/console/src/app/pages/instance/instance.component.scss +++ b/console/src/app/pages/instance/instance.component.scss @@ -4,55 +4,15 @@ $foreground: map-get($theme, foreground); $is-dark-theme: map-get($theme, is-dark); $background: map-get($theme, background); - - .iam-top { - border-bottom: 1px solid map-get($foreground, divider); - margin: 0 -2rem; - padding: 2rem 2rem 1rem 2rem; - background: map-get($background, metadata-section); - - @media only screen and (max-width: 500px) { - margin: 0 -1rem; - } - - .iam-top-row { - display: flex; - align-items: center; - padding-bottom: 1rem; - - .iam-title-row { - display: flex; - align-items: center; - - .iam-title { - margin: 0; - margin-right: 0.5rem; - } - } - - .iam-sub { - margin: 1rem 0 0 0; - font-size: 14px; - } - - .iam-top-desc { - font-size: 14px; - } - - .fill-space { - flex: 1; - } - } - } } -.org-table-title { +.instance-table-title { font-size: 1.2rem; letter-spacing: 0.05em; text-transform: uppercase; margin-top: 2rem; } -.org-table-desc { +.instance-table-desc { font-size: 14px; } diff --git a/console/src/app/pages/instance/instance.component.ts b/console/src/app/pages/instance/instance.component.ts index ffa5f5d6a7..539826407b 100644 --- a/console/src/app/pages/instance/instance.component.ts +++ b/console/src/app/pages/instance/instance.component.ts @@ -5,6 +5,7 @@ import { BehaviorSubject, from, Observable, of } from 'rxjs'; import { catchError, finalize, map } from 'rxjs/operators'; import { CreationType, MemberCreateDialogComponent } from 'src/app/modules/add-member-dialog/member-create-dialog.component'; import { PolicyComponentServiceType } from 'src/app/modules/policies/policy-component-types.enum'; +import { InstanceDetail, State } from 'src/app/proto/generated/zitadel/instance_pb'; import { Member } from 'src/app/proto/generated/zitadel/member_pb'; import { User } from 'src/app/proto/generated/zitadel/user_pb'; import { AdminService } from 'src/app/services/admin.service'; @@ -17,12 +18,13 @@ import { ToastService } from 'src/app/services/toast.service'; styleUrls: ['./instance.component.scss'], }) export class InstanceComponent { + public instance!: InstanceDetail.AsObject; public PolicyComponentServiceType: any = PolicyComponentServiceType; private loadingSubject: BehaviorSubject = new BehaviorSubject(false); public loading$: Observable = this.loadingSubject.asObservable(); public totalMemberResult: number = 0; public membersSubject: BehaviorSubject = new BehaviorSubject([]); - + public State: any = State; constructor( public adminService: AdminService, private dialog: MatDialog, @@ -39,6 +41,17 @@ export class InstanceComponent { }); breadcrumbService.setBreadcrumb([instanceBread]); + + this.adminService + .getMyInstance() + .then((instanceResp) => { + if (instanceResp.instance) { + this.instance = instanceResp.instance; + } + }) + .catch((error) => { + this.toast.showError(error); + }); } public loadMembers(): void { diff --git a/console/src/app/pages/instance/instance.module.ts b/console/src/app/pages/instance/instance.module.ts index 3d7e301c89..f316b37638 100644 --- a/console/src/app/pages/instance/instance.module.ts +++ b/console/src/app/pages/instance/instance.module.ts @@ -16,12 +16,14 @@ import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { CardModule } from 'src/app/modules/card/card.module'; import { ChangesModule } from 'src/app/modules/changes/changes.module'; import { ContributorsModule } from 'src/app/modules/contributors/contributors.module'; +import { InfoRowModule } from 'src/app/modules/info-row/info-row.module'; import { InputModule } from 'src/app/modules/input/input.module'; import { MetaLayoutModule } from 'src/app/modules/meta-layout/meta-layout.module'; import { OrgTableModule } from 'src/app/modules/org-table/org-table.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { SettingsGridModule } from 'src/app/modules/settings-grid/settings-grid.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; +import { TopViewModule } from 'src/app/modules/top-view/top-view.module'; import { HasRolePipeModule } from 'src/app/pipes/has-role-pipe/has-role-pipe.module'; import { LocalizedDatePipeModule } from 'src/app/pipes/localized-date-pipe/localized-date-pipe.module'; import { TimestampToDatePipeModule } from 'src/app/pipes/timestamp-to-date-pipe/timestamp-to-date-pipe.module'; @@ -43,7 +45,9 @@ import { InstanceComponent } from './instance.component'; MatCheckboxModule, MetaLayoutModule, MatIconModule, + TopViewModule, MatTableModule, + InfoRowModule, InputModule, MatSortModule, MatTooltipModule, diff --git a/console/src/app/services/admin.service.ts b/console/src/app/services/admin.service.ts index 808facaf5a..50a4ba9e4f 100644 --- a/console/src/app/services/admin.service.ts +++ b/console/src/app/services/admin.service.ts @@ -73,6 +73,8 @@ import { GetLoginPolicyResponse, GetLogNotificationProviderRequest, GetLogNotificationProviderResponse, + GetMyInstanceRequest, + GetMyInstanceResponse, GetOIDCSettingsRequest, GetOIDCSettingsResponse, GetPasswordAgePolicyRequest, @@ -404,6 +406,11 @@ export class AdminService { return this.grpcService.admin.removeFailedEvent(req, null).then((resp) => resp.toObject()); } + public getMyInstance(): Promise { + const req = new GetMyInstanceRequest(); + return this.grpcService.admin.getMyInstance(req, null).then((resp) => resp.toObject()); + } + public getPrivacyPolicy(): Promise { const req = new GetPrivacyPolicyRequest(); return this.grpcService.admin.getPrivacyPolicy(req, null).then((resp) => resp.toObject()); diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index 63fbc0806c..dd17b1d248 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -194,6 +194,8 @@ } }, "RESOURCEID": "Ressourcen-ID", + "NAME": "Name", + "VERSION": "Version", "TABLE": { "NOROWS": "Keine Daten" }, @@ -707,6 +709,17 @@ "TITLE": "Manager", "DESCRIPTION": "Diese Manager können instanzweite Einstellungen vornehmen." }, + "PAGES": { + "STATE": "Status", + "DOMAINLIST": "Domains" + }, + "STATE": { + "0": "Unspezifisch", + "1": "Wird erstellt", + "2": "Aktiv", + "3": "Wird gestoppt", + "4": "Gestoppt" + }, "VIEWS": { "TITLE": "Views", "DESCRIPTION": "Diese Ansicht zeigt die Anzeigen von ZITADEL. Diese können bei Bedarf zurückgesetzt werden.", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index fce53f87d2..8cfa999c8b 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -194,6 +194,8 @@ } }, "RESOURCEID": "Resource Id", + "NAME": "Name", + "VERSION": "Version", "TABLE": { "NOROWS": "No data" }, @@ -707,6 +709,17 @@ "TITLE": "Managers", "DESCRIPTION": "These Managers are allowed to make changes in your instance." }, + "PAGES": { + "STATE": "Status", + "DOMAINLIST": "Domains" + }, + "STATE": { + "0": "Unspecified", + "1": "Creating", + "2": "Running", + "3": "Stopping", + "4": "Stopped" + }, "VIEWS": { "TITLE": "Views", "DESCRIPTION": "This card shows your ZITADEL views.", diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index e441ec3b8c..6c347e6845 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -194,6 +194,8 @@ } }, "RESOURCEID": "Id de la ressource", + "NAME": "Name", + "VERSION": "Version", "TABLE": { "NOROWS": "Pas de données" }, @@ -707,6 +709,17 @@ "TITLE": "Managers", "DESCRIPTION": "Ces gestionnaires sont autorisés à effectuer des changements dans votre instance." }, + "PAGES": { + "STATE": "Statut", + "DOMAINLIST": "Domaines" + }, + "STATE": { + "0": "Inconnu", + "1": "Créer", + "2": "Actif", + "3": "Arrêt", + "4": "Arrêté" + }, "VIEWS": { "TITLE": "Vues", "DESCRIPTION": "Cette carte montre vos vues ZITADEL.", diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index b8629f3a67..3050fa1763 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -194,6 +194,8 @@ } }, "RESOURCEID": "Resource ID", + "NAME": "Name", + "VERSION": "Versione", "TABLE": { "NOROWS": "Nessun dato" }, @@ -707,6 +709,17 @@ "TITLE": "Manager", "DESCRIPTION": "Questi manager possono modificare le impostazioni dell'istanza." }, + "PAGES": { + "STATE": "Stato", + "DOMAINLIST": "Domini" + }, + "STATE": { + "0": "Non specifico", + "1": "In fase di creazione", + "2": "Attiva", + "3": "In fase di arresto", + "4": "Arrestata" + }, "VIEWS": { "TITLE": "Views", "DESCRIPTION": "Questa carta mostra i tuoi view ZITADEL.", From 0ebda7caaadbf8aa3da2d1fa0716629688de98a7 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 25 Jul 2022 15:59:45 +0200 Subject: [PATCH 041/116] docs: improve template handling for search results (#4043) * docs: improve template handling for search results * chore: remove draft again * chore: change configure --- .../configure/{compose.mdx => _compose.mdx} | 0 .../configure/{helm.mdx => _helm.mdx} | 0 .../configure/{linuxunix.mdx => _linuxunix.mdx} | 0 .../guides/installation/configure/configure.mdx | 7 +++---- .../guides/installation/configure/windows.mdx | 2 -- .../run/{compose.mdx => _compose.mdx} | 0 .../run/{defaultuser.mdx => _defaultuser.mdx} | 0 .../installation/run/{helm.mdx => _helm.mdx} | 0 .../run/{knative.mdx => _knative.mdx} | 0 .../installation/run/{linux.mdx => _linux.mdx} | 0 .../installation/run/{macos.mdx => _macos.mdx} | 0 .../{nextselfhosted.mdx => _nextselfhosted.mdx} | 0 docs/docs/guides/installation/run/run.mdx | 15 +++++++-------- docs/docs/guides/installation/run/windows.mdx | 2 -- 14 files changed, 10 insertions(+), 16 deletions(-) rename docs/docs/guides/installation/configure/{compose.mdx => _compose.mdx} (100%) rename docs/docs/guides/installation/configure/{helm.mdx => _helm.mdx} (100%) rename docs/docs/guides/installation/configure/{linuxunix.mdx => _linuxunix.mdx} (100%) delete mode 100644 docs/docs/guides/installation/configure/windows.mdx rename docs/docs/guides/installation/run/{compose.mdx => _compose.mdx} (100%) rename docs/docs/guides/installation/run/{defaultuser.mdx => _defaultuser.mdx} (100%) rename docs/docs/guides/installation/run/{helm.mdx => _helm.mdx} (100%) rename docs/docs/guides/installation/run/{knative.mdx => _knative.mdx} (100%) rename docs/docs/guides/installation/run/{linux.mdx => _linux.mdx} (100%) rename docs/docs/guides/installation/run/{macos.mdx => _macos.mdx} (100%) rename docs/docs/guides/installation/run/{nextselfhosted.mdx => _nextselfhosted.mdx} (100%) delete mode 100644 docs/docs/guides/installation/run/windows.mdx diff --git a/docs/docs/guides/installation/configure/compose.mdx b/docs/docs/guides/installation/configure/_compose.mdx similarity index 100% rename from docs/docs/guides/installation/configure/compose.mdx rename to docs/docs/guides/installation/configure/_compose.mdx diff --git a/docs/docs/guides/installation/configure/helm.mdx b/docs/docs/guides/installation/configure/_helm.mdx similarity index 100% rename from docs/docs/guides/installation/configure/helm.mdx rename to docs/docs/guides/installation/configure/_helm.mdx diff --git a/docs/docs/guides/installation/configure/linuxunix.mdx b/docs/docs/guides/installation/configure/_linuxunix.mdx similarity index 100% rename from docs/docs/guides/installation/configure/linuxunix.mdx rename to docs/docs/guides/installation/configure/_linuxunix.mdx diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/installation/configure/configure.mdx index 7f06b44667..cc000515f4 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/installation/configure/configure.mdx @@ -4,10 +4,9 @@ title: Configure import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -import LinuxUnix from './linuxunix.mdx' -import Windows from './windows.mdx' -import Compose from './compose.mdx' -import Helm from './helm.mdx' +import LinuxUnix from './_linuxunix.mdx' +import Compose from './_compose.mdx' +import Helm from './_helm.mdx' # Configure ZITADEL diff --git a/docs/docs/guides/installation/configure/windows.mdx b/docs/docs/guides/installation/configure/windows.mdx deleted file mode 100644 index f2074b0c3e..0000000000 --- a/docs/docs/guides/installation/configure/windows.mdx +++ /dev/null @@ -1,2 +0,0 @@ - -Coming soon diff --git a/docs/docs/guides/installation/run/compose.mdx b/docs/docs/guides/installation/run/_compose.mdx similarity index 100% rename from docs/docs/guides/installation/run/compose.mdx rename to docs/docs/guides/installation/run/_compose.mdx diff --git a/docs/docs/guides/installation/run/defaultuser.mdx b/docs/docs/guides/installation/run/_defaultuser.mdx similarity index 100% rename from docs/docs/guides/installation/run/defaultuser.mdx rename to docs/docs/guides/installation/run/_defaultuser.mdx diff --git a/docs/docs/guides/installation/run/helm.mdx b/docs/docs/guides/installation/run/_helm.mdx similarity index 100% rename from docs/docs/guides/installation/run/helm.mdx rename to docs/docs/guides/installation/run/_helm.mdx diff --git a/docs/docs/guides/installation/run/knative.mdx b/docs/docs/guides/installation/run/_knative.mdx similarity index 100% rename from docs/docs/guides/installation/run/knative.mdx rename to docs/docs/guides/installation/run/_knative.mdx diff --git a/docs/docs/guides/installation/run/linux.mdx b/docs/docs/guides/installation/run/_linux.mdx similarity index 100% rename from docs/docs/guides/installation/run/linux.mdx rename to docs/docs/guides/installation/run/_linux.mdx diff --git a/docs/docs/guides/installation/run/macos.mdx b/docs/docs/guides/installation/run/_macos.mdx similarity index 100% rename from docs/docs/guides/installation/run/macos.mdx rename to docs/docs/guides/installation/run/_macos.mdx diff --git a/docs/docs/guides/installation/run/nextselfhosted.mdx b/docs/docs/guides/installation/run/_nextselfhosted.mdx similarity index 100% rename from docs/docs/guides/installation/run/nextselfhosted.mdx rename to docs/docs/guides/installation/run/_nextselfhosted.mdx diff --git a/docs/docs/guides/installation/run/run.mdx b/docs/docs/guides/installation/run/run.mdx index c0aa876468..c700428afb 100644 --- a/docs/docs/guides/installation/run/run.mdx +++ b/docs/docs/guides/installation/run/run.mdx @@ -4,14 +4,13 @@ title: Run import Tabs from "@theme/Tabs"; import TabItem from "@theme/TabItem"; -import Linux from './linux.mdx' -import MacOS from './macos.mdx' -import Windows from './windows.mdx' -import Compose from './compose.mdx' -import Helm from './helm.mdx' -import Knative from './knative.mdx' -import NextSelfHosted from './nextselfhosted.mdx' -import DefaultUser from './defaultuser.mdx' +import Linux from './_linux.mdx' +import MacOS from './_macos.mdx' +import Compose from './_compose.mdx' +import Helm from './_helm.mdx' +import Knative from './_knative.mdx' +import NextSelfHosted from './_nextselfhosted.mdx' +import DefaultUser from './_defaultuser.mdx' # Run ZITADEL diff --git a/docs/docs/guides/installation/run/windows.mdx b/docs/docs/guides/installation/run/windows.mdx deleted file mode 100644 index f2074b0c3e..0000000000 --- a/docs/docs/guides/installation/run/windows.mdx +++ /dev/null @@ -1,2 +0,0 @@ - -Coming soon From 9347a196c04f076d0a9eab734382301615f8b23c Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Tue, 26 Jul 2022 06:41:49 +0200 Subject: [PATCH 042/116] fix(console): statehandler (#4042) Co-authored-by: Livio Spring --- console/src/app/app.module.ts | 6 ++++++ .../services/statehandler/statehandler-processor.service.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/console/src/app/app.module.ts b/console/src/app/app.module.ts index 622abcf60f..ce5e780988 100644 --- a/console/src/app/app.module.ts +++ b/console/src/app/app.module.ts @@ -15,6 +15,9 @@ import { TranslateLoader, TranslateModule } from '@ngx-translate/core'; import { AuthConfig, OAuthModule, OAuthStorage } from 'angular-oauth2-oidc'; import { QuicklinkModule } from 'ngx-quicklink'; import { from, Observable } from 'rxjs'; +import { AuthGuard } from 'src/app/guards/auth.guard'; +import { RoleGuard } from 'src/app/guards/role.guard'; +import { UserGuard } from 'src/app/guards/user.guard'; import { InfoOverlayModule } from 'src/app/modules/info-overlay/info-overlay.module'; import { AssetService } from 'src/app/services/asset.service'; @@ -120,6 +123,9 @@ const authConfig: AuthConfig = { ServiceWorkerModule.register('ngsw-worker.js', { enabled: false }), ], providers: [ + AuthGuard, + RoleGuard, + UserGuard, ThemeService, { provide: APP_INITIALIZER, diff --git a/console/src/app/services/statehandler/statehandler-processor.service.ts b/console/src/app/services/statehandler/statehandler-processor.service.ts index 2adad0e3af..89da854cf4 100644 --- a/console/src/app/services/statehandler/statehandler-processor.service.ts +++ b/console/src/app/services/statehandler/statehandler-processor.service.ts @@ -13,7 +13,7 @@ export class StatehandlerProcessorServiceImpl implements StatehandlerProcessorSe constructor(private location: Location, private router: Router) {} public createState(url: string): string { - const externalUrl = this.location.prepareExternalUrl(url); + const externalUrl = url; const urlId = uuidv4(); sessionStorage.setItem(urlId, externalUrl); return urlId; From e8a01abcdbec451cd173250ee07dbe9c838ae407 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Tue, 26 Jul 2022 09:30:54 +0200 Subject: [PATCH 043/116] fix(console): set user language (#4028) fix: cnsl user language Co-authored-by: Livio Spring --- .../user-create/user-create.component.ts | 6 +- .../metadata-dialog.component.ts | 23 ++- .../user-detail/user-detail.component.ts | 6 +- console/src/app/services/grpc-auth.service.ts | 182 ++++++++++-------- 4 files changed, 129 insertions(+), 88 deletions(-) diff --git a/console/src/app/pages/users/user-create/user-create.component.ts b/console/src/app/pages/users/user-create/user-create.component.ts index b99e8475b8..ee45e04e5d 100644 --- a/console/src/app/pages/users/user-create/user-create.component.ts +++ b/console/src/app/pages/users/user-create/user-create.component.ts @@ -43,7 +43,7 @@ function passwordConfirmValidator(c: AbstractControl): any { export class UserCreateComponent implements OnDestroy { public user: AddHumanUserRequest.AsObject = new AddHumanUserRequest().toObject(); public genders: Gender[] = [Gender.GENDER_FEMALE, Gender.GENDER_MALE, Gender.GENDER_UNSPECIFIED]; - public languages: string[] = ['de', 'en']; + public languages: string[] = ['de', 'en', 'it', 'fr']; public userForm!: UntypedFormGroup; public pwdForm!: UntypedFormGroup; @@ -94,6 +94,10 @@ export class UserCreateComponent implements OnDestroy { this.envSuffixLabel = this.envSuffix(); this.changeDetRef.detectChanges(); }); + + this.mgmtService.getSupportedLanguages().then((lang) => { + this.languages = lang.languagesList; + }); } public close(): void { diff --git a/console/src/app/pages/users/user-detail/metadata-dialog/metadata-dialog.component.ts b/console/src/app/pages/users/user-detail/metadata-dialog/metadata-dialog.component.ts index 4f62920244..f4db7b7981 100644 --- a/console/src/app/pages/users/user-detail/metadata-dialog/metadata-dialog.component.ts +++ b/console/src/app/pages/users/user-detail/metadata-dialog/metadata-dialog.component.ts @@ -1,7 +1,9 @@ import { Component, Inject } from '@angular/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { Buffer } from 'buffer'; import { Timestamp } from 'google-protobuf/google/protobuf/timestamp_pb'; import { Metadata } from 'src/app/proto/generated/zitadel/metadata_pb'; +import { GrpcAuthService } from 'src/app/services/grpc-auth.service'; import { ManagementService } from 'src/app/services/mgmt.service'; import { ToastService } from 'src/app/services/toast.service'; @@ -17,7 +19,8 @@ export class MetadataDialogComponent { public ts!: Timestamp.AsObject | undefined; constructor( - private service: ManagementService, + private managementService: ManagementService, + private authService: GrpcAuthService, private toast: ToastService, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: any, @@ -46,17 +49,25 @@ export class MetadataDialogComponent { public loadMetadata(): Promise { this.loading = true; if (this.injData.userId) { - return this.service.listUserMetadata(this.injData.userId).then((resp) => { + return this.managementService.listUserMetadata(this.injData.userId).then((resp) => { this.metadata = resp.resultList.map((md) => { return { key: md.key, - value: atob(md.value as string), + value: Buffer.from(md.value as string, 'base64'), }; }); this.ts = resp.details?.viewTimestamp; }); } else { - return Promise.reject(); + return this.authService.listMyMetadata().then((resp) => { + this.metadata = resp.resultList.map((md) => { + return { + key: md.key, + value: Buffer.from(md.value as string, 'base64'), + }; + }); + this.ts = resp.details?.viewTimestamp; + }); } } @@ -93,7 +104,7 @@ export class MetadataDialogComponent { public setMetadata(key: string, value: string): void { if (key && value) { - this.service + this.managementService .setUserMetadata(key, btoa(value), this.injData.userId) .then(() => { this.toast.showInfo('USER.METADATA.SETSUCCESS', true); @@ -105,7 +116,7 @@ export class MetadataDialogComponent { } public removeMetadata(key: string): Promise { - return this.service + return this.managementService .removeUserMetadata(key, this.injData.userId) .then((resp) => { this.toast.showInfo('USER.METADATA.REMOVESUCCESS', true); diff --git a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts index 44f138f9fd..a42a22f9be 100644 --- a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts +++ b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.ts @@ -39,7 +39,7 @@ export class UserDetailComponent implements OnInit { public user!: User.AsObject; public metadata: Metadata.AsObject[] = []; public genders: Gender[] = [Gender.GENDER_MALE, Gender.GENDER_FEMALE, Gender.GENDER_DIVERSE]; - public languages: string[] = ['de', 'en']; + public languages: string[] = ['de', 'en', 'it', 'fr']; public ChangeType: any = ChangeType; public loading: boolean = true; @@ -91,6 +91,10 @@ export class UserDetailComponent implements OnInit { this.mediaMatcher.matchMedia(mediaq).onchange = (small) => { this.changeSelection(small.matches); }; + + this.mgmtUserService.getSupportedLanguages().then((lang) => { + this.languages = lang.languagesList; + }); } private changeSelection(small: boolean): void { diff --git a/console/src/app/services/grpc-auth.service.ts b/console/src/app/services/grpc-auth.service.ts index 97af838410..1ed212e900 100644 --- a/console/src/app/services/grpc-auth.service.ts +++ b/console/src/app/services/grpc-auth.service.ts @@ -5,88 +5,91 @@ import { BehaviorSubject, from, merge, Observable, of, Subject } from 'rxjs'; import { catchError, filter, finalize, map, mergeMap, switchMap, take, timeout } from 'rxjs/operators'; import { - AddMyAuthFactorOTPRequest, - AddMyAuthFactorOTPResponse, - AddMyAuthFactorU2FRequest, - AddMyAuthFactorU2FResponse, - AddMyPasswordlessLinkRequest, - AddMyPasswordlessLinkResponse, - AddMyPasswordlessRequest, - AddMyPasswordlessResponse, - GetMyEmailRequest, - GetMyEmailResponse, - GetMyLabelPolicyRequest, - GetMyLabelPolicyResponse, - GetMyPasswordComplexityPolicyRequest, - GetMyPasswordComplexityPolicyResponse, - GetMyPhoneRequest, - GetMyPhoneResponse, - GetMyPrivacyPolicyRequest, - GetMyPrivacyPolicyResponse, - GetMyProfileRequest, - GetMyProfileResponse, - GetMyUserRequest, - GetMyUserResponse, - GetSupportedLanguagesRequest, - GetSupportedLanguagesResponse, - ListMyAuthFactorsRequest, - ListMyAuthFactorsResponse, - ListMyLinkedIDPsRequest, - ListMyLinkedIDPsResponse, - ListMyMembershipsRequest, - ListMyMembershipsResponse, - ListMyPasswordlessRequest, - ListMyPasswordlessResponse, - ListMyProjectOrgsRequest, - ListMyProjectOrgsResponse, - ListMyUserChangesRequest, - ListMyUserChangesResponse, - ListMyUserGrantsRequest, - ListMyUserGrantsResponse, - ListMyUserSessionsRequest, - ListMyUserSessionsResponse, - ListMyZitadelPermissionsRequest, - ListMyZitadelPermissionsResponse, - RemoveMyAuthFactorOTPRequest, - RemoveMyAuthFactorOTPResponse, - RemoveMyAuthFactorU2FRequest, - RemoveMyAuthFactorU2FResponse, - RemoveMyAvatarRequest, - RemoveMyAvatarResponse, - RemoveMyLinkedIDPRequest, - RemoveMyLinkedIDPResponse, - RemoveMyPasswordlessRequest, - RemoveMyPasswordlessResponse, - RemoveMyPhoneRequest, - RemoveMyPhoneResponse, - RemoveMyUserRequest, - RemoveMyUserResponse, - ResendMyEmailVerificationRequest, - ResendMyEmailVerificationResponse, - ResendMyPhoneVerificationRequest, - ResendMyPhoneVerificationResponse, - SendMyPasswordlessLinkRequest, - SendMyPasswordlessLinkResponse, - SetMyEmailRequest, - SetMyEmailResponse, - SetMyPhoneRequest, - SetMyPhoneResponse, - UpdateMyPasswordRequest, - UpdateMyPasswordResponse, - UpdateMyProfileRequest, - UpdateMyProfileResponse, - UpdateMyUserNameRequest, - UpdateMyUserNameResponse, - VerifyMyAuthFactorOTPRequest, - VerifyMyAuthFactorOTPResponse, - VerifyMyAuthFactorU2FRequest, - VerifyMyAuthFactorU2FResponse, - VerifyMyPasswordlessRequest, - VerifyMyPasswordlessResponse, - VerifyMyPhoneRequest, - VerifyMyPhoneResponse, + AddMyAuthFactorOTPRequest, + AddMyAuthFactorOTPResponse, + AddMyAuthFactorU2FRequest, + AddMyAuthFactorU2FResponse, + AddMyPasswordlessLinkRequest, + AddMyPasswordlessLinkResponse, + AddMyPasswordlessRequest, + AddMyPasswordlessResponse, + GetMyEmailRequest, + GetMyEmailResponse, + GetMyLabelPolicyRequest, + GetMyLabelPolicyResponse, + GetMyPasswordComplexityPolicyRequest, + GetMyPasswordComplexityPolicyResponse, + GetMyPhoneRequest, + GetMyPhoneResponse, + GetMyPrivacyPolicyRequest, + GetMyPrivacyPolicyResponse, + GetMyProfileRequest, + GetMyProfileResponse, + GetMyUserRequest, + GetMyUserResponse, + GetSupportedLanguagesRequest, + GetSupportedLanguagesResponse, + ListMyAuthFactorsRequest, + ListMyAuthFactorsResponse, + ListMyLinkedIDPsRequest, + ListMyLinkedIDPsResponse, + ListMyMembershipsRequest, + ListMyMembershipsResponse, + ListMyMetadataRequest, + ListMyMetadataResponse, + ListMyPasswordlessRequest, + ListMyPasswordlessResponse, + ListMyProjectOrgsRequest, + ListMyProjectOrgsResponse, + ListMyUserChangesRequest, + ListMyUserChangesResponse, + ListMyUserGrantsRequest, + ListMyUserGrantsResponse, + ListMyUserSessionsRequest, + ListMyUserSessionsResponse, + ListMyZitadelPermissionsRequest, + ListMyZitadelPermissionsResponse, + RemoveMyAuthFactorOTPRequest, + RemoveMyAuthFactorOTPResponse, + RemoveMyAuthFactorU2FRequest, + RemoveMyAuthFactorU2FResponse, + RemoveMyAvatarRequest, + RemoveMyAvatarResponse, + RemoveMyLinkedIDPRequest, + RemoveMyLinkedIDPResponse, + RemoveMyPasswordlessRequest, + RemoveMyPasswordlessResponse, + RemoveMyPhoneRequest, + RemoveMyPhoneResponse, + RemoveMyUserRequest, + RemoveMyUserResponse, + ResendMyEmailVerificationRequest, + ResendMyEmailVerificationResponse, + ResendMyPhoneVerificationRequest, + ResendMyPhoneVerificationResponse, + SendMyPasswordlessLinkRequest, + SendMyPasswordlessLinkResponse, + SetMyEmailRequest, + SetMyEmailResponse, + SetMyPhoneRequest, + SetMyPhoneResponse, + UpdateMyPasswordRequest, + UpdateMyPasswordResponse, + UpdateMyProfileRequest, + UpdateMyProfileResponse, + UpdateMyUserNameRequest, + UpdateMyUserNameResponse, + VerifyMyAuthFactorOTPRequest, + VerifyMyAuthFactorOTPResponse, + VerifyMyAuthFactorU2FRequest, + VerifyMyAuthFactorU2FResponse, + VerifyMyPasswordlessRequest, + VerifyMyPasswordlessResponse, + VerifyMyPhoneRequest, + VerifyMyPhoneResponse, } from '../proto/generated/zitadel/auth_pb'; import { ChangeQuery } from '../proto/generated/zitadel/change_pb'; +import { MetadataQuery } from '../proto/generated/zitadel/metadata_pb'; import { ListQuery } from '../proto/generated/zitadel/object_pb'; import { Org, OrgFieldName, OrgQuery } from '../proto/generated/zitadel/org_pb'; import { Gender, MembershipQuery, User, WebAuthNVerification } from '../proto/generated/zitadel/user_pb'; @@ -145,6 +148,25 @@ export class GrpcAuthService { }); } + public listMyMetadata( + offset?: number, + limit?: number, + queryList?: MetadataQuery[], + ): Promise { + const req = new ListMyMetadataRequest(); + const metadata = new ListQuery(); + if (offset) { + metadata.setOffset(offset); + } + if (limit) { + metadata.setLimit(limit); + } + if (queryList) { + req.setQueriesList(queryList); + } + return this.grpcService.auth.listMyMetadata(req, null).then((resp) => resp.toObject()); + } + public async getActiveOrg(id?: string): Promise { if (id) { const find = this.cachedOrgs.find((tmp) => tmp.id === id); From 8e94d2377b280bd0b737c0137a580edbe2367f3d Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Wed, 27 Jul 2022 07:04:17 +0200 Subject: [PATCH 044/116] fix: remove adding automatically global role on register (#4050) --- internal/api/ui/login/external_login_handler.go | 4 +--- internal/api/ui/login/external_register_handler.go | 8 ++------ internal/api/ui/login/register_handler.go | 4 +--- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/internal/api/ui/login/external_login_handler.go b/internal/api/ui/login/external_login_handler.go index 11bbc13ca8..ca58fea33f 100644 --- a/internal/api/ui/login/external_login_handler.go +++ b/internal/api/ui/login/external_login_handler.go @@ -327,10 +327,8 @@ func (l *Login) handleExternalNotFoundOptionCheck(w http.ResponseWriter, r *http func (l *Login) handleAutoRegister(w http.ResponseWriter, r *http.Request, authReq *domain.AuthRequest) { resourceOwner := authz.GetInstance(r.Context()).DefaultOrganisationID() - memberRoles := []string{domain.RoleSelfManagementGlobal} if authReq.RequestedOrgID != "" && authReq.RequestedOrgID != resourceOwner { - memberRoles = nil resourceOwner = authReq.RequestedOrgID } @@ -358,7 +356,7 @@ func (l *Login) handleAutoRegister(w http.ResponseWriter, r *http.Request, authR l.renderExternalNotFoundOption(w, r, authReq, orgIamPolicy, nil, nil, err) return } - err = l.authRepo.AutoRegisterExternalUser(setContext(r.Context(), resourceOwner), user, externalIDP, memberRoles, authReq.ID, userAgentID, resourceOwner, metadata, domain.BrowserInfoFromRequest(r)) + err = l.authRepo.AutoRegisterExternalUser(setContext(r.Context(), resourceOwner), user, externalIDP, nil, authReq.ID, userAgentID, resourceOwner, metadata, domain.BrowserInfoFromRequest(r)) if err != nil { l.renderExternalNotFoundOption(w, r, authReq, orgIamPolicy, user, externalIDP, err) return diff --git a/internal/api/ui/login/external_register_handler.go b/internal/api/ui/login/external_register_handler.go index c50c6894ab..be664f095e 100644 --- a/internal/api/ui/login/external_register_handler.go +++ b/internal/api/ui/login/external_register_handler.go @@ -135,10 +135,8 @@ func (l *Login) handleExternalUserRegister(w http.ResponseWriter, r *http.Reques func (l *Login) registerExternalUser(w http.ResponseWriter, r *http.Request, authReq *domain.AuthRequest, user *domain.Human, externalIDP *domain.UserIDPLink) { resourceOwner := authz.GetInstance(r.Context()).DefaultOrganisationID() - memberRoles := []string{domain.RoleSelfManagementGlobal} if authReq.RequestedOrgID != "" && authReq.RequestedOrgID != resourceOwner { - memberRoles = nil resourceOwner = authReq.RequestedOrgID } initCodeGenerator, err := l.query.InitEncryptionGenerator(r.Context(), domain.SecretGeneratorTypeInitCode, l.userCodeAlg) @@ -151,7 +149,7 @@ func (l *Login) registerExternalUser(w http.ResponseWriter, r *http.Request, aut l.renderRegisterOption(w, r, authReq, err) return } - _, err = l.command.RegisterHuman(setContext(r.Context(), resourceOwner), resourceOwner, user, externalIDP, memberRoles, initCodeGenerator, phoneCodeGenerator) + _, err = l.command.RegisterHuman(setContext(r.Context(), resourceOwner), resourceOwner, user, externalIDP, nil, initCodeGenerator, phoneCodeGenerator) if err != nil { l.renderRegisterOption(w, r, authReq, err) return @@ -201,10 +199,8 @@ func (l *Login) handleExternalRegisterCheck(w http.ResponseWriter, r *http.Reque } resourceOwner := authz.GetInstance(r.Context()).DefaultOrganisationID() - memberRoles := []string{domain.RoleSelfManagementGlobal} if authReq.RequestedOrgID != "" && authReq.RequestedOrgID != resourceOwner { - memberRoles = nil resourceOwner = authReq.RequestedOrgID } externalIDP, err := l.getExternalIDP(data) @@ -227,7 +223,7 @@ func (l *Login) handleExternalRegisterCheck(w http.ResponseWriter, r *http.Reque l.renderRegisterOption(w, r, authReq, err) return } - _, err = l.command.RegisterHuman(setContext(r.Context(), resourceOwner), resourceOwner, user, externalIDP, memberRoles, initCodeGenerator, phoneCodeGenerator) + _, err = l.command.RegisterHuman(setContext(r.Context(), resourceOwner), resourceOwner, user, externalIDP, nil, initCodeGenerator, phoneCodeGenerator) if err != nil { l.renderRegisterOption(w, r, authReq, err) return diff --git a/internal/api/ui/login/register_handler.go b/internal/api/ui/login/register_handler.go index e19611556c..f8b8ab5369 100644 --- a/internal/api/ui/login/register_handler.go +++ b/internal/api/ui/login/register_handler.go @@ -64,10 +64,8 @@ func (l *Login) handleRegisterCheck(w http.ResponseWriter, r *http.Request) { } resourceOwner := authz.GetInstance(r.Context()).DefaultOrganisationID() - memberRoles := []string{domain.RoleSelfManagementGlobal} if authRequest != nil && authRequest.RequestedOrgID != "" && authRequest.RequestedOrgID != resourceOwner { - memberRoles = nil resourceOwner = authRequest.RequestedOrgID } initCodeGenerator, err := l.query.InitEncryptionGenerator(r.Context(), domain.SecretGeneratorTypeInitCode, l.userCodeAlg) @@ -80,7 +78,7 @@ func (l *Login) handleRegisterCheck(w http.ResponseWriter, r *http.Request) { l.renderRegister(w, r, authRequest, data, err) return } - user, err := l.command.RegisterHuman(setContext(r.Context(), resourceOwner), resourceOwner, data.toHumanDomain(), nil, memberRoles, initCodeGenerator, phoneCodeGenerator) + user, err := l.command.RegisterHuman(setContext(r.Context(), resourceOwner), resourceOwner, data.toHumanDomain(), nil, nil, initCodeGenerator, phoneCodeGenerator) if err != nil { l.renderRegister(w, r, authRequest, data, err) return From c15577c1f925103fefc2aa3c5924227d8c2757bc Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 27 Jul 2022 09:49:16 +0200 Subject: [PATCH 045/116] fix: use default redirect uri when not passed on end_session endpoint (#4054) * fix: use default redirect uri when not passed on end_session endpoint * instance state --- docs/docs/apis/openidoauth/endpoints.md | 18 +++++++++++++++--- go.mod | 2 +- go.sum | 4 ++-- internal/api/grpc/instance/converter.go | 2 ++ internal/api/oidc/auth_request.go | 6 +++--- .../ui/login/static/templates/logout_done.html | 4 ++-- 6 files changed, 25 insertions(+), 11 deletions(-) diff --git a/docs/docs/apis/openidoauth/endpoints.md b/docs/docs/apis/openidoauth/endpoints.md index 4723b8416e..d5bd12dd29 100644 --- a/docs/docs/apis/openidoauth/endpoints.md +++ b/docs/docs/apis/openidoauth/endpoints.md @@ -323,7 +323,7 @@ Send a `client_assertion` as JWT for us to validate the signature against the re {your_domain}/oauth/v2/introspect -This endpoint enables client to validate an `acccess_token`, either opaque or JWT. Unlike client side JWT validation, +This endpoint enables clients to validate an `acccess_token`, either opaque or JWT. Unlike client side JWT validation, this endpoint will check if the token is not revoked (by client or logout). | Parameter | Description | @@ -499,9 +499,21 @@ curl --request POST \ ## end_session_endpoint -{your_domain}/oidc/v1/endsession +{your_domain}/oidc/v1/end_session -> The end_session_endpoint is located with the login page, due to the need of accessing the same cookie domain +The endpoint has to be opened in the user agent (browser) to terminate the user sessions. + +No parameters are needed apart from the user agent cookie, but you can provide the following to customize the behaviour: + +| Parameter | Description | +|--------------------------|----------------------------------------------------------------------------------------------------------------------------------| +| id_token_hint | the id_token that was previously issued to the client | +| client_id | client_id of the application | +| post_logout_redirect_uri | Callback uri of the logout where the user (agent) will be redirected to. Must match exactly one of the preregistered in Console. | +| state | Opaque value used to maintain state between the request and the callback | + +The `post_logout_redirect_uri` will be checked against the previously registered uris of the client provided by the `azp` claim of the `id_token_hint` or the `client_id` parameter. +If both parameters are provided, they must be equal. ## jwks_uri diff --git a/go.mod b/go.mod index 80c9649b6f..679d91caea 100644 --- a/go.mod +++ b/go.mod @@ -48,7 +48,7 @@ require ( github.com/superseriousbusiness/exifremove v0.0.0-20210330092427-6acd27eac203 github.com/ttacon/libphonenumber v1.2.1 github.com/zitadel/logging v0.3.4 - github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.4 + github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.5 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.27.0 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.27.0 go.opentelemetry.io/otel v1.2.0 diff --git a/go.sum b/go.sum index 1c77d75086..7f10eaf680 100644 --- a/go.sum +++ b/go.sum @@ -865,8 +865,8 @@ github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= github.com/zitadel/logging v0.3.4 h1:9hZsTjMMTE3X2LUi0xcF9Q9EdLo+FAezeu52ireBbHM= github.com/zitadel/logging v0.3.4/go.mod h1:aPpLQhE+v6ocNK0TWrBrd363hZ95KcI17Q1ixAQwZF0= -github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.4 h1:llGVhiHOuI2SXF6yR9s5podxe8n7Md0lpo/9cr37AkU= -github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.4/go.mod h1:uoJw5Xc6HXfnQbNZiLbld9dED0/8UMu0M4gOipTRZBA= +github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.5 h1:dP+6SheVtpF4T/oql6mJoqou8jlW3J/9NCTYnEpKgpM= +github.com/zitadel/oidc/v2 v2.0.0-dynamic-issuer.5/go.mod h1:uoJw5Xc6HXfnQbNZiLbld9dED0/8UMu0M4gOipTRZBA= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= diff --git a/internal/api/grpc/instance/converter.go b/internal/api/grpc/instance/converter.go index 8cbbed0902..a59b674b78 100644 --- a/internal/api/grpc/instance/converter.go +++ b/internal/api/grpc/instance/converter.go @@ -28,6 +28,7 @@ func InstanceToPb(instance *query.Instance) *instance_pb.Instance { Name: instance.Name, Domains: DomainsToPb(instance.Domains), Version: build.Version(), + State: instance_pb.State_STATE_RUNNING, //TODO: change when delete is implemented } } @@ -43,6 +44,7 @@ func InstanceDetailToPb(instance *query.Instance) *instance_pb.InstanceDetail { Name: instance.Name, Domains: DomainsToPb(instance.Domains), Version: build.Version(), + State: instance_pb.State_STATE_RUNNING, //TODO: change when delete is implemented } } diff --git a/internal/api/oidc/auth_request.go b/internal/api/oidc/auth_request.go index 649ae4b6bd..d32d2e49c2 100644 --- a/internal/api/oidc/auth_request.go +++ b/internal/api/oidc/auth_request.go @@ -143,12 +143,12 @@ func (o *OPStorage) TerminateSession(ctx context.Context, userID, clientID strin defer func() { span.EndWithError(err) }() userAgentID, ok := middleware.UserAgentIDFromCtx(ctx) if !ok { - logging.Log("OIDC-aGh4q").Error("no user agent id") + logging.Error("no user agent id") return errors.ThrowPreconditionFailed(nil, "OIDC-fso7F", "no user agent id") } userIDs, err := o.repo.UserSessionUserIDsByAgentID(ctx, userAgentID) if err != nil { - logging.Log("OIDC-Ghgr3").WithError(err).Error("error retrieving user sessions") + logging.WithError(err).Error("error retrieving user sessions") return err } if len(userIDs) == 0 { @@ -158,7 +158,7 @@ func (o *OPStorage) TerminateSession(ctx context.Context, userID, clientID strin UserID: userID, } err = o.command.HumansSignOut(authz.SetCtxData(ctx, data), userAgentID, userIDs) - logging.Log("OIDC-Dggt2").OnError(err).Error("error signing out") + logging.OnError(err).Error("error signing out") return err } diff --git a/internal/api/ui/login/static/templates/logout_done.html b/internal/api/ui/login/static/templates/logout_done.html index de359c4c84..36d001c76b 100644 --- a/internal/api/ui/login/static/templates/logout_done.html +++ b/internal/api/ui/login/static/templates/logout_done.html @@ -10,9 +10,9 @@
- +
-{{template "main-bottom" .}} \ No newline at end of file +{{template "main-bottom" .}} From 5bd9badbcfe3b8859285cbda15640d07c25bb362 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 27 Jul 2022 09:55:44 +0200 Subject: [PATCH 046/116] fix: project grants (#4031) * fix: filter granted memberships correctly * fix: only show changes of granted project * Apply suggestions from code review Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> * Update internal/query/user_membership.go Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> --- .../app/modules/changes/changes.component.ts | 7 +++ .../granted-project-detail.component.html | 2 +- console/src/app/services/mgmt.service.ts | 24 ++++++++++ docs/docs/apis/proto/management.md | 37 +++++++++++++++ internal/api/grpc/auth/user.go | 8 +++- internal/api/grpc/management/project.go | 11 +++++ .../eventstore/user_membership.go | 6 ++- internal/query/changes.go | 11 +++++ internal/query/search_query.go | 22 +++++++++ internal/query/user_membership.go | 47 ++++++++++++------- internal/query/user_membership_test.go | 27 ++++++++--- internal/query/zitadel_permission.go | 6 ++- pkg/grpc/management/changes.go | 32 ++++++------- proto/zitadel/management.proto | 28 +++++++++++ 14 files changed, 224 insertions(+), 44 deletions(-) diff --git a/console/src/app/modules/changes/changes.component.ts b/console/src/app/modules/changes/changes.component.ts index 3153290ba6..117f3dece4 100644 --- a/console/src/app/modules/changes/changes.component.ts +++ b/console/src/app/modules/changes/changes.component.ts @@ -19,6 +19,7 @@ export enum ChangeType { USER = 'user', ORG = 'org', PROJECT = 'project', + PROJECT_GRANT= 'project-grant', APP = 'app', } @@ -93,6 +94,9 @@ export class ChangesComponent implements OnInit, OnDestroy { case ChangeType.PROJECT: first = this.mgmtUserService.listProjectChanges(this.id, 30, 0); break; + case ChangeType.PROJECT_GRANT: + first = this.mgmtUserService.listProjectGrantChanges(this.id, this.secId, 30, 0); + break; case ChangeType.ORG: first = this.mgmtUserService.listOrgChanges(30, 0); break; @@ -126,6 +130,9 @@ export class ChangesComponent implements OnInit, OnDestroy { case ChangeType.PROJECT: more = this.mgmtUserService.listProjectChanges(this.id, 20, cursor); break; + case ChangeType.PROJECT_GRANT: + more = this.mgmtUserService.listProjectGrantChanges(this.id, this.secId, 20, cursor); + break; case ChangeType.ORG: more = this.mgmtUserService.listOrgChanges(20, cursor); break; diff --git a/console/src/app/pages/projects/granted-projects/granted-project-detail/granted-project-detail.component.html b/console/src/app/pages/projects/granted-projects/granted-project-detail/granted-project-detail.component.html index d671050449..eb1a3751fe 100644 --- a/console/src/app/pages/projects/granted-projects/granted-project-detail/granted-project-detail.component.html +++ b/console/src/app/pages/projects/granted-projects/granted-project-detail/granted-project-detail.component.html @@ -54,7 +54,7 @@
- +
diff --git a/console/src/app/services/mgmt.service.ts b/console/src/app/services/mgmt.service.ts index 11cf9ed74e..d25cce37c1 100644 --- a/console/src/app/services/mgmt.service.ts +++ b/console/src/app/services/mgmt.service.ts @@ -221,6 +221,8 @@ import { ListPersonalAccessTokensResponse, ListProjectChangesRequest, ListProjectChangesResponse, + ListProjectGrantChangesRequest, + ListProjectGrantChangesResponse, ListProjectGrantMemberRolesRequest, ListProjectGrantMemberRolesResponse, ListProjectGrantMembersRequest, @@ -1776,6 +1778,28 @@ export class ManagementService { return this.grpcService.mgmt.listProjectChanges(req, null).then((resp) => resp.toObject()); } + public listProjectGrantChanges( + projectId: string, + grantId: string, + limit: number, + sequence: number, + ): Promise { + const req = new ListProjectGrantChangesRequest(); + req.setProjectId(projectId); + req.setGrantId(grantId); + const query = new ChangeQuery(); + + if (limit) { + query.setLimit(limit); + } + if (sequence) { + query.setSequence(sequence); + } + + req.setQuery(query); + return this.grpcService.mgmt.listProjectGrantChanges(req, null).then((resp) => resp.toObject()); + } + public listUserChanges(userId: string, limit: number, sequence: number): Promise { const req = new ListUserChangesRequest(); req.setUserId(userId); diff --git a/docs/docs/apis/proto/management.md b/docs/docs/apis/proto/management.md index 44505cc2d7..2eac7a106c 100644 --- a/docs/docs/apis/proto/management.md +++ b/docs/docs/apis/proto/management.md @@ -1417,6 +1417,19 @@ Removes an app key DELETE: /projects/{project_id}/apps/{app_id}/keys/{key_id} +### ListProjectGrantChanges + +> **rpc** ListProjectGrantChanges([ListProjectGrantChangesRequest](#listprojectgrantchangesrequest)) +[ListProjectGrantChangesResponse](#listprojectgrantchangesresponse) + +Returns the history of the project grant (each event) +Limit should always be set, there is a default limit set by the service + + + + POST: /projects/{project_id}/grants/{grant_id}/changes/_search + + ### GetProjectGrantByID > **rpc** GetProjectGrantByID([GetProjectGrantByIDRequest](#getprojectgrantbyidrequest)) @@ -5743,6 +5756,30 @@ This is an empty request +### ListProjectGrantChangesRequest + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| query | zitadel.change.v1.ChangeQuery | list limitations and ordering | | +| project_id | string | - | string.min_len: 1
string.max_len: 200
| +| grant_id | string | - | string.min_len: 1
string.max_len: 200
| + + + + +### ListProjectGrantChangesResponse + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| result | repeated zitadel.change.v1.Change | zitadel.v1.ListDetails details = 1; was always returned empty (as we cannot get the necessary infos) | | + + + + ### ListProjectGrantMemberRolesRequest diff --git a/internal/api/grpc/auth/user.go b/internal/api/grpc/auth/user.go index 7f31b51567..e43d018ece 100644 --- a/internal/api/grpc/auth/user.go +++ b/internal/api/grpc/auth/user.go @@ -177,8 +177,12 @@ func (s *Server) ListMyProjectOrgs(ctx context.Context, req *auth_pb.ListMyProje if !isIAMAdmin(memberships.Memberships) { ids := make([]string, 0, len(memberships.Memberships)) - for _, grant := range memberships.Memberships { - ids = appendIfNotExists(ids, grant.ResourceOwner) + for _, membership := range memberships.Memberships { + orgID := membership.ResourceOwner + if membership.ProjectGrant != nil && membership.ProjectGrant.GrantedOrgID != "" { + orgID = membership.ProjectGrant.GrantedOrgID + } + ids = appendIfNotExists(ids, orgID) } idsQuery, err := query.NewOrgIDsSearchQuery(ids...) diff --git a/internal/api/grpc/management/project.go b/internal/api/grpc/management/project.go index 27be7798e2..a55a2fb576 100644 --- a/internal/api/grpc/management/project.go +++ b/internal/api/grpc/management/project.go @@ -55,6 +55,17 @@ func (s *Server) ListProjects(ctx context.Context, req *mgmt_pb.ListProjectsRequ }, nil } +func (s *Server) ListProjectGrantChanges(ctx context.Context, req *mgmt_pb.ListProjectGrantChangesRequest) (*mgmt_pb.ListProjectGrantChangesResponse, error) { + sequence, limit, asc := change_grpc.ChangeQueryToQuery(req.Query) + res, err := s.query.ProjectGrantChanges(ctx, req.ProjectId, req.GrantId, sequence, limit, asc, s.auditLogRetention) + if err != nil { + return nil, err + } + return &mgmt_pb.ListProjectGrantChangesResponse{ + Result: change_grpc.ChangesToPb(res.Changes, s.assetAPIPrefix(ctx)), + }, nil +} + func (s *Server) ListGrantedProjects(ctx context.Context, req *mgmt_pb.ListGrantedProjectsRequest) (*mgmt_pb.ListGrantedProjectsResponse, error) { queries, err := listGrantedProjectsRequestToModel(req) if err != nil { diff --git a/internal/authz/repository/eventsourcing/eventstore/user_membership.go b/internal/authz/repository/eventsourcing/eventstore/user_membership.go index 9dc5bb57c9..6239730e74 100644 --- a/internal/authz/repository/eventsourcing/eventstore/user_membership.go +++ b/internal/authz/repository/eventsourcing/eventstore/user_membership.go @@ -34,8 +34,12 @@ func (repo *UserMembershipRepo) searchUserMemberships(ctx context.Context) (_ [] if err != nil { return nil, err } + grantedIDQuery, err := query.NewMembershipGrantedOrgIDSearchQuery(ctxData.OrgID) + if err != nil { + return nil, err + } memberships, err := repo.Queries.Memberships(ctx, &query.MembershipSearchQuery{ - Queries: []query.SearchQuery{userIDQuery, orgIDsQuery}, + Queries: []query.SearchQuery{userIDQuery, query.Or(orgIDsQuery, grantedIDQuery)}, }) if err != nil { return nil, err diff --git a/internal/query/changes.go b/internal/query/changes.go index fa5989f636..6e1e79f1a4 100644 --- a/internal/query/changes.go +++ b/internal/query/changes.go @@ -50,6 +50,17 @@ func (q *Queries) ProjectChanges(ctx context.Context, projectID string, lastSequ return q.changes(ctx, query, lastSequence, limit, sortAscending, auditLogRetention) } +func (q *Queries) ProjectGrantChanges(ctx context.Context, projectID, grantID string, lastSequence uint64, limit uint64, sortAscending bool, auditLogRetention time.Duration) (*Changes, error) { + query := func(query *eventstore.SearchQuery) { + query.AggregateTypes(project.AggregateType). + AggregateIDs(projectID). + EventData(map[string]interface{}{ + "grantId": grantID, + }) + } + return q.changes(ctx, query, lastSequence, limit, sortAscending, auditLogRetention) +} + func (q *Queries) ApplicationChanges(ctx context.Context, projectID, appID string, lastSequence uint64, limit uint64, sortAscending bool, auditLogRetention time.Duration) (*Changes, error) { query := func(query *eventstore.SearchQuery) { query.AggregateTypes(project.AggregateType). diff --git a/internal/query/search_query.go b/internal/query/search_query.go index 2f71a906ce..c2f2500cda 100644 --- a/internal/query/search_query.go +++ b/internal/query/search_query.go @@ -312,6 +312,28 @@ func ListComparisonFromMethod(m domain.SearchMethod) ListComparison { } } +type or struct { + queries []SearchQuery +} + +func Or(queries ...SearchQuery) *or { + return &or{ + queries: queries, + } +} + +func (q *or) toQuery(query sq.SelectBuilder) sq.SelectBuilder { + return query.Where(q.comp()) +} + +func (q *or) comp() sq.Sqlizer { + queries := make([]sq.Sqlizer, 0) + for _, query := range q.queries { + queries = append(queries, query.comp()) + } + return sq.Or(queries) +} + type BoolQuery struct { Column Column Value bool diff --git a/internal/query/user_membership.go b/internal/query/user_membership.go index 75c23902a6..2204312367 100644 --- a/internal/query/user_membership.go +++ b/internal/query/user_membership.go @@ -48,9 +48,10 @@ type ProjectMembership struct { } type ProjectGrantMembership struct { - ProjectID string - ProjectName string - GrantID string + ProjectID string + ProjectName string + GrantID string + GrantedOrgID string } type MembershipSearchQuery struct { @@ -78,6 +79,10 @@ func NewMembershipResourceOwnersSearchQuery(ids ...string) (SearchQuery, error) return NewListQuery(membershipResourceOwner, list, ListIn) } +func NewMembershipGrantedOrgIDSearchQuery(id string) (SearchQuery, error) { + return NewTextQuery(ProjectGrantColumnGrantedOrgID, id, TextEquals) +} + func NewMembershipProjectIDQuery(value string) (SearchQuery, error) { return NewTextQuery(membershipProjectID, value, TextEquals) } @@ -173,6 +178,10 @@ var ( name: projection.ProjectGrantMemberGrantIDCol, table: membershipAlias, } + membershipGrantGrantedOrgID = Column{ + name: projection.ProjectGrantColumnGrantedOrgID, + table: membershipAlias, + } membershipFrom = "(" + prepareOrgMember() + @@ -197,12 +206,14 @@ func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships, membershipIAMID.identifier(), membershipProjectID.identifier(), membershipGrantID.identifier(), + ProjectGrantColumnGrantedOrgID.identifier(), ProjectColumnName.identifier(), OrgColumnName.identifier(), countColumn.identifier(), ).From(membershipFrom). LeftJoin(join(ProjectColumnID, membershipProjectID)). LeftJoin(join(OrgColumnID, membershipOrgID)). + LeftJoin(join(ProjectGrantColumnGrantID, membershipGrantID)). PlaceholderFormat(sq.Dollar), func(rows *sql.Rows) (*Memberships, error) { memberships := make([]*Membership, 0) @@ -210,14 +221,15 @@ func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships, for rows.Next() { var ( - membership = new(Membership) - orgID = sql.NullString{} - iamID = sql.NullString{} - projectID = sql.NullString{} - grantID = sql.NullString{} - roles = pq.StringArray{} - projectName = sql.NullString{} - orgName = sql.NullString{} + membership = new(Membership) + orgID = sql.NullString{} + iamID = sql.NullString{} + projectID = sql.NullString{} + grantID = sql.NullString{} + grantedOrgID = sql.NullString{} + roles = pq.StringArray{} + projectName = sql.NullString{} + orgName = sql.NullString{} ) err := rows.Scan( @@ -231,6 +243,7 @@ func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships, &iamID, &projectID, &grantID, + &grantedOrgID, &projectName, &orgName, &count, @@ -252,11 +265,12 @@ func prepareMembershipsQuery() (sq.SelectBuilder, func(*sql.Rows) (*Memberships, IAMID: iamID.String, Name: iamID.String, } - } else if projectID.Valid && grantID.Valid { + } else if projectID.Valid && grantID.Valid && grantedOrgID.Valid { membership.ProjectGrant = &ProjectGrantMembership{ - ProjectID: projectID.String, - ProjectName: projectName.String, - GrantID: grantID.String, + ProjectID: projectID.String, + ProjectName: projectName.String, + GrantID: grantID.String, + GrantedOrgID: grantedOrgID.String, } } else if projectID.Valid { membership.Project = &ProjectMembership{ @@ -346,7 +360,8 @@ func prepareProjectGrantMember() string { "NULL::STRING AS "+membershipIAMID.name, ProjectGrantMemberProjectID.identifier(), ProjectGrantMemberGrantID.identifier(), - ).From(projectGrantMemberTable.identifier()).MustSql() + ).From(projectGrantMemberTable.identifier()). + MustSql() return stmt } diff --git a/internal/query/user_membership_test.go b/internal/query/user_membership_test.go index 8f160680bd..88b74528a2 100644 --- a/internal/query/user_membership_test.go +++ b/internal/query/user_membership_test.go @@ -23,6 +23,7 @@ var ( ", memberships.id" + ", memberships.project_id" + ", memberships.grant_id" + + ", projections.project_grants.granted_org_id" + ", projections.projects.name" + ", projections.orgs.name" + ", COUNT(*) OVER ()" + @@ -80,7 +81,8 @@ var ( " FROM projections.project_grant_members as members" + ") AS memberships" + " LEFT JOIN projections.projects ON memberships.project_id = projections.projects.id" + - " LEFT JOIN projections.orgs ON memberships.org_id = projections.orgs.id") + " LEFT JOIN projections.orgs ON memberships.org_id = projections.orgs.id" + + " LEFT JOIN projections.project_grants ON memberships.grant_id = projections.project_grants.grant_id") membershipCols = []string{ "user_id", "roles", @@ -92,6 +94,7 @@ var ( "instance_id", "project_id", "grant_id", + "granted_org_id", "name", //project name "name", //org name "count", @@ -141,6 +144,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, nil, nil, + nil, "org-name", }, }, @@ -184,6 +188,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, nil, nil, + nil, }, }, ), @@ -224,6 +229,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, "project-id", nil, + nil, "project-name", nil, }, @@ -266,6 +272,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, "project-id", "grant-id", + "granted-org-id", "project-name", nil, }, @@ -285,9 +292,10 @@ func Test_MembershipPrepares(t *testing.T) { Sequence: 20211202, ResourceOwner: "ro", ProjectGrant: &ProjectGrantMembership{ - GrantID: "grant-id", - ProjectID: "project-id", - ProjectName: "project-name", + GrantID: "grant-id", + ProjectID: "project-id", + ProjectName: "project-name", + GrantedOrgID: "granted-org-id", }, }, }, @@ -313,6 +321,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, nil, nil, + nil, "org-name", }, { @@ -328,6 +337,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, nil, nil, + nil, }, { "user-id", @@ -340,6 +350,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, "project-id", nil, + nil, "project-name", nil, }, @@ -354,6 +365,7 @@ func Test_MembershipPrepares(t *testing.T) { nil, "project-id", "grant-id", + "granted-org-id", "project-name", nil, }, @@ -400,9 +412,10 @@ func Test_MembershipPrepares(t *testing.T) { Sequence: 20211202, ResourceOwner: "ro", ProjectGrant: &ProjectGrantMembership{ - ProjectID: "project-id", - GrantID: "grant-id", - ProjectName: "project-name", + ProjectID: "project-id", + GrantID: "grant-id", + ProjectName: "project-name", + GrantedOrgID: "granted-org-id", }, }, }, diff --git a/internal/query/zitadel_permission.go b/internal/query/zitadel_permission.go index c24ecd659f..f274783a0e 100644 --- a/internal/query/zitadel_permission.go +++ b/internal/query/zitadel_permission.go @@ -16,8 +16,12 @@ func (q *Queries) MyZitadelPermissions(ctx context.Context, orgID, userID string if err != nil { return nil, err } + grantedOrgIDQuery, err := NewMembershipGrantedOrgIDSearchQuery(orgID) + if err != nil { + return nil, err + } memberships, err := q.Memberships(ctx, &MembershipSearchQuery{ - Queries: []SearchQuery{userIDQuery, orgIDsQuery}, + Queries: []SearchQuery{userIDQuery, Or(orgIDsQuery, grantedOrgIDQuery)}, }) if err != nil { return nil, err diff --git a/pkg/grpc/management/changes.go b/pkg/grpc/management/changes.go index 403d4ee309..5cee5b9c1f 100644 --- a/pkg/grpc/management/changes.go +++ b/pkg/grpc/management/changes.go @@ -2,47 +2,47 @@ package management import ( "github.com/zitadel/zitadel/internal/api/grpc/server/middleware" + "github.com/zitadel/zitadel/pkg/grpc/change" ) func (c *ListUserChangesResponse) Localizers() []middleware.Localizer { if c == nil { return nil } - localizers := make([]middleware.Localizer, len(c.Result)) - for i, change := range c.Result { - localizers[i] = change.EventType - } - return localizers + return changesLocalizers(c.Result) } func (c *ListOrgChangesResponse) Localizers() []middleware.Localizer { if c == nil { return nil } - localizers := make([]middleware.Localizer, len(c.Result)) - for i, change := range c.Result { - localizers[i] = change.EventType - } - return localizers + return changesLocalizers(c.Result) } func (c *ListProjectChangesResponse) Localizers() []middleware.Localizer { if c == nil { return nil } - localizers := make([]middleware.Localizer, len(c.Result)) - for i, change := range c.Result { - localizers[i] = change.EventType + return changesLocalizers(c.Result) +} + +func (c *ListProjectGrantChangesResponse) Localizers() []middleware.Localizer { + if c == nil { + return nil } - return localizers + return changesLocalizers(c.Result) } func (c *ListAppChangesResponse) Localizers() []middleware.Localizer { if c == nil { return nil } - localizers := make([]middleware.Localizer, len(c.Result)) - for i, change := range c.Result { + return changesLocalizers(c.Result) +} + +func changesLocalizers(changes []*change.Change) []middleware.Localizer { + localizers := make([]middleware.Localizer, len(changes)) + for i, change := range changes { localizers[i] = change.EventType } return localizers diff --git a/proto/zitadel/management.proto b/proto/zitadel/management.proto index ce0ff6b528..11da17b0d5 100644 --- a/proto/zitadel/management.proto +++ b/proto/zitadel/management.proto @@ -1045,6 +1045,7 @@ service ManagementService { option (zitadel.v1.auth_option) = { permission: "project.read" + check_field_name: "ProjectId" }; } @@ -1470,6 +1471,19 @@ service ManagementService { }; } + // Returns the history of the project grant (each event) + // Limit should always be set, there is a default limit set by the service + rpc ListProjectGrantChanges(ListProjectGrantChangesRequest) returns (ListProjectGrantChangesResponse) { + option (google.api.http) = { + post: "/projects/{project_id}/grants/{grant_id}/changes/_search" + }; + + option (zitadel.v1.auth_option) = { + permission: "project.grant.read" + check_field_name: "GrantId" + }; + } + // Returns a project grant (ProjectGrant = Grant another organisation for my project) rpc GetProjectGrantByID(GetProjectGrantByIDRequest) returns (GetProjectGrantByIDResponse) { option (google.api.http) = { @@ -4100,6 +4114,20 @@ message RemoveAppKeyResponse { zitadel.v1.ObjectDetails details = 1; } +message ListProjectGrantChangesRequest { + //list limitations and ordering + zitadel.change.v1.ChangeQuery query = 1; + string project_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string grant_id = 3 [(validate.rules).string = {min_len: 1, max_len: 200}]; +} + +message ListProjectGrantChangesResponse { + reserved 1; + reserved "details"; + // zitadel.v1.ListDetails details = 1; was always returned empty (as we cannot get the necessary infos) + repeated zitadel.change.v1.Change result = 2; +} + message GetProjectGrantByIDRequest { string project_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; string grant_id = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; From 0b742233f92f1ea4511a04099ef8214b13253c6a Mon Sep 17 00:00:00 2001 From: Silvan Date: Wed, 27 Jul 2022 10:22:20 +0200 Subject: [PATCH 047/116] fix: clarify instances in steps and config (#4003) * fix: clarify instances in steps and config * docs: update setup step Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> Co-authored-by: Livio Amstutz --- cmd/setup/03.go | 10 ++++---- cmd/setup/config.go | 2 +- cmd/setup/setup.go | 24 +++++++++---------- cmd/setup/steps.yaml | 5 ++-- deploy/knative/zitadel-knative-service.yaml | 2 -- .../installation/configure/_linuxunix.mdx | 4 ++-- .../installation/configure/configure.mdx | 2 +- .../configure/example-zitadel-init-steps.yaml | 2 +- .../configure/example-zitadel-values.yaml | 2 +- .../docs/guides/installation/custom-domain.md | 9 ++----- .../example-zitadel-init-steps.yaml | 3 +-- .../docs/guides/installation/run/_knative.mdx | 1 - 12 files changed, 28 insertions(+), 38 deletions(-) diff --git a/cmd/setup/03.go b/cmd/setup/03.go index deefc7a445..22a0261c24 100644 --- a/cmd/setup/03.go +++ b/cmd/setup/03.go @@ -16,9 +16,8 @@ import ( "github.com/zitadel/zitadel/internal/eventstore" ) -type DefaultInstance struct { +type FirstInstance struct { InstanceName string - CustomDomain string DefaultLanguage language.Tag Org command.OrgSetup @@ -33,9 +32,10 @@ type DefaultInstance struct { externalDomain string externalSecure bool externalPort uint16 + domain string } -func (mig *DefaultInstance) Execute(ctx context.Context) error { +func (mig *FirstInstance) Execute(ctx context.Context) error { keyStorage, err := crypto_db.NewKeyStorage(mig.db, mig.masterKey) if err != nil { return fmt.Errorf("cannot start key storage: %w", err) @@ -77,7 +77,7 @@ func (mig *DefaultInstance) Execute(ctx context.Context) error { } mig.instanceSetup.InstanceName = mig.InstanceName - mig.instanceSetup.CustomDomain = mig.CustomDomain + mig.instanceSetup.CustomDomain = mig.externalDomain mig.instanceSetup.DefaultLanguage = mig.DefaultLanguage mig.instanceSetup.Org = mig.Org mig.instanceSetup.Org.Human.Email.Address = strings.TrimSpace(mig.instanceSetup.Org.Human.Email.Address) @@ -89,7 +89,7 @@ func (mig *DefaultInstance) Execute(ctx context.Context) error { return err } -func (mig *DefaultInstance) String() string { +func (mig *FirstInstance) String() string { return "03_default_instance" } diff --git a/cmd/setup/config.go b/cmd/setup/config.go index fe42311343..5036aabb42 100644 --- a/cmd/setup/config.go +++ b/cmd/setup/config.go @@ -49,7 +49,7 @@ func MustNewConfig(v *viper.Viper) *Config { type Steps struct { s1ProjectionTable *ProjectionTable s2AssetsTable *AssetTable - S3DefaultInstance *DefaultInstance + FirstInstance *FirstInstance } type encryptionKeyConfig struct { diff --git a/cmd/setup/setup.go b/cmd/setup/setup.go index e562d28e93..935a241326 100644 --- a/cmd/setup/setup.go +++ b/cmd/setup/setup.go @@ -66,17 +66,17 @@ func Setup(config *Config, steps *Steps, masterKey string) { steps.s1ProjectionTable = &ProjectionTable{dbClient: dbClient} steps.s2AssetsTable = &AssetTable{dbClient: dbClient} - steps.S3DefaultInstance.instanceSetup = config.DefaultInstance - steps.S3DefaultInstance.userEncryptionKey = config.EncryptionKeys.User - steps.S3DefaultInstance.smtpEncryptionKey = config.EncryptionKeys.SMTP - steps.S3DefaultInstance.masterKey = masterKey - steps.S3DefaultInstance.db = dbClient - steps.S3DefaultInstance.es = eventstoreClient - steps.S3DefaultInstance.defaults = config.SystemDefaults - steps.S3DefaultInstance.zitadelRoles = config.InternalAuthZ.RolePermissionMappings - steps.S3DefaultInstance.externalDomain = config.ExternalDomain - steps.S3DefaultInstance.externalSecure = config.ExternalSecure - steps.S3DefaultInstance.externalPort = config.ExternalPort + steps.FirstInstance.instanceSetup = config.DefaultInstance + steps.FirstInstance.userEncryptionKey = config.EncryptionKeys.User + steps.FirstInstance.smtpEncryptionKey = config.EncryptionKeys.SMTP + steps.FirstInstance.masterKey = masterKey + steps.FirstInstance.db = dbClient + steps.FirstInstance.es = eventstoreClient + steps.FirstInstance.defaults = config.SystemDefaults + steps.FirstInstance.zitadelRoles = config.InternalAuthZ.RolePermissionMappings + steps.FirstInstance.externalDomain = config.ExternalDomain + steps.FirstInstance.externalSecure = config.ExternalSecure + steps.FirstInstance.externalPort = config.ExternalPort repeatableSteps := []migration.RepeatableMigration{ &externalConfigChange{ @@ -92,7 +92,7 @@ func Setup(config *Config, steps *Steps, masterKey string) { logging.OnError(err).Fatal("unable to migrate step 1") err = migration.Migrate(ctx, eventstoreClient, steps.s2AssetsTable) logging.OnError(err).Fatal("unable to migrate step 2") - err = migration.Migrate(ctx, eventstoreClient, steps.S3DefaultInstance) + err = migration.Migrate(ctx, eventstoreClient, steps.FirstInstance) logging.OnError(err).Fatal("unable to migrate step 3") for _, repeatableStep := range repeatableSteps { diff --git a/cmd/setup/steps.yaml b/cmd/setup/steps.yaml index b9e15dff37..bf1f086eb2 100644 --- a/cmd/setup/steps.yaml +++ b/cmd/setup/steps.yaml @@ -1,6 +1,5 @@ -S3DefaultInstance: - InstanceName: Localhost - CustomDomain: localhost +FirstInstance: + InstanceName: ZITADEL DefaultLanguage: en Org: Name: ZITADEL diff --git a/deploy/knative/zitadel-knative-service.yaml b/deploy/knative/zitadel-knative-service.yaml index fb7b87f4e8..a731522933 100644 --- a/deploy/knative/zitadel-knative-service.yaml +++ b/deploy/knative/zitadel-knative-service.yaml @@ -28,8 +28,6 @@ spec: value: 80 - name: ZITADEL_EXTERNALDOMAIN value: zitadel.default.127.0.0.1.sslip.io - - name: ZITADEL_S3DEFAULTINSTANCE_CUSTOMDOMAIN - value: zitadel.default.127.0.0.1.sslip.io image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 name: user-container ports: diff --git a/docs/docs/guides/installation/configure/_linuxunix.mdx b/docs/docs/guides/installation/configure/_linuxunix.mdx index 22589f4ba2..030f88d54f 100644 --- a/docs/docs/guides/installation/configure/_linuxunix.mdx +++ b/docs/docs/guides/installation/configure/_linuxunix.mdx @@ -47,8 +47,8 @@ zitadel start-from-init \ export ZITADEL_DATABASE_HOST="my.database" export ZITADEL_DATABASE_USER_USERNAME="my_zitadel_db_user" export ZITADEL_DATABASE_USER_PASSWORD="Secret_DB_User_Password" -export ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_USERNAME="root" -export ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_PASSWORD="RootPassword1!" +export ZITADEL_FIRSTINSTANCE_ORG_HUMAN_USERNAME="root" +export ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD="RootPassword1!" # A single ZITADEL instance always needs the same 32 characters long masterkey # If you haven't done so already, you can generate a new one diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/installation/configure/configure.mdx index cc000515f4..7fb5b9fecf 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/installation/configure/configure.mdx @@ -32,7 +32,7 @@ Other configration that contains information like your databases admin username All configuration properties are also configurable via environemnt variables. Prefix the key with *ZITADEL\_*, uppercase the propery and join sections by an underscore _. -For example, if you want to configure the default ZITADEL IAM admin username and password, make sure the ZITADEL binary runtime has the variables *ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_USERNAME* and *ZITADEL_S3DEFAULTINSTANCE_ORG_HUMAN_PASSWORD* set. +For example, if you want to configure the default ZITADEL IAM admin username and password, make sure the ZITADEL binary runtime has the variables *ZITADEL_FIRSTINSTANCE_ORG_HUMAN_USERNAME* and *ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD* set. ## Masterkey diff --git a/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml b/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml index a3abfe37af..492b3ac12e 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml +++ b/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml @@ -1,5 +1,5 @@ # All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/adminn/setup/steps.yaml -S3DefaultInstance: +FirstInstance: Org: Human: # use the loginname root@zitadel.localhost diff --git a/docs/docs/guides/installation/configure/example-zitadel-values.yaml b/docs/docs/guides/installation/configure/example-zitadel-values.yaml index 9fc6ee6223..8db89c6e66 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-values.yaml +++ b/docs/docs/guides/installation/configure/example-zitadel-values.yaml @@ -9,7 +9,7 @@ zitadel: ExternalDomain: localhost # the configmap is also passed to the zitadel binary via the --steps flag - S3DefaultInstance: + FirstInstance: Org: Human: # use the loginname root@zitadel.localhost diff --git a/docs/docs/guides/installation/custom-domain.md b/docs/docs/guides/installation/custom-domain.md index 3654a67282..0e80d7d3ef 100644 --- a/docs/docs/guides/installation/custom-domain.md +++ b/docs/docs/guides/installation/custom-domain.md @@ -22,13 +22,8 @@ ExternalPort: 443 ## Database Initialization Steps Config ZITADEL creates random subdomains for each instance created. -However, for the default instance, this is most probably not the desired behavior. -You can give the default instance a fixed custom domain here. - -```yaml -S3DefaultInstance: - CustomDomain: 'zitadel.my.domain' -``` +However, for the first instance, this is most probably not the desired behavior. +In this case the `ExternalDomain`-field of the configuration is used. ## Example diff --git a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml b/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml index bf58cb7fa6..4d183bace1 100644 --- a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml +++ b/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml @@ -1,6 +1,5 @@ # All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/adminn/setup/steps.yaml -S3DefaultInstance: - CustomDomain: my.domain +FirstInstance: Org: Name: 'My Org' Human: diff --git a/docs/docs/guides/installation/run/_knative.mdx b/docs/docs/guides/installation/run/_knative.mdx index 28a77221c2..3b9d43af0b 100644 --- a/docs/docs/guides/installation/run/_knative.mdx +++ b/docs/docs/guides/installation/run/_knative.mdx @@ -42,7 +42,6 @@ kn service create zitadel \ --env ZITADEL_EXTERNALPORT=80 \ --env ZITADEL_TLS_ENABLED=false \ --env ZITADEL_EXTERNALDOMAIN=zitadel.default.127.0.0.1.sslip.io \ ---env ZITADEL_S3DEFAULTINSTANCE_CUSTOMDOMAIN=zitadel.default.127.0.0.1.sslip.io \ --arg "start-from-init" --arg "--masterkey" --arg "MasterkeyNeedsToHave32Characters" ``` From 096e12d3d00d438c4b92073ce7ec4d8e2685d3a7 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 28 Jul 2022 13:18:31 +0200 Subject: [PATCH 048/116] fix: set domain verified if domain policy does not require validation (#4061) * fix: set domain verified if domain policy does not require validation * handle domain claimed --- internal/api/grpc/management/org.go | 13 +- internal/command/org.go | 43 +------ internal/command/org_domain.go | 38 +++--- internal/command/org_domain_test.go | 117 +++++++++++------- internal/command/org_member_test.go | 2 +- internal/command/org_test.go | 2 +- internal/command/preparation_test.go | 4 +- .../command/project_application_api_test.go | 1 + .../command/project_application_oidc_test.go | 1 + internal/command/project_test.go | 3 +- internal/command/user.go | 53 ++++---- internal/command/user_human_test.go | 2 +- internal/query/projection/user.go | 24 ++++ internal/query/projection/user_test.go | 33 +++++ 14 files changed, 192 insertions(+), 144 deletions(-) diff --git a/internal/api/grpc/management/org.go b/internal/api/grpc/management/org.go index 2c56789519..62bebb0ffc 100644 --- a/internal/api/grpc/management/org.go +++ b/internal/api/grpc/management/org.go @@ -140,16 +140,17 @@ func (s *Server) ListOrgDomains(ctx context.Context, req *mgmt_pb.ListOrgDomains } func (s *Server) AddOrgDomain(ctx context.Context, req *mgmt_pb.AddOrgDomainRequest) (*mgmt_pb.AddOrgDomainResponse, error) { - domain, err := s.command.AddOrgDomain(ctx, AddOrgDomainRequestToDomain(ctx, req), nil) + orgID := authz.GetCtxData(ctx).OrgID + userIDs, err := s.getClaimedUserIDsOfOrgDomain(ctx, req.Domain, orgID) + if err != nil { + return nil, err + } + details, err := s.command.AddOrgDomain(ctx, orgID, req.Domain, userIDs) if err != nil { return nil, err } return &mgmt_pb.AddOrgDomainResponse{ - Details: object.AddToDetailsPb( - domain.Sequence, - domain.ChangeDate, - domain.ResourceOwner, - ), + Details: object.DomainToAddDetailsPb(details), }, nil } diff --git a/internal/command/org.go b/internal/command/org.go index eb195505b3..6eb3aa6a8c 100644 --- a/internal/command/org.go +++ b/internal/command/org.go @@ -6,7 +6,6 @@ import ( "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/command/preparation" - "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/domain" "github.com/zitadel/zitadel/internal/errors" caos_errs "github.com/zitadel/zitadel/internal/errors" @@ -47,10 +46,7 @@ func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, userIDs ...string) c.AddOrgMemberCommand(orgAgg, userID, roles...), } if o.CustomDomain != "" { - validations = append(validations, AddOrgDomain(orgAgg, o.CustomDomain)) - for _, userID := range userIDs { - validations = append(validations, c.prepareUserDomainClaimed(userID)) - } + validations = append(validations, c.prepareAddOrgDomain(orgAgg, o.CustomDomain, userIDs)) } cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, validations...) @@ -246,43 +242,6 @@ func ExistsOrg(ctx context.Context, filter preparation.FilterToQueryReducer, id return exists, nil } -func (c *Commands) setUpOrg( - ctx context.Context, - organisation *domain.Org, - admin *domain.Human, - loginPolicy *domain.DomainPolicy, - pwPolicy *domain.PasswordComplexityPolicy, - initCodeGenerator crypto.Generator, - phoneCodeGenerator crypto.Generator, - claimedUserIDs []string, - selfregistered bool, -) (orgAgg *eventstore.Aggregate, org *OrgWriteModel, human *HumanWriteModel, orgMember *OrgMemberWriteModel, events []eventstore.Command, err error) { - orgAgg, orgWriteModel, addOrgEvents, err := c.addOrg(ctx, organisation, claimedUserIDs) - if err != nil { - return nil, nil, nil, nil, nil, err - } - - var userEvents []eventstore.Command - if selfregistered { - userEvents, human, err = c.registerHuman(ctx, orgAgg.ID, admin, nil, loginPolicy, pwPolicy, initCodeGenerator, phoneCodeGenerator) - } else { - userEvents, human, err = c.addHuman(ctx, orgAgg.ID, admin, loginPolicy, pwPolicy, initCodeGenerator, phoneCodeGenerator) - } - if err != nil { - return nil, nil, nil, nil, nil, err - } - addOrgEvents = append(addOrgEvents, userEvents...) - - addedMember := NewOrgMemberWriteModel(orgAgg.ID, human.AggregateID) - orgMemberAgg := OrgAggregateFromWriteModel(&addedMember.WriteModel) - orgMemberEvent, err := c.addOrgMember(ctx, orgMemberAgg, addedMember, domain.NewMember(orgMemberAgg.ID, human.AggregateID, domain.RoleOrgOwner)) - if err != nil { - return nil, nil, nil, nil, nil, err - } - addOrgEvents = append(addOrgEvents, orgMemberEvent) - return orgAgg, orgWriteModel, human, addedMember, addOrgEvents, nil -} - func (c *Commands) addOrg(ctx context.Context, organisation *domain.Org, claimedUserIDs []string) (_ *eventstore.Aggregate, _ *OrgWriteModel, _ []eventstore.Command, err error) { if !organisation.IsValid() { return nil, nil, nil, caos_errs.ThrowInvalidArgument(nil, "COMM-deLSk", "Errors.Org.Invalid") diff --git a/internal/command/org_domain.go b/internal/command/org_domain.go index 12edcb5d1f..5270bbc19b 100644 --- a/internal/command/org_domain.go +++ b/internal/command/org_domain.go @@ -17,26 +17,34 @@ import ( "github.com/zitadel/zitadel/internal/repository/org" ) -func AddOrgDomain(a *org.Aggregate, domain string) preparation.Validation { +func (c *Commands) prepareAddOrgDomain(a *org.Aggregate, addDomain string, userIDs []string) preparation.Validation { return func() (preparation.CreateCommands, error) { - if domain = strings.TrimSpace(domain); domain == "" { + if addDomain = strings.TrimSpace(addDomain); addDomain == "" { return nil, errors.ThrowInvalidArgument(nil, "ORG-r3h4J", "Errors.Invalid.Argument") } return func(ctx context.Context, filter preparation.FilterToQueryReducer) ([]eventstore.Command, error) { - existing, err := orgDomain(ctx, filter, a.ID, domain) + existing, err := orgDomain(ctx, filter, a.ID, addDomain) if err != nil && !errs.Is(err, errors.ThrowNotFound(nil, "", "")) { return nil, err } - if existing != nil && existing.Verified { + if existing != nil && existing.State == domain.OrgDomainStateActive { return nil, errors.ThrowAlreadyExists(nil, "V2-e1wse", "Errors.Already.Exists") } domainPolicy, err := domainPolicyWriteModel(ctx, filter) if err != nil { return nil, err } - events := []eventstore.Command{org.NewDomainAddedEvent(ctx, &a.Aggregate, domain)} + events := []eventstore.Command{org.NewDomainAddedEvent(ctx, &a.Aggregate, addDomain)} if !domainPolicy.ValidateOrgDomains { - events = append(events, org.NewDomainVerifiedEvent(ctx, &a.Aggregate, domain)) + events = append(events, org.NewDomainVerifiedEvent(ctx, &a.Aggregate, addDomain)) + for _, userID := range userIDs { + claimedEvent, err := c.prepareUserDomainClaimed(ctx, filter, userID) + if err != nil { + logging.WithFields("userid", userID).WithError(err).Error("could not claim user") + continue + } + events = append(events, claimedEvent) + } } return events, nil }, nil @@ -93,25 +101,17 @@ func orgDomain(ctx context.Context, filter preparation.FilterToQueryReducer, org return wm, nil } -func (c *Commands) AddOrgDomain(ctx context.Context, orgDomain *domain.OrgDomain, claimedUserIDs []string) (*domain.OrgDomain, error) { - if !orgDomain.IsValid() { - return nil, errors.ThrowInvalidArgument(nil, "ORG-R24hb", "Errors.Org.InvalidDomain") - } - domainWriteModel := NewOrgDomainWriteModel(orgDomain.AggregateID, orgDomain.Domain) - orgAgg := OrgAggregateFromWriteModel(&domainWriteModel.WriteModel) - events, err := c.addOrgDomain(ctx, orgAgg, domainWriteModel, orgDomain, claimedUserIDs) +func (c *Commands) AddOrgDomain(ctx context.Context, orgID, domain string, claimedUserIDs []string) (*domain.ObjectDetails, error) { + orgAgg := org.NewAggregate(orgID) + cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, c.prepareAddOrgDomain(orgAgg, domain, claimedUserIDs)) if err != nil { return nil, err } - pushedEvents, err := c.eventstore.Push(ctx, events...) + pushedEvents, err := c.eventstore.Push(ctx, cmds...) if err != nil { return nil, err } - err = AppendAndReduce(domainWriteModel, pushedEvents...) - if err != nil { - return nil, err - } - return orgDomainWriteModelToOrgDomain(domainWriteModel), nil + return pushedEventsToObjectDetails(pushedEvents), nil } func (c *Commands) GenerateOrgDomainValidation(ctx context.Context, orgDomain *domain.OrgDomain) (token, url string, err error) { diff --git a/internal/command/org_domain_test.go b/internal/command/org_domain_test.go index b5c041f836..001992406e 100644 --- a/internal/command/org_domain_test.go +++ b/internal/command/org_domain_test.go @@ -25,9 +25,11 @@ import ( func TestAddDomain(t *testing.T) { type args struct { - a *org.Aggregate - domain string - filter preparation.FilterToQueryReducer + a *org.Aggregate + domain string + claimedUserIDs []string + idGenerator id.Generator + filter preparation.FilterToQueryReducer } agg := org.NewAggregate("test") @@ -50,8 +52,9 @@ func TestAddDomain(t *testing.T) { { name: "correct (should verify domain)", args: args{ - a: agg, - domain: "domain", + a: agg, + domain: "domain", + claimedUserIDs: []string{"userID1"}, filter: func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) { return []eventstore.Event{ org.NewDomainPolicyAddedEvent(ctx, &agg.Aggregate, true, true, true), @@ -67,26 +70,52 @@ func TestAddDomain(t *testing.T) { { name: "correct (should not verify domain)", args: args{ - a: agg, - domain: "domain", - filter: func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) { - return []eventstore.Event{ - org.NewDomainPolicyAddedEvent(ctx, &agg.Aggregate, true, false, false), - }, nil - }, + a: agg, + domain: "domain", + claimedUserIDs: []string{"userID1"}, + idGenerator: id_mock.ExpectID(t, "newID"), + filter: func() func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) { + i := 0 //TODO: we should fix this in the future to use some kind of mock struct and expect filter calls + return func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) { + if i == 2 { + i++ + return []eventstore.Event{user.NewHumanAddedEvent( + ctx, + &user.NewAggregate("userID1", "org2").Aggregate, + "username", + "firstname", + "lastname", + "nickname", + "displayname", + language.Und, + domain.GenderUnspecified, + "email", + false, + )}, nil + } + if i == 3 { + i++ + return []eventstore.Event{org.NewDomainPolicyAddedEvent(ctx, &agg.Aggregate, false, false, false)}, nil + } + i++ + return []eventstore.Event{org.NewDomainPolicyAddedEvent(ctx, &agg.Aggregate, true, false, false)}, nil + } + }(), }, want: Want{ Commands: []eventstore.Command{ org.NewDomainAddedEvent(context.Background(), &agg.Aggregate, "domain"), org.NewDomainVerifiedEvent(context.Background(), &agg.Aggregate, "domain"), + user.NewDomainClaimedEvent(context.Background(), &user.NewAggregate("userID1", "org2").Aggregate, "newID@temporary.domain", "username", false), }, }, }, { name: "already verified", args: args{ - a: agg, - domain: "domain", + a: agg, + domain: "domain", + claimedUserIDs: []string{"userID1"}, filter: func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) { return []eventstore.Event{ org.NewDomainAddedEvent(ctx, &agg.Aggregate, "domain"), @@ -102,7 +131,13 @@ func TestAddDomain(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, AddOrgDomain(tt.args.a, tt.args.domain), tt.args.filter, tt.want) + AssertValidation( + t, + authz.WithRequestedDomain(context.Background(), "domain"), + (&Commands{idGenerator: tt.args.idGenerator}).prepareAddOrgDomain(tt.args.a, tt.args.domain, tt.args.claimedUserIDs), + tt.args.filter, + tt.want, + ) }) } } @@ -143,7 +178,7 @@ func TestVerifyDomain(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, VerifyOrgDomain(tt.args.a, tt.args.domain), nil, tt.want) + AssertValidation(t, context.Background(), VerifyOrgDomain(tt.args.a, tt.args.domain), nil, tt.want) }) } } @@ -238,7 +273,7 @@ func TestSetDomainPrimary(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, SetPrimaryOrgDomain(tt.args.a, tt.args.domain), tt.args.filter, tt.want) + AssertValidation(t, context.Background(), SetPrimaryOrgDomain(tt.args.a, tt.args.domain), tt.args.filter, tt.want) }) } } @@ -249,11 +284,12 @@ func TestCommandSide_AddOrgDomain(t *testing.T) { } type args struct { ctx context.Context - domain *domain.OrgDomain + orgID string + domain string claimedUserIDs []string } type res struct { - want *domain.OrgDomain + want *domain.ObjectDetails err func(error) bool } tests := []struct { @@ -270,8 +306,7 @@ func TestCommandSide_AddOrgDomain(t *testing.T) { ), }, args: args{ - ctx: context.Background(), - domain: &domain.OrgDomain{}, + ctx: context.Background(), }, res: res{ err: errors.IsErrorInvalidArgument, @@ -299,13 +334,9 @@ func TestCommandSide_AddOrgDomain(t *testing.T) { ), }, args: args{ - ctx: context.Background(), - domain: &domain.OrgDomain{ - ObjectRoot: models.ObjectRoot{ - AggregateID: "org1", - }, - Domain: "domain.ch", - }, + ctx: context.Background(), + orgID: "org1", + domain: "domain.ch", }, res: res{ err: errors.IsErrorAlreadyExists, @@ -324,6 +355,16 @@ func TestCommandSide_AddOrgDomain(t *testing.T) { ), ), ), + expectFilter( + eventFromEventPusher( + org.NewDomainPolicyAddedEvent(context.Background(), + &org.NewAggregate("org1").Aggregate, + true, + true, + true, + ), + ), + ), expectPush( []*repository.Event{ eventFromEventPusher(org.NewDomainAddedEvent(context.Background(), @@ -335,21 +376,13 @@ func TestCommandSide_AddOrgDomain(t *testing.T) { ), }, args: args{ - ctx: context.Background(), - domain: &domain.OrgDomain{ - ObjectRoot: models.ObjectRoot{ - AggregateID: "org1", - }, - Domain: "domain.ch", - }, + ctx: context.Background(), + orgID: "org1", + domain: "domain.ch", }, res: res{ - want: &domain.OrgDomain{ - ObjectRoot: models.ObjectRoot{ - AggregateID: "org1", - ResourceOwner: "org1", - }, - Domain: "domain.ch", + want: &domain.ObjectDetails{ + ResourceOwner: "org1", }, }, }, @@ -359,7 +392,7 @@ func TestCommandSide_AddOrgDomain(t *testing.T) { r := &Commands{ eventstore: tt.fields.eventstore, } - got, err := r.AddOrgDomain(tt.args.ctx, tt.args.domain, tt.args.claimedUserIDs) + got, err := r.AddOrgDomain(tt.args.ctx, tt.args.orgID, tt.args.domain, tt.args.claimedUserIDs) if tt.res.err == nil { assert.NoError(t, err) } diff --git a/internal/command/org_member_test.go b/internal/command/org_member_test.go index 59c235e9fa..8a63bb5b40 100644 --- a/internal/command/org_member_test.go +++ b/internal/command/org_member_test.go @@ -165,7 +165,7 @@ func TestAddMember(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, (&Commands{zitadelRoles: tt.args.zitadelRoles}).AddOrgMemberCommand(tt.args.a, tt.args.userID, tt.args.roles...), tt.args.filter, tt.want) + AssertValidation(t, context.Background(), (&Commands{zitadelRoles: tt.args.zitadelRoles}).AddOrgMemberCommand(tt.args.a, tt.args.userID, tt.args.roles...), tt.args.filter, tt.want) }) } } diff --git a/internal/command/org_test.go b/internal/command/org_test.go index 47b6e8a8e8..ab9f90f8eb 100644 --- a/internal/command/org_test.go +++ b/internal/command/org_test.go @@ -62,7 +62,7 @@ func TestAddOrg(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, AddOrgCommand(authz.WithRequestedDomain(context.Background(), "localhost"), tt.args.a, tt.args.name), nil, tt.want) + AssertValidation(t, context.Background(), AddOrgCommand(authz.WithRequestedDomain(context.Background(), "localhost"), tt.args.a, tt.args.name), nil, tt.want) }) } } diff --git a/internal/command/preparation_test.go b/internal/command/preparation_test.go index 225cb37a96..ddfc7b5d8f 100644 --- a/internal/command/preparation_test.go +++ b/internal/command/preparation_test.go @@ -23,7 +23,7 @@ type CommandVerifier interface { } //AssertValidation checks if the validation works as inteded -func AssertValidation(t *testing.T, validation preparation.Validation, filter preparation.FilterToQueryReducer, want Want) { +func AssertValidation(t *testing.T, ctx context.Context, validation preparation.Validation, filter preparation.FilterToQueryReducer, want Want) { t.Helper() creates, err := validation() @@ -34,7 +34,7 @@ func AssertValidation(t *testing.T, validation preparation.Validation, filter pr if err != nil { return } - cmds, err := creates(context.Background(), filter) + cmds, err := creates(ctx, filter) if !errors.Is(err, want.CreateErr) { t.Errorf("wrong create err = (%[1]T): %[1]v, want (%[2]T): %[2]v", err, want.CreateErr) return diff --git a/internal/command/project_application_api_test.go b/internal/command/project_application_api_test.go index 7db5a30bfc..faf468a6ec 100644 --- a/internal/command/project_application_api_test.go +++ b/internal/command/project_application_api_test.go @@ -128,6 +128,7 @@ func TestAddAPIConfig(t *testing.T) { idGenerator: tt.fields.idGenerator, } AssertValidation(t, + context.Background(), c.AddAPIAppCommand( &addAPIApp{ AddApp: AddApp{ diff --git a/internal/command/project_application_oidc_test.go b/internal/command/project_application_oidc_test.go index 3028e84e88..d8ed4bb80a 100644 --- a/internal/command/project_application_oidc_test.go +++ b/internal/command/project_application_oidc_test.go @@ -180,6 +180,7 @@ func TestAddOIDCApp(t *testing.T) { idGenerator: tt.fields.idGenerator, } AssertValidation(t, + context.Background(), c.AddOIDCAppCommand( tt.args.app, tt.args.clientSecretAlg, diff --git a/internal/command/project_test.go b/internal/command/project_test.go index 17a3043ceb..94f540f91d 100644 --- a/internal/command/project_test.go +++ b/internal/command/project_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/stretchr/testify/assert" + id_mock "github.com/zitadel/zitadel/internal/id/mock" "github.com/zitadel/zitadel/internal/repository/member" @@ -1065,7 +1066,7 @@ func TestAddProject(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, AddProjectCommand(tt.args.a, tt.args.name, tt.args.owner, false, false, false, tt.args.privateLabelingSetting), nil, tt.want) + AssertValidation(t, context.Background(), AddProjectCommand(tt.args.a, tt.args.name, tt.args.owner, false, false, false, tt.args.privateLabelingSetting), nil, tt.want) }) } } diff --git a/internal/command/user.go b/internal/command/user.go index a4f33a1fb5..f49a7de40b 100644 --- a/internal/command/user.go +++ b/internal/command/user.go @@ -339,36 +339,31 @@ func (c *Commands) userDomainClaimed(ctx context.Context, userID string) (events }, changedUserGrant, nil } -func (c *Commands) prepareUserDomainClaimed(userID string) preparation.Validation { - return func() (_ preparation.CreateCommands, err error) { - return func(ctx context.Context, filter preparation.FilterToQueryReducer) ([]eventstore.Command, error) { - userWriteModel, err := userWriteModelByID(ctx, filter, userID, "") - if err != nil { - return nil, err - } - if !userWriteModel.UserState.Exists() { - return nil, caos_errs.ThrowNotFound(nil, "COMMAND-ii9K0", "Errors.User.NotFound") - } - domainPolicy, err := domainPolicyWriteModel(ctx, filter) - if err != nil { - return nil, err - } - userAgg := UserAggregateFromWriteModel(&userWriteModel.WriteModel) - - id, err := c.idGenerator.Next() - if err != nil { - return nil, err - } - - return []eventstore.Command{user.NewDomainClaimedEvent( - ctx, - userAgg, - fmt.Sprintf("%s@temporary.%s", id, authz.GetInstance(ctx).RequestedDomain()), - userWriteModel.UserName, - domainPolicy.UserLoginMustBeDomain), - }, nil - }, nil +func (c *Commands) prepareUserDomainClaimed(ctx context.Context, filter preparation.FilterToQueryReducer, userID string) (*user.DomainClaimedEvent, error) { + userWriteModel, err := userWriteModelByID(ctx, filter, userID, "") + if err != nil { + return nil, err } + if !userWriteModel.UserState.Exists() { + return nil, caos_errs.ThrowNotFound(nil, "COMMAND-ii9K0", "Errors.User.NotFound") + } + domainPolicy, err := domainPolicyWriteModel(ctx, filter) + if err != nil { + return nil, err + } + userAgg := UserAggregateFromWriteModel(&userWriteModel.WriteModel) + + id, err := c.idGenerator.Next() + if err != nil { + return nil, err + } + + return user.NewDomainClaimedEvent( + ctx, + userAgg, + fmt.Sprintf("%s@temporary.%s", id, authz.GetInstance(ctx).RequestedDomain()), + userWriteModel.UserName, + domainPolicy.UserLoginMustBeDomain), nil } func (c *Commands) UserDomainClaimedSent(ctx context.Context, orgID, userID string) (err error) { diff --git a/internal/command/user_human_test.go b/internal/command/user_human_test.go index e2b9a70c2c..f618ba58c0 100644 --- a/internal/command/user_human_test.go +++ b/internal/command/user_human_test.go @@ -2948,7 +2948,7 @@ func TestAddHumanCommand(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, AddHumanCommand(tt.args.a, tt.args.human, tt.args.passwordAlg, tt.args.codeAlg), tt.args.filter, tt.want) + AssertValidation(t, context.Background(), AddHumanCommand(tt.args.a, tt.args.human, tt.args.passwordAlg, tt.args.codeAlg), tt.args.filter, tt.want) }) } } diff --git a/internal/query/projection/user.go b/internal/query/projection/user.go index fc762761d6..4aacd26b7e 100644 --- a/internal/query/projection/user.go +++ b/internal/query/projection/user.go @@ -200,6 +200,10 @@ func (p *userProjection) reducers() []handler.AggregateReducer { Event: user.UserUserNameChangedType, Reduce: p.reduceUserNameChanged, }, + { + Event: user.UserDomainClaimedType, + Reduce: p.reduceDomainClaimed, + }, { Event: user.HumanProfileChangedType, Reduce: p.reduceHumanProfileChanged, @@ -518,6 +522,26 @@ func (p *userProjection) reduceUserNameChanged(event eventstore.Event) (*handler ), nil } +func (p *userProjection) reduceDomainClaimed(event eventstore.Event) (*handler.Statement, error) { + e, ok := event.(*user.DomainClaimedEvent) + if !ok { + return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ASwf3", "reduce.wrong.event.type %s", user.UserDomainClaimedType) + } + + return crdb.NewUpdateStatement( + e, + []handler.Column{ + handler.NewCol(UserChangeDateCol, e.CreationDate()), + handler.NewCol(UserUsernameCol, e.UserName), + handler.NewCol(UserSequenceCol, e.Sequence()), + }, + []handler.Condition{ + handler.NewCond(UserIDCol, e.Aggregate().ID), + handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID), + }, + ), nil +} + func (p *userProjection) reduceHumanProfileChanged(event eventstore.Event) (*handler.Statement, error) { e, ok := event.(*user.HumanProfileChangedEvent) if !ok { diff --git a/internal/query/projection/user_test.go b/internal/query/projection/user_test.go index 085192161b..79737feeba 100644 --- a/internal/query/projection/user_test.go +++ b/internal/query/projection/user_test.go @@ -733,6 +733,39 @@ func TestUserProjection_reduces(t *testing.T) { }, }, }, + { + name: "reduceDomainClaimed", + args: args{ + event: getEvent(testEvent( + repository.EventType(user.UserDomainClaimedType), + user.AggregateType, + []byte(`{ + "username": "id@temporary.domain" + }`), + ), user.DomainClaimedEventMapper), + }, + reduce: (&userProjection{}).reduceDomainClaimed, + want: wantReduce{ + aggregateType: user.AggregateType, + sequence: 15, + previousSequence: 10, + projection: UserTable, + executer: &testExecuter{ + executions: []execution{ + { + expectedStmt: "UPDATE projections.users2 SET (change_date, username, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)", + expectedArgs: []interface{}{ + anyArg{}, + "id@temporary.domain", + uint64(15), + "agg-id", + "instance-id", + }, + }, + }, + }, + }, + }, { name: "reduceHumanProfileChanged", args: args{ From d620126aaba9daa43b40d35ef91bc7c9210a5f07 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 28 Jul 2022 14:11:10 +0200 Subject: [PATCH 049/116] fix: handle nil pointer when login hint is invalid (#4066) * fix: handle nil pointer when login hint is invalid * mention encoding for login_hint --- docs/docs/apis/openidoauth/endpoints.md | 16 ++++++++-------- .../eventsourcing/eventstore/auth_request.go | 6 +++--- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/docs/apis/openidoauth/endpoints.md b/docs/docs/apis/openidoauth/endpoints.md index d5bd12dd29..0b2a4b4417 100644 --- a/docs/docs/apis/openidoauth/endpoints.md +++ b/docs/docs/apis/openidoauth/endpoints.md @@ -83,15 +83,15 @@ no additional parameters required ### Additional parameters -| Parameter | Description | -| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| id_token_hint | Valid `id_token` (of an existing session) used to identity the subject. **SHOULD** be provided when using prompt `none`. | -| login_hint | A valid logon name of a user. Will be used for username inputs or preselecting a user on `select_account` | -| max_age | Seconds since the last active successful authentication of the user | -| nonce | Random string value to associate the client session with the ID Token and for replay attacks mitigation. **MUST** be provided when using **implicit flow**. | +| Parameter | Description | +| ------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| id_token_hint | Valid `id_token` (of an existing session) used to identity the subject. **SHOULD** be provided when using prompt `none`. | +| login_hint | A valid logon name of a user. Will be used for username inputs or preselecting a user on `select_account`. Be sure to encode the hint correctly using url encoding (especially when using `+` or alike in the loginname) | +| max_age | Seconds since the last active successful authentication of the user | +| nonce | Random string value to associate the client session with the ID Token and for replay attacks mitigation. **MUST** be provided when using **implicit flow**. | | prompt | If the Auth Server prompts the user for (re)authentication.
no prompt: the user will have to choose a session if more than one session exists
`none`: user must be authenticated without interaction, an error is returned otherwise
`login`: user must reauthenticate / provide a user name
`select_account`: user is prompted to select one of the existing sessions or create a new one
`create`: the registration form will be displayed to the user directly | -| state | Opaque value used to maintain state between the request and the callback. Used for Cross-Site Request Forgery (CSRF) mitigation as well, therefore highly **recommended**. | -| ui_locales | Spaces delimited list of preferred locales for the login UI, e.g. `de-CH de en`. If none is provided or matches the possible locales provided by the login UI, the `accept-language` header of the browser will be taken into account. | +| state | Opaque value used to maintain state between the request and the callback. Used for Cross-Site Request Forgery (CSRF) mitigation as well, therefore highly **recommended**. | +| ui_locales | Spaces delimited list of preferred locales for the login UI, e.g. `de-CH de en`. If none is provided or matches the possible locales provided by the login UI, the `accept-language` header of the browser will be taken into account. | ### Successful Code Response diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go index f0d78b13b7..3bbc75078b 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go @@ -142,7 +142,7 @@ func (repo *AuthRequestRepo) CreateAuthRequest(ctx context.Context, request *dom } if request.LoginHint != "" { err = repo.checkLoginName(ctx, request, request.LoginHint) - logging.WithFields("login name", request.LoginHint, "id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Debug("login hint invalid") + logging.WithFields("login name", request.LoginHint, "id", request.ID, "applicationID", request.ApplicationID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Info("login hint invalid") } if request.UserID == "" && request.LoginHint == "" && domain.IsPrompt(request.Prompt, domain.PromptNone) { err = repo.tryUsingOnlyUserSession(request) @@ -643,9 +643,9 @@ func (repo *AuthRequestRepo) checkLoginName(ctx context.Context, request *domain } } } - if request.LoginPolicy.IgnoreUnknownUsernames { + if request.LoginPolicy != nil && request.LoginPolicy.IgnoreUnknownUsernames { if errors.IsNotFound(err) || (user != nil && user.State == int32(domain.UserStateInactive)) { - if request.LabelPolicy.HideLoginNameSuffix { + if request.LabelPolicy != nil && request.LabelPolicy.HideLoginNameSuffix { preferredLoginName = loginName } request.SetUserInfo(unknownUserID, preferredLoginName, preferredLoginName, preferredLoginName, "", request.RequestedOrgID) From bc9a85daf3186e29d9084bc35e64010dca8ebd6d Mon Sep 17 00:00:00 2001 From: Stefan Benz <46600784+stebenz@users.noreply.github.com> Date: Thu, 28 Jul 2022 15:42:35 +0200 Subject: [PATCH 050/116] feat: V2 alpha import and export of organizations (#3798) * feat(import): add functionality to import data into an instance * feat(import): move import to admin api and additional checks for nil pointer * fix(export): export implementation with filtered members and grants * fix: export and import implementation * fix: add possibility to export hashed passwords with the user * fix(import): import with structure of v1 and v2 * docs: add v1 proto * fix(import): check im imported user is already existing * fix(import): add otp import function * fix(import): add external idps, domains, custom text and messages * fix(import): correct usage of default values from login policy * fix(export): fix renaming of add project function * fix(import): move checks for unit tests * expect filter * fix(import): move checks for unit tests * fix(import): move checks for unit tests * fix(import): produce prerelease from branch * fix(import): correctly use provided user id for machine user imports * fix(import): corrected otp import and added guide for export and import * fix: import verified and primary domains * fix(import): add reading from gcs, s3 and localfile with tracing * fix(import): gcs and s3, file size correction and error logging * Delete docker-compose.yml * fix(import): progress logging and count of resources * fix(import): progress logging and count of resources * log subscription * fix(import): incorporate review * fix(import): incorporate review * docs: add suggestion for import Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> * fix(import): add verification otp event and handling of deleted but existing users Co-authored-by: Livio Amstutz Co-authored-by: Fabienne Co-authored-by: Silvan Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> --- .releaserc.js | 2 +- build/zitadel/generate-grpc.sh | 5 +- cmd/start/start.go | 4 +- docs/docs/apis/proto/admin.md | 353 ++++- docs/docs/apis/proto/management.md | 14 + docs/docs/apis/proto/system.md | 8 +- docs/docs/apis/proto/v1.md | 261 ++++ docs/docs/guides/api/export-and-import.md | 129 ++ docs/sidebars.js | 5 +- go.mod | 3 +- go.sum | 3 + internal/api/grpc/admin/domain_policy.go | 6 +- internal/api/grpc/admin/export.go | 1151 +++++++++++++++++ internal/api/grpc/admin/import.go | 898 +++++++++++++ internal/api/grpc/admin/server.go | 5 +- internal/api/grpc/management/actions.go | 2 +- .../api/grpc/management/actions_converter.go | 2 +- internal/api/grpc/management/idp.go | 4 +- internal/api/grpc/management/idp_converter.go | 4 +- .../api/grpc/management/idp_converter_test.go | 2 +- internal/api/grpc/management/policy_label.go | 2 +- .../grpc/management/policy_label_converter.go | 2 +- internal/api/grpc/management/policy_login.go | 2 +- .../grpc/management/policy_login_converter.go | 2 +- internal/api/grpc/management/user.go | 28 +- .../api/grpc/management/user_converter.go | 7 +- internal/command/org.go | 63 +- internal/command/org_action.go | 21 +- internal/command/org_domain.go | 17 +- internal/command/org_domain_test.go | 4 +- internal/command/org_idp_config.go | 18 +- internal/command/project.go | 59 +- internal/command/project_application_api.go | 105 +- internal/command/project_application_oidc.go | 83 +- internal/command/project_grant.go | 22 +- internal/command/user_human.go | 79 +- internal/command/user_human_otp.go | 27 +- internal/command/user_idp_link.go | 17 + internal/command/user_machine.go | 24 +- internal/crypto/crypto.go | 8 + internal/domain/human.go | 3 +- internal/domain/human_hashed_password.go | 24 + .../eventstore/handler/handler_projection.go | 2 +- internal/query/idp.go | 12 + internal/query/query.go | 15 +- internal/query/user_otp.go | 91 ++ internal/query/user_password.go | 140 ++ proto/zitadel/admin.proto | 235 +++- proto/zitadel/management.proto | 11 +- proto/zitadel/system.proto | 933 +++++++------ proto/zitadel/v1.proto | 161 +++ 51 files changed, 4430 insertions(+), 648 deletions(-) create mode 100644 docs/docs/apis/proto/v1.md create mode 100644 docs/docs/guides/api/export-and-import.md create mode 100644 internal/api/grpc/admin/export.go create mode 100644 internal/api/grpc/admin/import.go create mode 100644 internal/domain/human_hashed_password.go create mode 100644 internal/query/user_otp.go create mode 100644 internal/query/user_password.go create mode 100644 proto/zitadel/v1.proto diff --git a/.releaserc.js b/.releaserc.js index 6500efe28c..16be63ca2c 100644 --- a/.releaserc.js +++ b/.releaserc.js @@ -3,7 +3,7 @@ module.exports = { {name: 'main'}, {name: '1.x.x', range: '1.x.x', channel: '1.x.x'}, {name: 'v2-alpha', prerelease: true}, - {name: 'scheduler', prerelease: true}, + {name: 'v2-alpha-import', prerelease: true}, ], plugins: [ "@semantic-release/commit-analyzer" diff --git a/build/zitadel/generate-grpc.sh b/build/zitadel/generate-grpc.sh index 89d0efa41c..f4e6b4d1e8 100755 --- a/build/zitadel/generate-grpc.sh +++ b/build/zitadel/generate-grpc.sh @@ -182,6 +182,9 @@ protoc \ -I=/proto/include \ --doc_out=${DOCS_PATH} --doc_opt=${PROTO_PATH}/docs/zitadel-md.tmpl,settings.md \ ${PROTO_PATH}/settings.proto - +protoc \ + -I=/proto/include \ + --doc_out=${DOCS_PATH} --doc_opt=${PROTO_PATH}/docs/zitadel-md.tmpl,v1.md \ + ${PROTO_PATH}/v1.proto echo "done generating grpc" diff --git a/cmd/start/start.go b/cmd/start/start.go index 313ef460e3..92668f4d24 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -100,7 +100,7 @@ func startZitadel(config *Config, masterKey string) error { return fmt.Errorf("cannot start eventstore for queries: %w", err) } - queries, err := query.StartQueries(ctx, eventstoreClient, dbClient, config.Projections, keys.OIDC, config.InternalAuthZ.RolePermissionMappings) + queries, err := query.StartQueries(ctx, eventstoreClient, dbClient, config.Projections, config.SystemDefaults, keys.IDPConfig, keys.OTP, keys.OIDC, config.InternalAuthZ.RolePermissionMappings) if err != nil { return fmt.Errorf("cannot start queries: %w", err) } @@ -178,7 +178,7 @@ func startAPIs(ctx context.Context, router *mux.Router, commands *command.Comman if err := apis.RegisterServer(ctx, system.CreateServer(commands, queries, adminRepo, config.Database.Database, config.DefaultInstance)); err != nil { return err } - if err := apis.RegisterServer(ctx, admin.CreateServer(config.Database.Database, commands, queries, adminRepo, config.ExternalSecure, keys.User)); err != nil { + if err := apis.RegisterServer(ctx, admin.CreateServer(config.Database.Database, commands, queries, config.SystemDefaults, adminRepo, config.ExternalSecure, keys.User)); err != nil { return err } if err := apis.RegisterServer(ctx, management.CreateServer(commands, queries, config.SystemDefaults, keys.User, config.ExternalSecure, config.AuditLogRetention)); err != nil { diff --git a/docs/docs/apis/proto/admin.md b/docs/docs/apis/proto/admin.md index d8b8a8332a..50d6b506cf 100644 --- a/docs/docs/apis/proto/admin.md +++ b/docs/docs/apis/proto/admin.md @@ -386,7 +386,7 @@ all queries need to match (AND) > **rpc** SetUpOrg([SetUpOrgRequest](#setuporgrequest)) [SetUpOrgResponse](#setuporgresponse) -Creates a new org and user +Creates a new org and user and adds the user to the orgs members as ORG_OWNER @@ -1469,7 +1469,7 @@ they represent the delta of the event happend on the objects [ListFailedEventsResponse](#listfailedeventsresponse) Returns event descriptions which cannot be processed. -It's possible that some events need some retries. +It's possible that some events need some retries. For example if the SMTP-API wasn't able to send an email at the first time @@ -1493,6 +1493,30 @@ failed event. You can find out if it worked on the `failure_count` DELETE: /failedevents/{database}/{view_name}/{failed_sequence} +### ImportData + +> **rpc** ImportData([ImportDataRequest](#importdatarequest)) +[ImportDataResponse](#importdataresponse) + +Imports data into instance and creates different objects + + + + POST: /import + + +### ExportData + +> **rpc** ExportData([ExportDataRequest](#exportdatarequest)) +[ExportDataResponse](#exportdataresponse) + +Exports data from instance + + + + POST: /export + + @@ -1789,6 +1813,49 @@ This is an empty request +### DataOrg + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| org_id | string | - | | +| org | zitadel.management.v1.AddOrgRequest | - | | +| domain_policy | AddCustomDomainPolicyRequest | - | | +| label_policy | zitadel.management.v1.AddCustomLabelPolicyRequest | - | | +| lockout_policy | zitadel.management.v1.AddCustomLockoutPolicyRequest | - | | +| login_policy | zitadel.management.v1.AddCustomLoginPolicyRequest | - | | +| password_complexity_policy | zitadel.management.v1.AddCustomPasswordComplexityPolicyRequest | - | | +| privacy_policy | zitadel.management.v1.AddCustomPrivacyPolicyRequest | - | | +| projects | repeated zitadel.v1.v1.DataProject | - | | +| project_roles | repeated zitadel.management.v1.AddProjectRoleRequest | - | | +| api_apps | repeated zitadel.v1.v1.DataAPIApplication | - | | +| oidc_apps | repeated zitadel.v1.v1.DataOIDCApplication | - | | +| human_users | repeated zitadel.v1.v1.DataHumanUser | - | | +| machine_users | repeated zitadel.v1.v1.DataMachineUser | - | | +| trigger_actions | repeated zitadel.management.v1.SetTriggerActionsRequest | - | | +| actions | repeated zitadel.v1.v1.DataAction | - | | +| project_grants | repeated zitadel.v1.v1.DataProjectGrant | - | | +| user_grants | repeated zitadel.management.v1.AddUserGrantRequest | - | | +| org_members | repeated zitadel.management.v1.AddOrgMemberRequest | - | | +| project_members | repeated zitadel.management.v1.AddProjectMemberRequest | - | | +| project_grant_members | repeated zitadel.management.v1.AddProjectGrantMemberRequest | - | | +| user_metadata | repeated zitadel.management.v1.SetUserMetadataRequest | - | | +| login_texts | repeated zitadel.management.v1.SetCustomLoginTextsRequest | - | | +| init_messages | repeated zitadel.management.v1.SetCustomInitMessageTextRequest | - | | +| password_reset_messages | repeated zitadel.management.v1.SetCustomPasswordResetMessageTextRequest | - | | +| verify_email_messages | repeated zitadel.management.v1.SetCustomVerifyEmailMessageTextRequest | - | | +| verify_phone_messages | repeated zitadel.management.v1.SetCustomVerifyPhoneMessageTextRequest | - | | +| domain_claimed_messages | repeated zitadel.management.v1.SetCustomDomainClaimedMessageTextRequest | - | | +| passwordless_registration_messages | repeated zitadel.management.v1.SetCustomPasswordlessRegistrationMessageTextRequest | - | | +| oidc_idps | repeated zitadel.v1.v1.DataOIDCIDP | - | | +| jwt_idps | repeated zitadel.v1.v1.DataJWTIDP | - | | +| user_links | repeated zitadel.idp.v1.IDPUserLink | - | | +| domains | repeated zitadel.org.v1.Domain | - | | + + + + ### DeactivateIDPRequest @@ -1833,6 +1900,76 @@ This is an empty request +### ExportDataRequest + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| org_ids | repeated string | - | | +| excluded_org_ids | repeated string | - | | +| with_passwords | bool | - | | +| with_otp | bool | - | | +| response_output | bool | - | | +| local_output | ExportDataRequest.LocalOutput | - | | +| s3_output | ExportDataRequest.S3Output | - | | +| gcs_output | ExportDataRequest.GCSOutput | - | | +| timeout | string | - | | + + + + +### ExportDataRequest.GCSOutput + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| bucket | string | - | | +| serviceaccount_json | string | - | | +| path | string | - | | + + + + +### ExportDataRequest.LocalOutput + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| path | string | - | | + + + + +### ExportDataRequest.S3Output + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| path | string | - | | +| endpoint | string | - | | +| access_key_id | string | - | | +| secret_access_key | string | - | | +| ssl | bool | - | | +| bucket | string | - | | + + + + +### ExportDataResponse + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| orgs | repeated DataOrg | - | | + + + + ### FailedEvent @@ -2603,6 +2740,218 @@ This is an empty response +### ImportDataError + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| type | string | - | | +| id | string | - | | +| message | string | - | | + + + + +### ImportDataOrg + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| orgs | repeated DataOrg | - | | + + + + +### ImportDataRequest + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgs | ImportDataOrg | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgsv1 | zitadel.v1.v1.ImportDataOrg | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgs_local | ImportDataRequest.LocalInput | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgsv1_local | ImportDataRequest.LocalInput | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgs_s3 | ImportDataRequest.S3Input | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgsv1_s3 | ImportDataRequest.S3Input | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgs_gcs | ImportDataRequest.GCSInput | - | | +| [**oneof**](https://developers.google.com/protocol-buffers/docs/proto3#oneof) data.data_orgsv1_gcs | ImportDataRequest.GCSInput | - | | +| timeout | string | - | | + + + + +### ImportDataRequest.GCSInput + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| bucket | string | - | | +| serviceaccount_json | string | - | | +| path | string | - | | + + + + +### ImportDataRequest.LocalInput + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| path | string | - | | + + + + +### ImportDataRequest.S3Input + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| path | string | - | | +| endpoint | string | - | | +| access_key_id | string | - | | +| secret_access_key | string | - | | +| ssl | bool | - | | +| bucket | string | - | | + + + + +### ImportDataResponse + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| errors | repeated ImportDataError | - | | +| success | ImportDataSuccess | - | | + + + + +### ImportDataSuccess + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| orgs | repeated ImportDataSuccessOrg | - | | + + + + +### ImportDataSuccessOrg + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| org_id | string | - | | +| project_ids | repeated string | - | | +| project_roles | repeated string | - | | +| oidc_app_ids | repeated string | - | | +| api_app_ids | repeated string | - | | +| human_user_ids | repeated string | - | | +| machine_user_ids | repeated string | - | | +| action_ids | repeated string | - | | +| trigger_actions | repeated zitadel.management.v1.SetTriggerActionsRequest | - | | +| project_grants | repeated ImportDataSuccessProjectGrant | - | | +| user_grants | repeated ImportDataSuccessUserGrant | - | | +| org_members | repeated string | - | | +| project_members | repeated ImportDataSuccessProjectMember | - | | +| project_grant_members | repeated ImportDataSuccessProjectGrantMember | - | | +| oidc_ipds | repeated string | - | | +| jwt_idps | repeated string | - | | +| idp_links | repeated string | - | | +| user_links | repeated ImportDataSuccessUserLinks | - | | +| user_metadata | repeated ImportDataSuccessUserMetadata | - | | +| domains | repeated string | - | | + + + + +### ImportDataSuccessProjectGrant + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| grant_id | string | - | | +| project_id | string | - | | +| org_id | string | - | | + + + + +### ImportDataSuccessProjectGrantMember + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| project_id | string | - | | +| grant_id | string | - | | +| user_id | string | - | | + + + + +### ImportDataSuccessProjectMember + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| project_id | string | - | | +| user_id | string | - | | + + + + +### ImportDataSuccessUserGrant + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| project_id | string | - | | +| user_id | string | - | | + + + + +### ImportDataSuccessUserLinks + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| user_id | string | - | | +| external_user_id | string | - | | +| display_name | string | - | | +| idp_id | string | - | | + + + + +### ImportDataSuccessUserMetadata + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| user_id | string | - | | +| key | string | - | | + + + + ### IsOrgUniqueRequest if name or domain is already in use, org is not unique at least one argument has to be provided diff --git a/docs/docs/apis/proto/management.md b/docs/docs/apis/proto/management.md index 2eac7a106c..0c5dbaa08d 100644 --- a/docs/docs/apis/proto/management.md +++ b/docs/docs/apis/proto/management.md @@ -5176,8 +5176,10 @@ This is an empty response | email | ImportHumanUserRequest.Email | - | message.required: true
| | phone | ImportHumanUserRequest.Phone | - | | | password | string | - | | +| hashed_password | ImportHumanUserRequest.HashedPassword | - | | | password_change_required | bool | - | | | request_passwordless_registration | bool | - | | +| otp_code | string | - | | @@ -5194,6 +5196,18 @@ This is an empty response +### ImportHumanUserRequest.HashedPassword + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| value | string | - | | +| algorithm | string | - | | + + + + ### ImportHumanUserRequest.Phone diff --git a/docs/docs/apis/proto/system.md b/docs/docs/apis/proto/system.md index 2d75c73df6..8574121251 100644 --- a/docs/docs/apis/proto/system.md +++ b/docs/docs/apis/proto/system.md @@ -150,8 +150,8 @@ they represent the delta of the event happend on the objects [ClearViewResponse](#clearviewresponse) Truncates the delta of the change stream -be carefull with this function because ZITADEL has to -recompute the deltas after they got cleared. +be carefull with this function because ZITADEL has to +recompute the deltas after they got cleared. Search requests will return wrong results until all deltas are recomputed @@ -165,7 +165,7 @@ Search requests will return wrong results until all deltas are recomputed [ListFailedEventsResponse](#listfailedeventsresponse) Returns event descriptions which cannot be processed. -It's possible that some events need some retries. +It's possible that some events need some retries. For example if the SMTP-API wasn't able to send an email at the first time @@ -180,7 +180,7 @@ For example if the SMTP-API wasn't able to send an email at the first time Deletes the event from failed events view. the event is not removed from the change stream -This call is usefull if the system was able to process the event later. +This call is usefull if the system was able to process the event later. e.g. if the second try of sending an email was successful. the first try produced a failed event. You can find out if it worked on the `failure_count` diff --git a/docs/docs/apis/proto/v1.md b/docs/docs/apis/proto/v1.md new file mode 100644 index 0000000000..b8f4638bef --- /dev/null +++ b/docs/docs/apis/proto/v1.md @@ -0,0 +1,261 @@ +--- +title: zitadel/v1.proto +--- +> This document reflects the state from API 1.0 (available from 20.04.2021) + + + + +## Messages + + +### AddCustomOrgIAMPolicyRequest + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| org_id | string | - | string.min_len: 1
string.max_len: 200
| +| user_login_must_be_domain | bool | the username has to end with the domain of it's organisation (uniqueness is organisation based) | | + + + + +### DataAPIApplication + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| app_id | string | - | | +| app | zitadel.management.v1.AddAPIAppRequest | - | | + + + + +### DataAction + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| action_id | string | - | | +| action | zitadel.management.v1.CreateActionRequest | - | | + + + + +### DataHumanUser + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| user_id | string | - | | +| user | zitadel.management.v1.ImportHumanUserRequest | - | | + + + + +### DataJWTIDP + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| idp_id | string | - | | +| idp | zitadel.management.v1.AddOrgJWTIDPRequest | - | | + + + + +### DataMachineUser + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| user_id | string | - | | +| user | zitadel.management.v1.AddMachineUserRequest | - | | + + + + +### DataOIDCApplication + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| app_id | string | - | | +| app | zitadel.management.v1.AddOIDCAppRequest | - | | + + + + +### DataOIDCIDP + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| idp_id | string | - | | +| idp | zitadel.management.v1.AddOrgOIDCIDPRequest | - | | + + + + +### DataOrg + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| org_id | string | - | | +| org | zitadel.management.v1.AddOrgRequest | - | | +| iam_policy | AddCustomOrgIAMPolicyRequest | - | | +| label_policy | zitadel.management.v1.AddCustomLabelPolicyRequest | - | | +| lockout_policy | zitadel.management.v1.AddCustomLockoutPolicyRequest | - | | +| login_policy | zitadel.management.v1.AddCustomLoginPolicyRequest | - | | +| password_complexity_policy | zitadel.management.v1.AddCustomPasswordComplexityPolicyRequest | - | | +| privacy_policy | zitadel.management.v1.AddCustomPrivacyPolicyRequest | - | | +| projects | repeated DataProject | - | | +| project_roles | repeated zitadel.management.v1.AddProjectRoleRequest | - | | +| api_apps | repeated DataAPIApplication | - | | +| oidc_apps | repeated DataOIDCApplication | - | | +| human_users | repeated DataHumanUser | - | | +| machine_users | repeated DataMachineUser | - | | +| trigger_actions | repeated zitadel.management.v1.SetTriggerActionsRequest | - | | +| actions | repeated DataAction | - | | +| project_grants | repeated DataProjectGrant | - | | +| user_grants | repeated zitadel.management.v1.AddUserGrantRequest | - | | +| org_members | repeated zitadel.management.v1.AddOrgMemberRequest | - | | +| project_members | repeated zitadel.management.v1.AddProjectMemberRequest | - | | +| project_grant_members | repeated zitadel.management.v1.AddProjectGrantMemberRequest | - | | +| user_metadata | repeated zitadel.management.v1.SetUserMetadataRequest | - | | +| login_texts | repeated zitadel.management.v1.SetCustomLoginTextsRequest | - | | +| init_messages | repeated zitadel.management.v1.SetCustomInitMessageTextRequest | - | | +| password_reset_messages | repeated zitadel.management.v1.SetCustomPasswordResetMessageTextRequest | - | | +| verify_email_messages | repeated zitadel.management.v1.SetCustomVerifyEmailMessageTextRequest | - | | +| verify_phone_messages | repeated zitadel.management.v1.SetCustomVerifyPhoneMessageTextRequest | - | | +| domain_claimed_messages | repeated zitadel.management.v1.SetCustomDomainClaimedMessageTextRequest | - | | +| passwordless_registration_messages | repeated zitadel.management.v1.SetCustomPasswordlessRegistrationMessageTextRequest | - | | +| oidc_idps | repeated DataOIDCIDP | - | | +| jwt_idps | repeated DataJWTIDP | - | | +| second_factors | repeated zitadel.management.v1.AddSecondFactorToLoginPolicyRequest | - | | +| multi_factors | repeated zitadel.management.v1.AddMultiFactorToLoginPolicyRequest | - | | +| idps | repeated zitadel.management.v1.AddIDPToLoginPolicyRequest | - | | +| user_links | repeated zitadel.idp.v1.IDPUserLink | - | | +| domains | repeated zitadel.org.v1.Domain | - | | + + + + +### DataProject + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| project_id | string | - | | +| project | zitadel.management.v1.AddProjectRequest | - | | + + + + +### DataProjectGrant + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| grant_id | string | - | | +| project_grant | zitadel.management.v1.AddProjectGrantRequest | - | | + + + + +### ExportHumanUser + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| user_name | string | - | string.min_len: 1
string.max_len: 200
| +| profile | ExportHumanUser.Profile | - | message.required: true
| +| email | ExportHumanUser.Email | - | message.required: true
| +| phone | ExportHumanUser.Phone | - | | +| password | string | - | | +| hashed_password | ExportHumanUser.HashedPassword | - | | +| password_change_required | bool | - | | +| request_passwordless_registration | bool | - | | +| otp_code | string | - | | + + + + +### ExportHumanUser.Email + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| email | string | TODO: check if no value is allowed | string.email: true
| +| is_email_verified | bool | - | | + + + + +### ExportHumanUser.HashedPassword + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| value | string | - | | +| algorithm | string | - | | + + + + +### ExportHumanUser.Phone + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| phone | string | has to be a global number | string.min_len: 1
string.max_len: 50
string.prefix: +
| +| is_phone_verified | bool | - | | + + + + +### ExportHumanUser.Profile + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| first_name | string | - | string.min_len: 1
string.max_len: 200
| +| last_name | string | - | string.min_len: 1
string.max_len: 200
| +| nick_name | string | - | string.max_len: 200
| +| display_name | string | - | string.max_len: 200
| +| preferred_language | string | - | string.max_len: 10
| +| gender | zitadel.user.v1.Gender | - | | + + + + +### ImportDataOrg + + + +| Field | Type | Description | Validation | +| ----- | ---- | ----------- | ----------- | +| orgs | repeated DataOrg | - | | + + + + + + diff --git a/docs/docs/guides/api/export-and-import.md b/docs/docs/guides/api/export-and-import.md new file mode 100644 index 0000000000..d47df6d174 --- /dev/null +++ b/docs/docs/guides/api/export-and-import.md @@ -0,0 +1,129 @@ +--- +title: Export and import with ZITADEL +--- + +## Export from V1 to Import into V2 + +To migrate from ZITADEL V1 to V2 the API provides you with a possibility to export all resources which are under your organizations. +Currently, this doesn't include the following points: + +* Global policies +* IAM members +* Global IDPs +* Global second/multi factors +* Machine keys +* PAT's +* Application keys + +Which results in that if you want to import, and you have no defined organization-specific custom policies, the experience for your users will not be exactly like in your old instance. +```suggestion + +::note Note that the ressources will be migrated without the event stream. This means that you will not have the audit trail for the imported objects. + +*** With this export and import the current audit trail is not included, the resources will be newly created *** + +### Export from V1 to import into V2 directly + +***To use this requests you have to have an access token with enough permissions to export and import.*** + +To export all necessary data you only have to use one request, as an example: + +```bash +curl --request POST \ + --url {your_domain}/admin/v1/export \ + --header 'Authorization: Bearer XXXX' \ + --header 'Content-Type: application/json' \ + --data '{ + "org_ids": [ "70669144072186707", "70671105999825752" ], + "excluded_org_ids": [ ], + "with_passwords": true, + "with_otp": true + "timeout": "30s", + "response_output": true, +}' -o export.json +``` + +* "org_ids": to select which organizations should be exported +* "excluded_org_ids": to exclude several organization, if for example no organizations are selected +* "with_passwords": to include the hashed_passwords of the users in the export +* "with_otp": to include the OTP-code of the users in the export +* "timeout": timeout of the call to export the data +* "response_output": to output the export as response to the call + +***To import the exported data into you new instance, you have to have an already existing instance on a ZITADEL V2, with all desired configuration and global resources.*** + +Then as an example you can use one request for the import: + +```bash +curl --request POST \ + --url {your_domain}/admin/v1/import \ + --header 'Authorization: Bearer XXXX' \ + --header 'Content-Type: application/json' \ + --data '{ + "data_orgsv1": '$(cat export.json)' +}' +``` + +## Export from V1 to Import into V2 thorugh GCS + +***To use this requests you have to have an access token with enough permissions to export and import.*** + +***The used serviceaccount has to have at least the role "Storage Object Creator" to create objects on GCS*** + +To export all necessary data you only have to use one request which results in a file in your GCS, as an example: + +```bash +curl --request POST \ + --url {your_domain}/admin/v1/export \ + --header 'Authorization: Bearer XXXX' \ + --header 'Content-Type: application/json' \ + --data ' "{ + "org_ids": [ "70669144072186707", "70671105999825752" ], + "excluded_org_ids": [ ], + "with_passwords": true, + "with_otp": true, + "timeout": "10m", + "gcs_output": { + "path": "export.json", + "bucket": "caos-zitadel-exports", + "serviceaccount_json": "XXXX" + }' -o export.json +``` + +* "org_ids": to select which organizations should be exported +* "excluded_org_ids": to exclude several organization, if for example no organizations are selected +* "with_passwords": to include the hashed_passwords of the users in the export +* "with_otp": to include the OTP-code of the users in the export +* "timeout": timeout for the call to export the data +* "gcs_output": to write a file into GCS as output to the call + * "path": path to the output file on GCS + * "bucket": used bucket for output on GCS + * "serviceaccount_json": base64-encoded serviceaccount.json used to output the file on GCS + +***To import the exported data into you new instance, you have to have an already existing instance on a ZITADEL V2, with all desired configuration and global resources.*** + +***The used serviceaccount has to have at least the role "Storage Object Viewer" to create objects on GCS*** + +Then as an example you can use one request for the import: + +```bash +curl --request POST \ + --url {your_domain}/admin/v1/import \ + --header 'Authorization: Bearer XXXX' \ + --header 'Content-Type: application/json' \ + --data '{ + "timeout": "10m", + "data_orgsv1_gcs": { + "path": "export.json", + "bucket": "caos-zitadel-exports", + "serviceaccount_json": "XXXX" + } +}' +``` + +* "timeout": timeout for the import task +* "data_orgsv1_gcs": to read the export from GCS directly + * "path": path to the exported file on GCS + * "bucket": used bucket to read from GCS + * "serviceaccount_json": base64-encoded serviceaccount.json used to read the file from GCS + diff --git a/docs/sidebars.js b/docs/sidebars.js index 271d14a54f..6b3f880432 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -100,7 +100,10 @@ module.exports = { type: "category", label: "API", collapsed: false, - items: ["guides/api/access-zitadel-apis"], + items: [ + "guides/api/access-zitadel-apis", + "guides/api/export-and-import" + ], }, { type: "category", diff --git a/go.mod b/go.mod index 679d91caea..f56d089b5a 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/zitadel/zitadel go 1.17 require ( + cloud.google.com/go/storage v1.14.0 github.com/BurntSushi/toml v0.4.1 github.com/DATA-DOG/go-sqlmock v1.5.0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.0.0 @@ -171,7 +172,7 @@ require ( golang.org/x/mod v0.5.1 // indirect golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect - google.golang.org/api v0.63.0 // indirect + google.golang.org/api v0.63.0 google.golang.org/appengine v1.6.7 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 7f10eaf680..4110d1ee0a 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.14.0 h1:6RRlFMv1omScs6iq2hfE3IvgE+l6RfJPampq8UZc5TU= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/trace v1.0.0 h1:laKx2y7IWMjguCe5zZx6n7qLtREk4kyE69SXVC0VSN8= cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A= @@ -366,9 +367,11 @@ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-github/v31 v31.0.0/go.mod h1:NQPZol8/1sMoWYGN2yaALIBytu17gAWfhbweiEed3pM= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= diff --git a/internal/api/grpc/admin/domain_policy.go b/internal/api/grpc/admin/domain_policy.go index c86ca13723..b7628d33bb 100644 --- a/internal/api/grpc/admin/domain_policy.go +++ b/internal/api/grpc/admin/domain_policy.go @@ -27,7 +27,7 @@ func (s *Server) GetCustomDomainPolicy(ctx context.Context, req *admin_pb.GetCus } func (s *Server) AddCustomDomainPolicy(ctx context.Context, req *admin_pb.AddCustomDomainPolicyRequest) (*admin_pb.AddCustomDomainPolicyResponse, error) { - policy, err := s.command.AddOrgDomainPolicy(ctx, req.OrgId, domainPolicyToDomain(req.UserLoginMustBeDomain, req.ValidateOrgDomains, req.SmtpSenderAddressMatchesInstanceDomain)) + policy, err := s.command.AddOrgDomainPolicy(ctx, req.OrgId, DomainPolicyToDomain(req.UserLoginMustBeDomain, req.ValidateOrgDomains, req.SmtpSenderAddressMatchesInstanceDomain)) if err != nil { return nil, err } @@ -76,7 +76,7 @@ func (s *Server) ResetCustomDomainPolicyToDefault(ctx context.Context, req *admi return &admin_pb.ResetCustomDomainPolicyToDefaultResponse{Details: object.DomainToChangeDetailsPb(details)}, nil } -func domainPolicyToDomain(userLoginMustBeDomain, validateOrgDomains, smtpSenderAddressMatchesInstanceDomain bool) *domain.DomainPolicy { +func DomainPolicyToDomain(userLoginMustBeDomain, validateOrgDomains, smtpSenderAddressMatchesInstanceDomain bool) *domain.DomainPolicy { return &domain.DomainPolicy{ UserLoginMustBeDomain: userLoginMustBeDomain, ValidateOrgDomains: validateOrgDomains, @@ -104,7 +104,7 @@ func updateCustomDomainPolicyToDomain(req *admin_pb.UpdateCustomDomainPolicyRequ } func (s *Server) AddCustomOrgIAMPolicy(ctx context.Context, req *admin_pb.AddCustomOrgIAMPolicyRequest) (*admin_pb.AddCustomOrgIAMPolicyResponse, error) { - policy, err := s.command.AddOrgDomainPolicy(ctx, req.OrgId, domainPolicyToDomain(req.UserLoginMustBeDomain, true, true)) + policy, err := s.command.AddOrgDomainPolicy(ctx, req.OrgId, DomainPolicyToDomain(req.UserLoginMustBeDomain, true, true)) if err != nil { return nil, err } diff --git a/internal/api/grpc/admin/export.go b/internal/api/grpc/admin/export.go new file mode 100644 index 0000000000..e7d637ac2f --- /dev/null +++ b/internal/api/grpc/admin/export.go @@ -0,0 +1,1151 @@ +package admin + +import ( + "context" + text_grpc "github.com/zitadel/zitadel/internal/api/grpc/text" + "github.com/zitadel/zitadel/internal/domain" + caos_errors "github.com/zitadel/zitadel/internal/errors" + "github.com/zitadel/zitadel/internal/query" + "github.com/zitadel/zitadel/internal/telemetry/tracing" + action_pb "github.com/zitadel/zitadel/pkg/grpc/action" + admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin" + app_pb "github.com/zitadel/zitadel/pkg/grpc/app" + idp_pb "github.com/zitadel/zitadel/pkg/grpc/idp" + management_pb "github.com/zitadel/zitadel/pkg/grpc/management" + org_pb "github.com/zitadel/zitadel/pkg/grpc/org" + policy_pb "github.com/zitadel/zitadel/pkg/grpc/policy" + project_pb "github.com/zitadel/zitadel/pkg/grpc/project" + user_pb "github.com/zitadel/zitadel/pkg/grpc/user" + v1_pb "github.com/zitadel/zitadel/pkg/grpc/v1" + "google.golang.org/protobuf/types/known/durationpb" +) + +func (s *Server) ExportData(ctx context.Context, req *admin_pb.ExportDataRequest) (_ *admin_pb.ExportDataResponse, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + orgSearchQuery := &query.OrgSearchQueries{} + if len(req.OrgIds) > 0 { + orgIDsSearchQuery, err := query.NewOrgIDsSearchQuery(req.OrgIds...) + if err != nil { + return nil, err + } + orgSearchQuery.Queries = []query.SearchQuery{orgIDsSearchQuery} + } + queriedOrgs, err := s.query.SearchOrgs(ctx, orgSearchQuery) + if err != nil { + return nil, err + } + + orgs := make([]*admin_pb.DataOrg, len(queriedOrgs.Orgs)) + processedOrgs := make([]string, len(queriedOrgs.Orgs)) + processedProjects := make([]string, 0) + processedGrants := make([]string, 0) + processedUsers := make([]string, 0) + processedActions := make([]string, 0) + + for i, queriedOrg := range queriedOrgs.Orgs { + if req.ExcludedOrgIds != nil { + found := false + for _, excludedOrg := range req.ExcludedOrgIds { + if excludedOrg == queriedOrg.ID { + found = true + } + } + if found { + continue + } + } + processedOrgs = append(processedOrgs, queriedOrg.ID) + + /****************************************************************************************************************** + Organization + ******************************************************************************************************************/ + org := &admin_pb.DataOrg{OrgId: queriedOrg.ID, Org: &management_pb.AddOrgRequest{Name: queriedOrg.Name}} + orgs[i] = org + } + + for _, org := range orgs { + + org.DomainPolicy, err = s.getDomainPolicy(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.Domains, err = s.getDomains(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.OidcIdps, org.JwtIdps, err = s.getIDPs(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.LabelPolicy, err = s.getLabelPolicy(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.LoginPolicy, err = s.getLoginPolicy(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.UserLinks, err = s.getUserLinks(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.LockoutPolicy, err = s.getLockoutPolicy(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.PasswordComplexityPolicy, err = s.getPasswordComplexityPolicy(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + org.PrivacyPolicy, err = s.getPrivacyPolicy(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + + langResp, err := s.GetSupportedLanguages(ctx, &admin_pb.GetSupportedLanguagesRequest{}) + if err != nil { + return nil, err + } + + org.LoginTexts, err = s.getCustomLoginTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + org.InitMessages, err = s.getCustomInitMessageTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + org.PasswordResetMessages, err = s.getCustomPasswordResetMessageTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + org.VerifyEmailMessages, err = s.getCustomVerifyEmailMessageTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + org.VerifyPhoneMessages, err = s.getCustomVerifyPhoneMessageTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + org.DomainClaimedMessages, err = s.getCustomDomainClaimedMessageTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + org.PasswordlessRegistrationMessages, err = s.getCustomPasswordlessRegistrationMessageTexts(ctx, org.GetOrgId(), langResp.Languages) + if err != nil { + return nil, err + } + + /****************************************************************************************************************** + Users + ******************************************************************************************************************/ + org.HumanUsers, org.MachineUsers, org.UserMetadata, err = s.getUsers(ctx, org.GetOrgId(), req.WithPasswords, req.WithOtp) + if err != nil { + return nil, err + } + for _, processedUser := range org.HumanUsers { + processedUsers = append(processedUsers, processedUser.UserId) + } + for _, processedUser := range org.MachineUsers { + processedUsers = append(processedUsers, processedUser.UserId) + } + + /****************************************************************************************************************** + Project and Applications + ******************************************************************************************************************/ + org.Projects, org.ProjectRoles, org.OidcApps, org.ApiApps, err = s.getProjectsAndApps(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + for _, processedProject := range org.Projects { + processedProjects = append(processedProjects, processedProject.ProjectId) + } + + /****************************************************************************************************************** + Actions + ******************************************************************************************************************/ + org.Actions, err = s.getActions(ctx, org.GetOrgId()) + if err != nil { + return nil, err + } + for _, processedAction := range org.Actions { + processedActions = append(processedActions, processedAction.ActionId) + } + } + + for _, org := range orgs { + /****************************************************************************************************************** + Flows + ******************************************************************************************************************/ + org.TriggerActions, err = s.getTriggerActions(ctx, org.OrgId, processedActions) + if err != nil { + return nil, err + } + + /****************************************************************************************************************** + Grants + ******************************************************************************************************************/ + org.ProjectGrants, err = s.getNecessaryProjectGrantsForOrg(ctx, org.OrgId, processedOrgs, processedProjects) + if err != nil { + return nil, err + } + for _, processedGrant := range org.ProjectGrants { + processedGrants = append(processedGrants, processedGrant.GrantId) + } + + org.UserGrants, err = s.getNecessaryUserGrantsForOrg(ctx, org.OrgId, processedProjects, processedGrants, processedUsers) + if err != nil { + return nil, err + } + } + + for _, org := range orgs { + /****************************************************************************************************************** + Members + ******************************************************************************************************************/ + org.OrgMembers, err = s.getNecessaryOrgMembersForOrg(ctx, org.OrgId, processedUsers) + if err != nil { + return nil, err + } + + org.ProjectMembers, err = s.getNecessaryProjectMembersForOrg(ctx, processedProjects, processedUsers) + if err != nil { + return nil, err + } + + org.ProjectGrantMembers, err = s.getNecessaryProjectGrantMembersForOrg(ctx, org.OrgId, processedProjects, processedGrants, processedUsers) + if err != nil { + return nil, err + } + } + + return &admin_pb.ExportDataResponse{ + Orgs: orgs, + }, nil +} + +func (s *Server) getDomainPolicy(ctx context.Context, orgID string) (_ *admin_pb.AddCustomDomainPolicyRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + queriedDomain, err := s.query.DomainPolicyByOrg(ctx, true, orgID) + if err != nil { + return nil, err + } + if !queriedDomain.IsDefault { + return &admin_pb.AddCustomDomainPolicyRequest{ + OrgId: orgID, + UserLoginMustBeDomain: queriedDomain.UserLoginMustBeDomain, + ValidateOrgDomains: queriedDomain.ValidateOrgDomains, + SmtpSenderAddressMatchesInstanceDomain: queriedDomain.SMTPSenderAddressMatchesInstanceDomain, + }, nil + } + return nil, nil +} + +func (s *Server) getDomains(ctx context.Context, orgID string) (_ []*org_pb.Domain, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + orgDomainOrgIDQuery, err := query.NewOrgDomainOrgIDSearchQuery(orgID) + if err != nil { + return nil, err + } + orgDomainsQuery, err := s.query.SearchOrgDomains(ctx, &query.OrgDomainSearchQueries{Queries: []query.SearchQuery{orgDomainOrgIDQuery}}) + if err != nil { + return nil, err + } + orgDomains := make([]*org_pb.Domain, len(orgDomainsQuery.Domains)) + for i, orgDomain := range orgDomainsQuery.Domains { + orgDomains[i] = &org_pb.Domain{ + OrgId: orgDomain.OrgID, + DomainName: orgDomain.Domain, + IsVerified: orgDomain.IsVerified, + IsPrimary: orgDomain.IsPrimary, + ValidationType: org_pb.DomainValidationType(orgDomain.ValidationType), + } + } + return orgDomains, nil +} + +func (s *Server) getIDPs(ctx context.Context, orgID string) (_ []*v1_pb.DataOIDCIDP, _ []*v1_pb.DataJWTIDP, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + ownerType, err := query.NewIDPOwnerTypeSearchQuery(domain.IdentityProviderTypeOrg) + if err != nil { + return nil, nil, err + } + idpQuery, err := query.NewIDPResourceOwnerSearchQuery(orgID) + if err != nil { + return nil, nil, err + } + idps, err := s.query.IDPs(ctx, &query.IDPSearchQueries{Queries: []query.SearchQuery{idpQuery, ownerType}}) + if err != nil { + return nil, nil, err + } + oidcIdps := make([]*v1_pb.DataOIDCIDP, 0) + jwtIdps := make([]*v1_pb.DataJWTIDP, 0) + for _, idp := range idps.IDPs { + if idp.OIDCIDP != nil { + clientSecret, err := s.query.GetOIDCIDPClientSecret(ctx, false, orgID, idp.ID) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, err + } + oidcIdps = append(oidcIdps, &v1_pb.DataOIDCIDP{ + IdpId: idp.ID, + Idp: &management_pb.AddOrgOIDCIDPRequest{ + Name: idp.Name, + StylingType: idp_pb.IDPStylingType(idp.StylingType), + ClientId: idp.ClientID, + ClientSecret: clientSecret, + Issuer: idp.OIDCIDP.Issuer, + Scopes: idp.Scopes, + DisplayNameMapping: idp_pb.OIDCMappingField(idp.DisplayNameMapping), + UsernameMapping: idp_pb.OIDCMappingField(idp.UsernameMapping), + AutoRegister: idp.AutoRegister, + }, + }) + } else if idp.JWTIDP != nil { + jwtIdps = append(jwtIdps, &v1_pb.DataJWTIDP{ + IdpId: idp.ID, + Idp: &management_pb.AddOrgJWTIDPRequest{ + Name: idp.Name, + StylingType: idp_pb.IDPStylingType(idp.StylingType), + JwtEndpoint: idp.JWTIDP.Endpoint, + Issuer: idp.JWTIDP.Issuer, + KeysEndpoint: idp.KeysEndpoint, + HeaderName: idp.HeaderName, + AutoRegister: idp.AutoRegister, + }, + }) + } + } + return oidcIdps, jwtIdps, nil +} + +func (s *Server) getLabelPolicy(ctx context.Context, orgID string) (_ *management_pb.AddCustomLabelPolicyRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + queriedLabel, err := s.query.ActiveLabelPolicyByOrg(ctx, orgID) + if err != nil { + return nil, err + } + if !queriedLabel.IsDefault { + return &management_pb.AddCustomLabelPolicyRequest{ + PrimaryColor: queriedLabel.Light.PrimaryColor, + HideLoginNameSuffix: queriedLabel.HideLoginNameSuffix, + WarnColor: queriedLabel.Light.WarnColor, + BackgroundColor: queriedLabel.Light.BackgroundColor, + FontColor: queriedLabel.Light.FontColor, + PrimaryColorDark: queriedLabel.Dark.PrimaryColor, + BackgroundColorDark: queriedLabel.Dark.BackgroundColor, + WarnColorDark: queriedLabel.Dark.WarnColor, + FontColorDark: queriedLabel.Dark.FontColor, + DisableWatermark: queriedLabel.WatermarkDisabled, + }, nil + } + return nil, nil +} + +func (s *Server) getLoginPolicy(ctx context.Context, orgID string) (_ *management_pb.AddCustomLoginPolicyRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + queriedLogin, err := s.query.LoginPolicyByID(ctx, false, orgID) + if err != nil { + return nil, err + } + if !queriedLogin.IsDefault { + pwCheck := durationpb.New(queriedLogin.PasswordCheckLifetime) + externalLogin := durationpb.New(queriedLogin.ExternalLoginCheckLifetime) + mfaInitSkip := durationpb.New(queriedLogin.MFAInitSkipLifetime) + secondFactor := durationpb.New(queriedLogin.SecondFactorCheckLifetime) + multiFactor := durationpb.New(queriedLogin.MultiFactorCheckLifetime) + + secondFactors := []policy_pb.SecondFactorType{} + for _, factor := range queriedLogin.SecondFactors { + secondFactors = append(secondFactors, policy_pb.SecondFactorType(factor)) + } + + multiFactors := []policy_pb.MultiFactorType{} + for _, factor := range queriedLogin.MultiFactors { + multiFactors = append(multiFactors, policy_pb.MultiFactorType(factor)) + } + + idpLinksQuery, err := s.query.IDPLoginPolicyLinks(ctx, orgID, &query.IDPLoginPolicyLinksSearchQuery{}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, err + } + idpLinks := make([]*management_pb.AddCustomLoginPolicyRequest_IDP, 0) + if !caos_errors.IsNotFound(err) && idpLinksQuery != nil { + for _, idpLink := range idpLinksQuery.Links { + idpLinks = append(idpLinks, &management_pb.AddCustomLoginPolicyRequest_IDP{ + IdpId: idpLink.IDPID, + OwnerType: idp_pb.IDPOwnerType(idpLink.IDPType), + }) + } + } + + return &management_pb.AddCustomLoginPolicyRequest{ + AllowUsernamePassword: queriedLogin.AllowUsernamePassword, + AllowRegister: queriedLogin.AllowRegister, + AllowExternalIdp: queriedLogin.AllowExternalIDPs, + ForceMfa: queriedLogin.ForceMFA, + PasswordlessType: policy_pb.PasswordlessType(queriedLogin.PasswordlessType), + HidePasswordReset: queriedLogin.HidePasswordReset, + IgnoreUnknownUsernames: queriedLogin.IgnoreUnknownUsernames, + DefaultRedirectUri: queriedLogin.DefaultRedirectURI, + PasswordCheckLifetime: pwCheck, + ExternalLoginCheckLifetime: externalLogin, + MfaInitSkipLifetime: mfaInitSkip, + SecondFactorCheckLifetime: secondFactor, + MultiFactorCheckLifetime: multiFactor, + SecondFactors: secondFactors, + MultiFactors: multiFactors, + Idps: idpLinks, + }, nil + } + + return nil, nil +} + +func (s *Server) getUserLinks(ctx context.Context, orgID string) (_ []*idp_pb.IDPUserLink, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + userLinksResourceOwner, err := query.NewIDPUserLinksResourceOwnerSearchQuery(orgID) + if err != nil { + return nil, err + } + idpUserLinks, err := s.query.IDPUserLinks(ctx, &query.IDPUserLinksSearchQuery{Queries: []query.SearchQuery{userLinksResourceOwner}}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, err + } + userLinks := make([]*idp_pb.IDPUserLink, 0) + if !caos_errors.IsNotFound(err) && idpUserLinks != nil { + for _, idpUserLink := range idpUserLinks.Links { + userLinks = append(userLinks, &idp_pb.IDPUserLink{ + UserId: idpUserLink.UserID, + IdpId: idpUserLink.IDPID, + IdpName: idpUserLink.IDPName, + ProvidedUserId: idpUserLink.ProvidedUserID, + ProvidedUserName: idpUserLink.ProvidedUsername, + IdpType: idp_pb.IDPType(idpUserLink.IDPType), + }) + } + } + + return userLinks, nil +} + +func (s *Server) getLockoutPolicy(ctx context.Context, orgID string) (_ *management_pb.AddCustomLockoutPolicyRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + queriedLockout, err := s.query.LockoutPolicyByOrg(ctx, false, orgID) + if err != nil { + return nil, err + } + if !queriedLockout.IsDefault { + return &management_pb.AddCustomLockoutPolicyRequest{ + MaxPasswordAttempts: uint32(queriedLockout.MaxPasswordAttempts), + }, nil + } + return nil, nil +} + +func (s *Server) getPasswordComplexityPolicy(ctx context.Context, orgID string) (_ *management_pb.AddCustomPasswordComplexityPolicyRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + queriedPasswordComplexity, err := s.query.PasswordComplexityPolicyByOrg(ctx, false, orgID) + if err != nil { + return nil, err + } + if !queriedPasswordComplexity.IsDefault { + return &management_pb.AddCustomPasswordComplexityPolicyRequest{ + MinLength: queriedPasswordComplexity.MinLength, + HasUppercase: queriedPasswordComplexity.HasUppercase, + HasLowercase: queriedPasswordComplexity.HasLowercase, + HasNumber: queriedPasswordComplexity.HasNumber, + HasSymbol: queriedPasswordComplexity.HasSymbol, + }, nil + } + return nil, nil +} + +func (s *Server) getPrivacyPolicy(ctx context.Context, orgID string) (_ *management_pb.AddCustomPrivacyPolicyRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + queriedPrivacy, err := s.query.PrivacyPolicyByOrg(ctx, false, orgID) + if err != nil { + return nil, err + } + if !queriedPrivacy.IsDefault { + return &management_pb.AddCustomPrivacyPolicyRequest{ + TosLink: queriedPrivacy.TOSLink, + PrivacyLink: queriedPrivacy.PrivacyLink, + HelpLink: queriedPrivacy.HelpLink, + }, nil + } + return nil, nil +} + +func (s *Server) getUsers(ctx context.Context, org string, withPasswords bool, withOTP bool) (_ []*v1_pb.DataHumanUser, _ []*v1_pb.DataMachineUser, _ []*management_pb.SetUserMetadataRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + orgSearch, err := query.NewUserResourceOwnerSearchQuery(org, query.TextEquals) + if err != nil { + return nil, nil, nil, err + } + users, err := s.query.SearchUsers(ctx, &query.UserSearchQueries{Queries: []query.SearchQuery{orgSearch}}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, nil, err + } + humanUsers := make([]*v1_pb.DataHumanUser, 0) + machineUsers := make([]*v1_pb.DataMachineUser, 0) + userMetadata := make([]*management_pb.SetUserMetadataRequest, 0) + if err != nil && caos_errors.IsNotFound(err) { + return humanUsers, machineUsers, userMetadata, nil + } + for _, user := range users.Users { + switch user.Type { + case domain.UserTypeHuman: + dataUser := &v1_pb.DataHumanUser{ + UserId: user.ID, + User: &management_pb.ImportHumanUserRequest{ + UserName: user.Username, + Profile: &management_pb.ImportHumanUserRequest_Profile{ + FirstName: user.Human.FirstName, + LastName: user.Human.LastName, + NickName: user.Human.NickName, + DisplayName: user.Human.DisplayName, + PreferredLanguage: user.Human.PreferredLanguage.String(), + Gender: user_pb.Gender(user.Human.Gender), + }, + }, + } + if user.Human.Email != "" { + dataUser.User.Email = &management_pb.ImportHumanUserRequest_Email{ + Email: user.Human.Email, + IsEmailVerified: user.Human.IsEmailVerified, + } + } + if user.Human.Phone != "" { + dataUser.User.Phone = &management_pb.ImportHumanUserRequest_Phone{ + Phone: user.Human.Phone, + IsPhoneVerified: user.Human.IsPhoneVerified, + } + } + if withPasswords { + ctx, pwspan := tracing.NewSpan(ctx) + hashedPassword, hashAlgorithm, err := s.query.GetHumanPassword(ctx, org, user.ID) + pwspan.EndWithError(err) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, nil, err + } + if err == nil && hashedPassword != nil { + dataUser.User.HashedPassword = &management_pb.ImportHumanUserRequest_HashedPassword{ + Value: string(hashedPassword), + Algorithm: hashAlgorithm, + } + } + } + if withOTP { + ctx, otpspan := tracing.NewSpan(ctx) + code, err := s.query.GetHumanOTPSecret(ctx, user.ID, org) + otpspan.EndWithError(err) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, nil, err + } + if err == nil && code != "" { + dataUser.User.OtpCode = code + } + } + + humanUsers = append(humanUsers, dataUser) + case domain.UserTypeMachine: + machineUsers = append(machineUsers, &v1_pb.DataMachineUser{ + UserId: user.ID, + User: &management_pb.AddMachineUserRequest{ + UserName: user.Username, + Name: user.Machine.Name, + Description: user.Machine.Description, + }, + }) + } + + ctx, metaspan := tracing.NewSpan(ctx) + metadataOrgSearch, err := query.NewUserMetadataResourceOwnerSearchQuery(org) + if err != nil { + return nil, nil, nil, err + } + metadataList, err := s.query.SearchUserMetadata(ctx, false, user.ID, &query.UserMetadataSearchQueries{Queries: []query.SearchQuery{metadataOrgSearch}}) + metaspan.EndWithError(err) + if err != nil { + return nil, nil, nil, err + } + for _, metadata := range metadataList.Metadata { + userMetadata = append(userMetadata, &management_pb.SetUserMetadataRequest{ + Id: user.ID, + Key: metadata.Key, + Value: metadata.Value, + }) + } + } + return humanUsers, machineUsers, userMetadata, nil +} + +func (s *Server) getTriggerActions(ctx context.Context, org string, processedActions []string) (_ []*management_pb.SetTriggerActionsRequest, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + flowTypes := []domain.FlowType{domain.FlowTypeExternalAuthentication} + triggerActions := make([]*management_pb.SetTriggerActionsRequest, 0) + + for _, flowType := range flowTypes { + flow, err := s.query.GetFlow(ctx, flowType, org) + if err != nil { + return nil, err + } + + for triggerType, triggerAction := range flow.TriggerActions { + actions := make([]string, 0) + for _, action := range triggerAction { + for _, actionID := range processedActions { + if action.ID == actionID { + actions = append(actions, action.ID) + } + } + } + + triggerActions = append(triggerActions, &management_pb.SetTriggerActionsRequest{ + FlowType: action_pb.FlowType(flowType), + TriggerType: action_pb.TriggerType(triggerType), + ActionIds: actions, + }) + } + } + return triggerActions, nil +} + +func (s *Server) getActions(ctx context.Context, org string) ([]*v1_pb.DataAction, error) { + actionSearch, err := query.NewActionResourceOwnerQuery(org) + if err != nil { + return nil, err + } + queriedActions, err := s.query.SearchActions(ctx, &query.ActionSearchQueries{Queries: []query.SearchQuery{actionSearch}}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, err + } + actions := make([]*v1_pb.DataAction, len(queriedActions.Actions)) + if err != nil && caos_errors.IsNotFound(err) { + return actions, nil + } + for i, action := range queriedActions.Actions { + timeout := durationpb.New(action.Timeout) + + actions[i] = &v1_pb.DataAction{ + ActionId: action.ID, + Action: &management_pb.CreateActionRequest{ + Name: action.Name, + Script: action.Script, + Timeout: timeout, + AllowedToFail: action.AllowedToFail, + }, + } + } + + return actions, nil +} + +func (s *Server) getProjectsAndApps(ctx context.Context, org string) ([]*v1_pb.DataProject, []*management_pb.AddProjectRoleRequest, []*v1_pb.DataOIDCApplication, []*v1_pb.DataAPIApplication, error) { + projectSearch, err := query.NewProjectResourceOwnerSearchQuery(org) + if err != nil { + return nil, nil, nil, nil, err + } + queriedProjects, err := s.query.SearchProjects(ctx, &query.ProjectSearchQueries{Queries: []query.SearchQuery{projectSearch}}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, nil, nil, err + } + + projects := make([]*v1_pb.DataProject, len(queriedProjects.Projects)) + orgProjectRoles := make([]*management_pb.AddProjectRoleRequest, 0) + oidcApps := make([]*v1_pb.DataOIDCApplication, 0) + apiApps := make([]*v1_pb.DataAPIApplication, 0) + if err != nil && caos_errors.IsNotFound(err) { + return projects, orgProjectRoles, oidcApps, apiApps, nil + } + for i, queriedProject := range queriedProjects.Projects { + projects[i] = &v1_pb.DataProject{ + ProjectId: queriedProject.ID, + Project: &management_pb.AddProjectRequest{ + Name: queriedProject.Name, + ProjectRoleAssertion: queriedProject.ProjectRoleAssertion, + ProjectRoleCheck: queriedProject.ProjectRoleCheck, + HasProjectCheck: queriedProject.HasProjectCheck, + PrivateLabelingSetting: project_pb.PrivateLabelingSetting(queriedProject.PrivateLabelingSetting), + }, + } + + projectRoleSearch, err := query.NewProjectRoleProjectIDSearchQuery(queriedProject.ID) + if err != nil { + return nil, nil, nil, nil, err + } + + queriedProjectRoles, err := s.query.SearchProjectRoles(ctx, false, &query.ProjectRoleSearchQueries{Queries: []query.SearchQuery{projectRoleSearch}}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, nil, nil, err + } + if queriedProjectRoles != nil { + for _, role := range queriedProjectRoles.ProjectRoles { + orgProjectRoles = append(orgProjectRoles, &management_pb.AddProjectRoleRequest{ + ProjectId: role.ProjectID, + RoleKey: role.Key, + DisplayName: role.DisplayName, + Group: role.Group, + }) + } + } + + appSearch, err := query.NewAppProjectIDSearchQuery(queriedProject.ID) + if err != nil { + return nil, nil, nil, nil, err + } + apps, err := s.query.SearchApps(ctx, &query.AppSearchQueries{Queries: []query.SearchQuery{appSearch}}) + if err != nil && !caos_errors.IsNotFound(err) { + return nil, nil, nil, nil, err + } + if apps != nil { + for _, app := range apps.Apps { + if app.OIDCConfig != nil { + responseTypes := make([]app_pb.OIDCResponseType, 0) + for _, ty := range app.OIDCConfig.ResponseTypes { + responseTypes = append(responseTypes, app_pb.OIDCResponseType(ty)) + } + + grantTypes := make([]app_pb.OIDCGrantType, 0) + for _, ty := range app.OIDCConfig.GrantTypes { + grantTypes = append(grantTypes, app_pb.OIDCGrantType(ty)) + } + + oidcApps = append(oidcApps, &v1_pb.DataOIDCApplication{ + AppId: app.ID, + App: &management_pb.AddOIDCAppRequest{ + ProjectId: app.ProjectID, + Name: app.Name, + RedirectUris: app.OIDCConfig.RedirectURIs, + ResponseTypes: responseTypes, + GrantTypes: grantTypes, + AppType: app_pb.OIDCAppType(app.OIDCConfig.AppType), + AuthMethodType: app_pb.OIDCAuthMethodType(app.OIDCConfig.AuthMethodType), + PostLogoutRedirectUris: app.OIDCConfig.PostLogoutRedirectURIs, + Version: app_pb.OIDCVersion(app.OIDCConfig.Version), + DevMode: app.OIDCConfig.IsDevMode, + AccessTokenType: app_pb.OIDCTokenType(app.OIDCConfig.AccessTokenType), + AccessTokenRoleAssertion: app.OIDCConfig.AssertAccessTokenRole, + IdTokenRoleAssertion: app.OIDCConfig.AssertIDTokenRole, + IdTokenUserinfoAssertion: app.OIDCConfig.AssertIDTokenUserinfo, + ClockSkew: durationpb.New(app.OIDCConfig.ClockSkew), + AdditionalOrigins: app.OIDCConfig.AdditionalOrigins, + }, + }) + } + if app.APIConfig != nil { + apiApps = append(apiApps, &v1_pb.DataAPIApplication{ + AppId: app.ID, + App: &management_pb.AddAPIAppRequest{ + ProjectId: app.ProjectID, + Name: app.Name, + AuthMethodType: app_pb.APIAuthMethodType(app.APIConfig.AuthMethodType), + }, + }) + } + } + } + } + return projects, orgProjectRoles, oidcApps, apiApps, nil +} + +func (s *Server) getNecessaryProjectGrantMembersForOrg(ctx context.Context, org string, processedProjects []string, processedGrants []string, processedUsers []string) ([]*management_pb.AddProjectGrantMemberRequest, error) { + projectMembers := make([]*management_pb.AddProjectGrantMemberRequest, 0) + + for _, projectID := range processedProjects { + for _, grantID := range processedGrants { + search, err := query.NewMemberResourceOwnerSearchQuery(org) + if err != nil { + return nil, err + } + + queriedProjectMembers, err := s.query.ProjectGrantMembers(ctx, &query.ProjectGrantMembersQuery{ProjectID: projectID, OrgID: org, GrantID: grantID, MembersQuery: query.MembersQuery{Queries: []query.SearchQuery{search}}}) + if err != nil { + return nil, err + } + for _, projectMember := range queriedProjectMembers.Members { + for _, userID := range processedUsers { + if userID == projectMember.UserID { + + projectMembers = append(projectMembers, &management_pb.AddProjectGrantMemberRequest{ + ProjectId: projectID, + UserId: userID, + GrantId: grantID, + Roles: projectMember.Roles, + }) + break + } + } + + } + } + } + return projectMembers, nil +} + +func (s *Server) getNecessaryProjectMembersForOrg(ctx context.Context, processedProjects []string, processedUsers []string) ([]*management_pb.AddProjectMemberRequest, error) { + projectMembers := make([]*management_pb.AddProjectMemberRequest, 0) + + for _, projectID := range processedProjects { + queriedProjectMembers, err := s.query.ProjectMembers(ctx, &query.ProjectMembersQuery{ProjectID: projectID}) + if err != nil { + return nil, err + } + for _, projectMember := range queriedProjectMembers.Members { + for _, userID := range processedUsers { + if userID == projectMember.UserID { + projectMembers = append(projectMembers, &management_pb.AddProjectMemberRequest{ + ProjectId: projectID, + UserId: userID, + Roles: projectMember.Roles, + }) + break + } + } + } + } + return projectMembers, nil +} + +func (s *Server) getNecessaryOrgMembersForOrg(ctx context.Context, org string, processedUsers []string) ([]*management_pb.AddOrgMemberRequest, error) { + queriedOrgMembers, err := s.query.OrgMembers(ctx, &query.OrgMembersQuery{OrgID: org}) + if err != nil { + return nil, err + } + orgMembers := make([]*management_pb.AddOrgMemberRequest, 0, len(queriedOrgMembers.Members)) + for _, orgMember := range queriedOrgMembers.Members { + for _, userID := range processedUsers { + if userID == orgMember.UserID { + orgMembers = append(orgMembers, &management_pb.AddOrgMemberRequest{ + UserId: orgMember.UserID, + Roles: orgMember.Roles, + }) + break + } + } + } + return orgMembers, nil +} + +func (s *Server) getNecessaryProjectGrantsForOrg(ctx context.Context, org string, processedOrgs []string, processedProjects []string) ([]*v1_pb.DataProjectGrant, error) { + + projectGrantSearchOrg, err := query.NewProjectGrantResourceOwnerSearchQuery(org) + if err != nil { + return nil, err + } + queriedProjectGrants, err := s.query.SearchProjectGrants(ctx, &query.ProjectGrantSearchQueries{Queries: []query.SearchQuery{projectGrantSearchOrg}}) + if err != nil { + return nil, err + } + projectGrants := make([]*v1_pb.DataProjectGrant, 0, len(queriedProjectGrants.ProjectGrants)) + for _, projectGrant := range queriedProjectGrants.ProjectGrants { + for _, projectID := range processedProjects { + if projectID == projectGrant.ProjectID { + foundOrg := false + for _, orgID := range processedOrgs { + if orgID == projectGrant.GrantedOrgID { + projectGrants = append(projectGrants, &v1_pb.DataProjectGrant{ + GrantId: projectGrant.GrantID, + ProjectGrant: &management_pb.AddProjectGrantRequest{ + ProjectId: projectGrant.ProjectID, + GrantedOrgId: projectGrant.GrantedOrgID, + RoleKeys: projectGrant.GrantedRoleKeys, + }, + }) + foundOrg = true + break + } + } + if foundOrg { + break + } + } + } + } + return projectGrants, nil +} + +func (s *Server) getNecessaryUserGrantsForOrg(ctx context.Context, org string, processedProjects []string, processedGrants []string, processedUsers []string) ([]*management_pb.AddUserGrantRequest, error) { + userGrantSearchOrg, err := query.NewUserGrantResourceOwnerSearchQuery(org) + if err != nil { + return nil, err + } + + queriedUserGrants, err := s.query.UserGrants(ctx, &query.UserGrantsQueries{Queries: []query.SearchQuery{userGrantSearchOrg}}) + if err != nil { + return nil, err + } + userGrants := make([]*management_pb.AddUserGrantRequest, 0, len(queriedUserGrants.UserGrants)) + for _, userGrant := range queriedUserGrants.UserGrants { + for _, projectID := range processedProjects { + if projectID == userGrant.ProjectID { + //if usergrant is on a granted project + if userGrant.GrantID != "" { + for _, grantID := range processedGrants { + if grantID == userGrant.GrantID { + for _, userID := range processedUsers { + if userID == userGrant.UserID { + userGrants = append(userGrants, &management_pb.AddUserGrantRequest{ + UserId: userGrant.UserID, + ProjectId: userGrant.ProjectID, + ProjectGrantId: userGrant.GrantID, + RoleKeys: userGrant.Roles, + }) + } + } + } + } + } else { + for _, userID := range processedUsers { + if userID == userGrant.UserID { + userGrants = append(userGrants, &management_pb.AddUserGrantRequest{ + UserId: userGrant.UserID, + ProjectId: userGrant.ProjectID, + ProjectGrantId: userGrant.GrantID, + RoleKeys: userGrant.Roles, + }) + } + } + } + } + } + } + return userGrants, nil +} +func (s *Server) getCustomLoginTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomLoginTextsRequest, error) { + customTexts := make([]*management_pb.SetCustomLoginTextsRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.GetCustomLoginTexts(ctx, org, lang) + if err != nil { + return nil, err + } + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomLoginTextsRequest{ + Language: lang, + SelectAccountText: text_grpc.SelectAccountScreenToPb(text.SelectAccount), + LoginText: text_grpc.LoginScreenTextToPb(text.Login), + PasswordText: text_grpc.PasswordScreenTextToPb(text.Password), + UsernameChangeText: text_grpc.UsernameChangeScreenTextToPb(text.UsernameChange), + UsernameChangeDoneText: text_grpc.UsernameChangeDoneScreenTextToPb(text.UsernameChangeDone), + InitPasswordText: text_grpc.InitPasswordScreenTextToPb(text.InitPassword), + InitPasswordDoneText: text_grpc.InitPasswordDoneScreenTextToPb(text.InitPasswordDone), + EmailVerificationText: text_grpc.EmailVerificationScreenTextToPb(text.EmailVerification), + EmailVerificationDoneText: text_grpc.EmailVerificationDoneScreenTextToPb(text.EmailVerificationDone), + InitializeUserText: text_grpc.InitializeUserScreenTextToPb(text.InitUser), + InitializeDoneText: text_grpc.InitializeUserDoneScreenTextToPb(text.InitUserDone), + InitMfaPromptText: text_grpc.InitMFAPromptScreenTextToPb(text.InitMFAPrompt), + InitMfaOtpText: text_grpc.InitMFAOTPScreenTextToPb(text.InitMFAOTP), + InitMfaU2FText: text_grpc.InitMFAU2FScreenTextToPb(text.InitMFAU2F), + InitMfaDoneText: text_grpc.InitMFADoneScreenTextToPb(text.InitMFADone), + MfaProvidersText: text_grpc.MFAProvidersTextToPb(text.MFAProvider), + VerifyMfaOtpText: text_grpc.VerifyMFAOTPScreenTextToPb(text.VerifyMFAOTP), + VerifyMfaU2FText: text_grpc.VerifyMFAU2FScreenTextToPb(text.VerifyMFAU2F), + PasswordlessText: text_grpc.PasswordlessScreenTextToPb(text.Passwordless), + PasswordlessPromptText: text_grpc.PasswordlessPromptScreenTextToPb(text.PasswordlessPrompt), + PasswordlessRegistrationText: text_grpc.PasswordlessRegistrationScreenTextToPb(text.PasswordlessRegistration), + PasswordlessRegistrationDoneText: text_grpc.PasswordlessRegistrationDoneScreenTextToPb(text.PasswordlessRegistrationDone), + PasswordChangeText: text_grpc.PasswordChangeScreenTextToPb(text.PasswordChange), + PasswordChangeDoneText: text_grpc.PasswordChangeDoneScreenTextToPb(text.PasswordChangeDone), + PasswordResetDoneText: text_grpc.PasswordResetDoneScreenTextToPb(text.PasswordResetDone), + RegistrationOptionText: text_grpc.RegistrationOptionScreenTextToPb(text.RegisterOption), + RegistrationUserText: text_grpc.RegistrationUserScreenTextToPb(text.RegistrationUser), + ExternalRegistrationUserOverviewText: text_grpc.ExternalRegistrationUserOverviewScreenTextToPb(text.ExternalRegistrationUserOverview), + RegistrationOrgText: text_grpc.RegistrationOrgScreenTextToPb(text.RegistrationOrg), + LinkingUserDoneText: text_grpc.LinkingUserDoneScreenTextToPb(text.LinkingUsersDone), + ExternalUserNotFoundText: text_grpc.ExternalUserNotFoundScreenTextToPb(text.ExternalNotFoundOption), + SuccessLoginText: text_grpc.SuccessLoginScreenTextToPb(text.LoginSuccess), + LogoutText: text_grpc.LogoutDoneScreenTextToPb(text.LogoutDone), + FooterText: text_grpc.FooterTextToPb(text.Footer), + }) + } + } + + return customTexts, nil +} + +func (s *Server) getCustomInitMessageTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomInitMessageTextRequest, error) { + customTexts := make([]*management_pb.SetCustomInitMessageTextRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.CustomMessageTextByTypeAndLanguage(ctx, org, domain.InitCodeMessageType, lang) + if err != nil { + return nil, err + } + + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomInitMessageTextRequest{ + Language: lang, + Title: text.Title, + PreHeader: text.PreHeader, + Subject: text.Subject, + Greeting: text.Greeting, + Text: text.Text, + ButtonText: text.ButtonText, + FooterText: text.Footer, + }) + } + } + + return customTexts, nil +} + +func (s *Server) getCustomPasswordResetMessageTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomPasswordResetMessageTextRequest, error) { + customTexts := make([]*management_pb.SetCustomPasswordResetMessageTextRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.CustomMessageTextByTypeAndLanguage(ctx, org, domain.PasswordResetMessageType, lang) + if err != nil { + return nil, err + } + + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomPasswordResetMessageTextRequest{ + Language: lang, + Title: text.Title, + PreHeader: text.PreHeader, + Subject: text.Subject, + Greeting: text.Greeting, + Text: text.Text, + ButtonText: text.ButtonText, + FooterText: text.Footer, + }) + } + } + + return customTexts, nil +} + +func (s *Server) getCustomVerifyEmailMessageTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomVerifyEmailMessageTextRequest, error) { + customTexts := make([]*management_pb.SetCustomVerifyEmailMessageTextRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.CustomMessageTextByTypeAndLanguage(ctx, org, domain.VerifyEmailMessageType, lang) + if err != nil { + return nil, err + } + + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomVerifyEmailMessageTextRequest{ + Language: lang, + Title: text.Title, + PreHeader: text.PreHeader, + Subject: text.Subject, + Greeting: text.Greeting, + Text: text.Text, + ButtonText: text.ButtonText, + FooterText: text.Footer, + }) + } + } + + return customTexts, nil +} + +func (s *Server) getCustomVerifyPhoneMessageTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomVerifyPhoneMessageTextRequest, error) { + customTexts := make([]*management_pb.SetCustomVerifyPhoneMessageTextRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.CustomMessageTextByTypeAndLanguage(ctx, org, domain.VerifyPhoneMessageType, lang) + if err != nil { + return nil, err + } + + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomVerifyPhoneMessageTextRequest{ + Language: lang, + Title: text.Title, + PreHeader: text.PreHeader, + Subject: text.Subject, + Greeting: text.Greeting, + Text: text.Text, + ButtonText: text.ButtonText, + FooterText: text.Footer, + }) + } + } + + return customTexts, nil +} + +func (s *Server) getCustomDomainClaimedMessageTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomDomainClaimedMessageTextRequest, error) { + customTexts := make([]*management_pb.SetCustomDomainClaimedMessageTextRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.CustomMessageTextByTypeAndLanguage(ctx, org, domain.DomainClaimedMessageType, lang) + if err != nil { + return nil, err + } + + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomDomainClaimedMessageTextRequest{ + Language: lang, + Title: text.Title, + PreHeader: text.PreHeader, + Subject: text.Subject, + Greeting: text.Greeting, + Text: text.Text, + ButtonText: text.ButtonText, + FooterText: text.Footer, + }) + } + } + + return customTexts, nil +} + +func (s *Server) getCustomPasswordlessRegistrationMessageTexts(ctx context.Context, org string, languages []string) ([]*management_pb.SetCustomPasswordlessRegistrationMessageTextRequest, error) { + customTexts := make([]*management_pb.SetCustomPasswordlessRegistrationMessageTextRequest, 0, len(languages)) + for _, lang := range languages { + text, err := s.query.CustomMessageTextByTypeAndLanguage(ctx, org, domain.DomainClaimedMessageType, lang) + if err != nil { + return nil, err + } + + if !text.IsDefault { + customTexts = append(customTexts, &management_pb.SetCustomPasswordlessRegistrationMessageTextRequest{ + Language: lang, + Title: text.Title, + PreHeader: text.PreHeader, + Subject: text.Subject, + Greeting: text.Greeting, + Text: text.Text, + ButtonText: text.ButtonText, + FooterText: text.Footer, + }) + } + } + + return customTexts, nil +} diff --git a/internal/api/grpc/admin/import.go b/internal/api/grpc/admin/import.go new file mode 100644 index 0000000000..66765bf6f4 --- /dev/null +++ b/internal/api/grpc/admin/import.go @@ -0,0 +1,898 @@ +package admin + +import ( + "cloud.google.com/go/storage" + "context" + "encoding/base64" + "encoding/json" + "fmt" + "github.com/minio/minio-go/v7" + "github.com/minio/minio-go/v7/pkg/credentials" + "github.com/zitadel/logging" + "github.com/zitadel/zitadel/internal/api/authz" + "github.com/zitadel/zitadel/internal/api/grpc/management" + "github.com/zitadel/zitadel/internal/domain" + "github.com/zitadel/zitadel/internal/eventstore/v1/models" + es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models" + "github.com/zitadel/zitadel/internal/telemetry/tracing" + admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin" + management_pb "github.com/zitadel/zitadel/pkg/grpc/management" + "github.com/zitadel/zitadel/pkg/grpc/policy" + v1_pb "github.com/zitadel/zitadel/pkg/grpc/v1" + "google.golang.org/api/option" + "google.golang.org/protobuf/types/known/durationpb" + "io/ioutil" + "strconv" + "time" +) + +type importResponse struct { + ret *admin_pb.ImportDataResponse + count *count + err error +} +type count struct { + humanUserCount int + humanUserLen int + machineUserCount int + machineUserLen int + userMetadataCount int + userMetadataLen int + userLinksCount int + userLinksLen int + projectCount int + projectLen int + oidcAppCount int + oidcAppLen int + apiAppCount int + apiAppLen int + actionCount int + actionLen int + projectRolesCount int + projectRolesLen int + projectGrantCount int + projectGrantLen int + userGrantCount int + userGrantLen int + projectMembersCount int + projectMembersLen int + orgMemberCount int + orgMemberLen int + projectGrantMemberCount int + projectGrantMemberLen int +} + +func (c *count) getProgress() string { + return "progress:" + + "human_users " + strconv.Itoa(c.humanUserCount) + "/" + strconv.Itoa(c.humanUserLen) + ", " + + "machine_users " + strconv.Itoa(c.machineUserCount) + "/" + strconv.Itoa(c.machineUserLen) + ", " + + "user_metadata " + strconv.Itoa(c.userMetadataCount) + "/" + strconv.Itoa(c.userMetadataLen) + ", " + + "user_links " + strconv.Itoa(c.userLinksCount) + "/" + strconv.Itoa(c.userLinksLen) + ", " + + "projects " + strconv.Itoa(c.projectCount) + "/" + strconv.Itoa(c.projectLen) + ", " + + "oidc_apps " + strconv.Itoa(c.oidcAppCount) + "/" + strconv.Itoa(c.oidcAppLen) + ", " + + "api_apps " + strconv.Itoa(c.apiAppCount) + "/" + strconv.Itoa(c.apiAppLen) + ", " + + "actions " + strconv.Itoa(c.actionCount) + "/" + strconv.Itoa(c.actionLen) + ", " + + "project_roles " + strconv.Itoa(c.projectRolesCount) + "/" + strconv.Itoa(c.projectRolesLen) + ", " + + "project_grant " + strconv.Itoa(c.projectGrantCount) + "/" + strconv.Itoa(c.projectGrantLen) + ", " + + "user_grants " + strconv.Itoa(c.userGrantCount) + "/" + strconv.Itoa(c.userGrantLen) + ", " + + "project_members " + strconv.Itoa(c.projectMembersCount) + "/" + strconv.Itoa(c.projectMembersLen) + ", " + + "org_members " + strconv.Itoa(c.orgMemberCount) + "/" + strconv.Itoa(c.orgMemberLen) + ", " + + "project_grant_members " + strconv.Itoa(c.projectGrantMemberCount) + "/" + strconv.Itoa(c.projectGrantMemberLen) +} + +func Detach(ctx context.Context) context.Context { return detachedContext{ctx} } + +type detachedContext struct { + parent context.Context +} + +func (v detachedContext) Deadline() (time.Time, bool) { return time.Time{}, false } +func (v detachedContext) Done() <-chan struct{} { return nil } +func (v detachedContext) Err() error { return nil } +func (v detachedContext) Value(key interface{}) interface{} { return v.parent.Value(key) } + +func (s *Server) ImportData(ctx context.Context, req *admin_pb.ImportDataRequest) (_ *admin_pb.ImportDataResponse, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + if req.GetDataOrgs() != nil || req.GetDataOrgsv1() != nil { + timeoutDuration, err := time.ParseDuration(req.Timeout) + if err != nil { + return nil, err + } + ch := make(chan importResponse, 1) + ctxTimeout, cancel := context.WithTimeout(ctx, timeoutDuration) + defer cancel() + + go func() { + orgs := make([]*admin_pb.DataOrg, 0) + if req.GetDataOrgsv1() != nil { + dataOrgs, err := s.dataOrgsV1ToDataOrgs(ctx, req.GetDataOrgsv1()) + if err != nil { + ch <- importResponse{ret: nil, err: err} + return + } + orgs = dataOrgs.GetOrgs() + } else { + orgs = req.GetDataOrgs().GetOrgs() + } + + ret, count, err := s.importData(ctx, orgs) + ch <- importResponse{ret: ret, count: count, err: err} + }() + + select { + case <-ctxTimeout.Done(): + logging.Errorf("Import to response timeout: %v", ctxTimeout.Err()) + return nil, ctxTimeout.Err() + case result := <-ch: + logging.OnError(result.err).Errorf("error while importing: %v", result.err) + logging.Infof("Import done: %s", result.count.getProgress()) + return result.ret, result.err + } + } else { + v1Transformation := false + var gcsInput *admin_pb.ImportDataRequest_GCSInput + var s3Input *admin_pb.ImportDataRequest_S3Input + var localInput *admin_pb.ImportDataRequest_LocalInput + if req.GetDataOrgsGcs() != nil { + gcsInput = req.GetDataOrgsGcs() + } + if req.GetDataOrgsv1Gcs() != nil { + gcsInput = req.GetDataOrgsv1Gcs() + v1Transformation = true + } + if req.GetDataOrgsS3() != nil { + s3Input = req.GetDataOrgsS3() + } + if req.GetDataOrgsv1S3() != nil { + s3Input = req.GetDataOrgsv1S3() + v1Transformation = true + } + if req.GetDataOrgsLocal() != nil { + localInput = req.GetDataOrgsLocal() + } + if req.GetDataOrgsv1Local() != nil { + localInput = req.GetDataOrgsv1Local() + v1Transformation = true + } + + timeoutDuration, err := time.ParseDuration(req.Timeout) + if err != nil { + return nil, err + } + dctx := Detach(ctx) + go func() { + ch := make(chan importResponse, 1) + ctxTimeout, cancel := context.WithTimeout(dctx, timeoutDuration) + defer cancel() + go func() { + dataOrgs, err := s.transportDataFromFile(ctxTimeout, v1Transformation, gcsInput, s3Input, localInput) + if err != nil { + ch <- importResponse{nil, nil, err} + return + } + resp, count, err := s.importData(ctxTimeout, dataOrgs) + if err != nil { + ch <- importResponse{nil, count, err} + return + } + ch <- importResponse{resp, count, nil} + }() + + select { + case <-ctxTimeout.Done(): + logging.Errorf("Export to response timeout: %v", ctxTimeout.Err()) + return + case result := <-ch: + logging.OnError(result.err).Errorf("error while importing: %v", err) + if result.count != nil { + logging.Infof("Import done: %s", result.count.getProgress()) + } + } + }() + } + return &admin_pb.ImportDataResponse{}, nil +} + +func (s *Server) transportDataFromFile(ctx context.Context, v1Transformation bool, gcsInput *admin_pb.ImportDataRequest_GCSInput, s3Input *admin_pb.ImportDataRequest_S3Input, localInput *admin_pb.ImportDataRequest_LocalInput) (_ []*admin_pb.DataOrg, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + dataOrgs := make([]*admin_pb.DataOrg, 0) + data := make([]byte, 0) + if gcsInput != nil { + gcsData, err := getFileFromGCS(ctx, gcsInput) + if err != nil { + return nil, err + } + data = gcsData + } + if s3Input != nil { + s3Data, err := getFileFromS3(ctx, s3Input) + if err != nil { + return nil, err + } + data = s3Data + } + if localInput != nil { + localData, err := ioutil.ReadFile(localInput.Path) + if err != nil { + return nil, err + } + data = localData + } + + if v1Transformation { + dataImportV1 := new(v1_pb.ImportDataOrg) + if err := json.Unmarshal(data, dataImportV1); err != nil { + return nil, err + } + + dataImport, err := s.dataOrgsV1ToDataOrgs(ctx, dataImportV1) + if err != nil { + return nil, err + } + dataOrgs = dataImport.Orgs + } else { + dataImport := new(admin_pb.ImportDataOrg) + if err := json.Unmarshal(data, dataImport); err != nil { + return nil, err + } + dataOrgs = dataImport.Orgs + } + + return dataOrgs, nil +} + +func getFileFromS3(ctx context.Context, input *admin_pb.ImportDataRequest_S3Input) ([]byte, error) { + minioClient, err := minio.New(input.Endpoint, &minio.Options{ + Creds: credentials.NewStaticV4(input.AccessKeyId, input.SecretAccessKey, ""), + Secure: input.Ssl, + }) + if err != nil { + return nil, err + } + + exists, err := minioClient.BucketExists(ctx, input.Bucket) + if err != nil { + return nil, err + } + if !exists { + return nil, fmt.Errorf("bucket not existing: %v", err) + } + + object, err := minioClient.GetObject(ctx, input.Bucket, input.Path, minio.GetObjectOptions{}) + if err != nil { + return nil, err + } + + defer object.Close() + return ioutil.ReadAll(object) +} + +func getFileFromGCS(ctx context.Context, input *admin_pb.ImportDataRequest_GCSInput) ([]byte, error) { + saJson, err := base64.StdEncoding.DecodeString(input.ServiceaccountJson) + if err != nil { + return nil, err + } + + client, err := storage.NewClient(ctx, option.WithCredentialsJSON(saJson)) + if err != nil { + return nil, err + } + + bucket := client.Bucket(input.Bucket) + reader, err := bucket.Object(input.Path).NewReader(ctx) + if err != nil { + return nil, err + } + defer reader.Close() + return ioutil.ReadAll(reader) +} + +func (s *Server) importData(ctx context.Context, orgs []*admin_pb.DataOrg) (*admin_pb.ImportDataResponse, *count, error) { + errors := make([]*admin_pb.ImportDataError, 0) + success := &admin_pb.ImportDataSuccess{} + count := &count{} + + appSecretGenerator, err := s.query.InitHashGenerator(ctx, domain.SecretGeneratorTypeAppSecret, s.passwordHashAlg) + if err != nil { + return nil, nil, err + } + initCodeGenerator, err := s.query.InitEncryptionGenerator(ctx, domain.SecretGeneratorTypeInitCode, s.userCodeAlg) + if err != nil { + return nil, nil, err + } + phoneCodeGenerator, err := s.query.InitEncryptionGenerator(ctx, domain.SecretGeneratorTypeVerifyPhoneCode, s.userCodeAlg) + if err != nil { + return nil, nil, err + } + passwordlessInitCode, err := s.query.InitEncryptionGenerator(ctx, domain.SecretGeneratorTypePasswordlessInitCode, s.userCodeAlg) + if err != nil { + return nil, nil, err + } + + ctxData := authz.GetCtxData(ctx) + for _, org := range orgs { + count.humanUserLen += len(org.GetHumanUsers()) + count.machineUserLen += len(org.GetMachineUsers()) + count.userMetadataLen += len(org.GetUserMetadata()) + count.userLinksLen += len(org.GetUserLinks()) + count.projectLen += len(org.GetProjects()) + count.oidcAppLen += len(org.GetOidcApps()) + count.apiAppLen += len(org.GetApiApps()) + count.actionLen += len(org.GetActions()) + count.projectRolesLen += len(org.GetProjectRoles()) + count.projectGrantLen += len(org.GetProjectGrants()) + count.userGrantLen += len(org.GetUserGrants()) + count.projectMembersLen += len(org.GetProjectMembers()) + count.orgMemberLen += len(org.GetOrgMembers()) + count.projectGrantMemberLen += len(org.GetProjectGrantMembers()) + } + + for _, org := range orgs { + _, err := s.command.AddOrgWithID(ctx, org.GetOrg().GetName(), ctxData.UserID, ctxData.ResourceOwner, org.GetOrgId(), []string{}) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "org", Id: org.GetOrgId(), Message: err.Error()}) + } + successOrg := &admin_pb.ImportDataSuccessOrg{ + OrgId: org.GetOrgId(), + ProjectIds: []string{}, + OidcAppIds: []string{}, + ApiAppIds: []string{}, + HumanUserIds: []string{}, + MachineUserIds: []string{}, + ActionIds: []string{}, + ProjectGrants: []*admin_pb.ImportDataSuccessProjectGrant{}, + UserGrants: []*admin_pb.ImportDataSuccessUserGrant{}, + OrgMembers: []string{}, + ProjectMembers: []*admin_pb.ImportDataSuccessProjectMember{}, + ProjectGrantMembers: []*admin_pb.ImportDataSuccessProjectGrantMember{}, + } + logging.Debugf("successful org: %s", successOrg.OrgId) + success.Orgs = append(success.Orgs, successOrg) + + domainPolicy := org.GetDomainPolicy() + if org.DomainPolicy != nil { + _, err := s.command.AddOrgDomainPolicy(ctx, org.GetOrgId(), DomainPolicyToDomain(domainPolicy.UserLoginMustBeDomain, domainPolicy.ValidateOrgDomains, domainPolicy.SmtpSenderAddressMatchesInstanceDomain)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "domain_policy", Id: org.GetOrgId(), Message: err.Error()}) + } + } + if org.Domains != nil { + for _, domainR := range org.Domains { + orgDomain := &domain.OrgDomain{ + ObjectRoot: models.ObjectRoot{ + AggregateID: org.GetOrgId(), + }, + Domain: domainR.DomainName, + Verified: domainR.IsVerified, + Primary: domainR.IsPrimary, + } + _, err := s.command.AddOrgDomain(ctx, org.GetOrgId(), domainR.DomainName, []string{}) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "domain", Id: org.GetOrgId() + "_" + domainR.DomainName, Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + logging.Debugf("successful domain: %s", domainR.DomainName) + successOrg.Domains = append(successOrg.Domains, domainR.DomainName) + + if domainR.IsVerified { + if _, err := s.command.VerifyOrgDomain(ctx, org.GetOrgId(), domainR.DomainName); err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "domain_isverified", Id: org.GetOrgId() + "_" + domainR.DomainName, Message: err.Error()}) + } + } + if domainR.IsPrimary { + if _, err := s.command.SetPrimaryOrgDomain(ctx, orgDomain); err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "domain_isprimary", Id: org.GetOrgId() + "_" + domainR.DomainName, Message: err.Error()}) + } + } + } + } + if org.LabelPolicy != nil { + _, err = s.command.AddLabelPolicy(ctx, org.GetOrgId(), management.AddLabelPolicyToDomain(org.GetLabelPolicy())) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "label_policy", Id: org.GetOrgId(), Message: err.Error()}) + } + } + if org.LockoutPolicy != nil { + _, err = s.command.AddLockoutPolicy(ctx, org.GetOrgId(), management.AddLockoutPolicyToDomain(org.GetLockoutPolicy())) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "lockout_policy", Id: org.GetOrgId(), Message: err.Error()}) + } + } + if org.OidcIdps != nil { + for _, idp := range org.OidcIdps { + logging.Debugf("import oidcidp: %s", idp.IdpId) + _, err := s.command.ImportIDPConfig(ctx, management.AddOIDCIDPRequestToDomain(idp.Idp), idp.IdpId, org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "oidc_idp", Id: idp.IdpId, Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + logging.Debugf("successful oidcidp: %s", idp.GetIdpId()) + successOrg.OidcIpds = append(successOrg.OidcIpds, idp.GetIdpId()) + } + } + if org.JwtIdps != nil { + for _, idp := range org.JwtIdps { + logging.Debugf("import jwtidp: %s", idp.IdpId) + _, err := s.command.ImportIDPConfig(ctx, management.AddJWTIDPRequestToDomain(idp.Idp), idp.IdpId, org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "jwt_idp", Id: idp.IdpId, Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + logging.Debugf("successful jwtidp: %s", idp.GetIdpId()) + successOrg.JwtIdps = append(successOrg.JwtIdps, idp.GetIdpId()) + } + } + if org.LoginPolicy != nil { + _, err = s.command.AddLoginPolicy(ctx, org.GetOrgId(), management.AddLoginPolicyToDomain(org.GetLoginPolicy())) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "login_policy", Id: org.GetOrgId(), Message: err.Error()}) + } + } + if org.PasswordComplexityPolicy != nil { + _, err = s.command.AddPasswordComplexityPolicy(ctx, org.GetOrgId(), management.AddPasswordComplexityPolicyToDomain(org.GetPasswordComplexityPolicy())) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "password_complexity_policy", Id: org.GetOrgId(), Message: err.Error()}) + } + } + if org.PrivacyPolicy != nil { + _, err = s.command.AddPrivacyPolicy(ctx, org.GetOrgId(), management.AddPrivacyPolicyToDomain(org.GetPrivacyPolicy())) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "privacy_policy", Id: org.GetOrgId(), Message: err.Error()}) + } + } + if org.LoginTexts != nil { + for _, text := range org.GetLoginTexts() { + _, err := s.command.SetOrgLoginText(ctx, org.GetOrgId(), management.SetLoginCustomTextToDomain(text)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "login_texts", Id: org.GetOrgId() + "_" + text.Language, Message: err.Error()}) + } + } + } + if org.InitMessages != nil { + for _, message := range org.GetInitMessages() { + _, err := s.command.SetOrgMessageText(ctx, authz.GetCtxData(ctx).OrgID, management.SetInitCustomTextToDomain(message)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "init_message", Id: org.GetOrgId() + "_" + message.Language, Message: err.Error()}) + } + } + } + if org.PasswordResetMessages != nil { + for _, message := range org.GetPasswordResetMessages() { + _, err := s.command.SetOrgMessageText(ctx, authz.GetCtxData(ctx).OrgID, management.SetPasswordResetCustomTextToDomain(message)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "password_reset_message", Id: org.GetOrgId() + "_" + message.Language, Message: err.Error()}) + } + } + } + if org.VerifyEmailMessages != nil { + for _, message := range org.GetVerifyEmailMessages() { + _, err := s.command.SetOrgMessageText(ctx, authz.GetCtxData(ctx).OrgID, management.SetVerifyEmailCustomTextToDomain(message)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "verify_email_message", Id: org.GetOrgId() + "_" + message.Language, Message: err.Error()}) + } + } + } + if org.VerifyPhoneMessages != nil { + for _, message := range org.GetVerifyPhoneMessages() { + _, err := s.command.SetOrgMessageText(ctx, authz.GetCtxData(ctx).OrgID, management.SetVerifyPhoneCustomTextToDomain(message)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "verify_phone_message", Id: org.GetOrgId() + "_" + message.Language, Message: err.Error()}) + } + } + } + if org.DomainClaimedMessages != nil { + for _, message := range org.GetDomainClaimedMessages() { + _, err := s.command.SetOrgMessageText(ctx, authz.GetCtxData(ctx).OrgID, management.SetDomainClaimedCustomTextToDomain(message)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "domain_claimed_message", Id: org.GetOrgId() + "_" + message.Language, Message: err.Error()}) + } + } + } + if org.PasswordlessRegistrationMessages != nil { + for _, message := range org.GetPasswordlessRegistrationMessages() { + _, err := s.command.SetOrgMessageText(ctx, authz.GetCtxData(ctx).OrgID, management.SetPasswordlessRegistrationCustomTextToDomain(message)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "passwordless_registration_message", Id: org.GetOrgId() + "_" + message.Language, Message: err.Error()}) + } + } + } + + if org.HumanUsers != nil { + for _, user := range org.GetHumanUsers() { + logging.Debugf("import user: %s", user.GetUserId()) + human, passwordless := management.ImportHumanUserRequestToDomain(user.User) + human.AggregateID = user.UserId + _, _, err := s.command.ImportHuman(ctx, org.GetOrgId(), human, passwordless, initCodeGenerator, phoneCodeGenerator, passwordlessInitCode) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "human_user", Id: user.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + } else { + count.humanUserCount += 1 + logging.Debugf("successful user %d: %s", count.humanUserCount, user.GetUserId()) + successOrg.HumanUserIds = append(successOrg.HumanUserIds, user.GetUserId()) + } + + if user.User.OtpCode != "" { + logging.Debugf("import user otp: %s", user.GetUserId()) + if err := s.command.ImportHumanOTP(ctx, user.UserId, "", org.GetOrgId(), user.User.OtpCode); err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "human_user_otp", Id: user.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + } else { + logging.Debugf("successful user otp: %s", user.GetUserId()) + } + } + } + } + if org.MachineUsers != nil { + for _, user := range org.GetMachineUsers() { + logging.Debugf("import user: %s", user.GetUserId()) + _, err := s.command.AddMachineWithID(ctx, org.GetOrgId(), user.GetUserId(), management.AddMachineUserRequestToDomain(user.GetUser())) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "machine_user", Id: user.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.machineUserCount += 1 + logging.Debugf("successful user %d: %s", count.machineUserCount, user.GetUserId()) + successOrg.MachineUserIds = append(successOrg.MachineUserIds, user.GetUserId()) + } + } + if org.UserMetadata != nil { + for _, userMetadata := range org.GetUserMetadata() { + logging.Debugf("import usermetadata: %s", userMetadata.GetId()+"_"+userMetadata.GetKey()) + _, err := s.command.SetUserMetadata(ctx, &domain.Metadata{Key: userMetadata.GetKey(), Value: userMetadata.GetValue()}, userMetadata.GetId(), org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "user_metadata", Id: userMetadata.GetId() + "_" + userMetadata.GetKey(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.userMetadataCount += 1 + logging.Debugf("successful usermetadata %d: %s", count.userMetadataCount, userMetadata.GetId()+"_"+userMetadata.GetKey()) + successOrg.UserMetadata = append(successOrg.UserMetadata, &admin_pb.ImportDataSuccessUserMetadata{UserId: userMetadata.GetId(), Key: userMetadata.GetKey()}) + } + } + if org.UserLinks != nil { + for _, userLinks := range org.GetUserLinks() { + logging.Debugf("import userlink: %s", userLinks.GetUserId()+"_"+userLinks.GetIdpId()+"_"+userLinks.GetProvidedUserId()+"_"+userLinks.GetProvidedUserName()) + externalIDP := &domain.UserIDPLink{ + ObjectRoot: es_models.ObjectRoot{AggregateID: userLinks.UserId}, + IDPConfigID: userLinks.IdpId, + ExternalUserID: userLinks.ProvidedUserId, + DisplayName: userLinks.ProvidedUserName, + } + if err := s.command.AddUserIDPLink(ctx, userLinks.UserId, org.GetOrgId(), externalIDP); err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "user_link", Id: userLinks.UserId + "_" + userLinks.IdpId, Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.userLinksCount += 1 + logging.Debugf("successful userlink %d: %s", count.userLinksCount, userLinks.GetUserId()+"_"+userLinks.GetIdpId()+"_"+userLinks.GetProvidedUserId()+"_"+userLinks.GetProvidedUserName()) + successOrg.UserLinks = append(successOrg.UserLinks, &admin_pb.ImportDataSuccessUserLinks{UserId: userLinks.GetUserId(), IdpId: userLinks.GetIdpId(), ExternalUserId: userLinks.GetProvidedUserId(), DisplayName: userLinks.GetProvidedUserName()}) + } + } + if org.Projects != nil { + for _, project := range org.GetProjects() { + logging.Debugf("import project: %s", project.GetProjectId()) + _, err := s.command.AddProjectWithID(ctx, management.ProjectCreateToDomain(project.GetProject()), org.GetOrgId(), project.GetProjectId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "project", Id: project.GetProjectId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.projectCount += 1 + logging.Debugf("successful project %d: %s", count.projectCount, project.GetProjectId()) + successOrg.ProjectIds = append(successOrg.ProjectIds, project.GetProjectId()) + } + } + if org.OidcApps != nil { + for _, app := range org.GetOidcApps() { + logging.Debugf("import oidcapplication: %s", app.GetAppId()) + _, err := s.command.AddOIDCApplicationWithID(ctx, management.AddOIDCAppRequestToDomain(app.App), org.GetOrgId(), app.GetAppId(), appSecretGenerator) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "oidc_app", Id: app.GetAppId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.oidcAppCount += 1 + logging.Debugf("successful oidcapplication %d: %s", count.oidcAppCount, app.GetAppId()) + successOrg.OidcAppIds = append(successOrg.OidcAppIds, app.GetAppId()) + } + } + if org.ApiApps != nil { + for _, app := range org.GetApiApps() { + logging.Debugf("import apiapplication: %s", app.GetAppId()) + _, err := s.command.AddAPIApplicationWithID(ctx, management.AddAPIAppRequestToDomain(app.GetApp()), org.GetOrgId(), app.GetAppId(), appSecretGenerator) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "api_app", Id: app.GetAppId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.apiAppCount += 1 + logging.Debugf("successful apiapplication %d: %s", count.apiAppCount, app.GetAppId()) + successOrg.ApiAppIds = append(successOrg.ApiAppIds, app.GetAppId()) + } + } + if org.Actions != nil { + for _, action := range org.GetActions() { + logging.Debugf("import action: %s", action.GetActionId()) + _, _, err := s.command.AddActionWithID(ctx, management.CreateActionRequestToDomain(action.GetAction()), org.GetOrgId(), action.GetActionId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "action", Id: action.GetActionId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.actionCount += 1 + logging.Debugf("successful action %d: %s", count.actionCount, action.GetActionId()) + successOrg.ActionIds = append(successOrg.ActionIds, action.ActionId) + } + } + if org.ProjectRoles != nil { + for _, role := range org.GetProjectRoles() { + logging.Debugf("import projectroles: %s", role.ProjectId+"_"+role.RoleKey) + _, err := s.command.AddProjectRole(ctx, management.AddProjectRoleRequestToDomain(role), org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "project_role", Id: role.ProjectId + "_" + role.RoleKey, Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.projectRolesCount += 1 + logging.Debugf("successful projectroles %d: %s", count.projectRolesCount, role.ProjectId+"_"+role.RoleKey) + successOrg.ProjectRoles = append(successOrg.ActionIds, role.ProjectId+"_"+role.RoleKey) + } + } + } + + for _, org := range orgs { + var successOrg *admin_pb.ImportDataSuccessOrg + for _, oldOrd := range success.Orgs { + if org.OrgId == oldOrd.OrgId { + successOrg = oldOrd + } + } + if org.TriggerActions != nil { + for _, triggerAction := range org.GetTriggerActions() { + _, err := s.command.SetTriggerActions(ctx, domain.FlowType(triggerAction.FlowType), domain.TriggerType(triggerAction.TriggerType), triggerAction.ActionIds, org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "trigger_action", Id: triggerAction.FlowType.String() + "_" + triggerAction.TriggerType.String(), Message: err.Error()}) + continue + } + successOrg.TriggerActions = append(successOrg.TriggerActions, &management_pb.SetTriggerActionsRequest{FlowType: triggerAction.FlowType, TriggerType: triggerAction.TriggerType, ActionIds: triggerAction.GetActionIds()}) + } + } + if org.ProjectGrants != nil { + for _, grant := range org.GetProjectGrants() { + logging.Debugf("import projectgrant: %s", grant.GetGrantId()+"_"+grant.GetProjectGrant().GetProjectId()+"_"+grant.GetProjectGrant().GetGrantedOrgId()) + _, err := s.command.AddProjectGrantWithID(ctx, management.AddProjectGrantRequestToDomain(grant.GetProjectGrant()), grant.GetGrantId(), org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "project_grant", Id: org.GetOrgId() + "_" + grant.GetProjectGrant().GetProjectId() + "_" + grant.GetProjectGrant().GetGrantedOrgId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.projectGrantCount += 1 + logging.Debugf("successful projectgrant %d: %s", count.projectGrantCount, grant.GetGrantId()+"_"+grant.GetProjectGrant().GetProjectId()+"_"+grant.GetProjectGrant().GetGrantedOrgId()) + successOrg.ProjectGrants = append(successOrg.ProjectGrants, &admin_pb.ImportDataSuccessProjectGrant{GrantId: grant.GetGrantId(), ProjectId: grant.GetProjectGrant().GetProjectId(), OrgId: grant.GetProjectGrant().GetGrantedOrgId()}) + } + } + if org.UserGrants != nil { + for _, grant := range org.GetUserGrants() { + logging.Debugf("import usergrant: %s", grant.GetProjectId()+"_"+grant.GetUserId()) + _, err := s.command.AddUserGrant(ctx, management.AddUserGrantRequestToDomain(grant), org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "user_grant", Id: org.GetOrgId() + "_" + grant.GetProjectId() + "_" + grant.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.userGrantCount += 1 + logging.Debugf("successful usergrant %d: %s", count.userGrantCount, grant.GetProjectId()+"_"+grant.GetUserId()) + successOrg.UserGrants = append(successOrg.UserGrants, &admin_pb.ImportDataSuccessUserGrant{ProjectId: grant.GetProjectId(), UserId: grant.GetUserId()}) + } + } + } + + if success != nil && success.Orgs != nil { + for _, org := range orgs { + var successOrg *admin_pb.ImportDataSuccessOrg + for _, oldOrd := range success.Orgs { + if org.OrgId == oldOrd.OrgId { + successOrg = oldOrd + } + } + if successOrg == nil { + continue + } + + if org.OrgMembers != nil { + for _, member := range org.GetOrgMembers() { + logging.Debugf("import orgmember: %s", member.GetUserId()) + _, err := s.command.AddOrgMember(ctx, org.GetOrgId(), member.GetUserId(), member.GetRoles()...) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "org_member", Id: org.GetOrgId() + "_" + member.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.orgMemberCount += 1 + logging.Debugf("successful orgmember %d: %s", count.orgMemberCount, member.GetUserId()) + successOrg.OrgMembers = append(successOrg.OrgMembers, member.GetUserId()) + } + } + if org.ProjectGrantMembers != nil { + for _, member := range org.GetProjectGrantMembers() { + logging.Debugf("import projectgrantmember: %s", member.GetProjectId()+"_"+member.GetGrantId()+"_"+member.GetUserId()) + _, err := s.command.AddProjectGrantMember(ctx, management.AddProjectGrantMemberRequestToDomain(member)) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "project_grant_member", Id: org.GetOrgId() + "_" + member.GetProjectId() + "_" + member.GetGrantId() + "_" + member.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.projectGrantMemberCount += 1 + logging.Debugf("successful projectgrantmember %d: %s", count.projectGrantMemberCount, member.GetProjectId()+"_"+member.GetGrantId()+"_"+member.GetUserId()) + successOrg.ProjectGrantMembers = append(successOrg.ProjectGrantMembers, &admin_pb.ImportDataSuccessProjectGrantMember{ProjectId: member.GetProjectId(), GrantId: member.GetGrantId(), UserId: member.GetUserId()}) + } + } + if org.ProjectMembers != nil { + for _, member := range org.GetProjectMembers() { + logging.Debugf("import orgmember: %s", member.GetProjectId()+"_"+member.GetUserId()) + _, err := s.command.AddProjectMember(ctx, management.AddProjectMemberRequestToDomain(member), org.GetOrgId()) + if err != nil { + errors = append(errors, &admin_pb.ImportDataError{Type: "project_member", Id: org.GetOrgId() + "_" + member.GetProjectId() + "_" + member.GetUserId(), Message: err.Error()}) + if isCtxTimeout(ctx) { + return &admin_pb.ImportDataResponse{Errors: errors, Success: success}, count, err + } + continue + } + count.projectMembersCount += 1 + logging.Debugf("successful orgmember %d: %s", count.projectMembersCount, member.GetProjectId()+"_"+member.GetUserId()) + successOrg.ProjectMembers = append(successOrg.ProjectMembers, &admin_pb.ImportDataSuccessProjectMember{ProjectId: member.GetProjectId(), UserId: member.GetUserId()}) + } + } + } + } + return &admin_pb.ImportDataResponse{ + Errors: errors, + Success: success, + }, count, nil +} + +func (s *Server) dataOrgsV1ToDataOrgs(ctx context.Context, dataOrgs *v1_pb.ImportDataOrg) (_ *admin_pb.ImportDataOrg, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + orgs := make([]*admin_pb.DataOrg, 0) + for _, orgV1 := range dataOrgs.Orgs { + org := &admin_pb.DataOrg{ + OrgId: orgV1.GetOrgId(), + Org: orgV1.GetOrg(), + DomainPolicy: nil, + LabelPolicy: orgV1.GetLabelPolicy(), + LockoutPolicy: orgV1.GetLockoutPolicy(), + LoginPolicy: orgV1.GetLoginPolicy(), + PasswordComplexityPolicy: orgV1.GetPasswordComplexityPolicy(), + PrivacyPolicy: orgV1.GetPrivacyPolicy(), + Projects: orgV1.GetProjects(), + ProjectRoles: orgV1.GetProjectRoles(), + ApiApps: orgV1.GetApiApps(), + OidcApps: orgV1.GetOidcApps(), + HumanUsers: orgV1.GetHumanUsers(), + MachineUsers: orgV1.GetMachineUsers(), + TriggerActions: orgV1.GetTriggerActions(), + Actions: orgV1.GetActions(), + ProjectGrants: orgV1.GetProjectGrants(), + UserGrants: orgV1.GetUserGrants(), + OrgMembers: orgV1.GetOrgMembers(), + ProjectMembers: orgV1.GetProjectMembers(), + ProjectGrantMembers: orgV1.GetProjectGrantMembers(), + UserMetadata: orgV1.GetUserMetadata(), + LoginTexts: orgV1.GetLoginTexts(), + InitMessages: orgV1.GetInitMessages(), + PasswordResetMessages: orgV1.GetPasswordResetMessages(), + VerifyEmailMessages: orgV1.GetVerifyEmailMessages(), + VerifyPhoneMessages: orgV1.GetVerifyPhoneMessages(), + DomainClaimedMessages: orgV1.GetDomainClaimedMessages(), + PasswordlessRegistrationMessages: orgV1.GetPasswordlessRegistrationMessages(), + OidcIdps: orgV1.GetOidcIdps(), + JwtIdps: orgV1.GetJwtIdps(), + UserLinks: orgV1.GetUserLinks(), + Domains: orgV1.GetDomains(), + } + if orgV1.IamPolicy != nil { + defaultDomainPolicy, err := s.query.DefaultDomainPolicy(ctx) + if err != nil { + return nil, err + } + + org.DomainPolicy = &admin_pb.AddCustomDomainPolicyRequest{ + UserLoginMustBeDomain: orgV1.IamPolicy.UserLoginMustBeDomain, + ValidateOrgDomains: defaultDomainPolicy.ValidateOrgDomains, + SmtpSenderAddressMatchesInstanceDomain: defaultDomainPolicy.SMTPSenderAddressMatchesInstanceDomain, + } + } + if org.LoginPolicy != nil { + defaultLoginPolicy, err := s.query.DefaultLoginPolicy(ctx) + if err != nil { + return nil, err + } + org.LoginPolicy.ExternalLoginCheckLifetime = durationpb.New(defaultLoginPolicy.ExternalLoginCheckLifetime) + org.LoginPolicy.MultiFactorCheckLifetime = durationpb.New(defaultLoginPolicy.MultiFactorCheckLifetime) + org.LoginPolicy.SecondFactorCheckLifetime = durationpb.New(defaultLoginPolicy.SecondFactorCheckLifetime) + org.LoginPolicy.PasswordCheckLifetime = durationpb.New(defaultLoginPolicy.PasswordCheckLifetime) + org.LoginPolicy.MfaInitSkipLifetime = durationpb.New(defaultLoginPolicy.MFAInitSkipLifetime) + + if orgV1.SecondFactors != nil { + org.LoginPolicy.SecondFactors = make([]policy.SecondFactorType, len(orgV1.SecondFactors)) + for i, factor := range orgV1.SecondFactors { + org.LoginPolicy.SecondFactors[i] = factor.GetType() + } + } + if orgV1.MultiFactors != nil { + org.LoginPolicy.MultiFactors = make([]policy.MultiFactorType, len(orgV1.MultiFactors)) + for i, factor := range orgV1.MultiFactors { + org.LoginPolicy.MultiFactors[i] = factor.GetType() + } + } + if orgV1.Idps != nil { + org.LoginPolicy.Idps = make([]*management_pb.AddCustomLoginPolicyRequest_IDP, len(orgV1.Idps)) + for i, idpR := range orgV1.Idps { + org.LoginPolicy.Idps[i] = &management_pb.AddCustomLoginPolicyRequest_IDP{ + IdpId: idpR.GetIdpId(), + OwnerType: idpR.GetOwnerType(), + } + } + } + } + orgs = append(orgs, org) + } + + return &admin_pb.ImportDataOrg{ + Orgs: orgs, + }, nil +} + +func isCtxTimeout(ctx context.Context) bool { + select { + case <-ctx.Done(): + return true + default: + return false + } +} diff --git a/internal/api/grpc/admin/server.go b/internal/api/grpc/admin/server.go index 1665895847..60808f5b90 100644 --- a/internal/api/grpc/admin/server.go +++ b/internal/api/grpc/admin/server.go @@ -2,7 +2,6 @@ package admin import ( "context" - "google.golang.org/grpc" "github.com/zitadel/zitadel/internal/admin/repository" @@ -11,6 +10,7 @@ import ( "github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/api/grpc/server" "github.com/zitadel/zitadel/internal/command" + "github.com/zitadel/zitadel/internal/config/systemdefaults" "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/zitadel/internal/query" "github.com/zitadel/zitadel/pkg/grpc/admin" @@ -30,6 +30,7 @@ type Server struct { administrator repository.AdministratorRepository assetsAPIDomain func(context.Context) string userCodeAlg crypto.EncryptionAlgorithm + passwordHashAlg crypto.HashAlgorithm } type Config struct { @@ -40,6 +41,7 @@ func CreateServer( database string, command *command.Commands, query *query.Queries, + sd systemdefaults.SystemDefaults, repo repository.Repository, externalSecure bool, userCodeAlg crypto.EncryptionAlgorithm, @@ -51,6 +53,7 @@ func CreateServer( administrator: repo, assetsAPIDomain: assets.AssetAPI(externalSecure), userCodeAlg: userCodeAlg, + passwordHashAlg: crypto.NewBCrypt(sd.SecretGenerators.PasswordSaltCost), } } diff --git a/internal/api/grpc/management/actions.go b/internal/api/grpc/management/actions.go index 9c479155c9..67a25d16e4 100644 --- a/internal/api/grpc/management/actions.go +++ b/internal/api/grpc/management/actions.go @@ -35,7 +35,7 @@ func (s *Server) GetAction(ctx context.Context, req *mgmt_pb.GetActionRequest) ( } func (s *Server) CreateAction(ctx context.Context, req *mgmt_pb.CreateActionRequest) (*mgmt_pb.CreateActionResponse, error) { - id, details, err := s.command.AddAction(ctx, createActionRequestToDomain(req), authz.GetCtxData(ctx).OrgID) + id, details, err := s.command.AddAction(ctx, CreateActionRequestToDomain(req), authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/actions_converter.go b/internal/api/grpc/management/actions_converter.go index 873a36072a..d3e08a8bbe 100644 --- a/internal/api/grpc/management/actions_converter.go +++ b/internal/api/grpc/management/actions_converter.go @@ -9,7 +9,7 @@ import ( mgmt_pb "github.com/zitadel/zitadel/pkg/grpc/management" ) -func createActionRequestToDomain(req *mgmt_pb.CreateActionRequest) *domain.Action { +func CreateActionRequestToDomain(req *mgmt_pb.CreateActionRequest) *domain.Action { return &domain.Action{ Name: req.Name, Script: req.Script, diff --git a/internal/api/grpc/management/idp.go b/internal/api/grpc/management/idp.go index 87041826d8..01f430c342 100644 --- a/internal/api/grpc/management/idp.go +++ b/internal/api/grpc/management/idp.go @@ -34,7 +34,7 @@ func (s *Server) ListOrgIDPs(ctx context.Context, req *mgmt_pb.ListOrgIDPsReques } func (s *Server) AddOrgOIDCIDP(ctx context.Context, req *mgmt_pb.AddOrgOIDCIDPRequest) (*mgmt_pb.AddOrgOIDCIDPResponse, error) { - config, err := s.command.AddIDPConfig(ctx, addOIDCIDPRequestToDomain(req), authz.GetCtxData(ctx).OrgID) + config, err := s.command.AddIDPConfig(ctx, AddOIDCIDPRequestToDomain(req), authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } @@ -49,7 +49,7 @@ func (s *Server) AddOrgOIDCIDP(ctx context.Context, req *mgmt_pb.AddOrgOIDCIDPRe } func (s *Server) AddOrgJWTIDP(ctx context.Context, req *mgmt_pb.AddOrgJWTIDPRequest) (*mgmt_pb.AddOrgJWTIDPResponse, error) { - config, err := s.command.AddIDPConfig(ctx, addJWTIDPRequestToDomain(req), authz.GetCtxData(ctx).OrgID) + config, err := s.command.AddIDPConfig(ctx, AddJWTIDPRequestToDomain(req), authz.GetCtxData(ctx).OrgID) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/idp_converter.go b/internal/api/grpc/management/idp_converter.go index 653375ed3c..b8dc6ba046 100644 --- a/internal/api/grpc/management/idp_converter.go +++ b/internal/api/grpc/management/idp_converter.go @@ -14,7 +14,7 @@ import ( mgmt_pb "github.com/zitadel/zitadel/pkg/grpc/management" ) -func addOIDCIDPRequestToDomain(req *mgmt_pb.AddOrgOIDCIDPRequest) *domain.IDPConfig { +func AddOIDCIDPRequestToDomain(req *mgmt_pb.AddOrgOIDCIDPRequest) *domain.IDPConfig { return &domain.IDPConfig{ Name: req.Name, OIDCConfig: addOIDCIDPRequestToDomainOIDCIDPConfig(req), @@ -35,7 +35,7 @@ func addOIDCIDPRequestToDomainOIDCIDPConfig(req *mgmt_pb.AddOrgOIDCIDPRequest) * } } -func addJWTIDPRequestToDomain(req *mgmt_pb.AddOrgJWTIDPRequest) *domain.IDPConfig { +func AddJWTIDPRequestToDomain(req *mgmt_pb.AddOrgJWTIDPRequest) *domain.IDPConfig { return &domain.IDPConfig{ Name: req.Name, JWTConfig: addJWTIDPRequestToDomainJWTIDPConfig(req), diff --git a/internal/api/grpc/management/idp_converter_test.go b/internal/api/grpc/management/idp_converter_test.go index 7e5bbf0cb5..999be2ea06 100644 --- a/internal/api/grpc/management/idp_converter_test.go +++ b/internal/api/grpc/management/idp_converter_test.go @@ -35,7 +35,7 @@ func Test_addOIDCIDPRequestToDomain(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got := addOIDCIDPRequestToDomain(tt.args.req) + got := AddOIDCIDPRequestToDomain(tt.args.req) test.AssertFieldsMapped(t, got, "ObjectRoot", "OIDCConfig.ClientSecret", diff --git a/internal/api/grpc/management/policy_label.go b/internal/api/grpc/management/policy_label.go index 3eaec40ebd..e76f97fb00 100644 --- a/internal/api/grpc/management/policy_label.go +++ b/internal/api/grpc/management/policy_label.go @@ -34,7 +34,7 @@ func (s *Server) GetDefaultLabelPolicy(ctx context.Context, req *mgmt_pb.GetDefa } func (s *Server) AddCustomLabelPolicy(ctx context.Context, req *mgmt_pb.AddCustomLabelPolicyRequest) (*mgmt_pb.AddCustomLabelPolicyResponse, error) { - policy, err := s.command.AddLabelPolicy(ctx, authz.GetCtxData(ctx).OrgID, addLabelPolicyToDomain(req)) + policy, err := s.command.AddLabelPolicy(ctx, authz.GetCtxData(ctx).OrgID, AddLabelPolicyToDomain(req)) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/policy_label_converter.go b/internal/api/grpc/management/policy_label_converter.go index 9918d2ea93..3ad0b3329e 100644 --- a/internal/api/grpc/management/policy_label_converter.go +++ b/internal/api/grpc/management/policy_label_converter.go @@ -5,7 +5,7 @@ import ( mgmt_pb "github.com/zitadel/zitadel/pkg/grpc/management" ) -func addLabelPolicyToDomain(p *mgmt_pb.AddCustomLabelPolicyRequest) *domain.LabelPolicy { +func AddLabelPolicyToDomain(p *mgmt_pb.AddCustomLabelPolicyRequest) *domain.LabelPolicy { return &domain.LabelPolicy{ PrimaryColor: p.PrimaryColor, BackgroundColor: p.BackgroundColor, diff --git a/internal/api/grpc/management/policy_login.go b/internal/api/grpc/management/policy_login.go index 25273b81de..78029c79a5 100644 --- a/internal/api/grpc/management/policy_login.go +++ b/internal/api/grpc/management/policy_login.go @@ -30,7 +30,7 @@ func (s *Server) GetDefaultLoginPolicy(ctx context.Context, req *mgmt_pb.GetDefa } func (s *Server) AddCustomLoginPolicy(ctx context.Context, req *mgmt_pb.AddCustomLoginPolicyRequest) (*mgmt_pb.AddCustomLoginPolicyResponse, error) { - policy, err := s.command.AddLoginPolicy(ctx, authz.GetCtxData(ctx).OrgID, addLoginPolicyToDomain(req)) + policy, err := s.command.AddLoginPolicy(ctx, authz.GetCtxData(ctx).OrgID, AddLoginPolicyToDomain(req)) if err != nil { return nil, err } diff --git a/internal/api/grpc/management/policy_login_converter.go b/internal/api/grpc/management/policy_login_converter.go index 6b2c6cb88a..8f7a632ece 100644 --- a/internal/api/grpc/management/policy_login_converter.go +++ b/internal/api/grpc/management/policy_login_converter.go @@ -9,7 +9,7 @@ import ( mgmt_pb "github.com/zitadel/zitadel/pkg/grpc/management" ) -func addLoginPolicyToDomain(p *mgmt_pb.AddCustomLoginPolicyRequest) *domain.LoginPolicy { +func AddLoginPolicyToDomain(p *mgmt_pb.AddCustomLoginPolicyRequest) *domain.LoginPolicy { return &domain.LoginPolicy{ AllowUsernamePassword: p.AllowUsernamePassword, AllowRegister: p.AllowRegister, diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go index 7aa0e1a3e0..507fcce199 100644 --- a/internal/api/grpc/management/user.go +++ b/internal/api/grpc/management/user.go @@ -184,6 +184,21 @@ func (s *Server) BulkRemoveUserMetadata(ctx context.Context, req *mgmt_pb.BulkRe } func (s *Server) AddHumanUser(ctx context.Context, req *mgmt_pb.AddHumanUserRequest) (*mgmt_pb.AddHumanUserResponse, error) { + details, err := s.command.AddHuman(ctx, authz.GetCtxData(ctx).OrgID, AddHumanUserRequestToAddHuman(req)) + if err != nil { + return nil, err + } + return &mgmt_pb.AddHumanUserResponse{ + UserId: details.ID, + Details: obj_grpc.AddToDetailsPb( + details.Sequence, + details.EventDate, + details.ResourceOwner, + ), + }, nil +} + +func AddHumanUserRequestToAddHuman(req *mgmt_pb.AddHumanUserRequest) *command.AddHuman { lang, err := language.Parse(req.Profile.PreferredLanguage) logging.OnError(err).Debug("unable to parse language") @@ -211,18 +226,7 @@ func (s *Server) AddHumanUser(ctx context.Context, req *mgmt_pb.AddHumanUserRequ Verified: req.Phone.IsPhoneVerified, } } - details, err := s.command.AddHuman(ctx, authz.GetCtxData(ctx).OrgID, human) - if err != nil { - return nil, err - } - return &mgmt_pb.AddHumanUserResponse{ - UserId: details.ID, - Details: obj_grpc.AddToDetailsPb( - details.Sequence, - details.EventDate, - details.ResourceOwner, - ), - }, nil + return human } func (s *Server) ImportHumanUser(ctx context.Context, req *mgmt_pb.ImportHumanUserRequest) (*mgmt_pb.ImportHumanUserResponse, error) { diff --git a/internal/api/grpc/management/user_converter.go b/internal/api/grpc/management/user_converter.go index 77f1d7c09b..97ff4ec443 100644 --- a/internal/api/grpc/management/user_converter.go +++ b/internal/api/grpc/management/user_converter.go @@ -142,11 +142,16 @@ func ImportHumanUserRequestToDomain(req *mgmt_pb.ImportHumanUserRequest) (human IsPhoneVerified: req.Phone.IsPhoneVerified, } } + if req.Password != "" { - human.Password = &domain.Password{SecretString: req.Password} + human.Password = domain.NewPassword(req.Password) human.Password.ChangeRequired = req.PasswordChangeRequired } + if req.HashedPassword != nil && req.HashedPassword.Value != "" && req.HashedPassword.Algorithm != "" { + human.HashedPassword = domain.NewHashedPassword(req.HashedPassword.Value, req.HashedPassword.Algorithm) + } + return human, req.RequestPasswordlessRegistration } diff --git a/internal/command/org.go b/internal/command/org.go index 6eb3aa6a8c..d40c7eec36 100644 --- a/internal/command/org.go +++ b/internal/command/org.go @@ -21,17 +21,19 @@ type OrgSetup struct { Roles []string } -func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, userIDs ...string) (string, *domain.ObjectDetails, error) { - orgID, err := c.idGenerator.Next() +func (c *Commands) SetUpOrgWithIDs(ctx context.Context, o *OrgSetup, orgID, userID string, userIDs ...string) (string, *domain.ObjectDetails, error) { + existingOrg, err := c.getOrgWriteModelByID(ctx, orgID) if err != nil { return "", nil, err } - - userID, err := c.idGenerator.Next() - if err != nil { - return "", nil, err + if existingOrg != nil { + return "", nil, errors.ThrowPreconditionFailed(nil, "COMMAND-poaj2", "Errors.Org.AlreadyExisting") } + return c.setUpOrgWithIDs(ctx, o, orgID, userID, userIDs...) +} + +func (c *Commands) setUpOrgWithIDs(ctx context.Context, o *OrgSetup, orgID, userID string, userIDs ...string) (string, *domain.ObjectDetails, error) { orgAgg := org.NewAggregate(orgID) userAgg := user_repo.NewAggregate(userID, orgID) @@ -65,6 +67,20 @@ func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, userIDs ...string) }, nil } +func (c *Commands) SetUpOrg(ctx context.Context, o *OrgSetup, userIDs ...string) (string, *domain.ObjectDetails, error) { + orgID, err := c.idGenerator.Next() + if err != nil { + return "", nil, err + } + + userID, err := c.idGenerator.Next() + if err != nil { + return "", nil, err + } + + return c.setUpOrgWithIDs(ctx, o, orgID, userID, userIDs...) +} + //AddOrgCommand defines the commands to create a new org, // this includes the verified default domain func AddOrgCommand(ctx context.Context, a *org.Aggregate, name string, userIDs ...string) preparation.Validation { @@ -106,8 +122,33 @@ func (c *Commands) checkOrgExists(ctx context.Context, orgID string) error { return nil } +func (c *Commands) AddOrgWithID(ctx context.Context, name, userID, resourceOwner, orgID string, claimedUserIDs []string) (*domain.Org, error) { + existingOrg, err := c.getOrgWriteModelByID(ctx, orgID) + if err != nil { + return nil, err + } + if existingOrg.State != domain.OrgStateUnspecified { + return nil, caos_errs.ThrowNotFound(nil, "ORG-lapo2m", "Errors.Org.AlreadyExisting") + } + + return c.addOrgWithIDAndMember(ctx, name, userID, resourceOwner, orgID, claimedUserIDs) +} + func (c *Commands) AddOrg(ctx context.Context, name, userID, resourceOwner string, claimedUserIDs []string) (*domain.Org, error) { - orgAgg, addedOrg, events, err := c.addOrg(ctx, &domain.Org{Name: name}, claimedUserIDs) + if name == "" { + return nil, caos_errs.ThrowInvalidArgument(nil, "EVENT-Mf9sd", "Errors.Org.Invalid") + } + + orgID, err := c.idGenerator.Next() + if err != nil { + return nil, caos_errs.ThrowInternal(err, "COMMA-OwciI", "Errors.Internal") + } + + return c.addOrgWithIDAndMember(ctx, name, userID, resourceOwner, orgID, claimedUserIDs) +} + +func (c *Commands) addOrgWithIDAndMember(ctx context.Context, name, userID, resourceOwner, orgID string, claimedUserIDs []string) (*domain.Org, error) { + orgAgg, addedOrg, events, err := c.addOrgWithID(ctx, &domain.Org{Name: name}, orgID, claimedUserIDs) if err != nil { return nil, err } @@ -136,6 +177,7 @@ func (c *Commands) ChangeOrg(ctx context.Context, orgID, name string) (*domain.O if orgID == "" || name == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "EVENT-Mf9sd", "Errors.Org.Invalid") } + orgWriteModel, err := c.getOrgWriteModelByID(ctx, orgID) if err != nil { return nil, err @@ -242,15 +284,12 @@ func ExistsOrg(ctx context.Context, filter preparation.FilterToQueryReducer, id return exists, nil } -func (c *Commands) addOrg(ctx context.Context, organisation *domain.Org, claimedUserIDs []string) (_ *eventstore.Aggregate, _ *OrgWriteModel, _ []eventstore.Command, err error) { +func (c *Commands) addOrgWithID(ctx context.Context, organisation *domain.Org, orgID string, claimedUserIDs []string) (_ *eventstore.Aggregate, _ *OrgWriteModel, _ []eventstore.Command, err error) { if !organisation.IsValid() { return nil, nil, nil, caos_errs.ThrowInvalidArgument(nil, "COMM-deLSk", "Errors.Org.Invalid") } - organisation.AggregateID, err = c.idGenerator.Next() - if err != nil { - return nil, nil, nil, caos_errs.ThrowInternal(err, "COMMA-OwciI", "Errors.Internal") - } + organisation.AggregateID = orgID organisation.AddIAMDomain(authz.GetInstance(ctx).RequestedDomain()) addedOrg := NewOrgWriteModel(organisation.AggregateID) diff --git a/internal/command/org_action.go b/internal/command/org_action.go index aeeb5f5879..45cf13acfa 100644 --- a/internal/command/org_action.go +++ b/internal/command/org_action.go @@ -11,14 +11,33 @@ import ( "github.com/zitadel/zitadel/internal/repository/org" ) +func (c *Commands) AddActionWithID(ctx context.Context, addAction *domain.Action, resourceOwner, actionID string) (_ string, _ *domain.ObjectDetails, err error) { + existingAction, err := c.getActionWriteModelByID(ctx, actionID, resourceOwner) + if err != nil { + return "", nil, err + } + if existingAction.State != domain.ActionStateUnspecified { + return "", nil, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-nau2k", "Errors.Action.AlreadyExisting") + } + + return c.addActionWithID(ctx, addAction, resourceOwner, actionID) +} + func (c *Commands) AddAction(ctx context.Context, addAction *domain.Action, resourceOwner string) (_ string, _ *domain.ObjectDetails, err error) { if !addAction.IsValid() { return "", nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-eg2gf", "Errors.Action.Invalid") } - addAction.AggregateID, err = c.idGenerator.Next() + + actionID, err := c.idGenerator.Next() if err != nil { return "", nil, err } + + return c.addActionWithID(ctx, addAction, resourceOwner, actionID) +} + +func (c *Commands) addActionWithID(ctx context.Context, addAction *domain.Action, resourceOwner, actionID string) (_ string, _ *domain.ObjectDetails, err error) { + addAction.AggregateID = actionID actionModel := NewActionWriteModel(addAction.AggregateID, resourceOwner) actionAgg := ActionAggregateFromWriteModel(&actionModel.WriteModel) diff --git a/internal/command/org_domain.go b/internal/command/org_domain.go index 5270bbc19b..dc108001ba 100644 --- a/internal/command/org_domain.go +++ b/internal/command/org_domain.go @@ -51,7 +51,7 @@ func (c *Commands) prepareAddOrgDomain(a *org.Aggregate, addDomain string, userI } } -func VerifyOrgDomain(a *org.Aggregate, domain string) preparation.Validation { +func verifyOrgDomain(a *org.Aggregate, domain string) preparation.Validation { return func() (preparation.CreateCommands, error) { if domain = strings.TrimSpace(domain); domain == "" { return nil, errors.ThrowInvalidArgument(nil, "ORG-yqlVQ", "Errors.Invalid.Argument") @@ -63,7 +63,7 @@ func VerifyOrgDomain(a *org.Aggregate, domain string) preparation.Validation { } } -func SetPrimaryOrgDomain(a *org.Aggregate, domain string) preparation.Validation { +func setPrimaryOrgDomain(a *org.Aggregate, domain string) preparation.Validation { return func() (preparation.CreateCommands, error) { if domain = strings.TrimSpace(domain); domain == "" { return nil, errors.ThrowInvalidArgument(nil, "ORG-gmNqY", "Errors.Invalid.Argument") @@ -101,6 +101,19 @@ func orgDomain(ctx context.Context, filter preparation.FilterToQueryReducer, org return wm, nil } +func (c *Commands) VerifyOrgDomain(ctx context.Context, orgID, domain string) (*domain.ObjectDetails, error) { + orgAgg := org.NewAggregate(orgID) + cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, verifyOrgDomain(orgAgg, domain)) + if err != nil { + return nil, err + } + pushedEvents, err := c.eventstore.Push(ctx, cmds...) + if err != nil { + return nil, err + } + return pushedEventsToObjectDetails(pushedEvents), nil +} + func (c *Commands) AddOrgDomain(ctx context.Context, orgID, domain string, claimedUserIDs []string) (*domain.ObjectDetails, error) { orgAgg := org.NewAggregate(orgID) cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, c.prepareAddOrgDomain(orgAgg, domain, claimedUserIDs)) diff --git a/internal/command/org_domain_test.go b/internal/command/org_domain_test.go index 001992406e..230fc5601a 100644 --- a/internal/command/org_domain_test.go +++ b/internal/command/org_domain_test.go @@ -178,7 +178,7 @@ func TestVerifyDomain(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, context.Background(), VerifyOrgDomain(tt.args.a, tt.args.domain), nil, tt.want) + AssertValidation(t, context.Background(), verifyOrgDomain(tt.args.a, tt.args.domain), nil, tt.want) }) } } @@ -273,7 +273,7 @@ func TestSetDomainPrimary(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - AssertValidation(t, context.Background(), SetPrimaryOrgDomain(tt.args.a, tt.args.domain), tt.args.filter, tt.want) + AssertValidation(t, context.Background(), setPrimaryOrgDomain(tt.args.a, tt.args.domain), tt.args.filter, tt.want) }) } } diff --git a/internal/command/org_idp_config.go b/internal/command/org_idp_config.go index 21647263ac..f135a4109a 100644 --- a/internal/command/org_idp_config.go +++ b/internal/command/org_idp_config.go @@ -11,6 +11,17 @@ import ( "github.com/zitadel/zitadel/internal/telemetry/tracing" ) +func (c *Commands) ImportIDPConfig(ctx context.Context, config *domain.IDPConfig, idpConfigID, resourceOwner string) (*domain.IDPConfig, error) { + existingIDP, err := c.orgIDPConfigWriteModelByID(ctx, idpConfigID, resourceOwner) + if err != nil { + return nil, err + } + if existingIDP.State != domain.IDPConfigStateRemoved && existingIDP.State != domain.IDPConfigStateUnspecified { + return nil, errors.ThrowNotFound(nil, "Org-1J8fs", "Errors.Org.IDPConfig.AlreadyExisting") + } + return c.addIDPConfig(ctx, config, idpConfigID, resourceOwner) +} + func (c *Commands) AddIDPConfig(ctx context.Context, config *domain.IDPConfig, resourceOwner string) (*domain.IDPConfig, error) { if resourceOwner == "" { return nil, errors.ThrowInvalidArgument(nil, "Org-0j8gs", "Errors.ResourceOwnerMissing") @@ -18,11 +29,16 @@ func (c *Commands) AddIDPConfig(ctx context.Context, config *domain.IDPConfig, r if config.OIDCConfig == nil && config.JWTConfig == nil { return nil, errors.ThrowInvalidArgument(nil, "Org-eUpQU", "Errors.idp.config.notset") } - idpConfigID, err := c.idGenerator.Next() if err != nil { return nil, err } + + return c.addIDPConfig(ctx, config, idpConfigID, resourceOwner) +} + +func (c *Commands) addIDPConfig(ctx context.Context, config *domain.IDPConfig, idpConfigID, resourceOwner string) (*domain.IDPConfig, error) { + addedConfig := NewOrgIDPConfigWriteModel(idpConfigID, resourceOwner) orgAgg := OrgAggregateFromWriteModel(&addedConfig.WriteModel) diff --git a/internal/command/project.go b/internal/command/project.go index 07a8bbc478..8b795ed07b 100644 --- a/internal/command/project.go +++ b/internal/command/project.go @@ -13,11 +13,46 @@ import ( "github.com/zitadel/zitadel/internal/repository/project" ) -func (c *Commands) AddProject(ctx context.Context, project *domain.Project, resourceOwner, ownerUserID string) (_ *domain.Project, err error) { - events, addedProject, err := c.addProject(ctx, project, resourceOwner, ownerUserID) +func (c *Commands) AddProjectWithID(ctx context.Context, project *domain.Project, resourceOwner, projectID string) (_ *domain.Project, err error) { + existingProject, err := c.getProjectWriteModelByID(ctx, projectID, resourceOwner) if err != nil { return nil, err } + if existingProject.State != domain.ProjectStateUnspecified { + return nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-opamwu", "Errors.Project.AlreadyExisting") + } + return c.addProjectWithID(ctx, project, resourceOwner, projectID) +} + +func (c *Commands) AddProject(ctx context.Context, project *domain.Project, resourceOwner, ownerUserID string) (_ *domain.Project, err error) { + if !project.IsValid() { + return nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-IOVCC", "Errors.Project.Invalid") + } + + projectID, err := c.idGenerator.Next() + if err != nil { + return nil, err + } + + return c.addProjectWithIDWithOwner(ctx, project, resourceOwner, ownerUserID, projectID) +} + +func (c *Commands) addProjectWithID(ctx context.Context, projectAdd *domain.Project, resourceOwner, projectID string) (_ *domain.Project, err error) { + projectAdd.AggregateID = projectID + addedProject := NewProjectWriteModel(projectAdd.AggregateID, resourceOwner) + projectAgg := ProjectAggregateFromWriteModel(&addedProject.WriteModel) + + events := []eventstore.Command{ + project.NewProjectAddedEvent( + ctx, + projectAgg, + projectAdd.Name, + projectAdd.ProjectRoleAssertion, + projectAdd.ProjectRoleCheck, + projectAdd.HasProjectCheck, + projectAdd.PrivateLabelingSetting), + } + pushedEvents, err := c.eventstore.Push(ctx, events...) if err != nil { return nil, err @@ -29,14 +64,11 @@ func (c *Commands) AddProject(ctx context.Context, project *domain.Project, reso return projectWriteModelToProject(addedProject), nil } -func (c *Commands) addProject(ctx context.Context, projectAdd *domain.Project, resourceOwner, ownerUserID string) (_ []eventstore.Command, _ *ProjectWriteModel, err error) { +func (c *Commands) addProjectWithIDWithOwner(ctx context.Context, projectAdd *domain.Project, resourceOwner, ownerUserID, projectID string) (_ *domain.Project, err error) { if !projectAdd.IsValid() { - return nil, nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-IOVCC", "Errors.Project.Invalid") - } - projectAdd.AggregateID, err = c.idGenerator.Next() - if err != nil { - return nil, nil, err + return nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-IOVCC", "Errors.Project.Invalid") } + projectAdd.AggregateID = projectID addedProject := NewProjectWriteModel(projectAdd.AggregateID, resourceOwner) projectAgg := ProjectAggregateFromWriteModel(&addedProject.WriteModel) @@ -52,7 +84,16 @@ func (c *Commands) addProject(ctx context.Context, projectAdd *domain.Project, r projectAdd.PrivateLabelingSetting), project.NewProjectMemberAddedEvent(ctx, projectAgg, ownerUserID, projectRole), } - return events, addedProject, nil + + pushedEvents, err := c.eventstore.Push(ctx, events...) + if err != nil { + return nil, err + } + err = AppendAndReduce(addedProject, pushedEvents...) + if err != nil { + return nil, err + } + return projectWriteModelToProject(addedProject), nil } func AddProjectCommand( diff --git a/internal/command/project_application_api.go b/internal/command/project_application_api.go index 87a1dabec2..2046d3dc62 100644 --- a/internal/command/project_application_api.go +++ b/internal/command/project_application_api.go @@ -70,21 +70,70 @@ func (c *Commands) AddAPIAppCommand(app *addAPIApp, clientSecretAlg crypto.HashA } } -func (c *Commands) AddAPIApplication(ctx context.Context, application *domain.APIApp, resourceOwner string, appSecretGenerator crypto.Generator) (_ *domain.APIApp, err error) { - if application == nil || application.AggregateID == "" { - return nil, errors.ThrowInvalidArgument(nil, "PROJECT-5m9E", "Errors.Application.Invalid") - } - project, err := c.getProjectByID(ctx, application.AggregateID, resourceOwner) - if err != nil { - return nil, errors.ThrowPreconditionFailed(err, "PROJECT-9fnsf", "Errors.Project.NotFound") - } - addedApplication := NewAPIApplicationWriteModel(application.AggregateID, resourceOwner) - projectAgg := ProjectAggregateFromWriteModel(&addedApplication.WriteModel) - events, stringPw, err := c.addAPIApplication(ctx, projectAgg, project, application, resourceOwner, appSecretGenerator) +func (c *Commands) AddAPIApplicationWithID(ctx context.Context, apiApp *domain.APIApp, resourceOwner, appID string, appSecretGenerator crypto.Generator) (_ *domain.APIApp, err error) { + existingAPI, err := c.getAPIAppWriteModel(ctx, apiApp.AggregateID, appID, resourceOwner) if err != nil { return nil, err } - addedApplication.AppID = application.AppID + if existingAPI.State != domain.AppStateUnspecified { + return nil, errors.ThrowPreconditionFailed(nil, "PROJECT-mabu12", "Errors.Application.AlreadyExisting") + } + project, err := c.getProjectByID(ctx, apiApp.AggregateID, resourceOwner) + if err != nil { + return nil, errors.ThrowPreconditionFailed(err, "PROJECT-9fnsa", "Errors.Project.NotFound") + } + + return c.addAPIApplicationWithID(ctx, apiApp, resourceOwner, project, appID, appSecretGenerator) +} + +func (c *Commands) AddAPIApplication(ctx context.Context, apiApp *domain.APIApp, resourceOwner string, appSecretGenerator crypto.Generator) (_ *domain.APIApp, err error) { + if apiApp == nil || apiApp.AggregateID == "" { + return nil, errors.ThrowInvalidArgument(nil, "PROJECT-5m9E", "Errors.Application.Invalid") + } + project, err := c.getProjectByID(ctx, apiApp.AggregateID, resourceOwner) + if err != nil { + return nil, errors.ThrowPreconditionFailed(err, "PROJECT-9fnsf", "Errors.Project.NotFound") + } + + if !apiApp.IsValid() { + return nil, errors.ThrowInvalidArgument(nil, "PROJECT-Bff2g", "Errors.Application.Invalid") + } + + appID, err := c.idGenerator.Next() + if err != nil { + return nil, err + } + + return c.addAPIApplicationWithID(ctx, apiApp, resourceOwner, project, appID, appSecretGenerator) +} + +func (c *Commands) addAPIApplicationWithID(ctx context.Context, apiApp *domain.APIApp, resourceOwner string, project *domain.Project, appID string, appSecretGenerator crypto.Generator) (_ *domain.APIApp, err error) { + apiApp.AppID = appID + + addedApplication := NewAPIApplicationWriteModel(apiApp.AggregateID, resourceOwner) + projectAgg := ProjectAggregateFromWriteModel(&addedApplication.WriteModel) + + events := []eventstore.Command{ + project_repo.NewApplicationAddedEvent(ctx, projectAgg, apiApp.AppID, apiApp.AppName), + } + + var stringPw string + err = domain.SetNewClientID(apiApp, c.idGenerator, project) + if err != nil { + return nil, err + } + stringPw, err = domain.SetNewClientSecretIfNeeded(apiApp, appSecretGenerator) + if err != nil { + return nil, err + } + events = append(events, project_repo.NewAPIConfigAddedEvent(ctx, + projectAgg, + apiApp.AppID, + apiApp.ClientID, + apiApp.ClientSecret, + apiApp.AuthMethodType)) + + addedApplication.AppID = apiApp.AppID pushedEvents, err := c.eventstore.Push(ctx, events...) if err != nil { return nil, err @@ -98,38 +147,6 @@ func (c *Commands) AddAPIApplication(ctx context.Context, application *domain.AP return result, nil } -func (c *Commands) addAPIApplication(ctx context.Context, projectAgg *eventstore.Aggregate, proj *domain.Project, apiAppApp *domain.APIApp, resourceOwner string, appSecretGenerator crypto.Generator) (events []eventstore.Command, stringPW string, err error) { - if !apiAppApp.IsValid() { - return nil, "", errors.ThrowInvalidArgument(nil, "PROJECT-Bff2g", "Errors.Application.Invalid") - } - apiAppApp.AppID, err = c.idGenerator.Next() - if err != nil { - return nil, "", err - } - - events = []eventstore.Command{ - project_repo.NewApplicationAddedEvent(ctx, projectAgg, apiAppApp.AppID, apiAppApp.AppName), - } - - var stringPw string - err = domain.SetNewClientID(apiAppApp, c.idGenerator, proj) - if err != nil { - return nil, "", err - } - stringPw, err = domain.SetNewClientSecretIfNeeded(apiAppApp, appSecretGenerator) - if err != nil { - return nil, "", err - } - events = append(events, project_repo.NewAPIConfigAddedEvent(ctx, - projectAgg, - apiAppApp.AppID, - apiAppApp.ClientID, - apiAppApp.ClientSecret, - apiAppApp.AuthMethodType)) - - return events, stringPw, nil -} - func (c *Commands) ChangeAPIApplication(ctx context.Context, apiApp *domain.APIApp, resourceOwner string) (*domain.APIApp, error) { if apiApp.AppID == "" || apiApp.AggregateID == "" { return nil, errors.ThrowInvalidArgument(nil, "COMMAND-1m900", "Errors.Project.App.APIConfigInvalid") diff --git a/internal/command/project_application_oidc.go b/internal/command/project_application_oidc.go index aabb310448..4deb39653c 100644 --- a/internal/command/project_application_oidc.go +++ b/internal/command/project_application_oidc.go @@ -116,56 +116,63 @@ func (c *Commands) AddOIDCAppCommand(app *addOIDCApp, clientSecretAlg crypto.Has } } -func (c *Commands) AddOIDCApplication(ctx context.Context, application *domain.OIDCApp, resourceOwner string, appSecretGenerator crypto.Generator) (_ *domain.OIDCApp, err error) { - if application == nil || application.AggregateID == "" { +func (c *Commands) AddOIDCApplicationWithID(ctx context.Context, oidcApp *domain.OIDCApp, resourceOwner, appID string, appSecretGenerator crypto.Generator) (_ *domain.OIDCApp, err error) { + existingApp, err := c.getOIDCAppWriteModel(ctx, oidcApp.AggregateID, appID, resourceOwner) + if err != nil { + return nil, err + } + if existingApp.State != domain.AppStateUnspecified { + return nil, caos_errs.ThrowPreconditionFailed(nil, "PROJECT-lxowmp", "Errors.Application.AlreadyExisting") + } + + project, err := c.getProjectByID(ctx, oidcApp.AggregateID, resourceOwner) + if err != nil { + return nil, caos_errs.ThrowPreconditionFailed(err, "PROJECT-3m9s2", "Errors.Project.NotFound") + } + + return c.addOIDCApplicationWithID(ctx, oidcApp, resourceOwner, project, appID, appSecretGenerator) +} + +func (c *Commands) AddOIDCApplication(ctx context.Context, oidcApp *domain.OIDCApp, resourceOwner string, appSecretGenerator crypto.Generator) (_ *domain.OIDCApp, err error) { + if oidcApp == nil || oidcApp.AggregateID == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-34Fm0", "Errors.Application.Invalid") } - project, err := c.getProjectByID(ctx, application.AggregateID, resourceOwner) + project, err := c.getProjectByID(ctx, oidcApp.AggregateID, resourceOwner) if err != nil { return nil, caos_errs.ThrowPreconditionFailed(err, "PROJECT-3m9ss", "Errors.Project.NotFound") } - addedApplication := NewOIDCApplicationWriteModel(application.AggregateID, resourceOwner) - projectAgg := ProjectAggregateFromWriteModel(&addedApplication.WriteModel) - events, stringPw, err := c.addOIDCApplication(ctx, projectAgg, project, application, resourceOwner, appSecretGenerator) + + if oidcApp.AppName == "" || !oidcApp.IsValid() { + return nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-1n8df", "Errors.Application.Invalid") + } + + appID, err := c.idGenerator.Next() if err != nil { return nil, err } - addedApplication.AppID = application.AppID - pushedEvents, err := c.eventstore.Push(ctx, events...) - if err != nil { - return nil, err - } - err = AppendAndReduce(addedApplication, pushedEvents...) - if err != nil { - return nil, err - } - result := oidcWriteModelToOIDCConfig(addedApplication) - result.ClientSecretString = stringPw - result.FillCompliance() - return result, nil + + return c.addOIDCApplicationWithID(ctx, oidcApp, resourceOwner, project, appID, appSecretGenerator) } -func (c *Commands) addOIDCApplication(ctx context.Context, projectAgg *eventstore.Aggregate, proj *domain.Project, oidcApp *domain.OIDCApp, resourceOwner string, appSecretGenerator crypto.Generator) (events []eventstore.Command, stringPW string, err error) { - if oidcApp.AppName == "" || !oidcApp.IsValid() { - return nil, "", caos_errs.ThrowInvalidArgument(nil, "PROJECT-1n8df", "Errors.Application.Invalid") - } - oidcApp.AppID, err = c.idGenerator.Next() - if err != nil { - return nil, "", err - } +func (c *Commands) addOIDCApplicationWithID(ctx context.Context, oidcApp *domain.OIDCApp, resourceOwner string, project *domain.Project, appID string, appSecretGenerator crypto.Generator) (_ *domain.OIDCApp, err error) { - events = []eventstore.Command{ + addedApplication := NewOIDCApplicationWriteModel(oidcApp.AggregateID, resourceOwner) + projectAgg := ProjectAggregateFromWriteModel(&addedApplication.WriteModel) + + oidcApp.AppID = appID + + events := []eventstore.Command{ project_repo.NewApplicationAddedEvent(ctx, projectAgg, oidcApp.AppID, oidcApp.AppName), } var stringPw string - err = domain.SetNewClientID(oidcApp, c.idGenerator, proj) + err = domain.SetNewClientID(oidcApp, c.idGenerator, project) if err != nil { - return nil, "", err + return nil, err } stringPw, err = domain.SetNewClientSecretIfNeeded(oidcApp, appSecretGenerator) if err != nil { - return nil, "", err + return nil, err } events = append(events, project_repo.NewOIDCConfigAddedEvent(ctx, projectAgg, @@ -187,7 +194,19 @@ func (c *Commands) addOIDCApplication(ctx context.Context, projectAgg *eventstor oidcApp.ClockSkew, oidcApp.AdditionalOrigins)) - return events, stringPw, nil + addedApplication.AppID = oidcApp.AppID + pushedEvents, err := c.eventstore.Push(ctx, events...) + if err != nil { + return nil, err + } + err = AppendAndReduce(addedApplication, pushedEvents...) + if err != nil { + return nil, err + } + result := oidcWriteModelToOIDCConfig(addedApplication) + result.ClientSecretString = stringPw + result.FillCompliance() + return result, nil } func (c *Commands) ChangeOIDCApplication(ctx context.Context, oidc *domain.OIDCApp, resourceOwner string) (*domain.OIDCApp, error) { diff --git a/internal/command/project_grant.go b/internal/command/project_grant.go index e484f33cfc..9e83044e3d 100644 --- a/internal/command/project_grant.go +++ b/internal/command/project_grant.go @@ -12,6 +12,18 @@ import ( "github.com/zitadel/zitadel/internal/telemetry/tracing" ) +func (c *Commands) AddProjectGrantWithID(ctx context.Context, grant *domain.ProjectGrant, grantID string, resourceOwner string) (_ *domain.ProjectGrant, err error) { + existingMember, err := c.projectGrantWriteModelByID(ctx, grantID, grant.AggregateID, resourceOwner) + if err != nil && !caos_errs.IsNotFound(err) { + return nil, err + } + if existingMember != nil && existingMember.State != domain.ProjectGrantStateUnspecified { + return nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-2b8fs", "Errors.Project.Grant.AlreadyExisting") + } + + return c.addProjectGrantWithID(ctx, grant, grantID, resourceOwner) +} + func (c *Commands) AddProjectGrant(ctx context.Context, grant *domain.ProjectGrant, resourceOwner string) (_ *domain.ProjectGrant, err error) { if !grant.IsValid() { return nil, caos_errs.ThrowInvalidArgument(nil, "PROJECT-3b8fs", "Errors.Project.Grant.Invalid") @@ -20,10 +32,18 @@ func (c *Commands) AddProjectGrant(ctx context.Context, grant *domain.ProjectGra if err != nil { return nil, err } - grant.GrantID, err = c.idGenerator.Next() + + grantID, err := c.idGenerator.Next() if err != nil { return nil, err } + + return c.addProjectGrantWithID(ctx, grant, grantID, resourceOwner) +} + +func (c *Commands) addProjectGrantWithID(ctx context.Context, grant *domain.ProjectGrant, grantID string, resourceOwner string) (_ *domain.ProjectGrant, err error) { + grant.GrantID = grantID + addedGrant := NewProjectGrantWriteModel(grant.GrantID, grant.AggregateID, resourceOwner) projectAgg := ProjectAggregateFromWriteModel(&addedGrant.WriteModel) pushedEvents, err := c.eventstore.Push( diff --git a/internal/command/user_human.go b/internal/command/user_human.go index dfed12d4e6..b2efd78d42 100644 --- a/internal/command/user_human.go +++ b/internal/command/user_human.go @@ -47,6 +47,8 @@ type AddHuman struct { Phone Phone //Password is optional Password string + //BcryptedPassword is optional + BcryptedPassword string //PasswordChangeRequired is used if the `Password`-field is set PasswordChangeRequired bool Passwordless bool @@ -54,14 +56,19 @@ type AddHuman struct { Register bool } -func (c *Commands) AddHuman(ctx context.Context, resourceOwner string, human *AddHuman) (*domain.HumanDetails, error) { - if resourceOwner == "" { - return nil, errors.ThrowInvalidArgument(nil, "COMMA-5Ky74", "Errors.Internal") - } - userID, err := c.idGenerator.Next() +func (c *Commands) AddHumanWithID(ctx context.Context, resourceOwner string, userID string, human *AddHuman) (*domain.HumanDetails, error) { + existingHuman, err := c.getHumanWriteModelByID(ctx, userID, resourceOwner) if err != nil { return nil, err } + if isUserStateExists(existingHuman.UserState) { + return nil, errors.ThrowPreconditionFailed(nil, "COMMAND-k2unb", "Errors.User.AlreadyExisting") + } + + return c.addHumanWithID(ctx, resourceOwner, userID, human) +} + +func (c *Commands) addHumanWithID(ctx context.Context, resourceOwner string, userID string, human *AddHuman) (*domain.HumanDetails, error) { agg := user.NewAggregate(userID, resourceOwner) cmds, err := preparation.PrepareCommands(ctx, c.eventstore.Filter, AddHumanCommand(agg, human, c.userPasswordAlg, c.userEncryption)) if err != nil { @@ -83,6 +90,18 @@ func (c *Commands) AddHuman(ctx context.Context, resourceOwner string, human *Ad }, nil } +func (c *Commands) AddHuman(ctx context.Context, resourceOwner string, human *AddHuman) (*domain.HumanDetails, error) { + if resourceOwner == "" { + return nil, errors.ThrowInvalidArgument(nil, "COMMA-5Ky74", "Errors.Internal") + } + userID, err := c.idGenerator.Next() + if err != nil { + return nil, err + } + + return c.addHumanWithID(ctx, resourceOwner, userID, human) +} + type humanCreationCommand interface { eventstore.Command AddPhoneData(phoneNumber string) @@ -167,6 +186,10 @@ func AddHumanCommand(a *user.Aggregate, human *AddHuman, passwordAlg crypto.Hash createCmd.AddPasswordData(secret, human.PasswordChangeRequired) } + if human.BcryptedPassword != "" { + createCmd.AddPasswordData(crypto.FillHash([]byte(human.BcryptedPassword), passwordAlg), human.PasswordChangeRequired) + } + cmds := make([]eventstore.Command, 0, 3) cmds = append(cmds, createCmd) @@ -274,6 +297,18 @@ func (c *Commands) ImportHuman(ctx context.Context, orgID string, human *domain. if err != nil { return nil, nil, errors.ThrowPreconditionFailed(err, "COMMAND-4N8gs", "Errors.Org.PasswordComplexityPolicy.NotFound") } + + if human.AggregateID != "" { + existing, err := c.getHumanWriteModelByID(ctx, human.AggregateID, human.ResourceOwner) + if err != nil { + return nil, nil, err + } + + if existing.UserState != domain.UserStateUnspecified { + return nil, nil, errors.ThrowPreconditionFailed(nil, "COMMAND-ziuna", "Errors.User.AlreadyExisting") + } + } + events, addedHuman, addedCode, code, err := c.importHuman(ctx, orgID, human, passwordless, domainPolicy, pwPolicy, initCodeGenerator, phoneCodeGenerator, passwordlessCodeGenerator) if err != nil { return nil, nil, err @@ -355,8 +390,8 @@ func (c *Commands) addHuman(ctx context.Context, orgID string, human *domain.Hum if orgID == "" || !human.IsValid() { return nil, nil, errors.ThrowInvalidArgument(nil, "COMMAND-67Ms8", "Errors.User.Invalid") } - if human.Password != nil && human.SecretString != "" { - human.ChangeRequired = true + if human.Password != nil && human.Password.SecretString != "" { + human.Password.ChangeRequired = true } return c.createHuman(ctx, orgID, human, nil, false, false, domainPolicy, pwPolicy, initCodeGenerator, phoneCodeGenerator) } @@ -384,11 +419,11 @@ func (c *Commands) registerHuman(ctx context.Context, orgID string, human *domai if human != nil && human.Username == "" { human.Username = human.EmailAddress } - if orgID == "" || !human.IsValid() || link == nil && (human.Password == nil || human.SecretString == "") { + if orgID == "" || !human.IsValid() || link == nil && (human.Password == nil || human.Password.SecretString == "") { return nil, nil, errors.ThrowInvalidArgument(nil, "COMMAND-9dk45", "Errors.User.Invalid") } - if human.Password != nil && human.SecretString != "" { - human.ChangeRequired = false + if human.Password != nil && human.Password.SecretString != "" { + human.Password.ChangeRequired = false } return c.createHuman(ctx, orgID, human, link, true, false, domainPolicy, pwPolicy, initCodeGenerator, phoneCodeGenerator) } @@ -410,14 +445,18 @@ func (c *Commands) createHuman(ctx context.Context, orgID string, human *domain. return nil, nil, errors.ThrowInvalidArgument(nil, "COMMAND-SFd21", "Errors.User.DomainNotAllowedAsUsername") } } - userID, err := c.idGenerator.Next() - if err != nil { - return nil, nil, err + + if human.AggregateID == "" { + userID, err := c.idGenerator.Next() + if err != nil { + return nil, nil, err + } + human.AggregateID = userID } - human.AggregateID = userID + human.SetNamesAsDisplayname() if human.Password != nil { - if err := human.HashPasswordIfExisting(pwPolicy, c.userPasswordAlg, human.ChangeRequired); err != nil { + if err := human.HashPasswordIfExisting(pwPolicy, c.userPasswordAlg, human.Password.ChangeRequired); err != nil { return nil, nil, err } } @@ -510,7 +549,10 @@ func createAddHumanEvent(ctx context.Context, aggregate *eventstore.Aggregate, h human.StreetAddress) } if human.Password != nil { - addEvent.AddPasswordData(human.SecretCrypto, human.ChangeRequired) + addEvent.AddPasswordData(human.Password.SecretCrypto, human.Password.ChangeRequired) + } + if human.HashedPassword != nil { + addEvent.AddPasswordData(human.HashedPassword.SecretCrypto, false) } return addEvent } @@ -541,7 +583,10 @@ func createRegisterHumanEvent(ctx context.Context, aggregate *eventstore.Aggrega human.StreetAddress) } if human.Password != nil { - addEvent.AddPasswordData(human.SecretCrypto, human.ChangeRequired) + addEvent.AddPasswordData(human.Password.SecretCrypto, human.Password.ChangeRequired) + } + if human.HashedPassword != nil { + addEvent.AddPasswordData(human.HashedPassword.SecretCrypto, false) } return addEvent } diff --git a/internal/command/user_human_otp.go b/internal/command/user_human_otp.go index 960c346ae0..725a0b10e7 100644 --- a/internal/command/user_human_otp.go +++ b/internal/command/user_human_otp.go @@ -2,6 +2,7 @@ package command import ( "context" + "github.com/zitadel/zitadel/internal/crypto" "github.com/zitadel/logging" "github.com/zitadel/zitadel/internal/domain" @@ -11,6 +12,28 @@ import ( "github.com/zitadel/zitadel/internal/telemetry/tracing" ) +func (c *Commands) ImportHumanOTP(ctx context.Context, userID, userAgentID, resourceowner string, key string) error { + encryptedSecret, err := crypto.Encrypt([]byte(key), c.multifactors.OTP.CryptoMFA) + if err != nil { + return err + } + + otpWriteModel, err := c.otpWriteModelByID(ctx, userID, resourceowner) + if err != nil { + return err + } + if otpWriteModel.State == domain.MFAStateReady { + return caos_errs.ThrowAlreadyExists(nil, "COMMAND-do9se", "Errors.User.MFA.OTP.AlreadyReady") + } + userAgg := UserAggregateFromWriteModel(&otpWriteModel.WriteModel) + + _, err = c.eventstore.Push(ctx, + user.NewHumanOTPAddedEvent(ctx, userAgg, encryptedSecret), + user.NewHumanOTPVerifiedEvent(ctx, userAgg, userAgentID), + ) + return err +} + func (c *Commands) AddHumanOTP(ctx context.Context, userID, resourceowner string) (*domain.OTP, error) { if userID == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-5M0sd", "Errors.User.UserIDMissing") @@ -30,6 +53,7 @@ func (c *Commands) AddHumanOTP(ctx context.Context, userID, resourceowner string logging.Log("COMMAND-y5zv9").WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("unable to get org policy for loginname") return nil, caos_errs.ThrowPreconditionFailed(err, "COMMAND-8ugTs", "Errors.Org.DomainPolicy.NotFound") } + otpWriteModel, err := c.otpWriteModelByID(ctx, userID, resourceowner) if err != nil { return nil, err @@ -38,6 +62,7 @@ func (c *Commands) AddHumanOTP(ctx context.Context, userID, resourceowner string return nil, caos_errs.ThrowAlreadyExists(nil, "COMMAND-do9se", "Errors.User.MFA.OTP.AlreadyReady") } userAgg := UserAggregateFromWriteModel(&otpWriteModel.WriteModel) + accountName := domain.GenerateLoginName(human.GetUsername(), org.PrimaryDomain, orgPolicy.UserLoginMustBeDomain) if accountName == "" { accountName = human.EmailAddress @@ -46,8 +71,8 @@ func (c *Commands) AddHumanOTP(ctx context.Context, userID, resourceowner string if err != nil { return nil, err } - _, err = c.eventstore.Push(ctx, user.NewHumanOTPAddedEvent(ctx, userAgg, secret)) + _, err = c.eventstore.Push(ctx, user.NewHumanOTPAddedEvent(ctx, userAgg, secret)) if err != nil { return nil, err } diff --git a/internal/command/user_idp_link.go b/internal/command/user_idp_link.go index 266911aa25..4440b64927 100644 --- a/internal/command/user_idp_link.go +++ b/internal/command/user_idp_link.go @@ -11,6 +11,23 @@ import ( "github.com/zitadel/zitadel/internal/telemetry/tracing" ) +func (c *Commands) AddUserIDPLink(ctx context.Context, userID, resourceOwner string, link *domain.UserIDPLink) (err error) { + if userID == "" { + return caos_errs.ThrowInvalidArgument(nil, "COMMAND-03j8f", "Errors.IDMissing") + } + + linkWriteModel := NewUserIDPLinkWriteModel(userID, link.IDPConfigID, link.ExternalUserID, resourceOwner) + userAgg := UserAggregateFromWriteModel(&linkWriteModel.WriteModel) + + event, err := c.addUserIDPLink(ctx, userAgg, link) + if err != nil { + return err + } + + _, err = c.eventstore.Push(ctx, event) + return err +} + func (c *Commands) BulkAddedUserIDPLinks(ctx context.Context, userID, resourceOwner string, links []*domain.UserIDPLink) (err error) { if userID == "" { return caos_errs.ThrowInvalidArgument(nil, "COMMAND-03j8f", "Errors.IDMissing") diff --git a/internal/command/user_machine.go b/internal/command/user_machine.go index c7fae09fc4..38e8cff2a6 100644 --- a/internal/command/user_machine.go +++ b/internal/command/user_machine.go @@ -2,7 +2,6 @@ package command import ( "context" - "github.com/zitadel/zitadel/internal/domain" caos_errs "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/repository/user" @@ -24,6 +23,29 @@ func (c *Commands) AddMachine(ctx context.Context, orgID string, machine *domain if err != nil { return nil, err } + return c.addMachineWithID(ctx, orgID, userID, machine, domainPolicy) +} + +func (c *Commands) AddMachineWithID(ctx context.Context, orgID string, userID string, machine *domain.Machine) (*domain.Machine, error) { + existingMachine, err := c.machineWriteModelByID(ctx, userID, orgID) + if err != nil { + return nil, err + } + if isUserStateExists(existingMachine.UserState) { + return nil, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-k2una", "Errors.User.AlreadyExisting") + } + domainPolicy, err := c.getOrgDomainPolicy(ctx, orgID) + if err != nil { + return nil, caos_errs.ThrowPreconditionFailed(err, "COMMAND-3M9fs", "Errors.Org.DomainPolicy.NotFound") + } + if !domainPolicy.UserLoginMustBeDomain { + return nil, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-6M0dd", "Errors.User.Invalid") + } + return c.addMachineWithID(ctx, orgID, userID, machine, domainPolicy) +} + +func (c *Commands) addMachineWithID(ctx context.Context, orgID string, userID string, machine *domain.Machine, domainPolicy *domain.DomainPolicy) (*domain.Machine, error) { + machine.AggregateID = userID addedMachine := NewMachineWriteModel(machine.AggregateID, orgID) userAgg := UserAggregateFromWriteModel(&addedMachine.WriteModel) diff --git a/internal/crypto/crypto.go b/internal/crypto/crypto.go index 36de8d6155..9799faea60 100644 --- a/internal/crypto/crypto.go +++ b/internal/crypto/crypto.go @@ -124,3 +124,11 @@ func CompareHash(value *CryptoValue, comparer []byte, alg HashAlgorithm) error { } return alg.CompareHash(value.Crypted, comparer) } + +func FillHash(value []byte, alg HashAlgorithm) *CryptoValue { + return &CryptoValue{ + CryptoType: TypeHash, + Algorithm: alg.Algorithm(), + Crypted: value, + } +} diff --git a/internal/domain/human.go b/internal/domain/human.go index ce3c2bf42b..e83797a12e 100644 --- a/internal/domain/human.go +++ b/internal/domain/human.go @@ -19,6 +19,7 @@ type Human struct { Username string State UserState *Password + *HashedPassword *Profile *Email *Phone @@ -88,7 +89,7 @@ func (u *Human) HashPasswordIfExisting(policy *PasswordComplexityPolicy, passwor } func (u *Human) IsInitialState(passwordless, externalIDPs bool) bool { - return u.Email == nil || !u.IsEmailVerified || !externalIDPs && !passwordless && (u.Password == nil || u.SecretString == "") + return u.Email == nil || !u.IsEmailVerified || !externalIDPs && !passwordless && (u.Password == nil || u.Password.SecretString == "") && (u.HashedPassword == nil || u.HashedPassword.SecretString == "") } func NewInitUserCode(generator crypto.Generator) (*InitUserCode, error) { diff --git a/internal/domain/human_hashed_password.go b/internal/domain/human_hashed_password.go new file mode 100644 index 0000000000..5aa144fe52 --- /dev/null +++ b/internal/domain/human_hashed_password.go @@ -0,0 +1,24 @@ +package domain + +import ( + "github.com/zitadel/zitadel/internal/crypto" + es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models" +) + +type HashedPassword struct { + es_models.ObjectRoot + + SecretString string + SecretCrypto *crypto.CryptoValue +} + +func NewHashedPassword(password, algorithm string) *HashedPassword { + return &HashedPassword{ + SecretString: password, + SecretCrypto: &crypto.CryptoValue{ + CryptoType: crypto.TypeHash, + Algorithm: algorithm, + Crypted: []byte(password), + }, + } +} diff --git a/internal/eventstore/handler/handler_projection.go b/internal/eventstore/handler/handler_projection.go index e495caf71a..ae2c4c2c80 100644 --- a/internal/eventstore/handler/handler_projection.go +++ b/internal/eventstore/handler/handler_projection.go @@ -168,7 +168,7 @@ func (h *ProjectionHandler) subscribe(ctx context.Context) { index, err := h.Process(ctx, events...) if err != nil || index < len(events)-1 { - logging.WithFields("projection", h.ProjectionName).WithError(err).Error("unable to process all events from subscription") + logging.WithFields("projection", h.ProjectionName).WithError(err).Warn("unable to process all events from subscription") } } } diff --git a/internal/query/idp.go b/internal/query/idp.go index 2e6ea3e7e6..dee1c5e6cf 100644 --- a/internal/query/idp.go +++ b/internal/query/idp.go @@ -502,3 +502,15 @@ func prepareIDPsQuery() (sq.SelectBuilder, func(*sql.Rows) (*IDPs, error)) { }, nil } } + +func (q *Queries) GetOIDCIDPClientSecret(ctx context.Context, shouldRealTime bool, resourceowner, idpID string) (string, error) { + idp, err := q.IDPByIDAndResourceOwner(ctx, shouldRealTime, idpID, resourceowner) + if err != nil { + return "", err + } + + if idp.ClientSecret != nil && idp.ClientSecret.Crypted != nil { + return crypto.DecryptString(idp.ClientSecret, q.idpConfigEncryption) + } + return "", errors.ThrowNotFound(nil, "QUERY-bsm2o", "Errors.Query.NotFound") +} diff --git a/internal/query/query.go b/internal/query/query.go index 328eec42fa..75dca49d66 100644 --- a/internal/query/query.go +++ b/internal/query/query.go @@ -4,6 +4,8 @@ import ( "context" "database/sql" "fmt" + sd "github.com/zitadel/zitadel/internal/config/systemdefaults" + "github.com/zitadel/zitadel/internal/domain" "net/http" "sync" @@ -27,6 +29,8 @@ type Queries struct { eventstore *eventstore.Eventstore client *sql.DB + idpConfigEncryption crypto.EncryptionAlgorithm + DefaultLanguage language.Tag LoginDir http.FileSystem NotificationDir http.FileSystem @@ -35,9 +39,10 @@ type Queries struct { NotificationTranslationFileContents map[string][]byte supportedLangs []language.Tag zitadelRoles []authz.RoleMapping + multifactors domain.MultifactorConfigs } -func StartQueries(ctx context.Context, es *eventstore.Eventstore, sqlClient *sql.DB, projections projection.Config, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, zitadelRoles []authz.RoleMapping) (repo *Queries, err error) { +func StartQueries(ctx context.Context, es *eventstore.Eventstore, sqlClient *sql.DB, projections projection.Config, defaults sd.SystemDefaults, idpConfigEncryption, otpEncryption, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, zitadelRoles []authz.RoleMapping) (repo *Queries, err error) { statikLoginFS, err := fs.NewWithNamespace("login") if err != nil { return nil, fmt.Errorf("unable to start login statik dir") @@ -66,6 +71,14 @@ func StartQueries(ctx context.Context, es *eventstore.Eventstore, sqlClient *sql keypair.RegisterEventMappers(repo.eventstore) usergrant.RegisterEventMappers(repo.eventstore) + repo.idpConfigEncryption = idpConfigEncryption + repo.multifactors = domain.MultifactorConfigs{ + OTP: domain.OTPConfig{ + CryptoMFA: otpEncryption, + Issuer: defaults.Multifactors.OTP.Issuer, + }, + } + err = projection.Start(ctx, sqlClient, es, projections, keyEncryptionAlgorithm) if err != nil { return nil, err diff --git a/internal/query/user_otp.go b/internal/query/user_otp.go new file mode 100644 index 0000000000..9e1029a511 --- /dev/null +++ b/internal/query/user_otp.go @@ -0,0 +1,91 @@ +package query + +import ( + "context" + "github.com/zitadel/zitadel/internal/crypto" + "github.com/zitadel/zitadel/internal/domain" + caos_errs "github.com/zitadel/zitadel/internal/errors" + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/repository/user" + "github.com/zitadel/zitadel/internal/telemetry/tracing" +) + +func (q *Queries) GetHumanOTPSecret(ctx context.Context, userID, resourceowner string) (string, error) { + if userID == "" { + return "", caos_errs.ThrowPreconditionFailed(nil, "QUERY-8N9ds", "Errors.User.UserIDMissing") + } + existingOTP, err := q.otpWriteModelByID(ctx, userID, resourceowner) + if err != nil { + return "", err + } + if existingOTP.State != domain.MFAStateReady { + return "", caos_errs.ThrowNotFound(nil, "QUERY-01982h", "Errors.User.NotFound") + } + + return crypto.DecryptString(existingOTP.Secret, q.multifactors.OTP.CryptoMFA) +} + +func (q *Queries) otpWriteModelByID(ctx context.Context, userID, resourceOwner string) (writeModel *HumanOTPWriteModel, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + writeModel = NewHumanOTPWriteModel(userID, resourceOwner) + err = q.eventstore.FilterToQueryReducer(ctx, writeModel) + if err != nil { + return nil, err + } + return writeModel, nil +} + +type HumanOTPWriteModel struct { + eventstore.WriteModel + + State domain.MFAState + Secret *crypto.CryptoValue +} + +func NewHumanOTPWriteModel(userID, resourceOwner string) *HumanOTPWriteModel { + return &HumanOTPWriteModel{ + WriteModel: eventstore.WriteModel{ + AggregateID: userID, + ResourceOwner: resourceOwner, + }, + } +} + +func (wm *HumanOTPWriteModel) Reduce() error { + for _, event := range wm.Events { + switch e := event.(type) { + case *user.HumanOTPAddedEvent: + wm.Secret = e.Secret + wm.State = domain.MFAStateNotReady + case *user.HumanOTPVerifiedEvent: + wm.State = domain.MFAStateReady + case *user.HumanOTPRemovedEvent: + wm.State = domain.MFAStateRemoved + case *user.UserRemovedEvent: + wm.State = domain.MFAStateRemoved + } + } + return wm.WriteModel.Reduce() +} + +func (wm *HumanOTPWriteModel) Query() *eventstore.SearchQueryBuilder { + query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes(user.AggregateType). + AggregateIDs(wm.AggregateID). + EventTypes(user.HumanMFAOTPAddedType, + user.HumanMFAOTPVerifiedType, + user.HumanMFAOTPRemovedType, + user.UserRemovedType, + user.UserV1MFAOTPAddedType, + user.UserV1MFAOTPVerifiedType, + user.UserV1MFAOTPRemovedType). + Builder() + + if wm.ResourceOwner != "" { + query.ResourceOwner(wm.ResourceOwner) + } + return query +} diff --git a/internal/query/user_password.go b/internal/query/user_password.go new file mode 100644 index 0000000000..7fd48564bc --- /dev/null +++ b/internal/query/user_password.go @@ -0,0 +1,140 @@ +package query + +import ( + "context" + "github.com/zitadel/zitadel/internal/crypto" + "github.com/zitadel/zitadel/internal/domain" + caos_errs "github.com/zitadel/zitadel/internal/errors" + "github.com/zitadel/zitadel/internal/eventstore" + "github.com/zitadel/zitadel/internal/repository/user" + "github.com/zitadel/zitadel/internal/telemetry/tracing" + "time" +) + +type HumanPasswordWriteModel struct { + eventstore.WriteModel + + Secret *crypto.CryptoValue + SecretChangeRequired bool + + Code *crypto.CryptoValue + CodeCreationDate time.Time + CodeExpiry time.Duration + PasswordCheckFailedCount uint64 + + UserState domain.UserState +} + +func (q *Queries) GetHumanPassword(ctx context.Context, orgID, userID string) (passwordHash []byte, algorithm string, err error) { + if userID == "" { + return nil, "", caos_errs.ThrowInvalidArgument(nil, "QUERY-4Mfsf", "Errors.User.UserIDMissing") + } + existingPassword, err := q.passwordWriteModel(ctx, userID, orgID) + if err != nil { + return nil, "", caos_errs.ThrowInternal(nil, "QUERY-p1k1n2i", "Errors.User.NotFound") + } + if existingPassword.UserState == domain.UserStateUnspecified || existingPassword.UserState == domain.UserStateDeleted { + return nil, "", caos_errs.ThrowPreconditionFailed(nil, "QUERY-3n77z", "Errors.User.NotFound") + } + + if existingPassword.Secret != nil && existingPassword.Secret.Crypted != nil { + return existingPassword.Secret.Crypted, existingPassword.Secret.Algorithm, nil + } + + return nil, "", nil +} + +func (q *Queries) passwordWriteModel(ctx context.Context, userID, resourceOwner string) (writeModel *HumanPasswordWriteModel, err error) { + ctx, span := tracing.NewSpan(ctx) + defer func() { span.EndWithError(err) }() + + writeModel = NewHumanPasswordWriteModel(userID, resourceOwner) + err = q.eventstore.FilterToQueryReducer(ctx, writeModel) + if err != nil { + return nil, err + } + return writeModel, nil +} + +func NewHumanPasswordWriteModel(userID, resourceOwner string) *HumanPasswordWriteModel { + return &HumanPasswordWriteModel{ + WriteModel: eventstore.WriteModel{ + AggregateID: userID, + ResourceOwner: resourceOwner, + }, + } +} + +func (wm *HumanPasswordWriteModel) Reduce() error { + for _, event := range wm.Events { + switch e := event.(type) { + case *user.HumanAddedEvent: + wm.Secret = e.Secret + wm.SecretChangeRequired = e.ChangeRequired + wm.UserState = domain.UserStateActive + case *user.HumanRegisteredEvent: + wm.Secret = e.Secret + wm.SecretChangeRequired = e.ChangeRequired + wm.UserState = domain.UserStateActive + case *user.HumanInitialCodeAddedEvent: + wm.UserState = domain.UserStateInitial + case *user.HumanInitializedCheckSucceededEvent: + wm.UserState = domain.UserStateActive + case *user.HumanPasswordChangedEvent: + wm.Secret = e.Secret + wm.SecretChangeRequired = e.ChangeRequired + wm.Code = nil + wm.PasswordCheckFailedCount = 0 + case *user.HumanPasswordCodeAddedEvent: + wm.Code = e.Code + wm.CodeCreationDate = e.CreationDate() + wm.CodeExpiry = e.Expiry + case *user.HumanEmailVerifiedEvent: + if wm.UserState == domain.UserStateInitial { + wm.UserState = domain.UserStateActive + } + case *user.HumanPasswordCheckFailedEvent: + wm.PasswordCheckFailedCount += 1 + case *user.HumanPasswordCheckSucceededEvent: + wm.PasswordCheckFailedCount = 0 + case *user.UserUnlockedEvent: + wm.PasswordCheckFailedCount = 0 + case *user.UserRemovedEvent: + wm.UserState = domain.UserStateDeleted + } + } + return wm.WriteModel.Reduce() +} + +func (wm *HumanPasswordWriteModel) Query() *eventstore.SearchQueryBuilder { + query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent). + AddQuery(). + AggregateTypes(user.AggregateType). + AggregateIDs(wm.AggregateID). + EventTypes(user.HumanAddedType, + user.HumanRegisteredType, + user.HumanInitialCodeAddedType, + user.HumanInitializedCheckSucceededType, + user.HumanPasswordChangedType, + user.HumanPasswordCodeAddedType, + user.HumanEmailVerifiedType, + user.HumanPasswordCheckFailedType, + user.HumanPasswordCheckSucceededType, + user.UserRemovedType, + user.UserUnlockedType, + user.UserV1AddedType, + user.UserV1RegisteredType, + user.UserV1InitialCodeAddedType, + user.UserV1InitializedCheckSucceededType, + user.UserV1PasswordChangedType, + user.UserV1PasswordCodeAddedType, + user.UserV1EmailVerifiedType, + user.UserV1PasswordCheckFailedType, + user.UserV1PasswordCheckSucceededType). + Builder() + + if wm.ResourceOwner != "" { + query.ResourceOwner(wm.ResourceOwner) + } + return query +} diff --git a/proto/zitadel/admin.proto b/proto/zitadel/admin.proto index fceb2a2848..21e44a2ed9 100644 --- a/proto/zitadel/admin.proto +++ b/proto/zitadel/admin.proto @@ -10,6 +10,8 @@ import "zitadel/policy.proto"; import "zitadel/settings.proto"; import "zitadel/text.proto"; import "zitadel/member.proto"; +import "zitadel/management.proto"; +import "zitadel/v1.proto"; import "google/api/annotations.proto"; import "google/protobuf/timestamp.proto"; @@ -460,7 +462,7 @@ service AdminService { }; } - //Checks whether an organisation exists by the given parameters + //Checks whether an organisation exists by the given parameters rpc IsOrgUnique(IsOrgUniqueRequest) returns (IsOrgUniqueResponse) { option (google.api.http) = { get: "/orgs/_is_unique"; @@ -553,7 +555,7 @@ service AdminService { }; } - //Creates a new org and user + //Creates a new org and user // and adds the user to the orgs members as ORG_OWNER rpc SetUpOrg(SetUpOrgRequest) returns (SetUpOrgResponse) { option (google.api.http) = { @@ -1471,7 +1473,7 @@ service AdminService { }; }; } - + //Updates the default login policy of ZITADEL // it impacts all organisations without a customised policy rpc UpdateLoginPolicy(UpdateLoginPolicyRequest) returns (UpdateLoginPolicyResponse) { @@ -1536,7 +1538,7 @@ service AdminService { post: "/policies/login/idps"; body: "*"; }; - + option (zitadel.v1.auth_option) = { permission: "iam.policy.write"; }; @@ -1887,7 +1889,7 @@ service AdminService { }; }; } - + //Updates the default password age policy of ZITADEL // it impacts all organisations without a customised policy rpc UpdatePasswordAgePolicy(UpdatePasswordAgePolicyRequest) returns (UpdatePasswordAgePolicyResponse) { @@ -1945,7 +1947,7 @@ service AdminService { }; }; } - + //Updates the default lockout policy of ZITADEL // it impacts all organisations without a customised policy rpc UpdateLockoutPolicy(UpdateLockoutPolicyRequest) returns (UpdateLockoutPolicyResponse) { @@ -2362,7 +2364,7 @@ service AdminService { }; } - //Returns the IAM roles visible for the requested user + //Returns the IAM roles visible for the requested user rpc ListIAMMemberRoles(ListIAMMemberRolesRequest) returns (ListIAMMemberRolesResponse) { option (google.api.http) = { post: "/members/roles/_search"; @@ -2564,7 +2566,7 @@ service AdminService { } //Returns event descriptions which cannot be processed. - // It's possible that some events need some retries. + // It's possible that some events need some retries. // For example if the SMTP-API wasn't able to send an email at the first time rpc ListFailedEvents(ListFailedEventsRequest) returns (ListFailedEventsResponse) { option (google.api.http) = { @@ -2629,6 +2631,29 @@ service AdminService { }; }; } + + // Imports data into instance and creates different objects + rpc ImportData(ImportDataRequest) returns (ImportDataResponse) { + option (google.api.http) = { + post: "/import"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "iam.write"; + }; + } + // Exports data from instance + rpc ExportData(ExportDataRequest) returns (ExportDataResponse) { + option (google.api.http) = { + post: "/export"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "iam.read"; + }; + } } @@ -3070,7 +3095,7 @@ message SetUpOrgRequest { ]; bool is_phone_verified = 2; } - + string user_name = 1 [ (validate.rules).string = {min_len: 1, max_len: 200}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { @@ -3079,7 +3104,7 @@ message SetUpOrgRequest { example: "\"mr_long_neck\""; } ]; - + Profile profile = 2 [(validate.rules).message.required = true]; Email email = 3 [(validate.rules).message.required = true]; Phone phone = 4; @@ -3905,7 +3930,7 @@ message RemoveIDPFromLoginPolicyRequest { required: ["idp_id"] }; }; - + string idp_id = 1 [ (validate.rules).string = {min_len: 1, max_len: 200}, (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { @@ -3934,7 +3959,7 @@ message AddSecondFactorToLoginPolicyRequest { required: ["type"] }; }; - + zitadel.policy.v1.SecondFactorType type = 1 [(validate.rules).enum = {defined_only: true, not_in: [0]}]; } @@ -3984,7 +4009,7 @@ message RemoveMultiFactorFromLoginPolicyRequest { required: ["type"] }; }; - + zitadel.policy.v1.MultiFactorType type = 1 [(validate.rules).enum = {defined_only: true, not_in: [0]}]; } @@ -4621,3 +4646,187 @@ message FailedEvent { } ]; } + +message ImportDataRequest { + message LocalInput{ + string path = 1; + } + message S3Input{ + string path = 1; + string endpoint = 2; + string access_key_id =3; + string secret_access_key = 4; + bool ssl = 5; + string bucket = 6; + } + message GCSInput{ + string bucket = 1; + string serviceaccount_json = 2; + string path = 3; + } + + oneof data { + ImportDataOrg data_orgs = 1; + zitadel.v1.v1.ImportDataOrg data_orgsv1 = 2; + LocalInput data_orgs_local = 3; + LocalInput data_orgsv1_local = 4; + S3Input data_orgs_s3 = 5; + S3Input data_orgsv1_s3 = 6; + GCSInput data_orgs_gcs = 7; + GCSInput data_orgsv1_gcs = 8; + } + string timeout = 9; +} + +message ImportDataOrg { + repeated DataOrg orgs = 1; +} + +message DataOrg { + string org_id = 1; + zitadel.management.v1.AddOrgRequest org = 3; + AddCustomDomainPolicyRequest domain_policy = 4; + zitadel.management.v1.AddCustomLabelPolicyRequest label_policy = 5; + zitadel.management.v1.AddCustomLockoutPolicyRequest lockout_policy = 6; + zitadel.management.v1.AddCustomLoginPolicyRequest login_policy = 7; + zitadel.management.v1.AddCustomPasswordComplexityPolicyRequest password_complexity_policy = 8; + zitadel.management.v1.AddCustomPrivacyPolicyRequest privacy_policy = 9; + + repeated zitadel.v1.v1.DataProject projects = 10; + repeated zitadel.management.v1.AddProjectRoleRequest project_roles = 11; + repeated zitadel.v1.v1.DataAPIApplication api_apps = 12; + repeated zitadel.v1.v1.DataOIDCApplication oidc_apps = 13; + repeated zitadel.v1.v1.DataHumanUser human_users = 14; + repeated zitadel.v1.v1.DataMachineUser machine_users = 15; + repeated zitadel.management.v1.SetTriggerActionsRequest trigger_actions = 16; + repeated zitadel.v1.v1.DataAction actions = 17; + + repeated zitadel.v1.v1.DataProjectGrant project_grants = 18; + repeated zitadel.management.v1.AddUserGrantRequest user_grants = 19; + + repeated zitadel.management.v1.AddOrgMemberRequest org_members = 20; + repeated zitadel.management.v1.AddProjectMemberRequest project_members = 21; + repeated zitadel.management.v1.AddProjectGrantMemberRequest project_grant_members = 22; + + repeated zitadel.management.v1.SetUserMetadataRequest user_metadata = 23; + + repeated zitadel.management.v1.SetCustomLoginTextsRequest login_texts = 24; + + repeated zitadel.management.v1.SetCustomInitMessageTextRequest init_messages = 25; + repeated zitadel.management.v1.SetCustomPasswordResetMessageTextRequest password_reset_messages = 26; + repeated zitadel.management.v1.SetCustomVerifyEmailMessageTextRequest verify_email_messages = 27; + repeated zitadel.management.v1.SetCustomVerifyPhoneMessageTextRequest verify_phone_messages = 28; + repeated zitadel.management.v1.SetCustomDomainClaimedMessageTextRequest domain_claimed_messages = 29; + repeated zitadel.management.v1.SetCustomPasswordlessRegistrationMessageTextRequest passwordless_registration_messages = 30; + + repeated zitadel.v1.v1.DataOIDCIDP oidc_idps = 31; + repeated zitadel.v1.v1.DataJWTIDP jwt_idps = 32; + + repeated zitadel.idp.v1.IDPUserLink user_links = 33; + repeated zitadel.org.v1.Domain domains = 34; +} + +message ImportDataResponse{ + repeated ImportDataError errors = 1; + ImportDataSuccess success = 2; +} + +message ImportDataError{ + string type = 1; + string id = 2; + string message = 3; +} + +message ImportDataSuccess { + repeated ImportDataSuccessOrg orgs = 1; +} + +message ImportDataSuccessOrg{ + string org_id = 1; + repeated string project_ids = 2; + repeated string project_roles = 3; + repeated string oidc_app_ids = 4; + repeated string api_app_ids = 5; + repeated string human_user_ids = 6; + repeated string machine_user_ids = 7; + repeated string action_ids = 8; + repeated zitadel.management.v1.SetTriggerActionsRequest trigger_actions = 9; + repeated ImportDataSuccessProjectGrant project_grants = 10; + repeated ImportDataSuccessUserGrant user_grants = 11; + repeated string org_members = 12; + repeated ImportDataSuccessProjectMember project_members = 13; + repeated ImportDataSuccessProjectGrantMember project_grant_members = 14; + repeated string oidc_ipds = 15; + repeated string jwt_idps = 16; + repeated string idp_links = 17; + repeated ImportDataSuccessUserLinks user_links = 18; + repeated ImportDataSuccessUserMetadata user_metadata = 19; + repeated string domains = 20; +} + +message ImportDataSuccessProjectGrant{ + string grant_id = 1; + string project_id = 2; + string org_id = 3; +} + +message ImportDataSuccessUserGrant{ + string project_id = 1; + string user_id = 2; +} + +message ImportDataSuccessProjectMember{ + string project_id = 1; + string user_id = 2; +} + +message ImportDataSuccessProjectGrantMember{ + string project_id = 1; + string grant_id = 2; + string user_id = 3; +} + +message ImportDataSuccessUserLinks { + string user_id = 1; + string external_user_id = 2; + string display_name = 3; + string idp_id = 4; +} + +message ImportDataSuccessUserMetadata { + string user_id = 1; + string key = 2; +} + +message ExportDataRequest { + message LocalOutput{ + string path = 1; + } + message S3Output{ + string path = 1; + string endpoint = 2; + string access_key_id =3; + string secret_access_key = 4; + bool ssl = 5; + string bucket = 6; + } + message GCSOutput{ + string bucket = 1; + string serviceaccount_json = 2; + string path = 3; + } + + repeated string org_ids = 1; + repeated string excluded_org_ids = 2; + bool with_passwords = 3; + bool with_otp = 4; + bool response_output = 5; + LocalOutput local_output = 6; + S3Output s3_output = 7; + GCSOutput gcs_output = 8; + string timeout = 9; +} + +message ExportDataResponse { + repeated DataOrg orgs = 1; +} \ No newline at end of file diff --git a/proto/zitadel/management.proto b/proto/zitadel/management.proto index 11da17b0d5..c49651b309 100644 --- a/proto/zitadel/management.proto +++ b/proto/zitadel/management.proto @@ -3007,6 +3007,10 @@ message ImportHumanUserRequest { string phone = 1 [(validate.rules).string = {min_len: 1, max_len: 50, prefix: "+"}]; bool is_phone_verified = 2; } + message HashedPassword{ + string value = 1; + string algorithm = 2; + } string user_name = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; @@ -3014,8 +3018,11 @@ message ImportHumanUserRequest { Email email = 3 [(validate.rules).message.required = true]; Phone phone = 4; string password = 5; - bool password_change_required = 6; - bool request_passwordless_registration = 7; + HashedPassword hashed_password = 6; + bool password_change_required = 7; + bool request_passwordless_registration = 8; + + string otp_code = 9; } message ImportHumanUserResponse { diff --git a/proto/zitadel/system.proto b/proto/zitadel/system.proto index 6123249abb..2d9e47a279 100644 --- a/proto/zitadel/system.proto +++ b/proto/zitadel/system.proto @@ -11,324 +11,323 @@ import "validate/validate.proto"; package zitadel.system.v1; -option go_package ="github.com/zitadel/zitadel/pkg/grpc/system"; +option go_package = "github.com/zitadel/zitadel/pkg/grpc/system"; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = { - info: { - title: "System API"; - version: "1.0"; - description: "This API is intended to configure and manage the different tenants whithin ZITADEL."; - contact:{ - name: "ZITADEL" - url: "https://zitadel.com" - email: "hi@zitadel.com" - } - license: { - name: "Apache 2.0", - url: "https://github.com/zitadel/zitadel/blob/main/LICENSE"; - }; + info: { + title: "System API"; + version: "1.0"; + description: "This API is intended to configure and manage the different tenants whithin ZITADEL."; + contact:{ + name: "ZITADEL" + url: "https://zitadel.com" + email: "hi@zitadel.com" + } + license: { + name: "Apache 2.0", + url: "https://github.com/zitadel/zitadel/blob/main/LICENSE"; }; + }; - schemes: HTTPS; - schemes: HTTP; + schemes: HTTPS; + schemes: HTTP; - consumes: "application/json"; - consumes: "application/grpc"; + consumes: "application/json"; + consumes: "application/grpc"; - produces: "application/json"; - produces: "application/grpc"; + produces: "application/json"; + produces: "application/grpc"; - consumes: "application/grpc-web+proto"; - produces: "application/grpc-web+proto"; + consumes: "application/grpc-web+proto"; + produces: "application/grpc-web+proto"; - host: "api.zitadel.ch"; - base_path: "/system/v1"; + host: "api.zitadel.ch"; + base_path: "/system/v1"; - external_docs: { - description: "Detailed information about ZITADEL", - url: "https://docs.zitadel.com" - } + external_docs: { + description: "Detailed information about ZITADEL", + url: "https://docs.zitadel.com" + } - responses: { - key: "403"; - value: { - description: "Returned when the user does not have permission to access the resource."; - schema: { - json_schema: { - ref: "#/definitions/rpcStatus"; - } - } + responses: { + key: "403"; + value: { + description: "Returned when the user does not have permission to access the resource."; + schema: { + json_schema: { + ref: "#/definitions/rpcStatus"; } + } } - responses: { - key: "404"; - value: { - description: "Returned when the resource does not exist."; - schema: { - json_schema: { - ref: "#/definitions/rpcStatus"; - } - } + } + responses: { + key: "404"; + value: { + description: "Returned when the resource does not exist."; + schema: { + json_schema: { + ref: "#/definitions/rpcStatus"; } + } } + } }; service SystemService { - //Indicates if ZITADEL is running. - // It respondes as soon as ZITADEL started - rpc Healthz(HealthzRequest) returns (HealthzResponse) { - option (google.api.http) = { - get: "/healthz"; + //Indicates if ZITADEL is running. + // It respondes as soon as ZITADEL started + rpc Healthz(HealthzRequest) returns (HealthzResponse) { + option (google.api.http) = { + get: "/healthz"; + }; + + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: "probes"; + responses: { + key: "200"; + value: { + description: "ZITADEL started"; }; - - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - tags: "probes"; - responses: { - key: "200"; - value: { - description: "ZITADEL started"; - }; - } - responses: { - key: "default"; - value: { - description: "ZITADEL NOT started yet"; - }; - } + } + responses: { + key: "default"; + value: { + description: "ZITADEL NOT started yet"; }; - } + } + }; + } - // Returns a list of ZITADEL instances - rpc ListInstances(ListInstancesRequest) returns (ListInstancesResponse) { - option (google.api.http) = { - post: "/instances/_search" - body: "*" + // Returns a list of ZITADEL instances + rpc ListInstances(ListInstancesRequest) returns (ListInstancesResponse) { + option (google.api.http) = { + post: "/instances/_search" + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Returns the detail of an instance + rpc GetInstance(GetInstanceRequest) returns (GetInstanceResponse) { + option (google.api.http) = { + get: "/instances/{instance_id}"; + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Creates a new instance with all needed setup data + // This might take some time + rpc AddInstance(AddInstanceRequest) returns (AddInstanceResponse) { + option (google.api.http) = { + post: "/instances" + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Removes a instances + // This might take some time + rpc RemoveInstance(RemoveInstanceRequest) returns (RemoveInstanceResponse) { + option (google.api.http) = { + delete: "/instances/{instance_id}" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Checks if a domain exists + rpc ExistsDomain(ExistsDomainRequest) returns (ExistsDomainResponse) { + option (google.api.http) = { + post: "/domains/{domain}/_exists"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Returns the custom domains of an instance + rpc ListDomains(ListDomainsRequest) returns (ListDomainsResponse) { + option (google.api.http) = { + post: "/instances/{instance_id}/domains/_search"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Returns the domain of an instance + rpc AddDomain(AddDomainRequest) returns (AddDomainResponse) { + option (google.api.http) = { + post: "/instances/{instance_id}/domains"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Returns the domain of an instance + rpc RemoveDomain(RemoveDomainRequest) returns (RemoveDomainResponse) { + option (google.api.http) = { + delete: "/instances/{instance_id}/domains/{domain}"; + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + // Returns the domain of an instance + rpc SetPrimaryDomain(SetPrimaryDomainRequest) returns (SetPrimaryDomainResponse) { + option (google.api.http) = { + post: "/instances/{instance_id}/domains/_set_primary"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + } + + //Returns all stored read models of ZITADEL + // views are used for search optimisation and optimise request latencies + // they represent the delta of the event happend on the objects + rpc ListViews(ListViewsRequest) returns (ListViewsResponse) { + option (google.api.http) = { + post: "/views/_search"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: "views"; + external_docs: { + url: "https://docs.zitadel.com/concepts#Software_Architecture"; + description: "details of ZITADEL's event driven software concepts"; + }; + responses: { + key: "200"; + value: { + description: "Views for query operations"; }; + }; + }; + } - option (zitadel.v1.auth_option) = { - permission: "authenticated"; + //Truncates the delta of the change stream + // be carefull with this function because ZITADEL has to + // recompute the deltas after they got cleared. + // Search requests will return wrong results until all deltas are recomputed + rpc ClearView(ClearViewRequest) returns (ClearViewResponse) { + option (google.api.http) = { + post: "/views/{database}/{view_name}"; + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: "views"; + external_docs: { + url: "https://docs.zitadel.com/concepts#Software_Architecture"; + description: "details of ZITADEL's event driven software concepts"; + }; + responses: { + key: "200"; + value: { + description: "View cleared"; }; - } + }; + }; + } - // Returns the detail of an instance - rpc GetInstance(GetInstanceRequest) returns (GetInstanceResponse) { - option (google.api.http) = { - get: "/instances/{instance_id}"; + //Returns event descriptions which cannot be processed. + // It's possible that some events need some retries. + // For example if the SMTP-API wasn't able to send an email at the first time + rpc ListFailedEvents(ListFailedEventsRequest) returns (ListFailedEventsResponse) { + option (google.api.http) = { + post: "/failedevents/_search"; + body: "*" + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: "failed events"; + external_docs: { + url: "https://docs.zitadel.com/concepts#Software_Architecture"; + description: "details of ZITADEL's event driven software concepts"; + }; + responses: { + key: "200"; + value: { + description: "Events which were not processed by the views"; }; + }; + }; + } - option (zitadel.v1.auth_option) = { - permission: "authenticated"; + //Deletes the event from failed events view. + // the event is not removed from the change stream + // This call is usefull if the system was able to process the event later. + // e.g. if the second try of sending an email was successful. the first try produced a + // failed event. You can find out if it worked on the `failure_count` + rpc RemoveFailedEvent(RemoveFailedEventRequest) returns (RemoveFailedEventResponse) { + option (google.api.http) = { + delete: "/failedevents/{database}/{view_name}/{failed_sequence}"; + }; + + option (zitadel.v1.auth_option) = { + permission: "authenticated"; + }; + + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags: "failed events"; + external_docs: { + url: "https://docs.zitadel.com/concepts#Software_Architecture"; + description: "details of ZITADEL's event driven software concepts"; + }; + responses: { + key: "200"; + value: { + description: "Events removed from the list"; }; - } - - // Creates a new instance with all needed setup data - // This might take some time - rpc AddInstance(AddInstanceRequest) returns (AddInstanceResponse) { - option (google.api.http) = { - post: "/instances" - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - // Removes a instances - // This might take some time - rpc RemoveInstance(RemoveInstanceRequest) returns (RemoveInstanceResponse) { - option (google.api.http) = { - delete: "/instances/{instance_id}" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - // Checks if a domain exists - rpc ExistsDomain(ExistsDomainRequest) returns (ExistsDomainResponse) { - option (google.api.http) = { - post: "/domains/{domain}/_exists"; - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - // Returns the custom domains of an instance - rpc ListDomains(ListDomainsRequest) returns (ListDomainsResponse) { - option (google.api.http) = { - post: "/instances/{instance_id}/domains/_search"; - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - // Returns the domain of an instance - rpc AddDomain(AddDomainRequest) returns (AddDomainResponse) { - option (google.api.http) = { - post: "/instances/{instance_id}/domains"; - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - // Returns the domain of an instance - rpc RemoveDomain(RemoveDomainRequest) returns (RemoveDomainResponse) { - option (google.api.http) = { - delete: "/instances/{instance_id}/domains/{domain}"; - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - // Returns the domain of an instance - rpc SetPrimaryDomain(SetPrimaryDomainRequest) returns (SetPrimaryDomainResponse) { - option (google.api.http) = { - post: "/instances/{instance_id}/domains/_set_primary"; - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - } - - - //Returns all stored read models of ZITADEL - // views are used for search optimisation and optimise request latencies - // they represent the delta of the event happend on the objects - rpc ListViews(ListViewsRequest) returns (ListViewsResponse) { - option (google.api.http) = { - post: "/views/_search"; - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - tags: "views"; - external_docs: { - url: "https://docs.zitadel.com/concepts#Software_Architecture"; - description: "details of ZITADEL's event driven software concepts"; - }; - responses: { - key: "200"; - value: { - description: "Views for query operations"; - }; + }; + responses: { + key: "400"; + value: { + description: "failed event not found"; + schema: { + json_schema: { + ref: "#/definitions/rpcStatus"; }; + }; }; - } - - //Truncates the delta of the change stream - // be carefull with this function because ZITADEL has to - // recompute the deltas after they got cleared. - // Search requests will return wrong results until all deltas are recomputed - rpc ClearView(ClearViewRequest) returns (ClearViewResponse) { - option (google.api.http) = { - post: "/views/{database}/{view_name}"; - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - tags: "views"; - external_docs: { - url: "https://docs.zitadel.com/concepts#Software_Architecture"; - description: "details of ZITADEL's event driven software concepts"; - }; - responses: { - key: "200"; - value: { - description: "View cleared"; - }; - }; - }; - } - - //Returns event descriptions which cannot be processed. - // It's possible that some events need some retries. - // For example if the SMTP-API wasn't able to send an email at the first time - rpc ListFailedEvents(ListFailedEventsRequest) returns (ListFailedEventsResponse) { - option (google.api.http) = { - post: "/failedevents/_search"; - body: "*" - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - tags: "failed events"; - external_docs: { - url: "https://docs.zitadel.com/concepts#Software_Architecture"; - description: "details of ZITADEL's event driven software concepts"; - }; - responses: { - key: "200"; - value: { - description: "Events which were not processed by the views"; - }; - }; - }; - } - - //Deletes the event from failed events view. - // the event is not removed from the change stream - // This call is usefull if the system was able to process the event later. - // e.g. if the second try of sending an email was successful. the first try produced a - // failed event. You can find out if it worked on the `failure_count` - rpc RemoveFailedEvent(RemoveFailedEventRequest) returns (RemoveFailedEventResponse) { - option (google.api.http) = { - delete: "/failedevents/{database}/{view_name}/{failed_sequence}"; - }; - - option (zitadel.v1.auth_option) = { - permission: "authenticated"; - }; - - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { - tags: "failed events"; - external_docs: { - url: "https://docs.zitadel.com/concepts#Software_Architecture"; - description: "details of ZITADEL's event driven software concepts"; - }; - responses: { - key: "200"; - value: { - description: "Events removed from the list"; - }; - }; - responses: { - key: "400"; - value: { - description: "failed event not found"; - schema: { - json_schema: { - ref: "#/definitions/rpcStatus"; - }; - }; - }; - }; - }; - } + }; + }; + } } @@ -339,175 +338,175 @@ message HealthzRequest {} message HealthzResponse {} message ListInstancesRequest { - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { - json_schema: { - description: "Search query for lists"; - required: ["query"] - }; - }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + description: "Search query for lists"; + required: ["query"] + }; + }; - //list limitations and ordering - zitadel.v1.ListQuery query = 1; - // the field the result is sorted - zitadel.instance.v1.FieldName sorting_column = 2; - //criterias the client is looking for - repeated zitadel.instance.v1.Query queries = 3; + //list limitations and ordering + zitadel.v1.ListQuery query = 1; + // the field the result is sorted + zitadel.instance.v1.FieldName sorting_column = 2; + //criterias the client is looking for + repeated zitadel.instance.v1.Query queries = 3; } message ListInstancesResponse { - zitadel.v1.ListDetails details = 1; - zitadel.instance.v1.FieldName sorting_column = 2; - repeated zitadel.instance.v1.Instance result = 3; + zitadel.v1.ListDetails details = 1; + zitadel.instance.v1.FieldName sorting_column = 2; + repeated zitadel.instance.v1.Instance result = 3; } message GetInstanceRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message GetInstanceResponse { - zitadel.instance.v1.InstanceDetail instance = 1; + zitadel.instance.v1.InstanceDetail instance = 1; } message AddInstanceRequest { - message Profile { - string first_name = 1 [(validate.rules).string = {max_len: 200}]; - string last_name = 2 [(validate.rules).string = {max_len: 200}]; - string preferred_language = 5 [(validate.rules).string = {max_len: 10}]; - } - message Email { - string email = 1[(validate.rules).string = {min_len: 1, max_len: 200}]; - bool is_email_verified = 2; - } - message Password { - string password = 1 [(validate.rules).string = {max_len: 200}]; - bool password_change_required = 2; - } + message Profile { + string first_name = 1 [(validate.rules).string = {max_len: 200}]; + string last_name = 2 [(validate.rules).string = {max_len: 200}]; + string preferred_language = 5 [(validate.rules).string = {max_len: 10}]; + } + message Email { + string email = 1[(validate.rules).string = {min_len: 1, max_len: 200}]; + bool is_email_verified = 2; + } + message Password { + string password = 1 [(validate.rules).string = {max_len: 200}]; + bool password_change_required = 2; + } - string instance_name = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; - string first_org_name = 2 [(validate.rules).string = {max_len: 200}]; - string custom_domain = 3 [(validate.rules).string = {max_len: 200}]; - string owner_user_name = 4 [(validate.rules).string = {max_len: 200}]; - Email owner_email = 5 [(validate.rules).message.required = true]; - Profile owner_profile = 6 [(validate.rules).message.required = false]; - Password owner_password = 7 [(validate.rules).message.required = false]; - string default_language = 8 [(validate.rules).string = {max_len: 10}]; + string instance_name = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string first_org_name = 2 [(validate.rules).string = {max_len: 200}]; + string custom_domain = 3 [(validate.rules).string = {max_len: 200}]; + string owner_user_name = 4 [(validate.rules).string = {max_len: 200}]; + Email owner_email = 5 [(validate.rules).message.required = true]; + Profile owner_profile = 6 [(validate.rules).message.required = false]; + Password owner_password = 7 [(validate.rules).message.required = false]; + string default_language = 8 [(validate.rules).string = {max_len: 10}]; } message AddInstanceResponse { - string instance_id = 1; - zitadel.v1.ObjectDetails details = 2; + string instance_id = 1; + zitadel.v1.ObjectDetails details = 2; } message RemoveInstanceRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message RemoveInstanceResponse { - zitadel.v1.ObjectDetails details = 1; + zitadel.v1.ObjectDetails details = 1; } message GetUsageRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message GetUsageResponse { - zitadel.v1.ObjectDetails details = 1; - uint64 executed_requests = 2; - uint64 executed_action_mins = 3; + zitadel.v1.ObjectDetails details = 1; + uint64 executed_requests = 2; + uint64 executed_action_mins = 3; } message ExistsDomainRequest { - string domain = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string domain = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message ExistsDomainResponse { - bool exists = 1; + bool exists = 1; } message ListDomainsRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];//list limitations and ordering - zitadel.v1.ListQuery query = 2; - // the field the result is sorted - zitadel.instance.v1.DomainFieldName sorting_column = 3; - //criterias the client is looking for - repeated zitadel.instance.v1.DomainSearchQuery queries = 4; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}];//list limitations and ordering + zitadel.v1.ListQuery query = 2; + // the field the result is sorted + zitadel.instance.v1.DomainFieldName sorting_column = 3; + //criterias the client is looking for + repeated zitadel.instance.v1.DomainSearchQuery queries = 4; } message ListDomainsResponse { - zitadel.v1.ListDetails details = 1; - zitadel.instance.v1.DomainFieldName sorting_column = 2; - repeated zitadel.instance.v1.Domain result = 3; + zitadel.v1.ListDetails details = 1; + zitadel.instance.v1.DomainFieldName sorting_column = 2; + repeated zitadel.instance.v1.Domain result = 3; } message AddDomainRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; - string domain = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string domain = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message AddDomainResponse { - zitadel.v1.ObjectDetails details = 1; + zitadel.v1.ObjectDetails details = 1; } message RemoveDomainRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; - string domain = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string domain = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message RemoveDomainResponse { - zitadel.v1.ObjectDetails details = 1; + zitadel.v1.ObjectDetails details = 1; } message SetPrimaryDomainRequest { - string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; - string domain = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string instance_id = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string domain = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; } message SetPrimaryDomainResponse { - zitadel.v1.ObjectDetails details = 1; + zitadel.v1.ObjectDetails details = 1; } message ChangeSubscriptionRequest { - string domain = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; - string subscription_name = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; - uint64 request_limit = 3; - uint64 action_mins_limit = 4; + string domain = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string subscription_name = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; + uint64 request_limit = 3; + uint64 action_mins_limit = 4; } message ChangeSubscriptionResponse { - zitadel.v1.ObjectDetails details = 1; + zitadel.v1.ObjectDetails details = 1; } //This is an empty request message ListViewsRequest {} message ListViewsResponse { - //TODO: list details - repeated View result = 1; + //TODO: list details + repeated View result = 1; } message ClearViewRequest { - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { - json_schema: { - required: ["database", "view_name"] - }; - }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + required: ["database", "view_name"] + }; + }; - string database = 1 [ - (validate.rules).string = {min_len: 1, max_len: 200}, - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"adminapi\""; - min_length: 1; - max_length: 200; - } - ]; - string view_name = 2 [ - (validate.rules).string = {min_len: 1, max_len: 200}, - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"iam_members\""; - min_length: 1; - max_length: 200; - } - ]; + string database = 1 [ + (validate.rules).string = {min_len: 1, max_len: 200}, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"adminapi\""; + min_length: 1; + max_length: 200; + } + ]; + string view_name = 2 [ + (validate.rules).string = {min_len: 1, max_len: 200}, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"iam_members\""; + min_length: 1; + max_length: 200; + } + ]; } //This is an empty response @@ -517,101 +516,101 @@ message ClearViewResponse {} message ListFailedEventsRequest {} message ListFailedEventsResponse { - //TODO: list details - repeated FailedEvent result = 1; + //TODO: list details + repeated FailedEvent result = 1; } message RemoveFailedEventRequest { - option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { - json_schema: { - required: ["database", "view_name", "failed_sequence"] - }; - }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + required: ["database", "view_name", "failed_sequence"] + }; + }; - string database = 1 [ - (validate.rules).string = {min_len: 1, max_len: 200}, - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"adminapi\""; - min_length: 1; - max_length: 200; - } - ]; - string view_name = 2 [ - (validate.rules).string = {min_len: 1, max_len: 200}, - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"iam_members\""; - min_length: 1; - max_length: 200; - } - ]; - uint64 failed_sequence = 3 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"9823758\""; - } - ]; + string database = 1 [ + (validate.rules).string = {min_len: 1, max_len: 200}, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"adminapi\""; + min_length: 1; + max_length: 200; + } + ]; + string view_name = 2 [ + (validate.rules).string = {min_len: 1, max_len: 200}, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"iam_members\""; + min_length: 1; + max_length: 200; + } + ]; + uint64 failed_sequence = 3 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"9823758\""; + } + ]; } //This is an empty response message RemoveFailedEventResponse {} message View { - string database = 1 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"adminapi\""; - } - ]; - string view_name = 2 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"iam_members\""; - } - ]; - uint64 processed_sequence = 3 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"9823758\""; - } - ]; - google.protobuf.Timestamp event_timestamp = 4 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"2019-04-01T08:45:00.000000Z\""; - description: "The timestamp the event occured"; - } - ]; // The timestamp the event occured - google.protobuf.Timestamp last_successful_spooler_run = 5 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - description: "The timestamp the event occured"; - } - ]; - string instance = 6 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"840498034930840\""; - } - ]; + string database = 1 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"adminapi\""; + } + ]; + string view_name = 2 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"iam_members\""; + } + ]; + uint64 processed_sequence = 3 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"9823758\""; + } + ]; + google.protobuf.Timestamp event_timestamp = 4 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"2019-04-01T08:45:00.000000Z\""; + description: "The timestamp the event occured"; + } + ]; // The timestamp the event occured + google.protobuf.Timestamp last_successful_spooler_run = 5 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "The timestamp the event occured"; + } + ]; + string instance = 6 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"840498034930840\""; + } + ]; } message FailedEvent { - string database = 1 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"adminapi\""; - } - ]; - string view_name = 2 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"iam_members\""; - } - ]; - uint64 failed_sequence = 3 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"9823759\""; - } - ]; - uint64 failure_count = 4 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"5\""; - } - ]; - string error_message = 5 [ - (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { - example: "\"ID=EXAMP-ID3ER Message=Example message\""; - } - ]; + string database = 1 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"adminapi\""; + } + ]; + string view_name = 2 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"iam_members\""; + } + ]; + uint64 failed_sequence = 3 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"9823759\""; + } + ]; + uint64 failure_count = 4 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"5\""; + } + ]; + string error_message = 5 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"ID=EXAMP-ID3ER Message=Example message\""; + } + ]; } diff --git a/proto/zitadel/v1.proto b/proto/zitadel/v1.proto new file mode 100644 index 0000000000..2887082679 --- /dev/null +++ b/proto/zitadel/v1.proto @@ -0,0 +1,161 @@ +syntax = "proto3"; + +import "zitadel/user.proto"; +import "zitadel/idp.proto"; +import "zitadel/org.proto"; +import "zitadel/management.proto"; + +import "protoc-gen-openapiv2/options/annotations.proto"; + +import "validate/validate.proto"; + +package zitadel.v1.v1; + +option go_package ="github.com/zitadel/zitadel/pkg/grpc/v1"; + +message AddCustomOrgIAMPolicyRequest { + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_schema) = { + json_schema: { + required: ["org_id"] + }; + }; + + string org_id = 1 [ + (validate.rules).string = {min_len: 1, max_len: 200}, + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + example: "\"#69629023906488334\""; + min_length: 1; + max_length: 200; + } + ]; + bool user_login_must_be_domain = 2 [ + (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_field) = { + description: "the username has to end with the domain of it's organisation" + } + ]; // the username has to end with the domain of it's organisation (uniqueness is organisation based) +} +message ImportDataOrg { + repeated DataOrg orgs = 1; +} + +message DataOrg { + string org_id = 1; + zitadel.management.v1.AddOrgRequest org = 3; + AddCustomOrgIAMPolicyRequest iam_policy = 4; + zitadel.management.v1.AddCustomLabelPolicyRequest label_policy = 5; + zitadel.management.v1.AddCustomLockoutPolicyRequest lockout_policy = 6; + zitadel.management.v1.AddCustomLoginPolicyRequest login_policy = 7; + zitadel.management.v1.AddCustomPasswordComplexityPolicyRequest password_complexity_policy = 8; + zitadel.management.v1.AddCustomPrivacyPolicyRequest privacy_policy = 9; + + repeated DataProject projects = 10; + repeated zitadel.management.v1.AddProjectRoleRequest project_roles = 11; + repeated DataAPIApplication api_apps = 12; + repeated DataOIDCApplication oidc_apps = 13; + repeated DataHumanUser human_users = 14; + repeated DataMachineUser machine_users = 15; + repeated zitadel.management.v1.SetTriggerActionsRequest trigger_actions = 16; + repeated DataAction actions = 17; + + repeated DataProjectGrant project_grants = 18; + repeated zitadel.management.v1.AddUserGrantRequest user_grants = 19; + + repeated zitadel.management.v1.AddOrgMemberRequest org_members = 20; + repeated zitadel.management.v1.AddProjectMemberRequest project_members = 21; + repeated zitadel.management.v1.AddProjectGrantMemberRequest project_grant_members = 22; + + repeated zitadel.management.v1.SetUserMetadataRequest user_metadata = 23; + + repeated zitadel.management.v1.SetCustomLoginTextsRequest login_texts = 24; + + repeated zitadel.management.v1.SetCustomInitMessageTextRequest init_messages = 25; + repeated zitadel.management.v1.SetCustomPasswordResetMessageTextRequest password_reset_messages = 26; + repeated zitadel.management.v1.SetCustomVerifyEmailMessageTextRequest verify_email_messages = 27; + repeated zitadel.management.v1.SetCustomVerifyPhoneMessageTextRequest verify_phone_messages = 28; + repeated zitadel.management.v1.SetCustomDomainClaimedMessageTextRequest domain_claimed_messages = 29; + repeated zitadel.management.v1.SetCustomPasswordlessRegistrationMessageTextRequest passwordless_registration_messages = 30; + + repeated DataOIDCIDP oidc_idps = 31; + repeated DataJWTIDP jwt_idps = 32; + + repeated zitadel.management.v1.AddSecondFactorToLoginPolicyRequest second_factors = 33; + repeated zitadel.management.v1.AddMultiFactorToLoginPolicyRequest multi_factors = 34; + repeated zitadel.management.v1.AddIDPToLoginPolicyRequest idps = 35; + + repeated zitadel.idp.v1.IDPUserLink user_links = 36; + repeated zitadel.org.v1.Domain domains = 37; +} +message DataOIDCIDP{ + string idp_id = 1; + zitadel.management.v1.AddOrgOIDCIDPRequest idp = 2; +} +message DataJWTIDP{ + string idp_id = 1; + zitadel.management.v1.AddOrgJWTIDPRequest idp = 32; +} + +message ExportHumanUser { + message Profile { + string first_name = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string last_name = 2 [(validate.rules).string = {min_len: 1, max_len: 200}]; + string nick_name = 3 [(validate.rules).string = {max_len: 200}]; + string display_name = 4 [(validate.rules).string = {max_len: 200}]; + string preferred_language = 5 [(validate.rules).string = {max_len: 10}]; + zitadel.user.v1.Gender gender = 6; + } + message Email { + string email = 1 [(validate.rules).string.email = true]; //TODO: check if no value is allowed + bool is_email_verified = 2; + } + message Phone { + // has to be a global number + string phone = 1 [(validate.rules).string = {min_len: 1, max_len: 50, prefix: "+"}]; + bool is_phone_verified = 2; + } + message HashedPassword{ + string value = 1; + string algorithm = 2; + } + + string user_name = 1 [(validate.rules).string = {min_len: 1, max_len: 200}]; + + Profile profile = 2 [(validate.rules).message.required = true]; + Email email = 3 [(validate.rules).message.required = true]; + Phone phone = 4; + string password = 5; + HashedPassword hashed_password = 6; + bool password_change_required = 7; + bool request_passwordless_registration = 8; + + string otp_code = 9; +} + + +message DataProject { + string project_id = 1; + zitadel.management.v1.AddProjectRequest project = 2; +} +message DataAPIApplication { + string app_id = 1; + zitadel.management.v1.AddAPIAppRequest app = 2; +} +message DataOIDCApplication { + string app_id = 1; + zitadel.management.v1.AddOIDCAppRequest app = 2; +} +message DataHumanUser { + string user_id = 1; + zitadel.management.v1.ImportHumanUserRequest user = 2; +} +message DataMachineUser { + string user_id = 1; + zitadel.management.v1.AddMachineUserRequest user = 2; +} +message DataAction { + string action_id = 1; + zitadel.management.v1.CreateActionRequest action = 2; +} +message DataProjectGrant { + string grant_id = 1; + zitadel.management.v1.AddProjectGrantRequest project_grant = 2; +} \ No newline at end of file From f610d48569916469767e637b0f6c5d9e6e6afabd Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Thu, 28 Jul 2022 16:25:42 +0200 Subject: [PATCH 051/116] feat: prepare for multiple database types (#4068) BREAKING CHANGE: the database and admin user config has changed. --- cmd/defaults.yaml | 48 ++++---- cmd/initialise/config.go | 29 +---- cmd/initialise/init.go | 12 +- cmd/initialise/verify_database.go | 2 +- cmd/initialise/verify_grant.go | 2 +- cmd/initialise/verify_user.go | 2 +- cmd/initialise/verify_zitadel.go | 2 +- cmd/key/key.go | 2 +- cmd/setup/config.go | 1 + cmd/setup/setup.go | 2 +- cmd/start/config.go | 1 + cmd/start/start.go | 6 +- go.mod | 2 +- go.sum | 4 +- internal/database/cockroach/config.go | 155 ++++++++++++++++++++++++++ internal/database/cockroach/crdb.go | 10 ++ internal/database/config.go | 86 -------------- internal/database/database.go | 87 +++++++++++++-- internal/database/dialect/config.go | 62 +++++++++++ 19 files changed, 354 insertions(+), 161 deletions(-) create mode 100644 internal/database/cockroach/config.go create mode 100644 internal/database/cockroach/crdb.go delete mode 100644 internal/database/config.go create mode 100644 internal/database/dialect/config.go diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index a05d1695d1..4c7872b5e4 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -45,30 +45,30 @@ HTTP1HostHeader: "host" WebAuthNName: ZITADEL Database: - Host: localhost - Port: 26257 - Database: zitadel - MaxOpenConns: 20 - MaxConnLifetime: 30m - MaxConnIdleTime: 30m - Options: "" - User: - Username: zitadel - Password: "" - SSL: - Mode: disable - RootCert: "" - Cert: "" - Key: "" - -AdminUser: - Username: root - Password: "" - SSL: - Mode: disable - RootCert: "" - Cert: "" - Key: "" + cockroach: + Host: localhost + Port: 26257 + Database: zitadel + MaxOpenConns: 20 + MaxConnLifetime: 30m + MaxConnIdleTime: 30m + Options: "" + User: + Username: zitadel + Password: "" + SSL: + Mode: disable + RootCert: "" + Cert: "" + Key: "" + Admin: + Username: root + Password: "" + SSL: + Mode: disable + RootCert: "" + Cert: "" + Key: "" Machine: # Cloud hosted VMs need to specify their metadata endpoint so that the machine can be uniquely identified. diff --git a/cmd/initialise/config.go b/cmd/initialise/config.go index dbbd7b5e53..848bece05b 100644 --- a/cmd/initialise/config.go +++ b/cmd/initialise/config.go @@ -9,15 +9,16 @@ import ( ) type Config struct { - Database database.Config - AdminUser database.User - Machine *id.Config - Log *logging.Config + Database database.Config + Machine *id.Config + Log *logging.Config } func MustNewConfig(v *viper.Viper) *Config { config := new(Config) - err := v.Unmarshal(config) + err := v.Unmarshal(config, + viper.DecodeHook(database.DecodeHook), + ) logging.OnError(err).Fatal("unable to read config") err = config.Log.SetLogger() @@ -25,21 +26,3 @@ func MustNewConfig(v *viper.Viper) *Config { return config } - -func adminConfig(config *Config) database.Config { - adminConfig := config.Database - adminConfig.Username = config.AdminUser.Username - adminConfig.Password = config.AdminUser.Password - adminConfig.SSL.Cert = config.AdminUser.SSL.Cert - adminConfig.SSL.Key = config.AdminUser.SSL.Key - if config.AdminUser.SSL.RootCert != "" { - adminConfig.SSL.RootCert = config.AdminUser.SSL.RootCert - } - if config.AdminUser.SSL.Mode != "" { - adminConfig.SSL.Mode = config.AdminUser.SSL.Mode - } - //use default database because the zitadel database might not exist - adminConfig.Database = "" - - return adminConfig -} diff --git a/cmd/initialise/init.go b/cmd/initialise/init.go index 04cf47e0bc..3f06ea571a 100644 --- a/cmd/initialise/init.go +++ b/cmd/initialise/init.go @@ -39,10 +39,10 @@ The user provided by flags needs privileges to func InitAll(config *Config) { id.Configure(config.Machine) - err := initialise(config, - VerifyUser(config.Database.Username, config.Database.Password), - VerifyDatabase(config.Database.Database), - VerifyGrant(config.Database.Database, config.Database.Username), + err := initialise(config.Database, + VerifyUser(config.Database.Username(), config.Database.Password()), + VerifyDatabase(config.Database.Database()), + VerifyGrant(config.Database.Database(), config.Database.Username()), ) logging.OnError(err).Fatal("unable to initialize the database") @@ -50,10 +50,10 @@ func InitAll(config *Config) { logging.OnError(err).Fatal("unable to initialize ZITADEL") } -func initialise(config *Config, steps ...func(*sql.DB) error) error { +func initialise(config database.Config, steps ...func(*sql.DB) error) error { logging.Info("initialization started") - db, err := database.Connect(adminConfig(config)) + db, err := database.Connect(config, true) if err != nil { return err } diff --git a/cmd/initialise/verify_database.go b/cmd/initialise/verify_database.go index 06fb1857a5..1269cdde8d 100644 --- a/cmd/initialise/verify_database.go +++ b/cmd/initialise/verify_database.go @@ -34,7 +34,7 @@ The user provided by flags needs priviledge to Run: func(cmd *cobra.Command, args []string) { config := MustNewConfig(viper.New()) - err := initialise(config, VerifyDatabase(config.Database.Database)) + err := initialise(config.Database, VerifyDatabase(config.Database.Database())) logging.OnError(err).Fatal("unable to initialize the database") }, } diff --git a/cmd/initialise/verify_grant.go b/cmd/initialise/verify_grant.go index f9e1e1e248..0abbcae180 100644 --- a/cmd/initialise/verify_grant.go +++ b/cmd/initialise/verify_grant.go @@ -28,7 +28,7 @@ Prereqesits: Run: func(cmd *cobra.Command, args []string) { config := MustNewConfig(viper.New()) - err := initialise(config, VerifyGrant(config.Database.Database, config.Database.Username)) + err := initialise(config.Database, VerifyGrant(config.Database.Database(), config.Database.Username())) logging.OnError(err).Fatal("unable to set grant") }, } diff --git a/cmd/initialise/verify_user.go b/cmd/initialise/verify_user.go index 386bab96b4..aa36c723c6 100644 --- a/cmd/initialise/verify_user.go +++ b/cmd/initialise/verify_user.go @@ -33,7 +33,7 @@ The user provided by flags needs priviledge to Run: func(cmd *cobra.Command, args []string) { config := MustNewConfig(viper.New()) - err := initialise(config, VerifyUser(config.Database.Username, config.Database.Password)) + err := initialise(config.Database, VerifyUser(config.Database.Username(), config.Database.Password())) logging.OnError(err).Fatal("unable to init user") }, } diff --git a/cmd/initialise/verify_zitadel.go b/cmd/initialise/verify_zitadel.go index 82a61409ec..c1a3c9386a 100644 --- a/cmd/initialise/verify_zitadel.go +++ b/cmd/initialise/verify_zitadel.go @@ -95,7 +95,7 @@ func VerifyZitadel(db *sql.DB) error { func verifyZitadel(config database.Config) error { logging.WithFields("database", config.Database).Info("verify zitadel") - db, err := database.Connect(config) + db, err := database.Connect(config, false) if err != nil { return err } diff --git a/cmd/key/key.go b/cmd/key/key.go index 784f7a1c0b..02fa272a8a 100644 --- a/cmd/key/key.go +++ b/cmd/key/key.go @@ -124,7 +124,7 @@ func openFile(fileName string) (io.Reader, error) { } func keyStorage(config database.Config, masterKey string) (crypto.KeyStorage, error) { - db, err := database.Connect(config) + db, err := database.Connect(config, false) if err != nil { return nil, err } diff --git a/cmd/setup/config.go b/cmd/setup/config.go index 5036aabb42..06093002bb 100644 --- a/cmd/setup/config.go +++ b/cmd/setup/config.go @@ -36,6 +36,7 @@ func MustNewConfig(v *viper.Viper) *Config { hook.TagToLanguageHookFunc(), mapstructure.StringToTimeDurationHookFunc(), mapstructure.StringToSliceHookFunc(","), + database.DecodeHook, )), ) logging.OnError(err).Fatal("unable to read default config") diff --git a/cmd/setup/setup.go b/cmd/setup/setup.go index 935a241326..8e7b81ba8c 100644 --- a/cmd/setup/setup.go +++ b/cmd/setup/setup.go @@ -56,7 +56,7 @@ func Flags(cmd *cobra.Command) { func Setup(config *Config, steps *Steps, masterKey string) { logging.Info("setup started") - dbClient, err := database.Connect(config.Database) + dbClient, err := database.Connect(config.Database, false) logging.OnError(err).Fatal("unable to connect to database") eventstoreClient, err := eventstore.Start(dbClient) diff --git a/cmd/start/config.go b/cmd/start/config.go index 045ebf16bd..66f97b06c7 100644 --- a/cmd/start/config.go +++ b/cmd/start/config.go @@ -65,6 +65,7 @@ func MustNewConfig(v *viper.Viper) *Config { hook.TagToLanguageHookFunc(), mapstructure.StringToTimeDurationHookFunc(), mapstructure.StringToSliceHookFunc(","), + database.DecodeHook, )), ) logging.OnError(err).Fatal("unable to read config") diff --git a/cmd/start/start.go b/cmd/start/start.go index 92668f4d24..9d152aae8a 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -81,7 +81,7 @@ Requirements: func startZitadel(config *Config, masterKey string) error { ctx := context.Background() - dbClient, err := database.Connect(config.Database) + dbClient, err := database.Connect(config.Database, false) if err != nil { return fmt.Errorf("cannot start client for projection: %w", err) } @@ -175,10 +175,10 @@ func startAPIs(ctx context.Context, router *mux.Router, commands *command.Comman if err != nil { return fmt.Errorf("error starting admin repo: %w", err) } - if err := apis.RegisterServer(ctx, system.CreateServer(commands, queries, adminRepo, config.Database.Database, config.DefaultInstance)); err != nil { + if err := apis.RegisterServer(ctx, system.CreateServer(commands, queries, adminRepo, config.Database.Database(), config.DefaultInstance)); err != nil { return err } - if err := apis.RegisterServer(ctx, admin.CreateServer(config.Database.Database, commands, queries, config.SystemDefaults, adminRepo, config.ExternalSecure, keys.User)); err != nil { + if err := apis.RegisterServer(ctx, admin.CreateServer(config.Database.Database(), commands, queries, config.SystemDefaults, adminRepo, config.ExternalSecure, keys.User)); err != nil { return err } if err := apis.RegisterServer(ctx, management.CreateServer(commands, queries, config.SystemDefaults, keys.User, config.ExternalSecure, config.AuditLogRetention)); err != nil { diff --git a/go.mod b/go.mod index f56d089b5a..db123eb4f1 100644 --- a/go.mod +++ b/go.mod @@ -61,7 +61,7 @@ require ( go.opentelemetry.io/otel/sdk/export/metric v0.25.0 go.opentelemetry.io/otel/sdk/metric v0.25.0 go.opentelemetry.io/otel/trace v1.2.0 - golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 + golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa golang.org/x/net v0.0.0-20220121210141-e204ce36a2ba golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c diff --git a/go.sum b/go.sum index 4110d1ee0a..fc2c7bee5c 100644 --- a/go.sum +++ b/go.sum @@ -958,8 +958,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 h1:/pEO3GD/ABYAjuakUS6xSEmmlyVS4kxBNkeA9tLJiTI= -golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= diff --git a/internal/database/cockroach/config.go b/internal/database/cockroach/config.go new file mode 100644 index 0000000000..e31acc6015 --- /dev/null +++ b/internal/database/cockroach/config.go @@ -0,0 +1,155 @@ +package cockroach + +import ( + "database/sql" + "strconv" + "strings" + "time" + + //sql import + _ "github.com/lib/pq" + + "github.com/mitchellh/mapstructure" + "github.com/zitadel/logging" + + "github.com/zitadel/zitadel/internal/database/dialect" +) + +const ( + sslDisabledMode = "disable" +) + +type Config struct { + Host string + Port uint16 + Database string + MaxOpenConns uint32 + MaxConnLifetime time.Duration + MaxConnIdleTime time.Duration + User User + Admin User + + //Additional options to be appended as options= + //The value will be taken as is. Multiple options are space separated. + Options string +} + +func (c *Config) MatchName(name string) bool { + for _, key := range []string{"crdb", "cockroach"} { + if strings.TrimSpace(strings.ToLower(name)) == key { + return true + } + } + return false +} + +func (c *Config) Decode(configs []interface{}) (dialect.Connector, error) { + decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{ + DecodeHook: mapstructure.StringToTimeDurationHookFunc(), + Result: c, + }) + if err != nil { + return nil, err + } + + for _, config := range configs { + if err = decoder.Decode(config); err != nil { + return nil, err + } + } + return c, nil +} + +func (c *Config) Connect(useAdmin bool) (*sql.DB, error) { + client, err := sql.Open("postgres", c.String(useAdmin)) + if err != nil { + return nil, err + } + client.SetMaxOpenConns(int(c.MaxOpenConns)) + client.SetConnMaxLifetime(c.MaxConnLifetime) + client.SetConnMaxIdleTime(c.MaxConnIdleTime) + return client, nil +} + +func (c *Config) DatabaseName() string { + return c.Database +} + +func (c *Config) Username() string { + return c.User.Username +} + +func (c *Config) Password() string { + return c.User.Password +} + +func (c *Config) Type() string { + return "cockroach" +} + +type User struct { + Username string + Password string + SSL SSL +} + +type SSL struct { + // type of connection security + Mode string + // RootCert Path to the CA certificate + RootCert string + // Cert Path to the client certificate + Cert string + // Key Path to the client private key + Key string +} + +func (c *Config) checkSSL(user User) { + if user.SSL.Mode == sslDisabledMode || user.SSL.Mode == "" { + user.SSL = SSL{Mode: sslDisabledMode} + return + } + if user.SSL.RootCert == "" { + logging.WithFields( + "cert set", user.SSL.Cert != "", + "key set", user.SSL.Key != "", + "rootCert set", user.SSL.RootCert != "", + ).Fatal("at least ssl root cert has to be set") + } +} + +func (c Config) String(useAdmin bool) string { + user := c.User + if useAdmin { + user = c.Admin + } + c.checkSSL(user) + fields := []string{ + "host=" + c.Host, + "port=" + strconv.Itoa(int(c.Port)), + "user=" + user.Username, + "dbname=" + c.Database, + "application_name=zitadel", + "sslmode=" + user.SSL.Mode, + } + if c.Options != "" { + fields = append(fields, "options="+c.Options) + } + if !useAdmin { + fields = append(fields, "dbname="+c.Database) + } + if user.Password != "" { + fields = append(fields, "password="+user.Password) + } + if user.SSL.Mode != sslDisabledMode { + fields = append(fields, "sslrootcert="+user.SSL.RootCert) + if user.SSL.Cert != "" { + fields = append(fields, "sslcert="+user.SSL.Cert) + } + if user.SSL.Key != "" { + fields = append(fields, "sslkey="+user.SSL.Key) + } + } + + return strings.Join(fields, " ") +} diff --git a/internal/database/cockroach/crdb.go b/internal/database/cockroach/crdb.go new file mode 100644 index 0000000000..da634c9c83 --- /dev/null +++ b/internal/database/cockroach/crdb.go @@ -0,0 +1,10 @@ +package cockroach + +import ( + "github.com/zitadel/zitadel/internal/database/dialect" +) + +func init() { + config := &Config{} + dialect.Register(config, config, true) +} diff --git a/internal/database/config.go b/internal/database/config.go deleted file mode 100644 index 56e84a0417..0000000000 --- a/internal/database/config.go +++ /dev/null @@ -1,86 +0,0 @@ -package database - -import ( - "strings" - "time" - - "github.com/zitadel/logging" -) - -const ( - sslDisabledMode = "disable" -) - -type Config struct { - Host string - Port string - Database string - MaxOpenConns uint32 - MaxConnLifetime time.Duration - MaxConnIdleTime time.Duration - User - - //Additional options to be appended as options= - //The value will be taken as is. Multiple options are space separated. - Options string -} - -type User struct { - Username string - Password string - SSL SSL -} - -type SSL struct { - // type of connection security - Mode string - // RootCert Path to the CA certificate - RootCert string - // Cert Path to the client certificate - Cert string - // Key Path to the client private key - Key string -} - -func (s *Config) checkSSL() { - if s.SSL.Mode == sslDisabledMode || s.SSL.Mode == "" { - s.SSL = SSL{Mode: sslDisabledMode} - return - } - if s.SSL.RootCert == "" { - logging.WithFields( - "cert set", s.SSL.Cert != "", - "key set", s.SSL.Key != "", - "rootCert set", s.SSL.RootCert != "", - ).Fatal("at least ssl root cert has to be set") - } -} - -func (c Config) String() string { - c.checkSSL() - fields := []string{ - "host=" + c.Host, - "port=" + c.Port, - "user=" + c.Username, - "dbname=" + c.Database, - "application_name=zitadel", - "sslmode=" + c.SSL.Mode, - } - if c.Options != "" { - fields = append(fields, "options="+c.Options) - } - if c.Password != "" { - fields = append(fields, "password="+c.Password) - } - if c.SSL.Mode != sslDisabledMode { - fields = append(fields, "sslrootcert="+c.SSL.RootCert) - if c.SSL.Cert != "" { - fields = append(fields, "sslcert="+c.SSL.Cert) - } - if c.SSL.Key != "" { - fields = append(fields, "sslkey="+c.SSL.Key) - } - } - - return strings.Join(fields, " ") -} diff --git a/internal/database/database.go b/internal/database/database.go index fbb40a2449..3f2315b926 100644 --- a/internal/database/database.go +++ b/internal/database/database.go @@ -2,25 +2,92 @@ package database import ( "database/sql" - //sql import - _ "github.com/lib/pq" + "reflect" - "github.com/zitadel/zitadel/internal/errors" + _ "github.com/zitadel/zitadel/internal/database/cockroach" + "github.com/zitadel/zitadel/internal/database/dialect" ) -func Connect(config Config) (*sql.DB, error) { - client, err := sql.Open("postgres", config.String()) +type Config struct { + Dialects map[string]interface{} `mapstructure:",remain"` + connector dialect.Connector +} + +func (c *Config) SetConnector(connector dialect.Connector) { + c.connector = connector +} + +type User struct { + Username string + Password string + SSL SSL +} + +type SSL struct { + // type of connection security + Mode string + // RootCert Path to the CA certificate + RootCert string + // Cert Path to the client certificate + Cert string + // Key Path to the client private key + Key string +} + +func Connect(config Config, useAdmin bool) (*sql.DB, error) { + client, err := config.connector.Connect(useAdmin) if err != nil { return nil, err } - client.SetMaxOpenConns(int(config.MaxOpenConns)) - client.SetConnMaxLifetime(config.MaxConnLifetime) - client.SetConnMaxIdleTime(config.MaxConnIdleTime) - if err := client.Ping(); err != nil { - return nil, errors.ThrowPreconditionFailed(err, "DATAB-0pIWD", "Errors.Database.Connection.Failed") + return nil, err } return client, nil } + +func DecodeHook(from, to reflect.Value) (interface{}, error) { + if to.Type() != reflect.TypeOf(Config{}) { + return from.Interface(), nil + } + + configuredDialects, ok := from.Interface().(map[string]interface{}) + if !ok { + return from.Interface(), nil + } + + configuredDialect := dialect.SelectByConfig(configuredDialects) + configs := make([]interface{}, 0, len(configuredDialects)-1) + + for name, dialectConfig := range configuredDialects { + if !configuredDialect.Matcher.MatchName(name) { + continue + } + + configs = append(configs, dialectConfig) + } + + connector, err := configuredDialect.Matcher.Decode(configs) + if err != nil { + return nil, err + } + + return Config{connector: connector}, nil +} + +func (c Config) Database() string { + return c.connector.DatabaseName() +} + +func (c Config) Username() string { + return c.connector.Username() +} + +func (c Config) Password() string { + return c.connector.Password() +} + +func (c Config) Type() string { + return c.connector.Type() +} diff --git a/internal/database/dialect/config.go b/internal/database/dialect/config.go new file mode 100644 index 0000000000..b043c9f370 --- /dev/null +++ b/internal/database/dialect/config.go @@ -0,0 +1,62 @@ +package dialect + +import ( + "database/sql" + "sync" +) + +type Config struct { + Dialects map[string]interface{} `mapstructure:",remain"` + Dialect Matcher +} + +type Dialect struct { + Matcher Matcher + Config Connector + IsDefault bool +} + +var ( + dialects []*Dialect + defaultDialect *Dialect + dialectsMu sync.Mutex +) + +type Matcher interface { + MatchName(string) bool + Decode([]interface{}) (Connector, error) +} + +type Connector interface { + Connect(useAdmin bool) (*sql.DB, error) + DatabaseName() string + Username() string + Password() string + Type() string +} + +func Register(matcher Matcher, config Connector, isDefault bool) { + dialectsMu.Lock() + defer dialectsMu.Unlock() + + d := &Dialect{Matcher: matcher, Config: config} + + if isDefault { + defaultDialect = d + return + } + + dialects = append(dialects, d) +} + +func SelectByConfig(config map[string]interface{}) *Dialect { + for key := range config { + for _, d := range dialects { + if d.Matcher.MatchName(key) { + return d + } + } + } + + return defaultDialect +} From 8448f88f94423a02b9998766038ee42520e04197 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Thu, 28 Jul 2022 16:33:59 +0200 Subject: [PATCH 052/116] fix: remove user login must be domain check on machine users (#4065) * fix: remove user login must be domain check on machine users * fix: test Co-authored-by: Livio Spring --- internal/command/user_machine.go | 3 --- internal/command/user_machine_test.go | 29 --------------------------- 2 files changed, 32 deletions(-) diff --git a/internal/command/user_machine.go b/internal/command/user_machine.go index 38e8cff2a6..714f238eab 100644 --- a/internal/command/user_machine.go +++ b/internal/command/user_machine.go @@ -16,9 +16,6 @@ func (c *Commands) AddMachine(ctx context.Context, orgID string, machine *domain if err != nil { return nil, caos_errs.ThrowPreconditionFailed(err, "COMMAND-3M9fs", "Errors.Org.DomainPolicy.NotFound") } - if !domainPolicy.UserLoginMustBeDomain { - return nil, caos_errs.ThrowPreconditionFailed(nil, "COMMAND-6M0ds", "Errors.User.Invalid") - } userID, err := c.idGenerator.Next() if err != nil { return nil, err diff --git a/internal/command/user_machine_test.go b/internal/command/user_machine_test.go index 23e15859eb..e08ce98e10 100644 --- a/internal/command/user_machine_test.go +++ b/internal/command/user_machine_test.go @@ -76,35 +76,6 @@ func TestCommandSide_AddMachine(t *testing.T) { err: caos_errs.IsPreconditionFailed, }, }, - { - name: "org policy global, precondition error", - fields: fields{ - eventstore: eventstoreExpect( - t, - expectFilter( - eventFromEventPusher( - org.NewDomainPolicyAddedEvent(context.Background(), - &user.NewAggregate("user1", "org1").Aggregate, - false, - true, - true, - ), - ), - ), - ), - }, - args: args{ - ctx: context.Background(), - orgID: "org1", - machine: &domain.Machine{ - Username: "username", - Name: "name", - }, - }, - res: res{ - err: caos_errs.IsPreconditionFailed, - }, - }, { name: "add machine, ok", fields: fields{ From fb52575f7989497612e9f6c4f36db5fda13ba697 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Fri, 29 Jul 2022 07:13:15 +0200 Subject: [PATCH 053/116] fix(console): remove redundancy in hasrole directive (#4063) Co-authored-by: Livio Spring --- .../directives/has-role/has-role.directive.ts | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/console/src/app/directives/has-role/has-role.directive.ts b/console/src/app/directives/has-role/has-role.directive.ts index 65e6a4fe17..b58e1f3a10 100644 --- a/console/src/app/directives/has-role/has-role.directive.ts +++ b/console/src/app/directives/has-role/has-role.directive.ts @@ -1,25 +1,34 @@ -import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core'; +import { Directive, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core'; +import { Subject, takeUntil } from 'rxjs'; import { GrpcAuthService } from 'src/app/services/grpc-auth.service'; @Directive({ selector: '[cnslHasRole]', }) -export class HasRoleDirective { +export class HasRoleDirective implements OnDestroy { + private destroy$: Subject = new Subject(); private hasView: boolean = false; @Input() public set hasRole(roles: string[] | RegExp[] | undefined) { if (roles && roles.length > 0) { - this.authService.isAllowed(roles).subscribe((isAllowed) => { - if (isAllowed && !this.hasView) { - this.viewContainerRef.clear(); - this.viewContainerRef.createEmbeddedView(this.templateRef); - } else { - this.viewContainerRef.clear(); - this.hasView = false; - } - }); + this.authService + .isAllowed(roles) + .pipe(takeUntil(this.destroy$)) + .subscribe((isAllowed) => { + if (isAllowed && !this.hasView) { + if (this.viewContainerRef.length !== 0) { + this.viewContainerRef.clear(); + } + this.viewContainerRef.createEmbeddedView(this.templateRef); + } else { + this.viewContainerRef.clear(); + this.hasView = false; + } + }); } else { if (!this.hasView) { - this.viewContainerRef.clear(); + if (this.viewContainerRef.length !== 0) { + this.viewContainerRef.clear(); + } this.viewContainerRef.createEmbeddedView(this.templateRef); } } @@ -30,4 +39,9 @@ export class HasRoleDirective { protected templateRef: TemplateRef, protected viewContainerRef: ViewContainerRef, ) {} + + ngOnDestroy(): void { + this.destroy$.next(); + this.destroy$.complete(); + } } From 3c3bce1a6b665dab6731dbacaf65745cf1cb46ff Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 29 Jul 2022 10:13:45 +0200 Subject: [PATCH 054/116] docs: improve documentation for v2 release (#4046) * WIP: docs(proxy): describe proxy settings * fix nginx * refactor (docs): deploy and operate sections * chore: ignore package-lock since we use yarn * chore: update to rc1 * chore: broken links * chore: update yarn * docs: move disclaimer to bottom * chore: fix broken links * Update docs/docs/guides/operate/tls_modes.mdx Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> * test caddy files * syntax highlight * traefik example * refactor: docs * refactor * working state * got a working state * remove bar * mark rate limits for update * remove zitadel.ch * fix cases * docs: zitadel quickstart * docs: zitadel quickstart * docs: create app and project * docs: move customer portal docs to guides manage cloud * docs: move customer portal docs to guides manage cloud * docs: move customer portal docs to guides manage cloud * docs: add help me choose in the quickstart * docs: broken links * fix broken links * Update knative guide * styling * docs: support customer portal * update to main instead v2-alpha * use version 2 tag * docs: images * docs: move authentication and authorization guides to integrate * docs: quickstart use examples * docs: lb example * fix broken link * docs: update userinfo endpoints * docs: update userinfo endpoints * fix oidc endpoint * docs: remove unused endpoints in app.module Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> Co-authored-by: Fabienne Co-authored-by: Livio Amstutz --- console/src/app/app.module.ts | 12 +- deploy/knative/zitadel-knative-service.yaml | 6 +- docs/.gitignore | 1 + docs/docs/apis/actions.md | 6 +- docs/docs/apis/openidoauth/scopes.md | 2 +- docs/docs/apis/ratelimits/api.md | 11 +- .../apis/ratelimits/{accounts.md => login.md} | 3 +- docs/docs/concepts/features/actions.md | 4 +- .../structure/_instance_description.mdx | 2 +- .../concepts/structure/_org_description.mdx | 2 +- docs/docs/concepts/structure/applications.md | 2 +- docs/docs/concepts/structure/policies.md | 4 +- docs/docs/concepts/structure/projects.md | 4 +- docs/docs/concepts/usecases/saas.md | 2 +- .../docs/examples/call-zitadel-api/dot-net.md | 118 + .../call-zitadel-api/go.md | 65 +- .../identity-proxy/oauth2-proxy.md | 8 +- .../introduction.mdx | 8 +- docs/docs/{quickstarts => examples}/libs.md | 0 .../login/angular.md | 0 .../login/flutter.md | 4 +- .../{quickstarts => examples}/login/nextjs.md | 0 .../{quickstarts => examples}/login/react.md | 0 .../secure-api/dot-net.md | 0 .../secure-api/go.md | 28 +- docs/docs/guides/basics/get-started.mdx | 54 - docs/docs/guides/basics/instance.mdx | 90 - docs/docs/guides/basics/projects.md | 114 - .../run => deploy}/_defaultuser.mdx | 0 docs/docs/guides/deploy/_disclaimer.mdx | 8 + .../_nextselfhosted.mdx => deploy/_next.mdx} | 4 +- .../run/_compose.mdx => deploy/compose.mdx} | 13 +- .../run => deploy}/docker-compose.yaml | 2 +- .../run/_knative.mdx => deploy/knative.mdx} | 53 +- .../run/_helm.mdx => deploy/kubernetes.mdx} | 31 +- docs/docs/guides/deploy/linux.mdx | 34 + .../loadbalancing-example/docker-compose.yaml | 2 +- .../example-traefik.yaml | 0 .../example-zitadel-config.yaml | 2 +- .../example-zitadel-init-steps.yaml | 2 +- .../example-zitadel-secrets.yaml | 2 +- .../loadbalancing-example.mdx | 10 +- docs/docs/guides/deploy/macos.mdx | 43 + docs/docs/guides/deploy/overview.mdx | 19 + .../docs/guides/installation/http2-support.md | 10 - docs/docs/guides/installation/run/_linux.mdx | 19 - docs/docs/guides/installation/run/_macos.mdx | 32 - docs/docs/guides/installation/run/run.mdx | 72 - .../{api => integrate}/access-zitadel-apis.md | 10 +- .../application/application.mdx | 0 .../application/auth-type.mdx | 0 .../application/generate-key.mdx | 0 .../application/redirect-uris.mdx | 0 .../application/review-config.mdx | 0 .../{integrations => integrate}/auth0.md | 5 +- .../authenticated-mongodb-charts.md | 18 +- .../authmethods.mdx | 0 .../authmethods/basic.mdx | 0 .../authmethods/implicit.mdx | 0 .../authmethods/jwtpk.mdx | 0 .../authmethods/pkce.mdx | 0 .../authmethods/pkcenative.mdx | 0 .../{api => integrate}/export-and-import.md | 0 .../gitlab-self-hosted.md | 5 +- .../identity-brokering.md | 39 +- .../login-users.mdx | 2 +- .../oauth-recommended-flows.md | 0 .../serviceusers.md | 10 +- docs/docs/guides/manage/cloud/billing.md | 38 + .../manage/cloud}/instances.md | 8 + .../manage/cloud}/notifications.md | 0 .../manage/cloud}/overview.md | 0 .../manage/cloud}/start.md | 0 .../manage/cloud}/support.md | 4 +- .../manage/cloud}/users.md | 0 .../console}/applications.mdx | 41 +- .../console}/organizations.mdx | 65 +- docs/docs/guides/manage/console/projects.mdx | 66 + .../customize}/behavior.md | 12 +- .../customize}/branding.md | 2 +- .../customize}/texts.md | 2 +- .../customize}/user-metadata.md | 2 +- .../self-hosted}/configure/_compose.mdx | 8 +- .../self-hosted}/configure/_helm.mdx | 6 +- .../self-hosted}/configure/_linuxunix.mdx | 6 +- .../self-hosted}/configure/configure.mdx | 16 +- .../configure/docker-compose.yaml | 2 +- .../configure/example-zitadel-config.yaml | 2 +- .../configure/example-zitadel-init-steps.yaml | 2 +- .../configure/example-zitadel-secrets.yaml | 2 +- .../example-zitadel-values-secrets.yaml | 2 +- .../configure/example-zitadel-values.yaml | 2 +- .../self-hosted}/custom-domain.md | 2 +- docs/docs/guides/manage/self-hosted/http2.mdx | 15 + .../manage/self-hosted/proxy/_caddy.mdx | 25 + .../manage/self-hosted/proxy/_cloudflare.mdx | 18 + .../self-hosted/proxy/_cloudflare_tunnel.mdx | 3 + .../guides/manage/self-hosted/proxy/_more.mdx | 4 + .../manage/self-hosted/proxy/_nginx.mdx | 65 + .../manage/self-hosted/proxy/_traefik.mdx | 144 + .../self-hosted/proxy/_zitadel_cloud.mdx | 11 + .../guides/manage/self-hosted/proxy/proxy.mdx | 53 + .../guides/manage/self-hosted/tls_modes.mdx | 58 + docs/docs/guides/overview.mdx | 20 +- docs/docs/guides/solution-scenarios/b2b.mdx | 10 +- docs/docs/guides/solution-scenarios/b2c.mdx | 20 +- docs/docs/guides/start/_local_instance.mdx | 1 + docs/docs/guides/start/_zitadel_cloud.mdx | 55 + docs/docs/guides/start/quickstart.mdx | 81 + docs/docs/legal/rate-limit-policy.md | 2 +- docs/docs/manuals/customerportal/billing.md | 23 - .../quickstarts/call-zitadel-api/dot-net.md | 122 - docs/docusaurus.config.js | 16 +- docs/package-lock.json | 23336 ---------------- docs/package.json | 20 +- docs/sidebars.js | 159 +- docs/src/pages/index.js | 18 +- .../portal/customer_portal_create_user.png | Bin 220414 -> 228426 bytes .../portal/customer_portal_delete_user.png | Bin 259935 -> 250676 bytes .../portal/customer_portal_support.png | Bin 231992 -> 228631 bytes .../portal/customer_portal_user_list.png | Bin 188187 -> 169986 bytes .../portal/portal_instance_detail_domain.png | Bin 0 -> 225668 bytes docs/yarn.lock | 3319 ++- 123 files changed, 3212 insertions(+), 25673 deletions(-) rename docs/docs/apis/ratelimits/{accounts.md => login.md} (85%) create mode 100644 docs/docs/examples/call-zitadel-api/dot-net.md rename docs/docs/{quickstarts => examples}/call-zitadel-api/go.md (67%) rename docs/docs/{quickstarts => examples}/identity-proxy/oauth2-proxy.md (92%) rename docs/docs/{quickstarts => examples}/introduction.mdx (76%) rename docs/docs/{quickstarts => examples}/libs.md (100%) rename docs/docs/{quickstarts => examples}/login/angular.md (100%) rename docs/docs/{quickstarts => examples}/login/flutter.md (98%) rename docs/docs/{quickstarts => examples}/login/nextjs.md (100%) rename docs/docs/{quickstarts => examples}/login/react.md (100%) rename docs/docs/{quickstarts => examples}/secure-api/dot-net.md (100%) rename docs/docs/{quickstarts => examples}/secure-api/go.md (84%) delete mode 100644 docs/docs/guides/basics/get-started.mdx delete mode 100644 docs/docs/guides/basics/instance.mdx delete mode 100644 docs/docs/guides/basics/projects.md rename docs/docs/guides/{installation/run => deploy}/_defaultuser.mdx (100%) create mode 100644 docs/docs/guides/deploy/_disclaimer.mdx rename docs/docs/guides/{installation/run/_nextselfhosted.mdx => deploy/_next.mdx} (60%) rename docs/docs/guides/{installation/run/_compose.mdx => deploy/compose.mdx} (58%) rename docs/docs/guides/{installation/run => deploy}/docker-compose.yaml (92%) rename docs/docs/guides/{installation/run/_knative.mdx => deploy/knative.mdx} (60%) rename docs/docs/guides/{installation/run/_helm.mdx => deploy/kubernetes.mdx} (65%) create mode 100644 docs/docs/guides/deploy/linux.mdx rename docs/docs/guides/{installation => deploy}/loadbalancing-example/docker-compose.yaml (96%) rename docs/docs/guides/{installation => deploy}/loadbalancing-example/example-traefik.yaml (100%) rename docs/docs/guides/{installation => deploy}/loadbalancing-example/example-zitadel-config.yaml (93%) rename docs/docs/guides/{installation => deploy}/loadbalancing-example/example-zitadel-init-steps.yaml (79%) rename docs/docs/guides/{installation => deploy}/loadbalancing-example/example-zitadel-secrets.yaml (88%) rename docs/docs/guides/{installation => deploy}/loadbalancing-example/loadbalancing-example.mdx (80%) create mode 100644 docs/docs/guides/deploy/macos.mdx create mode 100644 docs/docs/guides/deploy/overview.mdx delete mode 100644 docs/docs/guides/installation/http2-support.md delete mode 100644 docs/docs/guides/installation/run/_linux.mdx delete mode 100644 docs/docs/guides/installation/run/_macos.mdx delete mode 100644 docs/docs/guides/installation/run/run.mdx rename docs/docs/guides/{api => integrate}/access-zitadel-apis.md (90%) rename docs/docs/guides/{integrations => integrate}/application/application.mdx (100%) rename docs/docs/guides/{integrations => integrate}/application/auth-type.mdx (100%) rename docs/docs/guides/{integrations => integrate}/application/generate-key.mdx (100%) rename docs/docs/guides/{integrations => integrate}/application/redirect-uris.mdx (100%) rename docs/docs/guides/{integrations => integrate}/application/review-config.mdx (100%) rename docs/docs/guides/{integrations => integrate}/auth0.md (86%) rename docs/docs/guides/{integrations => integrate}/authenticated-mongodb-charts.md (81%) rename docs/docs/guides/{authentication => integrate}/authmethods.mdx (100%) rename docs/docs/guides/{authentication => integrate}/authmethods/basic.mdx (100%) rename docs/docs/guides/{authentication => integrate}/authmethods/implicit.mdx (100%) rename docs/docs/guides/{authentication => integrate}/authmethods/jwtpk.mdx (100%) rename docs/docs/guides/{authentication => integrate}/authmethods/pkce.mdx (100%) rename docs/docs/guides/{authentication => integrate}/authmethods/pkcenative.mdx (100%) rename docs/docs/guides/{api => integrate}/export-and-import.md (100%) rename docs/docs/guides/{integrations => integrate}/gitlab-self-hosted.md (84%) rename docs/docs/guides/{authentication => integrate}/identity-brokering.md (81%) rename docs/docs/guides/{authentication => integrate}/login-users.mdx (97%) rename docs/docs/guides/{authorization => integrate}/oauth-recommended-flows.md (100%) rename docs/docs/guides/{authentication => integrate}/serviceusers.md (94%) create mode 100644 docs/docs/guides/manage/cloud/billing.md rename docs/docs/{manuals/customerportal => guides/manage/cloud}/instances.md (86%) rename docs/docs/{manuals/customerportal => guides/manage/cloud}/notifications.md (100%) rename docs/docs/{manuals/customerportal => guides/manage/cloud}/overview.md (100%) rename docs/docs/{manuals/customerportal => guides/manage/cloud}/start.md (100%) rename docs/docs/{manuals/customerportal => guides/manage/cloud}/support.md (68%) rename docs/docs/{manuals/customerportal => guides/manage/cloud}/users.md (100%) rename docs/docs/guides/{basics => manage/console}/applications.mdx (59%) rename docs/docs/guides/{basics => manage/console}/organizations.mdx (61%) create mode 100644 docs/docs/guides/manage/console/projects.mdx rename docs/docs/guides/{customization => manage/customize}/behavior.md (85%) rename docs/docs/guides/{customization => manage/customize}/branding.md (95%) rename docs/docs/guides/{customization => manage/customize}/texts.md (96%) rename docs/docs/guides/{customization => manage/customize}/user-metadata.md (99%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/_compose.mdx (76%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/_helm.mdx (81%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/_linuxunix.mdx (85%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/configure.mdx (88%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/docker-compose.yaml (96%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/example-zitadel-config.yaml (93%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/example-zitadel-init-steps.yaml (78%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/example-zitadel-secrets.yaml (88%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/example-zitadel-values-secrets.yaml (88%) rename docs/docs/guides/{installation => manage/self-hosted}/configure/example-zitadel-values.yaml (91%) rename docs/docs/guides/{installation => manage/self-hosted}/custom-domain.md (87%) create mode 100644 docs/docs/guides/manage/self-hosted/http2.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_caddy.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_cloudflare.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_cloudflare_tunnel.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_more.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_nginx.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_traefik.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/_zitadel_cloud.mdx create mode 100644 docs/docs/guides/manage/self-hosted/proxy/proxy.mdx create mode 100644 docs/docs/guides/manage/self-hosted/tls_modes.mdx create mode 100644 docs/docs/guides/start/_local_instance.mdx create mode 100644 docs/docs/guides/start/_zitadel_cloud.mdx create mode 100644 docs/docs/guides/start/quickstart.mdx delete mode 100644 docs/docs/manuals/customerportal/billing.md delete mode 100644 docs/docs/quickstarts/call-zitadel-api/dot-net.md delete mode 100644 docs/package-lock.json create mode 100644 docs/static/img/manuals/portal/portal_instance_detail_domain.png diff --git a/console/src/app/app.module.ts b/console/src/app/app.module.ts index ce5e780988..19ab2696fc 100644 --- a/console/src/app/app.module.ts +++ b/console/src/app/app.module.ts @@ -87,17 +87,7 @@ const authConfig: AuthConfig = { CommonModule, BrowserModule, HeaderModule, - OAuthModule.forRoot({ - resourceServer: { - allowedUrls: [ - 'https://test.api.zitadel.caos.ch/caos.zitadel.auth.api.v1.AuthService', - 'https://test.api.zitadel.caos.ch/oauth/v2/userinfo', - 'https://test.api.zitadel.caos.ch/caos.zitadel.management.api.v1.ManagementService/', - 'https://preview.api.zitadel.caos.ch', - ], - sendAccessToken: true, - }, - }), + OAuthModule.forRoot(), TranslateModule.forRoot({ loader: { provide: TranslateLoader, diff --git a/deploy/knative/zitadel-knative-service.yaml b/deploy/knative/zitadel-knative-service.yaml index a731522933..41f31e6870 100644 --- a/deploy/knative/zitadel-knative-service.yaml +++ b/deploy/knative/zitadel-knative-service.yaml @@ -7,7 +7,7 @@ spec: template: metadata: annotations: - client.knative.dev/user-image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 + client.knative.dev/user-image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.43-amd64 creationTimestamp: null spec: containerConcurrency: 0 @@ -28,7 +28,9 @@ spec: value: 80 - name: ZITADEL_EXTERNALDOMAIN value: zitadel.default.127.0.0.1.sslip.io - image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 + - name: ZITADEL_S3DEFAULTINSTANCE_CUSTOMDOMAIN + value: zitadel.default.127.0.0.1.sslip.io + image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.43-amd64 name: user-container ports: - containerPort: 8080 diff --git a/docs/.gitignore b/docs/.gitignore index b2d6de3062..924a46bb60 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -14,6 +14,7 @@ .env.development.local .env.test.local .env.production.local +package-lock.json npm-debug.log* yarn-debug.log* diff --git a/docs/docs/apis/actions.md b/docs/docs/apis/actions.md index 83b9d799dc..c6a9c8d678 100644 --- a/docs/docs/apis/actions.md +++ b/docs/docs/apis/actions.md @@ -11,7 +11,7 @@ Go to the [goja GitHub page](https://github.com/dop251/goja) for detailed refere Actions do not have access to any libraries yet. Also, sending HTTP requests is not supported yet. -[We plan to add such features in the future](https://zitadel.ch/roadmap). +[We plan to add such features in the future](https://zitadel.com/roadmap). ## Flows @@ -35,7 +35,7 @@ function doSomething(ctx, api){ ``` ZITADEL supports only the external authentication flow at the moment. -[More flows are coming soon](https://zitadel.ch/roadmap). +[More flows are coming soon](https://zitadel.com/roadmap). ### External authentication flow triggers @@ -103,4 +103,4 @@ ZITADEL supports only the external authentication flow at the moment. ## Further reading - [Actions concept](../concepts/features/actions) -- [Actions guide](../guides/customization/behavior) \ No newline at end of file +- [Actions guide](../guides/manage/customize/behavior) \ No newline at end of file diff --git a/docs/docs/apis/openidoauth/scopes.md b/docs/docs/apis/openidoauth/scopes.md index 8e1da6e6c2..5d1b7f0789 100644 --- a/docs/docs/apis/openidoauth/scopes.md +++ b/docs/docs/apis/openidoauth/scopes.md @@ -24,7 +24,7 @@ In addition to the standard compliant scopes we utilize the following scopes. | Scopes | Example | Description | |:-------------------------------------------------|:-------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| urn:zitadel:iam:org:project:role:{rolename} | `urn:zitadel:iam:org:project:role:user` | By using this scope a client can request the claim urn:zitadel:iam:roles:rolename} to be asserted when possible. As an alternative approach you can enable all roles to be asserted from the [project](../../guides/basics/projects) a client belongs to. | +| urn:zitadel:iam:org:project:role:{rolename} | `urn:zitadel:iam:org:project:role:user` | By using this scope a client can request the claim urn:zitadel:iam:roles:rolename} to be asserted when possible. As an alternative approach you can enable all roles to be asserted from the [project](../../guides/manage/console/projects) a client belongs to. | | urn:zitadel:iam:org:domain:primary:{domainname} | `urn:zitadel:iam:org:domain:primary:acme.ch` | When requesting this scope **ZITADEL** will enforce that the user is a member of the selected organization. If the organization does not exist a failure is displayed | | urn:zitadel:iam:role:{rolename} | | | | `urn:zitadel:iam:org:project:id:{projectid}:aud` | ZITADEL's Project id is `urn:zitadel:iam:org:project:id:69234237810729019:aud` | By adding this scope, the requested projectid will be added to the audience of the access and id token | diff --git a/docs/docs/apis/ratelimits/api.md b/docs/docs/apis/ratelimits/api.md index 1a240a5644..b5fef8da44 100644 --- a/docs/docs/apis/ratelimits/api.md +++ b/docs/docs/apis/ratelimits/api.md @@ -1,9 +1,8 @@ --- -title: API Endpoint Rate Limits +title: API Rate Limits --- - -## api.zitadel.ch + | Path | Description | Effective Limit | |-----------------------------------------------------|--------------------------|----------------------------| @@ -13,9 +12,3 @@ title: API Endpoint Rate Limits | /caos.zitadel.auth.api.v1.AuthService/* | | none | | /management/v1/* | | 240 request per 1 min | | /caos.zitadel.management.api.v1.ManagementService/* | | 240 request per 1 min | - -## issuer.zitadel.ch - -| Path | Description | Effective Limit | -|------|-----------------------------------------|-----------------| -| /* | Sum of all request to the issuer domain | none | diff --git a/docs/docs/apis/ratelimits/accounts.md b/docs/docs/apis/ratelimits/login.md similarity index 85% rename from docs/docs/apis/ratelimits/accounts.md rename to docs/docs/apis/ratelimits/login.md index 292c89e107..fe0f4b6261 100644 --- a/docs/docs/apis/ratelimits/accounts.md +++ b/docs/docs/apis/ratelimits/login.md @@ -2,8 +2,7 @@ title: Login Rate Limits --- - -## accounts.zitadel.ch + | Path | Description | Effective Limit | |---------------------|----------------------------------------|---------------------------| diff --git a/docs/docs/concepts/features/actions.md b/docs/docs/concepts/features/actions.md index 4fd9582d93..3ea45147c1 100644 --- a/docs/docs/concepts/features/actions.md +++ b/docs/docs/concepts/features/actions.md @@ -7,7 +7,7 @@ This is useful when you have special business requirements that ZITADEL doesn't :::caution ZITADEL actions is in an early development stage. -In the [roadmap](https://zitadel.ch/roadmap), you see how we are planning to expand and improve it. +In the [roadmap](https://zitadel.com/roadmap), you see how we are planning to expand and improve it. Please tell us about your needs and help us prioritize further fixes and features. ::: @@ -34,5 +34,5 @@ Within the JavaScript code, you can read and manipulate the state. ## Further reading -- [Assign users a role after they register using an external identity provider](../../guides/customization/behavior) +- [Assign users a role after they register using an external identity provider](../../guides/manage/customize/behavior) - [Actions reference](../../apis/actions) \ No newline at end of file diff --git a/docs/docs/concepts/structure/_instance_description.mdx b/docs/docs/concepts/structure/_instance_description.mdx index c90e31893f..4a77099507 100644 --- a/docs/docs/concepts/structure/_instance_description.mdx +++ b/docs/docs/concepts/structure/_instance_description.mdx @@ -2,4 +2,4 @@ An instance is the top hierarchy in the ZITADEL. Within an instance all the default [settings](/docs/concepts/structure/policies), such as branding, login policy, password policy, etc. for the system can be configured. One instance normally runs on one domain and has one issuer. (e.g login.customer.com) -One instance can contain multiple [organizations](./organizations). Which can represent the own company or the customers. +One instance can contain multiple [organizations](/docs/concepts/structure/organizations). Which can represent the own company or the customers. diff --git a/docs/docs/concepts/structure/_org_description.mdx b/docs/docs/concepts/structure/_org_description.mdx index 65da7ade35..89894816e8 100644 --- a/docs/docs/concepts/structure/_org_description.mdx +++ b/docs/docs/concepts/structure/_org_description.mdx @@ -1,6 +1,6 @@ ZITADEL is organized around the idea that: -* Multiple organizations can be managed within one [instance](./instance). +* Multiple organizations can be managed within one [instance](/docs/concepts/structure/instance). * organizations can grant each other rights to self-manage certain aspects of the IAM (eg, roles for access management) * organizations are vessels for users and projects diff --git a/docs/docs/concepts/structure/applications.md b/docs/docs/concepts/structure/applications.md index 34998de4cb..f18b729c41 100644 --- a/docs/docs/concepts/structure/applications.md +++ b/docs/docs/concepts/structure/applications.md @@ -19,4 +19,4 @@ As a fourth option there's the API (OAuth Resource Server), which generally has Depending on the app type registered, there are small differences in the possible settings. Please read the following guide about the -[different-client-profiles](../../guides/authorization/oauth-recommended-flows#different-client-profiles). +[different-client-profiles](../../guides/integrate/oauth-recommended-flows.md#different-client-profiles). diff --git a/docs/docs/concepts/structure/policies.md b/docs/docs/concepts/structure/policies.md index cba007b1a7..6fb2e38326 100644 --- a/docs/docs/concepts/structure/policies.md +++ b/docs/docs/concepts/structure/policies.md @@ -97,7 +97,7 @@ You can configure all kinds of external identity providers for identity brokerin Create a new identity provider configuration and enable it in the list afterwards. For a detailed guide about how to configure a new identity provider for identity brokering have a look at our guide: -[Identity Brokering](../../guides/authentication/identity-brokering) +[Identity Brokering](../../guides/integrate/identity-brokering) ## Domain policy @@ -105,7 +105,7 @@ In the domain policy you have two different settings. One is the "user_login_must_be_domain", by setting this all the users within an organisation will be suffixed with the domain of the organisation. The second is "validate_org_domains" if this is set to true all created domains on an organisation must be verified per acme challenge. -More about how to verify a domain [here](../../guides/basics/organizations#domain-verification-and-primary-domain). +More about how to verify a domain [here](../../guides/manage/console/organizations#domain-verification-and-primary-domain). If it is set to false, all registered domain will automatically be created as verified and the users will be able to use the domain for login. ## Branding diff --git a/docs/docs/concepts/structure/projects.md b/docs/docs/concepts/structure/projects.md index 8484018e3b..da2dd82fff 100644 --- a/docs/docs/concepts/structure/projects.md +++ b/docs/docs/concepts/structure/projects.md @@ -10,7 +10,7 @@ import ProjectDescription from './_project_description.mdx'; ## Project Settings -On default the login screen will be shown in the private labeling settings of the system (e.g zitadel.ch). +On default the login screen will be shown in the private labeling settings of the system. With the [primary domain scope](../../apis/openidoauth/scopes#reserves-scopes) it is possible to trigger the setting of the given organization. But this will also restrict, the login to user of the given organization. @@ -18,7 +18,7 @@ With the private labeling setting it is possible to choose which settings should | Setting | Description | | --- | --- | -| Unspecified | If nothing is specified the default will trigger. (System settings zitadel.ch) | +| Unspecified | If nothing is specified the default will trigger. (System settings) | | Enforce project resource owner policy | This setting will enforce the private labeling of the organization (resource owner) of the project through the whole login process. | | Allow Login User resource owner policy | With this setting first the private labeling of the organization (resource owner) of the project will trigger. As soon as the user and its organization (resource owner) is identified by ZITADEL, the settings will change to the organization of the user. | diff --git a/docs/docs/concepts/usecases/saas.md b/docs/docs/concepts/usecases/saas.md index a7b471a0b1..b0a5f7ec59 100644 --- a/docs/docs/concepts/usecases/saas.md +++ b/docs/docs/concepts/usecases/saas.md @@ -67,5 +67,5 @@ If the setting is set to `Ensure Project Resource Owner Setting`, the private la The last possibility is to show the private labeling of the project organization and as soon as the user is identitfied the user organization settings will be triggered. For this the Allow User Resource Owner Setting should be set. :::note -More about [Private Labeling](../../guides/customization/branding) +More about [Private Labeling](../../guides/manage/customize/branding) ::: \ No newline at end of file diff --git a/docs/docs/examples/call-zitadel-api/dot-net.md b/docs/docs/examples/call-zitadel-api/dot-net.md new file mode 100644 index 0000000000..f5e32d1a4e --- /dev/null +++ b/docs/docs/examples/call-zitadel-api/dot-net.md @@ -0,0 +1,118 @@ +--- +title: .NET +--- + +This integration guide shows you how to integrate **ZITADEL** into your .NET application. +It demonstrates how to fetch some data from the ZITADEL management API. + +At the end of the guide you should have an application able to read the details of your organization. + +If you need any other information about the .NET SDK go to the [documentation](https://caos.github.io/zitadel-net/) of the SDK itself. +## Prerequisites + +The client [SDK](https://github.com/zitadel/zitadel-net) will handle all necessary OAuth 2.0 requests and send the required headers to the ZITADEL API. +All that is required, is a service account with an Org Owner (or another role, depending on the needed api requests) role assigned and its key JSON. + +However, we recommend you read the guide on [how to access ZITADEL API](../../guides/integrate/access-zitadel-apis) and the associated guides for a basic knowledge of : + - [Recommended Authorization Flows](../../guides/integrate/oauth-recommended-flows.md) + - [Service Users](../../guides/integrate/serviceusers.md) + +> Be sure to have a valid key JSON and that its service account is either ORG_OWNER or at least ORG_OWNER_VIEWER before you continue with this guide. + +## .NET Setup + +### Create a .NET application + +Use the IDE of your choice or the command line to create a new application. + +```bash +dotnet new web +``` + +### Install the package + +Install the package via nuget + +```bash +dotnet add package Zitadel.Api +``` + +### Create example client + +Change the program.cs file to the content below. This will create a client for the management api and call its `GetMyUsers` function. +The SDK will make sure you will have access to the API by retrieving a Bearer Token using JWT Profile with the provided scopes (`openid` and `urn:zitadel:iam:org:project:id:{projectID}:aud`). + +Make sure to fill the const `apiUrl`, `apiProject` and `personalAccessToken` with your own instance data. The used vars below are from a test instance, to show you how it should look. +The apiURL is the domain of your instance you can find it on the instance detail in the Customer Portal or in the Console +The apiProject you will find in the ZITADEL project in the first organization of your instance. + +```csharp +// This file contains two examples: +// 1. An example with a service account "personal access token" to access the ZITADEL API. +// 2. An example with a service account "jwt profile key" to access the ZITADEL API. + +using Zitadel.Api; +using Zitadel.Credentials; + +const string apiUrl = "https://zitadel-libraries-l8boqa.zitadel.cloud"; +const string personalAccessToken = "ge85fvmgTX4XAhjpF0XGpelB2vn9LZanJaqmUQDuf7iTpKVowb44LFl-86pqY2mfJCEoIOk"; + +// or create the token provider directly: +// new StaticTokenProvider(token) +var client = Clients.AuthService(new(apiUrl, ITokenProvider.Static(personalAccessToken))); +var result = await client.GetMyUserAsync(new()); +Console.WriteLine($"User: {result.User}"); + +const string apiProject = "170078979166961921"; +var serviceAccount = ServiceAccount.LoadFromJsonString( + @" +{ + ""type"": ""serviceaccount"", + ""keyId"": ""170084658355110145"", + ""key"": ""-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAnQisbU4FuLmjLR9I2Q01Rm9Mx6WySat2mbxgmOzu04oXuESI\nyS+RkiimdN0khjqouBftYqtVes7yngMLq3E8hMCwv/kLE+YeXphZXnn8tps8M2gV\n7S//uCp9LooK9qeh0lSkOqIsh0atj/l7NAHFxnhuNhfmn8XIYJNLVNSj5yzTri5E\nSn92SAsUQLSONgr7IEmIjcuPtYeU0iLvVno52ljZHnPX2WJ0HEZv44nZpkR4qBfv\n3hJzNx7sd4TdPGHHugJD8jdG/X4bAxwL5XGHZu18cUVM5RerSMpFQHSuIGgpKmK4\nWlM1AJGeut6EX/SrCxUDvhyOnXAgqhunTUmi6QIDAQABAoIBAHn7y92Y1y743X3m\nqHMbJIBTYyRPXaCGljm0MKF6o8clpWlZq5wE3KLZ+vwa8Q1oMbnXtGqKR3t/mM4P\n9Ze2/djtyh9GOUm632qCFCIkxp+fFPOl7ipyt8V7FAT77KpP6490eqKlacunppmJ\nph/vJJAY6xwQEvGX9SC4KrN5/txLKXbVtR3V2RXy9sxbbL4cpnklmRBMeXQkpwEM\nTKELUr5Rmhg9KvS3yALgVv0dIRtOA8Z995R234hXfY0St48YEvZtsxeme47u2CVl\nHJcVH4aa9Sw6XlgAEQBxqbQHpcLvUIu3XempO7VfGklWE6OlGuEcnUWpJCD8jMZW\nPYtt9LUCgYEAwi8josS3Iyto+DMJjJKCw175N2cmFMxBGu9Rw4aHjTiN57z7AUkn\nbmT44WnSmc1bCLC+nMB34vhiEyBKXYrH7zgbeMO8QDG3aO6gXdod/IdsieZR8E3b\ngUA1wtZYyRbc7eo8U4Nqkv1NXVRuDJkz/Mfoy+m1BVKcW7YeZaaZN9MCgYEAzwYB\n/LAiJoyx5UPwuieizlT7kHI7uvZRo4oLx+cZipNCJ0NGKgX4l1NIYLaNDbCoT9N0\nylico+kn+nihzDmD6SjY2hHGSIHk7AnJOcW+Bk5TfsYb8clxfgX40udLMIS0F13R\nrJt0gD9x0O3AZv4MV9cSI0/Md0tbWePgrLI44NMCgYEAojj7TlmEnY8AbIlGqvci\n4tCO5qf3elyA712LMwtKZsIeWsDX+OUCWglkmfvsAq06JfJx60YnYagbVtsdBTSR\nftmiqarrs71U+gaQVpeHgZYpKLMPNO/2Nu5Le2/SUHwXKXML3sDk4dNXNGb6YPAE\nLGNdqiyeG8o98agdkNIzIh0CgYEAlTGhMPfGRL3UXoNN8vopjEUWXozUmvJ090S/\nJLtZXtKtNBp5cEOJWZT9biVhFeKgCZc8ba7ahA29b/aLs+AnPlrfnJh+qzZhQfHz\ngJ0PSwAbkBs5fFBOaCHppiRlvXuFRemo95m4pcwTPBx7Mj4Xqx4lxij2E2rNVMSy\n4AI4l10CgYBwefqXt8B+D+0EvmhyHk19Tk8/fPelclJUv/IVI59c0F9UMAA2rD1U\nNW6k9251OGU7mQkztluNvl13qtAW/DveOjkFeDJIMzhFjravpLQXhUK4ETnM44YL\nFbClVGJaHYSHgOkNpcN5lYVLoyEvzv9rEPwBqpZRVnwWj6L+/I2L5Q==\n-----END RSA PRIVATE KEY-----\n"", + ""userId"": ""170079991923474689"" +}"); +client = Clients.AuthService( + new( + apiUrl, + ITokenProvider.ServiceAccount( + serviceAccount, + apiUrl, + apiProject))); +result = await client.GetMyUserAsync(new()); +Console.WriteLine($"User: {result.User}"); +``` + +### Test client + +After you have configured everything correctly, you can simply start the example by: + +```bash +dotnet run +``` + +This will output something similar to: + +``` +User: {"FirstName": "MyName", "LastName": "MyLastName" ... } +``` + +## Completion + +You have successfully used the ZITADEL .NET SDK to call the auth API! +To use the auth API you will not need a specific role, because only an authenticated user is needed. + +For accessing the admin or management API the user will need some specific roles. +If you encountered an error (e.g. `code = PermissionDenied desc = No matching permissions found`), +ensure your service user has the required permissions by assigning the `ORG_OWNER` or `ORG_OWNER_VIEWER` role +and check the mentioned [guides](#prerequisites) at the beginning. + +If you've run into any other problem, don't hesitate to contact us or raise an issue on [ZITADEL](https://github.com/zitadel/zitadel/issues) or in the [SDK](https://github.com/zitadel/zitadel-go/issues). + +### Whats next? + +Now you can proceed implementing our APIs by adding more calls. + +Checkout more [examples from the SDK](https://github.com/zitadel/zitadel-go/blob/main/example) or refer to our [API Docs](../../apis/introduction). + +> This guide will be updated soon to show you how to use the SDK for your own API as well. diff --git a/docs/docs/quickstarts/call-zitadel-api/go.md b/docs/docs/examples/call-zitadel-api/go.md similarity index 67% rename from docs/docs/quickstarts/call-zitadel-api/go.md rename to docs/docs/examples/call-zitadel-api/go.md index 6a94eb100c..8a20fb9db8 100644 --- a/docs/docs/quickstarts/call-zitadel-api/go.md +++ b/docs/docs/examples/call-zitadel-api/go.md @@ -12,9 +12,9 @@ At the end of the guide you should have an application able to read the details The client [SDK](https://github.com/zitadel/zitadel-go) will handle all necessary OAuth 2.0 requests and send the required headers to the ZITADEL API using our [OIDC client library](https://github.com/zitadel/oidc). All that is required, is a service account with an Org Owner (or another role, depending on the needed api requests) role assigned and its key JSON. -However, we recommend you read the guide on [how to access ZITADEL API](../../guides/api/access-zitadel-apis) and the associated guides for a basic knowledge of : - - [Recommended Authorization Flows](../../guides/authorization/oauth-recommended-flows) - - [Service Users](../../guides/authentication/serviceusers) +However, we recommend you read the guide on [how to access ZITADEL API](../../guides/integrate/access-zitadel-apis) and the associated guides for a basic knowledge of : + - [Recommended Authorization Flows](../../guides/integrate/oauth-recommended-flows.md) + - [Service Users](../../guides/integrate/serviceusers.md) > Be sure to have a valid key JSON and that its service account is either ORG_OWNER or at least ORG_OWNER_VIEWER before you continue with this guide. @@ -25,34 +25,49 @@ However, we recommend you read the guide on [how to access ZITADEL API](../../gu You need to add the SDK into Go Modules by: ```bash -go get github.com/zitadel/zitadel-go +go get github.com/zitadel/zitadel-go/v2 ``` ### Create example client Create a new go file with the content below. This will create a client for the management api and call its `GetMyOrg` function. -The SDK will make sure you will have access to the API by retrieving a Bearer Token using JWT Profile with the provided scopes (`openid` and `urn:zitadel:iam:org:project:id:69234237810729019:aud`). +The SDK will make sure you will have access to the API by retrieving a Bearer Token using JWT Profile with the provided scopes (`openid` and `urn:zitadel:iam:org:project:id:{projectID}:aud`). +Make sure to fill the vars `issuer`, `api`, `projectID `and `orgID` + +The issuer and api is the domain of your instance you can find it on the instance detail in the ZITADEL Cloud Customer Portal or in the ZITADEL Console. +The projectID you will find in the ZITADEL project in the first organization of your instance and the orgID on the first organization. ```go package main import ( - "context" - "log" - - "github.com/zitadel/oidc/pkg/oidc" - - "github.com/zitadel/zitadel-go/pkg/client/management" - "github.com/zitadel/zitadel-go/pkg/client/middleware" - "github.com/zitadel/zitadel-go/pkg/client/zitadel" - pb "github.com/zitadel/zitadel-go/pkg/client/zitadel/management" + "context" + "flag" + "log" + + "github.com/zitadel/oidc/pkg/oidc" + + "github.com/zitadel/zitadel-go/v2/pkg/client/management" + "github.com/zitadel/zitadel-go/v2/pkg/client/middleware" + "github.com/zitadel/zitadel-go/v2/pkg/client/zitadel" + pb "github.com/zitadel/zitadel-go/v2/pkg/client/zitadel/management" ) +var ( + issuer = flag.String("issuer", "", "issuer of your ZITADEL instance (in the form: https://.zitadel.cloud or https://)") + api = flag.String("api", "", "gRPC endpoint of your ZITADEL instance (in the form: .zitadel.cloud:443 or :443)") + projectID = flag.String("projectID", "", "ZITADEL projectID in your instance") + orgID = flag.String("orgID", "", "orgID to set for overwrite example") +) func main() { + flag.Parse() + client, err := management.NewClient( - []string{oidc.ScopeOpenID, zitadel.ScopeZitadelAPI()}, - ) + *issuer, + *api, + []string{oidc.ScopeOpenID, zitadel.ScopeProjectID(*projectID)}, + ) if err != nil { log.Fatalln("could not create client", err) } @@ -64,12 +79,18 @@ func main() { }() ctx := context.Background() + resp, err := client.GetMyOrg(ctx, &pb.GetMyOrgRequest{}) if err != nil { log.Fatalln("call failed: ", err) } log.Printf("%s was created on: %s", resp.Org.Name, resp.Org.Details.CreationDate.AsTime()) -} + + respOverwrite, err := client.GetMyOrg(middleware.SetOrgID(ctx, *orgID), &pb.GetMyOrgRequest{}) + if err != nil { + log.Fatalln("call failed: ", err) + } + log.Printf("%s was created on: %s", respOverwrite.Org.Name, respOverwrite.Org.Details.CreationDate.AsTime()) ``` #### Key JSON @@ -91,16 +112,6 @@ client, err := management.NewClient( ) ``` -#### Custom ZITADEL instance - -If your client will not use ZITADEL Cloud (zitadel.ch), be sure to provide the correct values for the ZITADEL ProjectID, Issuer and API options: -```go -client, err := management.NewClient( - []string{oidc.ScopeOpenID, zitadel.ScopeProjectID("ZITADEL-ProjectID")}, - zitadel.WithCustomURL("https://issuer.custom.ch", "api.custom.ch:443") -) -``` - ### Test client After you have configured everything correctly, you can simply start the example by: diff --git a/docs/docs/quickstarts/identity-proxy/oauth2-proxy.md b/docs/docs/examples/identity-proxy/oauth2-proxy.md similarity index 92% rename from docs/docs/quickstarts/identity-proxy/oauth2-proxy.md rename to docs/docs/examples/identity-proxy/oauth2-proxy.md index 2c35a82720..dc5f635fe6 100644 --- a/docs/docs/quickstarts/identity-proxy/oauth2-proxy.md +++ b/docs/docs/examples/identity-proxy/oauth2-proxy.md @@ -2,14 +2,16 @@ title: OAuth 2.0 Proxy --- + + [OAuth2-proxy](https://github.com/oauth2-proxy/oauth2-proxy) is a project which allows services to delegate the authentication flow to a IDP, for example **ZITADEL** -## Configure Zitadel +## Configure ZITADEL ### Setup Application and get Keys Before we can start building our application we have do do a few configuration steps in ZITADEL Console. -You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your [Project](https://console.zitadel.ch/projects) and add a new application at the top of the page. +You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your project and add a new application at the top of the page. Select Web Application and continue. We recommend that you use [Authorization Code](../../apis/openidoauth/grant-types#authorization-code) for the OAuth 2.0 Proxy. @@ -41,7 +43,7 @@ provider = "oidc" user_id_claim = "sub" #uses the subject as ID instead of the email provider_display_name = "ZITADEL" redirect_url = "http://127.0.0.1:4180/oauth2/callback" -oidc_issuer_url = "https://issuer.zitadel.ch" +oidc_issuer_url = "https://{your_domain}.zitadel.cloud" upstreams = [ "https://example.corp.com" ] diff --git a/docs/docs/quickstarts/introduction.mdx b/docs/docs/examples/introduction.mdx similarity index 76% rename from docs/docs/quickstarts/introduction.mdx rename to docs/docs/examples/introduction.mdx index 9a7c8be33b..00511507ae 100644 --- a/docs/docs/quickstarts/introduction.mdx +++ b/docs/docs/examples/introduction.mdx @@ -11,10 +11,10 @@ Get started with ZITADEL quickly by reading a quickstart or by cloning an exampl - - - - + + + + diff --git a/docs/docs/quickstarts/libs.md b/docs/docs/examples/libs.md similarity index 100% rename from docs/docs/quickstarts/libs.md rename to docs/docs/examples/libs.md diff --git a/docs/docs/quickstarts/login/angular.md b/docs/docs/examples/login/angular.md similarity index 100% rename from docs/docs/quickstarts/login/angular.md rename to docs/docs/examples/login/angular.md diff --git a/docs/docs/quickstarts/login/flutter.md b/docs/docs/examples/login/flutter.md similarity index 98% rename from docs/docs/quickstarts/login/flutter.md rename to docs/docs/examples/login/flutter.md index 2cc78b1ea9..b4392b5377 100644 --- a/docs/docs/quickstarts/login/flutter.md +++ b/docs/docs/examples/login/flutter.md @@ -268,7 +268,7 @@ Future _authenticate() async { ); final userInfoResponse = await get( - Uri.parse('https://[your-instance].zitadel.cloud/oauth/v2/userinfo'), + Uri.parse('https://[your-instance].zitadel.cloud/oidc/v1/userinfo'), headers: { HttpHeaders.authorizationHeader: 'Bearer ${result.accessToken}', HttpHeaders.acceptHeader: 'application/json; charset=UTF-8' @@ -333,7 +333,7 @@ class _MyHomePageState extends State { ); final userInfoResponse = await get( - Uri.parse('https:/[your-domain]-[random-string].zitadel.cloud/oauth/v2/userinfo'), // replace with your instance + Uri.parse('https:/[your-domain]-[random-string].zitadel.cloud/oidc/v1/userinfo'), // replace with your instance headers: { HttpHeaders.authorizationHeader: 'Bearer ${result.accessToken}', HttpHeaders.acceptHeader: 'application/json; charset=UTF-8' diff --git a/docs/docs/quickstarts/login/nextjs.md b/docs/docs/examples/login/nextjs.md similarity index 100% rename from docs/docs/quickstarts/login/nextjs.md rename to docs/docs/examples/login/nextjs.md diff --git a/docs/docs/quickstarts/login/react.md b/docs/docs/examples/login/react.md similarity index 100% rename from docs/docs/quickstarts/login/react.md rename to docs/docs/examples/login/react.md diff --git a/docs/docs/quickstarts/secure-api/dot-net.md b/docs/docs/examples/secure-api/dot-net.md similarity index 100% rename from docs/docs/quickstarts/secure-api/dot-net.md rename to docs/docs/examples/secure-api/dot-net.md diff --git a/docs/docs/quickstarts/secure-api/go.md b/docs/docs/examples/secure-api/go.md similarity index 84% rename from docs/docs/quickstarts/secure-api/go.md rename to docs/docs/examples/secure-api/go.md index f677a28e48..670a1452b6 100644 --- a/docs/docs/quickstarts/secure-api/go.md +++ b/docs/docs/examples/secure-api/go.md @@ -20,7 +20,7 @@ All that is required, is an API and its key JSON. But for complete You need to add the SDK into Go Modules by: ```bash -go get github.com/zitadel/zitadel-go +go get github.com/zitadel/zitadel-go/v2 ``` ### Create example API @@ -29,22 +29,28 @@ Create a new go file with the content below. This will create an API with two en back `ok` and the current timestamp. On `/protected` it will respond the same but only if a valid access_token is sent. The token must not be expired and the API has to be part of the audience (either client_id or project_id). +Make sure to fill the var `issuer` with your own domain. This is the domain of your instance you can find it on the instance detail in the ZITADEL Cloud Customer Portal or in the ZITADEL Console. ```go package main import ( + "flag" "log" "net/http" "time" - api_mw "github.com/zitadel/zitadel-go/pkg/api/middleware" - http_mw "github.com/zitadel/zitadel-go/pkg/api/middleware/http" - "github.com/zitadel/zitadel-go/pkg/client" - "github.com/zitadel/zitadel-go/pkg/client/middleware" + http_mw "github.com/zitadel/zitadel-go/v2/pkg/api/middleware/http" + "github.com/zitadel/zitadel-go/v2/pkg/client/middleware" +) + +var ( + issuer = flag.String("issuer", "", "issuer of your ZITADEL instance (in the form: https://.zitadel.cloud or https://)") ) func main() { - introspection, err := http_mw.NewIntrospectionInterceptor(client.Issuer, middleware.OSKeyPath()) + flag.Parse() + + introspection, err := http_mw.NewIntrospectionInterceptor(*issuer, middleware.OSKeyPath()) if err != nil { log.Fatal(err) } @@ -82,16 +88,6 @@ introspection, err := http_mw.NewIntrospectionInterceptor( ) ``` -#### Custom ZITADEL instance - -If your client will not use ZITADEL Cloud (zitadel.ch), be sure to provide the correct Issuer: -```go -introspection, err := http_mw.NewIntrospectionInterceptor( - "https://issuer.custom.ch", - middleware.OSKeyPath(), -) -``` - ### Test API After you have configured everything correctly, you can simply start the example by: diff --git a/docs/docs/guides/basics/get-started.mdx b/docs/docs/guides/basics/get-started.mdx deleted file mode 100644 index 4b76072a9f..0000000000 --- a/docs/docs/guides/basics/get-started.mdx +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Get started ---- - -import Column from "../../../src/components/column"; - -Most applications need to know the identity of a user allowing to securely store user data in the cloud and provide the same personalised experience across all of the user's devices. - -ZITADEL's authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users in your application. It supports authentication using passwords and applies additional security with the help of a second factor, for example OTP, to ensure a safe and secure access. -It additionally leverages industry standards like OAuth 2.0 and OpenID Connect such that it can be easily integrated in your custom backend. - -This provides a quick start guide on how to register your organization as well as creating your first project. - -## Trying out ZITADEL on zitadel.cloud - -1. Go to zitadel.cloud to create your first ZITADEL instance. If you already have a ZITADEL instance sign in with your Customer Portal user.already -2. Enter all the data for your instance -3. By clicking "Let's go" we will create a new instance in the "Free" tier, where you already get all the features -4. You will now get two different initialize emails. One is to verify the user for the Customer Portal and one for the first user in your ZITADEL instance - -You can now use the Customer Portal and you are ready to configure your ZITADEL instance - -![Customer Portal Landing Page](/img/manuals/portal/customer_portal_landing_page.png) - -## Login to your instance - -After you have initialized your first admin user of the new created ZITADEL instance. You can access the Instance Console, to manage all your resources. -Login with the user you have initialized. - -![Console Landing Page](/img/console_dashboard.png) - -### Elect Managers - -ZITADEL allows you to give other users control over ZITADEL Console itself. This can be restricted to some kind of write and/or read. This can be especially useful for directing administration over several users. You can have managers able to edit project settings and others able to create/add users only. -Read the [guides](../overview) for more information. - -> Note: ZITADEL Managers are always located on the right sidepanel of console. - -### Integrating an application - -After creating your project you can start integrating your applications. -After choosing your project add a client application on the top of the page. -The wizard should provide some guidance what client is the proper for you. If you are still unsure consult our [Guide Project](projects). - -## Login to Customer Portal - -Use your Customer Portal user to login to the ZITADEL Customer Portal. -Here you can manage all your different instances, subscriptions and billing data. - -1. Click on the new created instance in the list -2. In the section Domains you can find the generated domain for your instanc -3. Click on the domain and you will be able to login - -Find out more about the Customer Portal [here](/docs/manuals/customerportal/overview). diff --git a/docs/docs/guides/basics/instance.mdx b/docs/docs/guides/basics/instance.mdx deleted file mode 100644 index abb5895af5..0000000000 --- a/docs/docs/guides/basics/instance.mdx +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: Instance ---- - - -| | | -| --- | --- | -| Description | Learn what an instance in ZITADEL is and what kind of configurations you are able to do. | -| Learning Outcomes | In this module you will:
  • Learn about the instance
  • Create a new instance
  • Add a custom domain
  • configure some settings
| -|Prerequisites|None| - -## What is an instance? - -import InstanceDescription from '../../concepts/structure/_instance_description.mdx'; -import Column from '../../../src/components/column'; - - - -## Exercise - Create a new instance - -The creation and management of an instance takes place in the Customer Portal. -To manage your existing instances you need login with your Customer Portal user. Be aware that this is not the same user as in the instance itself. - -![Create new instance](/img/console_org_register.png) - -## Exercise - Add a custom domain - -1. Browse to your instance -2. Click **Add custom domain** -3. To start the domain verification click the domain name and a dialog will appear, where you can choose between DNS or HTTP challenge methods. -4. For example, create a TXT record with your DNS provider for the used domain and click verify. ZITADEL will then proceed an check your DNS. -5. When the verification is successful you have the option to activate the domain by clicking **Set as primary** - -![Verify Domain](/img/console_verify_domain.gif) - -> **_Please note:_** Do not delete the verification code, as ZITADEL Customer Portal will re-check the ownership of your domain from time to time - -## Exercise - Change default settings of the instance - -Redirect to your instance and login with your generated user ??? -Go to the settings with the button at the top right of the header. -You will find all different kind of default settings here. -From password policy, to branding to texts of the login ui. - -For this case we will change the branding. -Choose modify on the setting "branding". -You can switch between the light and the dark mode. Upload your logo and define the colors you like to have. -Make sure to click the button "apply configuration" after you are finish to trigger your settings. - -## Knowledge Check - -* Instance has to be configured in the Customer Portal - - [ ] yes - - [ ] no -* I can use the same user for the Customer Portal as for my created instance - - [ ] yes - - [ ] no -* I will find the default settings in the Customer Portal - - [ ] yes - - [ ] no - -
- - Solutions - - -* Users exist only within projects or clients - - [x] yes - - [ ] no -* I can use the same user for the Customer Portal as for my created instance - - [ ] yes - - [x] no (Due to separation of concern you will not be able to use the same user for both) -* I will find the default settings in the Customer Portal - - [ ] yes - - [x] no (The default settings are after login to you instance on the settings page) - -
- -## Summary - -* Create your instance in the Customer Portal -* Verify your domain in the Customer Portal to improve user experience; remember to not delete the verification code to allow recheck of ownership -* You can manage all your default settings in the instance itself - -Where to go from here: - -* Create an organization -* Create a project -* Setup Passwordless MFA -* Manage ZITADEL Roles diff --git a/docs/docs/guides/basics/projects.md b/docs/docs/guides/basics/projects.md deleted file mode 100644 index 79e43860f1..0000000000 --- a/docs/docs/guides/basics/projects.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: Projects - ---- - -| | | -| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Description | Learn the basics about applications, roles and authorizations, and how projects allow you to group these together. | -| Learning Outcomes | In this module you will:
  • Learn about projects and granted projects
  • Create a new project
  • Creating simple roles and authorizations
  • Create an organization grant for your project
| -| Prerequisites |
  • ZITADEL organizations
  • Role Based Access Management (RBAC)
| - -## What is a project? - -import ProjectDescription from '../../concepts/structure/_project_description.mdx'; - - - -The goal of this module is to give you an overview, but not dive too deep into details around managing access rights and delegating management of roles to third parties. So let’s create a straightforward example project first. - -## Exercise - Create a simple project - -Visit or select “Projects” within your organization, then click the button to create a new project. - -![Empty Project](/img/console_projects_empty.png) - -Enter the name “ My first project” and continue. - -Let’s make this more interesting and add some basic roles and authorizations to your project and then confirm the scope of the roles and authorizations. - -Jump to the section ROLES and create two new roles with the following values - -* Key: reader -* Display Name: Reader -* Group: user - -and - -* Key: editor -* Display Name: Editor -* Group: user - -![Add New Roles](/img/console_projects_add_new_roles.gif) - -Now, you can add roles to your own user, or you can create a new user. To create a new user, go to Users and click “New”. Enter the required contact details and save by clicking “Create”. - -![Create new user](/img/console_users_create_new_user.gif) - -To grant users certain roles, you need to create authorizations. Go back to the project, and jump to the section AUTHORIZATIONS. - -![Verify your authorization](/img/console_projects_create_authorization.gif) - -You can verify the role grant on the user. Select Users from the navigation menu and click on the user Coyote. Scroll down to the section AUTHORIZATION, there you should be able to verify that the user has the role ‘reader’ for your project ‘My first project’. - -![Organization grant](/img/console_projects_authorization_created.png) - -Now create another project (eg. “My second project”) and verify that there are no roles or authorizations on your second project. - -## What is a granted project? - -import GrantedProjectDescription from '../../concepts/structure/_granted_project_description.mdx'; - - - -## Exercise - Grant a project - -1. Visit the project that you have created before, then in the section GRANTED ORGANIZATIONS click New. -2. Enter the domain ‘acme.caos.ch’, search the organization and continue to the next step. -3. Select some roles you would like to grant to the organization ACME and confirm. -4. You should now see ACME-CAOS in the section GRANTED ORGANIZATIONS - -![Grant a project](/img/projects_create_org_grant.gif) - -## Knowledge Check (2) - -* You can setup multiple projects within an organization to manage scope - - [ ] yes - - [ ] no -* Authorizations are define more detailed access rights within your application - - [ ] yes - - [ ] no -* Your projects as well as projects granted to your organization are visible within the Tab Projects of your organization - - [ ] yes - - [ ] no - -
- - Solutions - - -* You can setup multiple projects within an organization to manage scope - - [x] yes - - [ ] no -* Authorizations are define more detailed access rights within your application - - [ ] yes - - [x] no (Authorizations link users to certain roles) -* Your projects as well as projects granted to your organization are visible within the Tab Projects of your organization - - [ ] yes - - [x] no (Projects and Granted Projects are shown on different tabs) - -
- -## Summary (2) - -* Manage scope of roles, authorizations and applications with projects -* Create and assign roles to users of your organization within your project -* Use project grants to enable other organizations to self-manage access rights (roles) to your applications - -Where to go from here: - -* Manage roles for your project -* Grant roles to other organizations or users -* Service Users -* Manage IAM Roles -* Setup a SaaS Application with granted projects (Learning Path) diff --git a/docs/docs/guides/installation/run/_defaultuser.mdx b/docs/docs/guides/deploy/_defaultuser.mdx similarity index 100% rename from docs/docs/guides/installation/run/_defaultuser.mdx rename to docs/docs/guides/deploy/_defaultuser.mdx diff --git a/docs/docs/guides/deploy/_disclaimer.mdx b/docs/docs/guides/deploy/_disclaimer.mdx new file mode 100644 index 0000000000..1a241d77bd --- /dev/null +++ b/docs/docs/guides/deploy/_disclaimer.mdx @@ -0,0 +1,8 @@ +## Disclaimer + +This guide is for development / demonstration purpose only and does NOT reflect a production setup. + +Things such as TLS termination and email verification will not be available unless you + +- Use an API gateway with valid certificates in front of the service +- Configure an appropriate email server diff --git a/docs/docs/guides/installation/run/_nextselfhosted.mdx b/docs/docs/guides/deploy/_next.mdx similarity index 60% rename from docs/docs/guides/installation/run/_nextselfhosted.mdx rename to docs/docs/guides/deploy/_next.mdx index e6afca72d3..c19923e7d0 100644 --- a/docs/docs/guides/installation/run/_nextselfhosted.mdx +++ b/docs/docs/guides/deploy/_next.mdx @@ -1,9 +1,9 @@ ## What's next -For running a production grade ZITADEL instance in your environment, go on with the [configure ZITADEL](/docs/guides/installation/configure) section. +For running a production grade ZITADEL instance in your environment, go on with the [configure ZITADEL](/docs/guides/manage/self-hosted/configure) section. :::caution -The ZITADEL management console [requires end-to-end HTTP/2 support](/docs/guides/installation/http2-support) +The ZITADEL management console [requires end-to-end HTTP/2 support](/docs/guides/manage/self-hosted/http2) diff --git a/docs/docs/guides/installation/run/_compose.mdx b/docs/docs/guides/deploy/compose.mdx similarity index 58% rename from docs/docs/guides/installation/run/_compose.mdx rename to docs/docs/guides/deploy/compose.mdx index e5b3fbe672..57f0347c53 100644 --- a/docs/docs/guides/installation/run/_compose.mdx +++ b/docs/docs/guides/deploy/compose.mdx @@ -1,5 +1,12 @@ +--- +title: Docker Compose +--- + import CodeBlock from '@theme/CodeBlock'; import DockerComposeSource from '!!raw-loader!./docker-compose.yaml' +import Disclaimer from './_disclaimer.mdx' +import DefaultUser from './_defaultuser.mdx' +import Next from './_next.mdx' The setup is tested against Docker version 20.10.17 and Docker Compose version v2.2.3 @@ -11,8 +18,12 @@ By executing the commands below, you will download the following file: ```bash # Download the docker compose example configuration. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/run/docker-compose.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/docker-compose.yaml # Run the database and application containers docker compose up --detach ``` + + + + \ No newline at end of file diff --git a/docs/docs/guides/installation/run/docker-compose.yaml b/docs/docs/guides/deploy/docker-compose.yaml similarity index 92% rename from docs/docs/guides/installation/run/docker-compose.yaml rename to docs/docs/guides/deploy/docker-compose.yaml index 23a055bf4c..bc999908d7 100644 --- a/docs/docs/guides/installation/run/docker-compose.yaml +++ b/docs/docs/guides/deploy/docker-compose.yaml @@ -5,7 +5,7 @@ services: restart: 'always' networks: - 'zitadel' - image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64' + image: 'ghcr.io/zitadel/zitadel:v2.0.0-amd64' command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled' environment: - 'ZITADEL_DATABASE_HOST=db' diff --git a/docs/docs/guides/installation/run/_knative.mdx b/docs/docs/guides/deploy/knative.mdx similarity index 60% rename from docs/docs/guides/installation/run/_knative.mdx rename to docs/docs/guides/deploy/knative.mdx index 3b9d43af0b..ae80e81fb0 100644 --- a/docs/docs/guides/installation/run/_knative.mdx +++ b/docs/docs/guides/deploy/knative.mdx @@ -1,41 +1,30 @@ -## New Knative environment -### Download and run Knative quickstart +--- +title: Knative +--- + +import Disclaimer from './_disclaimer.mdx' +import DefaultUser from './_defaultuser.mdx' +import Next from './_next.mdx' + +## Install Knative Follow the [Knative quickstart guide](https://knative.dev/docs/getting-started/quickstart-install/) to get a local kind/minikube environment with Knative capabilities. -It is basically 4 commands on Mac: +## Run CockroachDB + +Start a single-node cockroachdb as statefulset ```bash -# Install knative -brew install knative/client/kn - -# Install knative quickstart sandbox -brew install knative-sandbox/kn-plugins/quickstart - -# Install kind -brew install kind - -# Install quickstart cluster -kn quickstart kind -``` -That will get you a ready to go knative/kubernetes environment. - - -## Database -start a single-node cockroachdb as statefulset - -```bash -kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/deploy/knative/cockroachdb-statefulset-single-node.yaml +kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/main/deploy/knative/cockroachdb-statefulset-single-node.yaml ``` +## Start ZITADEL -## Start ZITADEL with Knative - -Either use the kn binary... +### Knative Command ```bash kn service create zitadel \ ---image ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64 \ +--image ghcr.io/zitadel/zitadel:v2.0.0-amd64 \ --port 8080 \ --env ZITADEL_DATABASE_HOST=cockroachdb \ --env ZITADEL_EXTERNALSECURE=false \ @@ -45,15 +34,15 @@ kn service create zitadel \ --arg "start-from-init" --arg "--masterkey" --arg "MasterkeyNeedsToHave32Characters" ``` -... or use the knative service yaml +### Knavite yaml ```bash -kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/deploy/knative/zitadel-knative-service.yaml +kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/main/deploy/knative/zitadel-knative-service.yaml ``` -## Get started with ZITADEL +## Access ZITADEL -Get ZITADEL URL +### Get the ZITADEL URL ```bash kn services list @@ -70,3 +59,5 @@ If you didn't configure something else, this is the default IAM admin users logi * username: zitadel-admin@zitadel.zitadel.default.127.0.0.1.sslip.io * password: Password1! + + diff --git a/docs/docs/guides/installation/run/_helm.mdx b/docs/docs/guides/deploy/kubernetes.mdx similarity index 65% rename from docs/docs/guides/installation/run/_helm.mdx rename to docs/docs/guides/deploy/kubernetes.mdx index 8a2f90ff5d..147e75e892 100644 --- a/docs/docs/guides/installation/run/_helm.mdx +++ b/docs/docs/guides/deploy/kubernetes.mdx @@ -1,12 +1,26 @@ +--- +title: Kubernetes +--- + +import Disclaimer from './_disclaimer.mdx' +import DefaultUser from './_defaultuser.mdx' +import Next from './_next.mdx' + Installation and configuration details are described in the [open source ZITADEL charts repo](https://github.com/zitadel/zitadel-charts). By default, the chart installs a secure and highly available ZITADEL instance. For running an easily testable, insecure, non-HA ZITADEL instance, run the following commands. -```bash -# Add the helm repository -helm repo add zitadel https://charts.zitadel.com +## Helm -# Install an insecure zitadel release that works with localhost +### Add the helm repository + +```bash +helm repo add zitadel https://charts.zitadel.com +``` + +### Install an insecure zitadel release that works with localhost + +```bash helm install --namespace zitadel --create-namespace my-zitadel zitadel/zitadel \ --set zitadel.masterkey="MasterkeyNeedsToHave32Characters" \ --set zitadel.configmapConfig.ExternalDomain="localhost" \ @@ -15,7 +29,14 @@ helm install --namespace zitadel --create-namespace my-zitadel zitadel/zitadel \ --set replicaCount=1 \ --set cockroachdb.single-node=true \ --set cockroachdb.statefulset.replicas=1 +``` -# Forward the ZITADEL service port to your local machine +### Forward the ZITADEL service port to your local machine + +```bash kubectl port-forward svc/my-zitadel 8080:80 ``` + + + + diff --git a/docs/docs/guides/deploy/linux.mdx b/docs/docs/guides/deploy/linux.mdx new file mode 100644 index 0000000000..e9be8e52c7 --- /dev/null +++ b/docs/docs/guides/deploy/linux.mdx @@ -0,0 +1,34 @@ +--- +title: Linux +--- + +import Disclaimer from './_disclaimer.mdx' +import DefaultUser from './_defaultuser.mdx' +import Next from './_next.mdx' + +## Install CockroachDB + +Download a `cockroach` binary as described [in the CockroachDB docs](https://www.cockroachlabs.com/docs/v22.1/install-cockroachdb). +ZITADEL is tested against CockroachDB v22.1.0 and Ubuntu 20.04. + +## Run CockroachDB + +```bash +cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost +``` + +## Install ZITADEL + +```bash +curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0 | grep "browser_download_url.*zitadel_Linux_$(uname -m).tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel +``` + +## Run ZITADEL + +```bash +ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled +``` + + + + diff --git a/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml b/docs/docs/guides/deploy/loadbalancing-example/docker-compose.yaml similarity index 96% rename from docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml rename to docs/docs/guides/deploy/loadbalancing-example/docker-compose.yaml index 9098943108..9d0c4c528c 100644 --- a/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml +++ b/docs/docs/guides/deploy/loadbalancing-example/docker-compose.yaml @@ -15,7 +15,7 @@ services: restart: 'always' networks: - 'zitadel' - image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64' + image: 'ghcr.io/zitadel/zitadel:v2.0.0-amd64' command: 'start-from-init --config /example-zitadel-config.yaml --config /example-zitadel-secrets.yaml --steps /example-zitadel-init-steps.yaml --masterkey "${ZITADEL_MASTERKEY}" --tlsMode external' depends_on: chown: diff --git a/docs/docs/guides/installation/loadbalancing-example/example-traefik.yaml b/docs/docs/guides/deploy/loadbalancing-example/example-traefik.yaml similarity index 100% rename from docs/docs/guides/installation/loadbalancing-example/example-traefik.yaml rename to docs/docs/guides/deploy/loadbalancing-example/example-traefik.yaml diff --git a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-config.yaml b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml similarity index 93% rename from docs/docs/guides/installation/loadbalancing-example/example-zitadel-config.yaml rename to docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml index 54ee71ebff..f48ce91f79 100644 --- a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-config.yaml +++ b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml Log: Level: 'info' diff --git a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-init-steps.yaml similarity index 79% rename from docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml rename to docs/docs/guides/deploy/loadbalancing-example/example-zitadel-init-steps.yaml index 4d183bace1..9fb3267042 100644 --- a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml +++ b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-init-steps.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/adminn/setup/steps.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/adminn/setup/steps.yaml FirstInstance: Org: Name: 'My Org' diff --git a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-secrets.yaml b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml similarity index 88% rename from docs/docs/guides/installation/loadbalancing-example/example-zitadel-secrets.yaml rename to docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml index f46cb0d683..bc630b8140 100644 --- a/docs/docs/guides/installation/loadbalancing-example/example-zitadel-secrets.yaml +++ b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml # If not using the docker compose example, adjust these values for connecting ZITADEL to your CockroachDB Database: diff --git a/docs/docs/guides/installation/loadbalancing-example/loadbalancing-example.mdx b/docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx similarity index 80% rename from docs/docs/guides/installation/loadbalancing-example/loadbalancing-example.mdx rename to docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx index c266f116b4..329fd44f1e 100644 --- a/docs/docs/guides/installation/loadbalancing-example/loadbalancing-example.mdx +++ b/docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx @@ -38,19 +38,19 @@ By executing the commands below, you will download the following files: ```bash # Download the docker compose example configuration. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/loadbalancing-example/docker-compose.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/docker-compose.yaml # Download the docker compose example configuration. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/loadbalancing-example/example-traefik.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-traefik.yaml # Download and adjust the example configuration file containing standard configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/loadbalancing-example/example-zitadel-config.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-zitadel-config.yaml # Download and adjust the example configuration file containing secret configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/loadbalancing-example/example-zitadel-secrets.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-zitadel-secrets.yaml # Download and adjust the example configuration file containing database initialization configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/loadbalancing-example/example-zitadel-init-steps.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-zitadel-init-steps.yaml # A single ZITADEL instance always needs the same 32 characters long masterkey # If you haven't done so already, you can generate a new one. diff --git a/docs/docs/guides/deploy/macos.mdx b/docs/docs/guides/deploy/macos.mdx new file mode 100644 index 0000000000..f49fe8c2fb --- /dev/null +++ b/docs/docs/guides/deploy/macos.mdx @@ -0,0 +1,43 @@ +--- +title: MacOS +--- + +import Disclaimer from './_disclaimer.mdx' +import DefaultUser from './_defaultuser.mdx' +import Next from './_next.mdx' + +## Install CockroachDB + +Download a `cockroach` binary as described [in the CockroachDB docs](https://www.cockroachlabs.com/docs/v22.1/install-cockroachdb). +ZITADEL is tested against CockroachDB v22.1.0. + +## Run CockroachDB + +```bash +cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost +``` + +## Install ZITADEL + +### Homebrew + +```bash +brew install zitadel/tap/zitadel +``` + +### Download from GitHub + +```bash +export MY_ARCHITECTURE="arm64 or amd64 depeding on your mac" +curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0 | grep "browser_download_url.*zitadel_Darwin_${MY_ARCHITECTURE}.tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel +``` + +## Run ZITADEL + +```bash +ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled +``` + + + + diff --git a/docs/docs/guides/deploy/overview.mdx b/docs/docs/guides/deploy/overview.mdx new file mode 100644 index 0000000000..f2e3cc5d92 --- /dev/null +++ b/docs/docs/guides/deploy/overview.mdx @@ -0,0 +1,19 @@ +--- +title: Overview +--- + +Choose your platform and run ZITADEL with the most minimal configuration possible. +For an easy self-hosted production setup, we recommend running ZITADEL on [Kubernetes](https://kubernetes.io/docs/home/), using our official [Helm](https://helm.sh/docs/) chart. +By default, it runs a highly available ZITADEL instance along with a secure and highly available [CockroachDB](https://www.cockroachlabs.com/docs/stable/) instance. + +- [Linux](./linux) +- [MacOS](./macos) +- [Docker Compose](./compose) +- [Knative](./knative) +- [Kubernetes](./kubernetes) + +## Prerequisits + +- ZITADEL does not need much resource 1 CPU and 512MB memory is more than enough. (With more CPU the password hashing might be faster) +- A cockroachDB or [🚧 Postgresql coming soon](https://github.com/zitadel/zitadel/pull/3998) as only needed storage +- If you want to front ZTIADEL with a revers proxy, web application firewall or content delivery network make sure to support [HTTP/2](../manage/self-hosted/http2) \ No newline at end of file diff --git a/docs/docs/guides/installation/http2-support.md b/docs/docs/guides/installation/http2-support.md deleted file mode 100644 index ba2cc5c627..0000000000 --- a/docs/docs/guides/installation/http2-support.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: HTTP/2 Support ---- - -The ZITADEL console (prefix `/ui/console`) uses [gRPC-Web](https://github.com/grpc/grpc-web) for its API calls. -The ZITADEL backend service accepts gRPC-Web requests and translates them into real gRPC calls to itself. -Because ZITADEL accepts gRPC-Web and translates it to gRPC itself, your reverse proxy doesn't need to be able to support gRPC or gRPC-Web. -However, as gRPC requires HTTP/2, your reverse proxy is required to send and receive downstream and upstream HTTP/2 traffic. - -Go to the [loadbalancing example with Traefik](./loadbalancing-example) for seeing a working example configuration. diff --git a/docs/docs/guides/installation/run/_linux.mdx b/docs/docs/guides/installation/run/_linux.mdx deleted file mode 100644 index 819de99ff2..0000000000 --- a/docs/docs/guides/installation/run/_linux.mdx +++ /dev/null @@ -1,19 +0,0 @@ -## Download The CockroachDB binary - -Download a `cockroach` binary as described [in the CockroachDB docs](https://www.cockroachlabs.com/docs/v22.1/install-cockroachdb). -ZITADEL is tested against CockroachDB v22.1.0 and Ubuntu 20.04. - -## Run CockroachDB - -```bash -cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost -``` - -## Run ZITADEL -```bash -# Download the zitadel binary -curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.39 | grep "browser_download_url.*zitadel_Linux_$(uname -i).tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel - -# Run the zitadel binary -ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled -``` diff --git a/docs/docs/guides/installation/run/_macos.mdx b/docs/docs/guides/installation/run/_macos.mdx deleted file mode 100644 index e60e3c1253..0000000000 --- a/docs/docs/guides/installation/run/_macos.mdx +++ /dev/null @@ -1,32 +0,0 @@ -## Download The CockroachDB binary - -Download a `cockroach` binary as described [in the CockroachDB docs](https://www.cockroachlabs.com/docs/v22.1/install-cockroachdb). -ZITADEL is tested against CockroachDB v22.1.0. - -## Run CockroachDB and ZITADEL - -Run a CockroachDB instance - -```bash -cockroach start-single-node --insecure --background --http-addr :9090 --listen-addr=localhost -``` - -# Download and Install ZITADEL - -Either use `Homebrew` ... - -```bash -brew install zitadel/tap/zitadel -``` - -... or download the binary from GitHub - -```bash -export MY_ARCHITECTURE="arm64 or amd64 depeding on your mac" -curl -s https://api.github.com/repos/zitadel/zitadel/releases/tags/v2.0.0-v2-alpha.39 | grep "browser_download_url.*zitadel_Darwin_${MY_ARCHITECTURE}.tar.gz" | cut -d '"' -f 4 | xargs wget -qO - | sudo tar --extract --gzip --overwrite --directory /usr/local/bin zitadel && sudo chown $(id -u):$(id -g) /usr/local/bin/zitadel -``` - -Run ZITADEL - -```bash -ZITADEL_EXTERNALSECURE=false zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled diff --git a/docs/docs/guides/installation/run/run.mdx b/docs/docs/guides/installation/run/run.mdx deleted file mode 100644 index c700428afb..0000000000 --- a/docs/docs/guides/installation/run/run.mdx +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Run ---- - -import Tabs from "@theme/Tabs"; -import TabItem from "@theme/TabItem"; -import Linux from './_linux.mdx' -import MacOS from './_macos.mdx' -import Compose from './_compose.mdx' -import Helm from './_helm.mdx' -import Knative from './_knative.mdx' -import NextSelfHosted from './_nextselfhosted.mdx' -import DefaultUser from './_defaultuser.mdx' - -# Run ZITADEL - -Choose your platform and run ZITADEL with the most minimal configuration possible. -For an easy self-hosted production setup, we recommend running ZITADEL on [Kubernetes](https://kubernetes.io/docs/home/), using our official [Helm](https://helm.sh/docs/) chart. -By default, it runs a highly available ZITADEL instance along with a secure and highly available [CockroachDB](https://www.cockroachlabs.com/docs/stable/) instance. - -## Disclaimer -This guide is for development / demonstration purpose only and does NOT reflect a production setup. - -Things such as TLS termination and email verification will not be available unless you - -- use an API gateway with valid certificates in front of the service -- configure an appropriate email server - -see loadbalancing example [here](/docs/guides/installation/loadbalancing-example) - - - - - - Try our SaaS offering. The first 25k requests are free. - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/docs/guides/api/access-zitadel-apis.md b/docs/docs/guides/integrate/access-zitadel-apis.md similarity index 90% rename from docs/docs/guides/api/access-zitadel-apis.md rename to docs/docs/guides/integrate/access-zitadel-apis.md index 39a9dab50a..844b1e2c97 100644 --- a/docs/docs/guides/api/access-zitadel-apis.md +++ b/docs/docs/guides/integrate/access-zitadel-apis.md @@ -21,8 +21,8 @@ title: Access ZITADEL APIs Prerequisites @@ -42,7 +42,7 @@ On each level we have some different Roles. Here you can find more about the dif ## Exercise: Add ORG_OWNER to Service User -Make sure you have a Service User with a Key. (For more detailed informations about creating a service user go to [Service User](../authentication/serviceusers)) +Make sure you have a Service User with a Key. (For more detailed informations about creating a service user go to [Service User](serviceusers.md)) 1. Navigate to Organization Detail 2. Click the **+** button in the right part of console, in the managers part of details @@ -54,7 +54,7 @@ Make sure you have a Service User with a Key. (For more detailed informations ab ## Authenticating a service user In ZITADEL we use the `private_jwt` (**“JWT bearer token with private key”**, [RFC7523](https://tools.ietf.org/html/rfc7523)) authorization grant for this non-interactive authentication. -This is already described in the [Service User](../authentication/serviceusers), so make sure you follow this guide. +This is already described in the [Service User](serviceusers.md), so make sure you follow this guide. ### Request an OAuth token, with audience for ZITADEL @@ -65,8 +65,6 @@ This is possible by sending a custom scope for the audience. More about [Custom Use the scope `urn:zitadel:iam:org:project:id:{projectid}:aud` to include the project id in your audience -> The scope for zitadel.ch is: `urn:zitadel:iam:org:project:id:69234237810729019:aud` - ```bash curl --request POST \ --url {your_domain}/oauth/v2/token \ diff --git a/docs/docs/guides/integrations/application/application.mdx b/docs/docs/guides/integrate/application/application.mdx similarity index 100% rename from docs/docs/guides/integrations/application/application.mdx rename to docs/docs/guides/integrate/application/application.mdx diff --git a/docs/docs/guides/integrations/application/auth-type.mdx b/docs/docs/guides/integrate/application/auth-type.mdx similarity index 100% rename from docs/docs/guides/integrations/application/auth-type.mdx rename to docs/docs/guides/integrate/application/auth-type.mdx diff --git a/docs/docs/guides/integrations/application/generate-key.mdx b/docs/docs/guides/integrate/application/generate-key.mdx similarity index 100% rename from docs/docs/guides/integrations/application/generate-key.mdx rename to docs/docs/guides/integrate/application/generate-key.mdx diff --git a/docs/docs/guides/integrations/application/redirect-uris.mdx b/docs/docs/guides/integrate/application/redirect-uris.mdx similarity index 100% rename from docs/docs/guides/integrations/application/redirect-uris.mdx rename to docs/docs/guides/integrate/application/redirect-uris.mdx diff --git a/docs/docs/guides/integrations/application/review-config.mdx b/docs/docs/guides/integrate/application/review-config.mdx similarity index 100% rename from docs/docs/guides/integrations/application/review-config.mdx rename to docs/docs/guides/integrate/application/review-config.mdx diff --git a/docs/docs/guides/integrations/auth0.md b/docs/docs/guides/integrate/auth0.md similarity index 86% rename from docs/docs/guides/integrations/auth0.md rename to docs/docs/guides/integrate/auth0.md index b96bb7d5b6..7d0a1fe42c 100644 --- a/docs/docs/guides/integrations/auth0.md +++ b/docs/docs/guides/integrate/auth0.md @@ -11,8 +11,9 @@ It covers how to: Prerequisites: -- existing ZITADEL organization, if not present follow [this guide](../../guides/basics/get-started#trying-out-zitadel-on-zitadelch) -- existing project, if not present follow the first 3 steps [here](../../guides/basics/projects#exercise---create-a-simple-project) +- existing ZITADEL Instance, if not present follow [this guide](../../guides/start/quickstart) +- existing ZITADEL Organization, if not present follow [this guide](../../guides/manage/console/organizations) +- existing ZITADEL project, if not present follow the first 3 steps [here](../../guides/manage/console/projects) - existing Auth0 tenant as described [here](https://auth0.com/docs/get-started/auth0-overview/create-tenants) > We have to switch between ZITADEL and a Auth0. If the headings begin with "ZITADEL" switch to the ZITADEL Console and if the headings start with Auth0 please switch to the Auth0 GUI. diff --git a/docs/docs/guides/integrations/authenticated-mongodb-charts.md b/docs/docs/guides/integrate/authenticated-mongodb-charts.md similarity index 81% rename from docs/docs/guides/integrations/authenticated-mongodb-charts.md rename to docs/docs/guides/integrate/authenticated-mongodb-charts.md index 8b35604ee9..61cca76b87 100644 --- a/docs/docs/guides/integrations/authenticated-mongodb-charts.md +++ b/docs/docs/guides/integrate/authenticated-mongodb-charts.md @@ -9,13 +9,13 @@ This integration guide shows how you can embed authenticated MongoDB Charts in y Before you can embed an authenticated chart in your application, you have to do a few configuration steps in ZITADEL Console. You will need to provide some information about your app. We recommend creating a new app to start from scratch. -1. Navigate to your [Project](https://console.zitadel.ch/projects) -1. Add a new application at the top of the page. -1. Select Web application type and continue. -1. Use [Authorization Code](../../apis/openidoauth/grant-types#authorization-code) in combination with [Proof Key for Code Exchange (PKCE)](../../apis/openidoauth/grant-types#proof-key-for-code-exchange). -1. Skip the redirect settings and confirm the app creation -1. Copy the client ID, you will need to tell MongoDB Charts about it. -1. When you created the app, expand its _OIDC Configuration_ section, change the _Auth Token Type_ to _JWT_ and save the change. +1. Navigate to your Project +2. Add a new application at the top of the page. +3. Select Web application type and continue. +4. Use [Authorization Code](../../apis/openidoauth/grant-types#authorization-code) in combination with [Proof Key for Code Exchange (PKCE)](../../apis/openidoauth/grant-types#proof-key-for-code-exchange). +5. Skip the redirect settings and confirm the app creation +6. Copy the client ID, you will need to tell MongoDB Charts about it. +7. When you created the app, expand its _OIDC Configuration_ section, change the _Auth Token Type_ to _JWT_ and save the change. Your application configuration should now look similar to this: @@ -28,7 +28,7 @@ Configure ZITADEL as your _Custom JWT Provider_ following the [MongoDB docs](htt Configure the following values: - Signing Algorithm: RS256 - Signing Key: JWK or JWKS URL -- JWKS: https://api.zitadel.ch/oauth/v2/keys +- JWKS: https://{your_domain}.zitadel.cloud/oauth/v2/keys - Audience: Your app's client ID which you copied when you created the ZITADEL app Your configuration should look similar to this: @@ -39,7 +39,7 @@ Your configuration should look similar to this: Embed a chart into your application now, following the corresponding [MongoDB docs](https://docs.mongodb.com/charts/saas/embed-chart-jwt-auth/). -If you've done the [Angular Quickstart](../../quickstarts/login/angular.md), your code could look something like this: +If you've done the [Angular Quickstart](../../examples/login/angular.md), your code could look something like this: ```html diff --git a/docs/docs/guides/authentication/authmethods.mdx b/docs/docs/guides/integrate/authmethods.mdx similarity index 100% rename from docs/docs/guides/authentication/authmethods.mdx rename to docs/docs/guides/integrate/authmethods.mdx diff --git a/docs/docs/guides/authentication/authmethods/basic.mdx b/docs/docs/guides/integrate/authmethods/basic.mdx similarity index 100% rename from docs/docs/guides/authentication/authmethods/basic.mdx rename to docs/docs/guides/integrate/authmethods/basic.mdx diff --git a/docs/docs/guides/authentication/authmethods/implicit.mdx b/docs/docs/guides/integrate/authmethods/implicit.mdx similarity index 100% rename from docs/docs/guides/authentication/authmethods/implicit.mdx rename to docs/docs/guides/integrate/authmethods/implicit.mdx diff --git a/docs/docs/guides/authentication/authmethods/jwtpk.mdx b/docs/docs/guides/integrate/authmethods/jwtpk.mdx similarity index 100% rename from docs/docs/guides/authentication/authmethods/jwtpk.mdx rename to docs/docs/guides/integrate/authmethods/jwtpk.mdx diff --git a/docs/docs/guides/authentication/authmethods/pkce.mdx b/docs/docs/guides/integrate/authmethods/pkce.mdx similarity index 100% rename from docs/docs/guides/authentication/authmethods/pkce.mdx rename to docs/docs/guides/integrate/authmethods/pkce.mdx diff --git a/docs/docs/guides/authentication/authmethods/pkcenative.mdx b/docs/docs/guides/integrate/authmethods/pkcenative.mdx similarity index 100% rename from docs/docs/guides/authentication/authmethods/pkcenative.mdx rename to docs/docs/guides/integrate/authmethods/pkcenative.mdx diff --git a/docs/docs/guides/api/export-and-import.md b/docs/docs/guides/integrate/export-and-import.md similarity index 100% rename from docs/docs/guides/api/export-and-import.md rename to docs/docs/guides/integrate/export-and-import.md diff --git a/docs/docs/guides/integrations/gitlab-self-hosted.md b/docs/docs/guides/integrate/gitlab-self-hosted.md similarity index 84% rename from docs/docs/guides/integrations/gitlab-self-hosted.md rename to docs/docs/guides/integrate/gitlab-self-hosted.md index 2b058aed54..c2bb765471 100644 --- a/docs/docs/guides/integrations/gitlab-self-hosted.md +++ b/docs/docs/guides/integrate/gitlab-self-hosted.md @@ -11,8 +11,9 @@ It covers how to: Prerequisites: -- existing ZITADEL organization, if not present follow [this guide](../../guides/basics/get-started#trying-out-zitadel-on-zitadelch) -- existing project, if not present follow the first 3 steps [here](../../guides/basics/projects#exercise---create-a-simple-project) +- existing ZITADEL Instance, if not present follow [this guide](../../guides/start/quickstart) +- existing ZITADEL Organization, if not present follow [this guide](../../guides/manage/console/organizations) +- existing ZITADEL project, if not present follow the first 3 steps [here](../../guides/manage/console/projects) - running Gitlab instance see [installation guide](https://docs.gitlab.com/ee/install/) import CreateApp from "./application/application.mdx"; diff --git a/docs/docs/guides/authentication/identity-brokering.md b/docs/docs/guides/integrate/identity-brokering.md similarity index 81% rename from docs/docs/guides/authentication/identity-brokering.md rename to docs/docs/guides/integrate/identity-brokering.md index f62b5473a2..3b0fca5bbe 100644 --- a/docs/docs/guides/authentication/identity-brokering.md +++ b/docs/docs/guides/integrate/identity-brokering.md @@ -22,7 +22,7 @@ title: Identity Brokering Prerequisites @@ -99,46 +99,13 @@ An organization's login settings will be shown - as soon as the user has entered the loginname and ZITADEL can identitfy to which organization he belongs; or - by sending a primary domain scope. -To get your own configuration you will have to send the [primary domain scope](https://docs.zitadel.com/docs/apis/openidoauth/scopes#reserved-scopes) in your [authorization request](https://docs.zitadel.com/docs/guides/authentication/login-users/#auth-request) . +To get your own configuration you will have to send the [primary domain scope](../../apis/openidoauth/scopes#reserved-scopes) in your [authorization request](../../guides/integrate/login-users#auth-request) . The primary domain scope will restrict the login to your organization, so only users of your own organization will be able to login, also your branding and policies will trigger. :::note -You need to create your own auth request with your applications parameters. Please see the docs to construct an [Auth Request](https://docs.zitadel.com/docs/guides/authentication/login-users/#auth-request). +You need to create your own auth request with your applications parameters. Please see the docs to construct an [Auth Request](../../guides/integrate/login-users#auth-request). ::: Your user will now be able to choose Google for login instead of username/password or mfa. - -## Knowledge Check - -* The issuer for your identity provider is - - [ ] yes - - [ ] no -* The identity provider has to be oAuth 2.0 compliant - - [ ] yes - - [ ] no - -
- - Solutions - - -* The issuer for your identity provider is https://issuer.zitadel.ch - - [ ] yes - - [x] no (The issuer is provided by your choosen identity provider. In the case of Google it's https://accounts.google.com) -* The identity provider has to be oAuth 2.0 compliant - - [x] yes - - [ ] no - -
- -## Summary - -* You can federate identities of all oAuth 2.0 compliant external identity providers -* Configure the provider in your custom login policy - -Where to go from here: - -* ZITADEL Projects -* Service users diff --git a/docs/docs/guides/authentication/login-users.mdx b/docs/docs/guides/integrate/login-users.mdx similarity index 97% rename from docs/docs/guides/authentication/login-users.mdx rename to docs/docs/guides/integrate/login-users.mdx index 8254dfba04..7fc8e54615 100644 --- a/docs/docs/guides/authentication/login-users.mdx +++ b/docs/docs/guides/integrate/login-users.mdx @@ -22,7 +22,7 @@ OAuth and therefore OIDC know three different application types: Depending on the app type you're trying to register, there are small differences. But regardless of the app type we recommend using Proof Key for Code Exchange (PKCE). -Please read the following guide about the [different-client-profiles](../authorization/oauth-recommended-flows#different-client-profiles) and why to use PKCE. +Please read the following guide about the [different-client-profiles](./oauth-recommended-flows#different-client-profiles) and why to use PKCE. ### Code Flow diff --git a/docs/docs/guides/authorization/oauth-recommended-flows.md b/docs/docs/guides/integrate/oauth-recommended-flows.md similarity index 100% rename from docs/docs/guides/authorization/oauth-recommended-flows.md rename to docs/docs/guides/integrate/oauth-recommended-flows.md diff --git a/docs/docs/guides/authentication/serviceusers.md b/docs/docs/guides/integrate/serviceusers.md similarity index 94% rename from docs/docs/guides/authentication/serviceusers.md rename to docs/docs/guides/integrate/serviceusers.md index d8bdbf6377..48ac472f99 100644 --- a/docs/docs/guides/authentication/serviceusers.md +++ b/docs/docs/guides/integrate/serviceusers.md @@ -22,7 +22,7 @@ title: Service Users Prerequisites @@ -97,7 +97,7 @@ Payload { "iss": "100507859606888466", "sub": "100507859606888466", - "aud": "https://issuer.zitadel.ch", + "aud": "{your_domain}.zitadel.cloud", "iat": [Current UTC timestamp, e.g. 1605179982, max. 1 hour ago], "exp": [UTC timestamp, e.g. 1605183582] } @@ -119,7 +119,7 @@ With the encoded JWT from the prior step, you will need to craft a POST request ```bash curl --request POST \ - --url https://api.zitadel.ch/oauth/v2/token \ + --url https://{your_domain}.zitadel.cloud/oauth/v2/token \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer \ --data scope='openid profile email' \ @@ -149,7 +149,7 @@ For this example let's call the userinfo endpoint to verfiy that our access toke ```bash curl --request POST \ - --url https://api.zitadel.ch/oauth/v2/userinfo \ + --url https://{your_domain}.zitadel.cloud/oidc/v1/userinfo \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header 'Authorization: Bearer MtjHodGy4zxKylDOhg6kW90WeEQs2q...' ``` @@ -162,7 +162,7 @@ Content-Type: application/json { "name": "MyServiceUser", - "preferred_username": "service_user@acme.zitadel.ch", + "preferred_username": "service_user@{your_domain}.zitadel.cloud", "updated_at": 1616417938 } ``` diff --git a/docs/docs/guides/manage/cloud/billing.md b/docs/docs/guides/manage/cloud/billing.md new file mode 100644 index 0000000000..a5bfbddb9a --- /dev/null +++ b/docs/docs/guides/manage/cloud/billing.md @@ -0,0 +1,38 @@ +--- +title: Billing +--- + +In the billing page shows your configured payment methods and the invoice + +![Customer Portal Billing](/img/manuals/portal/customer_portal_billing.png) + +## Payment Method + +If you click on the "+" Button a popup will be shown with the needed fields to add a new payment method. +At the moment we provide only "Credit Card" payment + +Once a payment method is configured, it can be selected directly in the instance creation process. + +## Customer + +To be able to create correct billings we will need some customer information from you. +This includes the following fields: +- Name +- Country +- Email address +- Address line 1 +- Address line 2 +- Postal Code +- City + +## Update Billing Information + +You will only need to add billing information if your instance is in the paid tier. There are two options on how to add your billing info. + +2. Go to the billing menu and add a new payment method. You will be able to choose the added method, when upgrading the instance to the paid tier. +3. Add the billing information directly during the upgrade process. + + +## Invoices + +We show all you invoices, and you are able to download them directly in the Customer Portal. \ No newline at end of file diff --git a/docs/docs/manuals/customerportal/instances.md b/docs/docs/guides/manage/cloud/instances.md similarity index 86% rename from docs/docs/manuals/customerportal/instances.md rename to docs/docs/guides/manage/cloud/instances.md index 93c5f32396..45933e6fd6 100644 --- a/docs/docs/manuals/customerportal/instances.md +++ b/docs/docs/guides/manage/cloud/instances.md @@ -52,6 +52,14 @@ A free instance can be upgraded to a "pay as you go" instance. By upgrading your We recommend register a custom domain to access your ZITADEL instance. The primary domain of your ZITADEL instance will be the issuer of the instance. All other domains can be used to access the instance itself +1. Browse to your instance +2. Click **Add custom domain** +3. To start the domain verification click the domain name and a dialog will appear, where you can choose between DNS or HTTP challenge methods. +4. For example, create a TXT record with your DNS provider for the used domain and click verify. ZITADEL will then proceed an check your DNS. +5. When the verification is successful you have the option to activate the domain by clicking **Set as primary** + +> **_Please note:_** Do not delete the verification code, as ZITADEL Customer Portal will re-check the ownership of your domain from time to time + Be aware that it has some impacts if you change the primary domain of your instance. 1. The urls and issuer have to change in your app 2. Passwordless authentication is based on the domain, if you change it, your users will not be able to login with the registered passwordless authentication diff --git a/docs/docs/manuals/customerportal/notifications.md b/docs/docs/guides/manage/cloud/notifications.md similarity index 100% rename from docs/docs/manuals/customerportal/notifications.md rename to docs/docs/guides/manage/cloud/notifications.md diff --git a/docs/docs/manuals/customerportal/overview.md b/docs/docs/guides/manage/cloud/overview.md similarity index 100% rename from docs/docs/manuals/customerportal/overview.md rename to docs/docs/guides/manage/cloud/overview.md diff --git a/docs/docs/manuals/customerportal/start.md b/docs/docs/guides/manage/cloud/start.md similarity index 100% rename from docs/docs/manuals/customerportal/start.md rename to docs/docs/guides/manage/cloud/start.md diff --git a/docs/docs/manuals/customerportal/support.md b/docs/docs/guides/manage/cloud/support.md similarity index 68% rename from docs/docs/manuals/customerportal/support.md rename to docs/docs/guides/manage/cloud/support.md index 0e6631f97d..f62cbbb63f 100644 --- a/docs/docs/manuals/customerportal/support.md +++ b/docs/docs/guides/manage/cloud/support.md @@ -5,10 +5,10 @@ title: Support In the header you can find a button for the support. Create a new support request with the following information: -- Severity - Subject - Message +- Affected instance -At the bottom of the page you can see all your support requests. +This form will generate a prefilled E-Mail you can send directly to our support address. ![Customer Portal Support](/img/manuals/portal/customer_portal_support.png) \ No newline at end of file diff --git a/docs/docs/manuals/customerportal/users.md b/docs/docs/guides/manage/cloud/users.md similarity index 100% rename from docs/docs/manuals/customerportal/users.md rename to docs/docs/guides/manage/cloud/users.md diff --git a/docs/docs/guides/basics/applications.mdx b/docs/docs/guides/manage/console/applications.mdx similarity index 59% rename from docs/docs/guides/basics/applications.mdx rename to docs/docs/guides/manage/console/applications.mdx index 3e5f21c06e..eebe566ffe 100644 --- a/docs/docs/guides/basics/applications.mdx +++ b/docs/docs/guides/manage/console/applications.mdx @@ -4,39 +4,10 @@ title: Applications import ThemedImage from '@theme/ThemedImage'; -import AuthType from '../integrations/application/auth-type.mdx'; -import RedirectURIs from '../integrations/application/redirect-uris.mdx'; -import GenerateKey from '../integrations/application/generate-key.mdx'; -import ReviewConfig from '../integrations/application/review-config.mdx'; - - - - - - - - - - - - - - - - -
DescriptionLearn what applications are and how to use.
Learning Outcomes - In this module you will: -
    -
  • Get an overview of application types
  • -
  • Learn which application type allows which authentication types
  • -
  • Learn why Redirect URIs make login processes more secure
  • -
-
Prerequisites - -
+import AuthType from '../../integrate/application/auth-type.mdx'; +import RedirectURIs from '../../integrate/application/redirect-uris.mdx'; +import GenerateKey from '../../integrate/application/generate-key.mdx'; +import ReviewConfig from '../../integrate/application/review-config.mdx'; ## What is an application? @@ -48,7 +19,7 @@ Applications are the entry point to your project. Users either login into one of If you create a new application in ZITADEL Console you have to choose the type of your application. But which one do you have to choose? -Detailed information about authentication types can be found [here](../authentication/login-users#create-application). +Detailed information about authentication types can be found [here](../../integrate/login-users#create-application).
  • Learn about organizations
  • Create a new organization
  • Verify your domain name
  • | -|Prerequisites|Existing instance| - ## What is an organization? -import OrgDescription from '../../concepts/structure/_org_description.mdx'; -import Column from '../../../src/components/column'; +import OrgDescription from '../../../concepts/structure/_org_description.mdx'; +import Column from '../../../../src/components/column'; @@ -32,27 +25,26 @@ The customer needs to fill in the form with the organization name and the contac ![Register new Organization](/img/console_org_register.png) - ## How ZITADEL handles usernames As we mentioned before, each organization has its own pool of usernames, which includes human and service. -This means that, for example a user with the username road.runner, can only exist once in an organization called ACME. ZITADEL will automatically generate a "logonname" for each consisting of `{username}@{domainname}.{zitadeldomain}`, in our example road.runner@acme.zitadel.ch. +This means that, for example a user with the username road.runner, can only exist once in an organization called ACME. ZITADEL will automatically generate a "logonname" for each consisting of `{username}@{domainname}.{zitadeldomain}`, in our example road.runner@acme.zitadel.cloud. -When you verify your domain name, then ZITADEL will generate additional logonames for each user with the verified domain. If our example organization would own the domain acme.ch and verify within the organization ACME, then the resulting logonname in our example would be road.runner@acme.ch in addition to the already generated road.runner@acme.zitadel.ch. The user can now use either logonname to authenticate with your application. +When you verify your domain name, then ZITADEL will generate additional logonames for each user with the verified domain. If our example organization would own the domain acme.ch and verify within the organization ACME, then the resulting logonname in our example would be road.runner@acme.ch in addition to the already generated road.runner@acme.zitadel.cloud. The user can now use either logonname to authenticate with your application. ## Domain verification and primary domain -Once you have successfully registered your organization, ZITADEL will automatically generate a domain name for your organization (eg, acme.zitadel.ch). Users that you create within your organization will be suffixed with this domain name. +Once you have successfully registered your organization, ZITADEL will automatically generate a domain name for your organization (eg, acme.zitadel.cloud). Users that you create within your organization will be suffixed with this domain name. -You can improve the user experience, by suffixing users with a domain name that is in your control. If the "validate ord domains" settings in the [Domain Policy](../../concepts/structure/policies) is set to true, you have to prove the ownership of your domain, by DNS or HTTP challenge. +You can improve the user experience, by suffixing users with a domain name that is in your control. If the "validate ord domains" settings in the [Domain Policy](../../../concepts/structure/policies) is set to true, you have to prove the ownership of your domain, by DNS or HTTP challenge. If the settings is set to false, the created domain will automatically be set to verifed. An organization can have multiple domain names, but only one domain can be primary. The primary domain defines which login name ZITADEL displays to the user, and what information gets asserted in access_tokens (`preferred_username`). Please note that domain verification also removes the logonname from all users, who might have used this combination in the global organization (ie. users not belonging to a specific organization). Relating to our example with acme.ch: If a user ‘coyote’ exists in the global organization with the logonname coyote@acme.ch, then after verification of acme.ch, this logonname will be replaced with `coyote@{randomvalue.tld}`. ZITADEL will notify users affected by this change. -## Exercise - Verify your domain name +## Verify your domain name 1. Browse to your organization 2. Click **Add Domain** @@ -64,45 +56,4 @@ Please note that domain verification also removes the logonname from all users, > **_Please note:_** Do not delete the verification code, as ZITADEL will re-check the ownership of your domain from time to time -## Knowledge Check - -* Users exist only within projects or clients - - [ ] yes - - [ ] no -* User can only login with `{username}@{domainname}.{zitadeldomain}` - - [ ] yes - - [ ] no -* You can delegate access management self-service to another organization - - [ ] yes - - [ ] no - -
    - - Solutions - - -* Users exist only within projects or clients - - [ ] yes - - [x] no (users exist within organizations) -* User can only login with `{username}@{domainname}.{zitadeldomain}` - - [ ] yes - - [x] no (You can validate your own domain and login with `{loginname}@{yourdomain.tld}`) -* You can delegate access management self-service to another organization - - [x] yes - - [ ] no - -
    - -## Summary - -* Create your organization and a new user by visiting zitadel.ch -* Organizations are the top-most vessel for your IAM objects, such as users or projects -* Verify your domain in the Console to improve user experience; remember to not delete the verification code to allow recheck of ownership -* You can delegate certain aspects of your IAM to other organizations for self-service - -Where to go from here: - -* Create a project -* Setup Passwordless MFA -* Manage ZITADEL Roles -* Grant roles to other organizations or users + diff --git a/docs/docs/guides/manage/console/projects.mdx b/docs/docs/guides/manage/console/projects.mdx new file mode 100644 index 0000000000..d4b2791c6d --- /dev/null +++ b/docs/docs/guides/manage/console/projects.mdx @@ -0,0 +1,66 @@ +--- +title: Projects +--- + +## What is a project? + +import ProjectDescription from '../../../concepts/structure/_project_description.mdx'; + + + +The goal of this module is to give you an overview, but not dive too deep into details around managing access rights and delegating management of roles to third parties. So let’s create a straightforward example project first. + +## Create a project + +Visit or select “Projects” within your organization, then click the button to create a new project. + +![Empty Project](/img/console_projects_empty.png) + +Enter the name “ My first project” and continue. + +Let’s make this more interesting and add some basic roles and authorizations to your project and then confirm the scope of the roles and authorizations. + +Jump to the section ROLES and create two new roles with the following values + +* Key: reader +* Display Name: Reader +* Group: user + +and + +* Key: editor +* Display Name: Editor +* Group: user + +![Add New Roles](/img/console_projects_add_new_roles.gif) + +Now, you can add roles to your own user, or you can create a new user. To create a new user, go to Users and click “New”. Enter the required contact details and save by clicking “Create”. + +![Create new user](/img/console_users_create_new_user.gif) + +To grant users certain roles, you need to create authorizations. Go back to the project, and jump to the section AUTHORIZATIONS. + +![Verify your authorization](/img/console_projects_create_authorization.gif) + +You can verify the role grant on the user. Select Users from the navigation menu and click on the user Coyote. Scroll down to the section AUTHORIZATION, there you should be able to verify that the user has the role ‘reader’ for your project ‘My first project’. + +![Organization grant](/img/console_projects_authorization_created.png) + +Now create another project (eg. “My second project”) and verify that there are no roles or authorizations on your second project. + +## What is a granted project? + +import GrantedProjectDescription from '../../../concepts/structure/_granted_project_description.mdx'; + + + +## Grant a project + +1. Visit the project that you have created before, then in the section GRANTED ORGANIZATIONS click New. +2. Enter the domain ‘acme.caos.ch’, search the organization and continue to the next step. +3. Select some roles you would like to grant to the organization ACME and confirm. +4. You should now see ACME-CAOS in the section GRANTED ORGANIZATIONS + +![Grant a project](/img/projects_create_org_grant.gif) + + diff --git a/docs/docs/guides/customization/behavior.md b/docs/docs/guides/manage/customize/behavior.md similarity index 85% rename from docs/docs/guides/customization/behavior.md rename to docs/docs/guides/manage/customize/behavior.md index 70aa8bd66d..09267eda8a 100644 --- a/docs/docs/guides/customization/behavior.md +++ b/docs/docs/guides/manage/customize/behavior.md @@ -2,7 +2,7 @@ title: Behavior Customization --- -In this guide, you will create a [ZITADEL action](../../concepts/features/actions). +In this guide, you will create a [ZITADEL action](../../../concepts/features/actions). After users register using an external identity provider, the action assigns them a role. ## Prerequisites @@ -11,8 +11,8 @@ Before you start, make sure you have everything set up correctly. - You need to be at least a ZITADEL *ORG_OWNER* - Your ZITADEL organization needs to have the actions feature enabled. -- [Your ZITADEL organization needs to have at least one external identity provider enabled](../authentication/identity-brokering) -- [You need to have at least one role configured for a project](../basics/projects) +- [Your ZITADEL organization needs to have at least one external identity provider enabled](../../integrate/identity-brokering) +- [You need to have at least one role configured for a project](../console/projects) ## Copy some information for the action @@ -40,7 +40,7 @@ function addGrant(ctx, api) { ## Run the action when a user registers -Now, make the action hook into the [external authentication flow](../../apis/actions#external-authentication-flow). +Now, make the action hook into the [external authentication flow](../../../apis/actions#external-authentication-flow). 1. In the **Flows ** section, select the **+ New** button. 1. Select the **Flow Type** *External Authentication*. @@ -54,5 +54,5 @@ New users automatically are assiged a role now if they register by authenticatin ## What's next? -- [Read more about the concepts around actions](../../concepts/features/actions) -- [Read more about all the options you have with actions](../../apis/actions) \ No newline at end of file +- [Read more about the concepts around actions](../../../concepts/features/actions) +- [Read more about all the options you have with actions](../../../apis/actions) \ No newline at end of file diff --git a/docs/docs/guides/customization/branding.md b/docs/docs/guides/manage/customize/branding.md similarity index 95% rename from docs/docs/guides/customization/branding.md rename to docs/docs/guides/manage/customize/branding.md index e706966dd9..656a02e9cb 100644 --- a/docs/docs/guides/customization/branding.md +++ b/docs/docs/guides/manage/customize/branding.md @@ -41,7 +41,7 @@ The primary domain scope will restrict the login to your organization, so only u See the following link as an example. Users will be able to register and login to the organization that verified the @caos.ch domain only. ``` -https://{your_domain.zitadel.cloud}/oauth/v2/authorize?client_id=69234247558357051%40zitadel&scope=openid%20profile%20urn%3Azitadel%3Aiam%3Aorg%3Adomain%3Aprimary%3Acaos.ch&redirect_uri=https%3A%2F%2Fconsole.zitadel.ch%2Fauth%2Fcallback&state=testd&response_type=code&nonce=test&code_challenge=UY30LKMy4bZFwF7Oyk6BpJemzVblLRf0qmFT8rskUW0 +https://{your_domain.zitadel.cloud}/oauth/v2/authorize?client_id=69234247558357051%40zitadel&scope=openid%20profile%20urn%3Azitadel%3Aiam%3Aorg%3Adomain%3Aprimary%3Acaos.ch&redirect_uri=https%3A%2F%2Fconsole.zitadel.cloud%2Fauth%2Fcallback&state=testd&response_type=code&nonce=test&code_challenge=UY30LKMy4bZFwF7Oyk6BpJemzVblLRf0qmFT8rskUW0 ``` :::info diff --git a/docs/docs/guides/customization/texts.md b/docs/docs/guides/manage/customize/texts.md similarity index 96% rename from docs/docs/guides/customization/texts.md rename to docs/docs/guides/manage/customize/texts.md index 9902ebe493..052751de56 100644 --- a/docs/docs/guides/customization/texts.md +++ b/docs/docs/guides/manage/customize/texts.md @@ -40,4 +40,4 @@ ZITADEL is available in the following languages A language is displayed based on your agent's language header. The default language is English. -If you need support for a specific language we highly encourage you to [contribute translation files](https://github.com/zitadel/zitadel/blob/v2-alpha/CONTRIBUTING.md) for the missing language. +If you need support for a specific language we highly encourage you to [contribute translation files](https://github.com/zitadel/zitadel/blob/main/CONTRIBUTING.md) for the missing language. diff --git a/docs/docs/guides/customization/user-metadata.md b/docs/docs/guides/manage/customize/user-metadata.md similarity index 99% rename from docs/docs/guides/customization/user-metadata.md rename to docs/docs/guides/manage/customize/user-metadata.md index 15b936c5fe..df93df7d38 100644 --- a/docs/docs/guides/customization/user-metadata.md +++ b/docs/docs/guides/manage/customize/user-metadata.md @@ -17,7 +17,7 @@ Typical examples for user metadata include: ### Create a new client -- Create a new [web application](https://docs.zitadel.com/docs/guides/basics/applications#web) +- Create a new [web application](https://docs.zitadel.com/docs/guides/start/applications#web) - Use Code-Flow - In this example we will use `http://localhost` as redirect url - Make sure to note the client secret diff --git a/docs/docs/guides/installation/configure/_compose.mdx b/docs/docs/guides/manage/self-hosted/configure/_compose.mdx similarity index 76% rename from docs/docs/guides/installation/configure/_compose.mdx rename to docs/docs/guides/manage/self-hosted/configure/_compose.mdx index ba9702542b..d6a6006513 100644 --- a/docs/docs/guides/installation/configure/_compose.mdx +++ b/docs/docs/guides/manage/self-hosted/configure/_compose.mdx @@ -23,16 +23,16 @@ By executing the commands below, you will download the following files: ```bash # Download the docker compose example configuration for a secure CockroachDB. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/docker-compose.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/docker-compose.yaml # Download and adjust the example configuration file containing standard configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-config.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml # Download and adjust the example configuration file containing secret configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-secrets.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml # Download and adjust the example configuration file containing database initialization configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-init-steps.yaml # A single ZITADEL instance always needs the same 32 characters long masterkey # If you haven't done so already, you can generate a new one diff --git a/docs/docs/guides/installation/configure/_helm.mdx b/docs/docs/guides/manage/self-hosted/configure/_helm.mdx similarity index 81% rename from docs/docs/guides/installation/configure/_helm.mdx rename to docs/docs/guides/manage/self-hosted/configure/_helm.mdx index 77fac6eaa1..6d7bff7319 100644 --- a/docs/docs/guides/installation/configure/_helm.mdx +++ b/docs/docs/guides/manage/self-hosted/configure/_helm.mdx @@ -5,7 +5,7 @@ import ExampleZITADELValuesSecretsSource from '!!raw-loader!./example-zitadel-va By default, the chart installs a secure ZITADEL and CockroachDB. The example files makes an insecure ZITADEL accessible by port forwarding the ZITADEL service to localhost. For more configuration options, [go to the chart repo descriptions](https://github.com/zitadel/zitadel-charts). -For a secure installation with Docker Compose, [go to the loadbalancing example](/docs/guides/installation/loadbalancing-example) +For a secure installation with Docker Compose, [go to the loadbalancing example](../../deploy/loadbalancing-example) By executing the commands below, you will download the following files: @@ -18,10 +18,10 @@ By executing the commands below, you will download the following files: ```bash # Download and adjust the example configuration file containing standard configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-values.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values.yaml # Download and adjust the example configuration file containing secret configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-values-secrets.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml # Install an insecure zitadel release that works with localhost helm install --namespace zitadel --create-namespace my-zitadel zitadel/zitadel \ diff --git a/docs/docs/guides/installation/configure/_linuxunix.mdx b/docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx similarity index 85% rename from docs/docs/guides/installation/configure/_linuxunix.mdx rename to docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx index 030f88d54f..35e795837c 100644 --- a/docs/docs/guides/installation/configure/_linuxunix.mdx +++ b/docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx @@ -19,13 +19,13 @@ By executing the commands below, you will download the following files: ```bash # Download and adjust the example configuration file containing standard configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-config.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml # Download and adjust the example configuration file containing secret configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-secrets.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml # Download and adjust the example configuration file containing database initialization configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/v2-alpha/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-init-steps.yaml # A single ZITADEL instance always needs the same 32 characters long masterkey # If you haven't done so already, you can generate a new one diff --git a/docs/docs/guides/installation/configure/configure.mdx b/docs/docs/guides/manage/self-hosted/configure/configure.mdx similarity index 88% rename from docs/docs/guides/installation/configure/configure.mdx rename to docs/docs/guides/manage/self-hosted/configure/configure.mdx index 7fb5b9fecf..221b5a163c 100644 --- a/docs/docs/guides/installation/configure/configure.mdx +++ b/docs/docs/guides/manage/self-hosted/configure/configure.mdx @@ -1,5 +1,5 @@ --- -title: Configure +title: Configuration Options --- import Tabs from "@theme/Tabs"; @@ -10,16 +10,16 @@ import Helm from './_helm.mdx' # Configure ZITADEL -This guide assumes you are already familiar with [running ZITADEL with the most minimal configuration possible](./run). +This guide assumes you are already familiar with [running ZITADEL with the most minimal configuration possible](../../deploy/overview). ## Configuration Files ### Runtime Configuration -See a description of all possible _runtime configuration_ options with their defaults [in the source code](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml). +See a description of all possible _runtime configuration_ options with their defaults [in the source code](https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml). The `zitadel` binary expects the `--config` flag for this configuration. ### Database Initialization -Apart from these options, ZITADEL uses a [different configuration](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/admin/setup/steps.yaml) for _database initialization steps_. +Apart from these options, ZITADEL uses a [different configuration](https://github.com/zitadel/zitadel/blob/main/cmd/admin/setup/steps.yaml) for _database initialization steps_. The `zitadel` binary expects the `--steps` flag for this configuration. ### Split Configuration @@ -72,12 +72,12 @@ This is the IAM admin users login according to your configuration in the [exampl ## What's next -- Read more about [the login process](../../manuals/user-login). +- Read more about [the login process](../../../manuals/user-login). - If you want to run ZITADEL in production, you most certainly need to [customize your own domain](./custom-domain). -- Check out all possible [runtime configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml) -- Check out all possible [setup step configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/setup/steps.yaml) +- Check out all possible [runtime configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml) +- Check out all possible [setup step configuration properties and their defaults in the source code](https://github.com/zitadel/zitadel/blob/main/cmd/setup/steps.yaml) :::caution -The ZITADEL management console [requires end-to-end HTTP/2 support](./http2-support) +The ZITADEL management console [requires end-to-end HTTP/2 support](/docs/guides/manage/self-hosted/http2) diff --git a/docs/docs/guides/installation/configure/docker-compose.yaml b/docs/docs/guides/manage/self-hosted/configure/docker-compose.yaml similarity index 96% rename from docs/docs/guides/installation/configure/docker-compose.yaml rename to docs/docs/guides/manage/self-hosted/configure/docker-compose.yaml index c93301e5ee..bd909142ad 100644 --- a/docs/docs/guides/installation/configure/docker-compose.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/docker-compose.yaml @@ -6,7 +6,7 @@ services: restart: 'always' networks: - 'zitadel' - image: 'ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.39-amd64' + image: 'ghcr.io/zitadel/zitadel:v2.0.0-amd64' command: 'start-from-init --config /example-zitadel-config.yaml --config /example-zitadel-secrets.yaml --steps /example-zitadel-init-steps.yaml --masterkey "${ZITADEL_MASTERKEY}" --tlsMode disabled' depends_on: chown: diff --git a/docs/docs/guides/installation/configure/example-zitadel-config.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml similarity index 93% rename from docs/docs/guides/installation/configure/example-zitadel-config.yaml rename to docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml index 0387561e41..cf3184fc2b 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-config.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml Log: Level: 'info' diff --git a/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-init-steps.yaml similarity index 78% rename from docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml rename to docs/docs/guides/manage/self-hosted/configure/example-zitadel-init-steps.yaml index 492b3ac12e..3c89a9a744 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-init-steps.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-init-steps.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/adminn/setup/steps.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/adminn/setup/steps.yaml FirstInstance: Org: Human: diff --git a/docs/docs/guides/installation/configure/example-zitadel-secrets.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml similarity index 88% rename from docs/docs/guides/installation/configure/example-zitadel-secrets.yaml rename to docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml index f46cb0d683..bc630b8140 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-secrets.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml # If not using the docker compose example, adjust these values for connecting ZITADEL to your CockroachDB Database: diff --git a/docs/docs/guides/installation/configure/example-zitadel-values-secrets.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml similarity index 88% rename from docs/docs/guides/installation/configure/example-zitadel-values-secrets.yaml rename to docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml index 2475f0da34..d7d0c1988d 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-values-secrets.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml zitadel: masterkey: 'MasterkeyNeedsToHave32Characters' diff --git a/docs/docs/guides/installation/configure/example-zitadel-values.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values.yaml similarity index 91% rename from docs/docs/guides/installation/configure/example-zitadel-values.yaml rename to docs/docs/guides/manage/self-hosted/configure/example-zitadel-values.yaml index 8db89c6e66..571c7af699 100644 --- a/docs/docs/guides/installation/configure/example-zitadel-values.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values.yaml @@ -1,4 +1,4 @@ -# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/v2-alpha/cmd/defaults.yaml +# All possible options and their defaults: https://github.com/zitadel/zitadel/blob/main/cmd/defaults.yaml zitadel: configmapConfig: Log: diff --git a/docs/docs/guides/installation/custom-domain.md b/docs/docs/guides/manage/self-hosted/custom-domain.md similarity index 87% rename from docs/docs/guides/installation/custom-domain.md rename to docs/docs/guides/manage/self-hosted/custom-domain.md index 0e80d7d3ef..6f4d3088c5 100644 --- a/docs/docs/guides/installation/custom-domain.md +++ b/docs/docs/guides/manage/self-hosted/custom-domain.md @@ -27,4 +27,4 @@ In this case the `ExternalDomain`-field of the configuration is used. ## Example -Go to the [loadbalancing example with Traefik](./loadbalancing-example) for seeing a working example configuration. +Go to the [loadbalancing example with Traefik](../../deploy/loadbalancing-example) for seeing a working example configuration. diff --git a/docs/docs/guides/manage/self-hosted/http2.mdx b/docs/docs/guides/manage/self-hosted/http2.mdx new file mode 100644 index 0000000000..d3c6b5d4f0 --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/http2.mdx @@ -0,0 +1,15 @@ +--- +title: HTTP/2 Support +--- + +ZITADEL follows a strict API first approach and makes heavy use of the modern API framework called [gRPC](https://grpc.io/). +Besides gRPC all APIs are also available in an openapi Rest fashion as well as in gRPC-web for compatibilty towards browser integrations. + +To make us of gRPC it is vital to allow your clients to communicate with ZITADEL with [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2). + +Sometimes you need to configure explicitly that you want to use HTTP/2 if you run ZITADEL behind a proxy and below you should find examples for different vendors and projects. + +Furthermore it is important to notice that by default HTTP/2 is always encrypted, but if you want to run ZITADEL without TLS from your proxy or service mesh this is possible through [h2c](https://httpd.apache.org/docs/2.4/howto/http2.html). +Oftentimes when you run ZITADEL inside a service mesh, or a servelerss offering (e.g. Google Cloud Run, Knative, ...) you will need h2c. + +You can read more about ZITADEL's [TLSs modes here](/docs/guides/manage/self-hosted/tls_modes). diff --git a/docs/docs/guides/manage/self-hosted/proxy/_caddy.mdx b/docs/docs/guides/manage/self-hosted/proxy/_caddy.mdx new file mode 100644 index 0000000000..b871db7e44 --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_caddy.mdx @@ -0,0 +1,25 @@ +## TLS mode external + +```bash +https://localhost { + reverse_proxy h2c://localhost:8080 + tls internal #only non production +} +``` + +## TLS mode enabled + +```bash +https://localhost { + reverse_proxy https://localhost:8080 + tls internal #only non production +} +``` + +## TLS mode disabled + +```bash +http://localhost { + reverse_proxy h2c://localhost:8080 +} +``` diff --git a/docs/docs/guides/manage/self-hosted/proxy/_cloudflare.mdx b/docs/docs/guides/manage/self-hosted/proxy/_cloudflare.mdx new file mode 100644 index 0000000000..921b7750bb --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_cloudflare.mdx @@ -0,0 +1,18 @@ +## Settings + +- [Make sure HTTP/2 is enabled](https://support.cloudflare.com/hc/en-us/articles/200168076-Understanding-Cloudflare-HTTP-2-and-HTTP-3-Support) +- [Verify that gRPC is enabled](https://support.cloudflare.com/hc/en-us/articles/360050483011-Understanding-Cloudflare-gRPC-support) +- [Verify that traffic is proxied through cloudflare](https://developers.cloudflare.com/dns/manage-dns-records/reference/proxied-dns-records/) +- [Configure ZITADEL to use the TLS Mode enabled](./tls_modes#enabled) + +:::info +[Cloudflare does only support gRPC with TLS!](https://support.cloudflare.com/hc/en-us/articles/360050483011-Understanding-Cloudflare-gRPC-support) +::: + +## Troubleshooting + +If something is not working please check the cloudflare WAF rules for potential violations. +These two rules are known to be triggered: + +- 100001 Anomaly:Header:User-Agent - Missing Cloudflare Specials +- 100004 Anomaly:Header:User-Agent, Anomaly:Header:Referer - Missing or empty \ No newline at end of file diff --git a/docs/docs/guides/manage/self-hosted/proxy/_cloudflare_tunnel.mdx b/docs/docs/guides/manage/self-hosted/proxy/_cloudflare_tunnel.mdx new file mode 100644 index 0000000000..ea810b1195 --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_cloudflare_tunnel.mdx @@ -0,0 +1,3 @@ +:::caution + +[The Cloudflare tunnel client currently has an issue which allows it not to force HTTP/2 usage towards the origin.](https://github.com/cloudflare/cloudflared/issues/682) \ No newline at end of file diff --git a/docs/docs/guides/manage/self-hosted/proxy/_more.mdx b/docs/docs/guides/manage/self-hosted/proxy/_more.mdx new file mode 100644 index 0000000000..b004111152 --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_more.mdx @@ -0,0 +1,4 @@ +## More information + +- [You can read here about the TLS Modes](./tls_modes) +- [And here about how ZITADEL makes use of HTTP/2](./http2) \ No newline at end of file diff --git a/docs/docs/guides/manage/self-hosted/proxy/_nginx.mdx b/docs/docs/guides/manage/self-hosted/proxy/_nginx.mdx new file mode 100644 index 0000000000..d611401cdc --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_nginx.mdx @@ -0,0 +1,65 @@ +## TLS mode external + +```bash +worker_processes 1; +events { + worker_connections 1024; +} + +http { + server { + listen 443; + + ssl_certificate ssl/certificate.pem; + ssl_certificate_key ssl/key.pem; + + location / { + grpc_pass grpc://localhost:8080; + grpc_set_header Host $host:$server_port; + } + } +} +``` + +## TLS mode enabled + +```bash +worker_processes 1; +events { + worker_connections 1024; +} + +http { + server { + listen 443; + + ssl_certificate ssl/certificate.pem; + ssl_certificate_key ssl/key.pem; + + location / { + grpc_pass grpcs://localhost:8080; + grpc_set_header Host $host:$server_port; + } + } +} +``` + +## TLS mode disabled + +```bash +worker_processes 1; +events { + worker_connections 1024; +} + +http { + server { + listen 80; + + location / { + grpc_pass grpc://localhost:8080; + grpc_set_header Host $host:$server_port; + } + } +} +``` diff --git a/docs/docs/guides/manage/self-hosted/proxy/_traefik.mdx b/docs/docs/guides/manage/self-hosted/proxy/_traefik.mdx new file mode 100644 index 0000000000..f1e3049c18 --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_traefik.mdx @@ -0,0 +1,144 @@ +## TLS mode external + +```yaml +entrypoints: + web: + address: ":80" + websecure: + address: ":443" +tls: + stores: + default: + defaultCertificate: +providers: + file: + filename: /etc/traefik/traefik.yaml +http: + middlewares: + zitadel: + headers: + isDevelopment: false + allowedHosts: + - 'localhost' + redirect-to-https: + redirectScheme: + scheme: https + port: 443 + permanent: true + routers: + router0: + entryPoints: + - web + middlewares: + - redirect-to-https + rule: 'HostRegexp(`localhost`, `{subdomain:[a-z]+}.localhost`)' + service: zitadel + router1: + entryPoints: + - websecure + service: zitadel + middlewares: + - zitadel + rule: 'HostRegexp(`localhost`, `{subdomain:[a-z]+}.localhost`)' + tls: + domains: + - main: "localhost" + sans: + - "*.localhost" + - "localhost" + services: + zitadel: + loadBalancer: + servers: + - url: h2c://localhost:8080 + passHostHeader: true +``` + +## TLS mode enabled + +```yaml +entrypoints: + web: + address: ":80" + websecure: + address: ":443" +tls: + stores: + default: + defaultCertificate: +providers: + file: + filename: /etc/traefik/traefik.yaml +http: + middlewares: + zitadel: + headers: + isDevelopment: false + allowedHosts: + - 'localhost' + redirect-to-https: + redirectScheme: + scheme: https + port: 443 + permanent: true + routers: + router0: + entryPoints: + - web + middlewares: + - redirect-to-https + rule: 'HostRegexp(`localhost`, `{subdomain:[a-z]+}.localhost`)' + service: zitadel + # The actual ZITADEL router + router1: + entryPoints: + - websecure + service: zitadel + middlewares: + - zitadel + rule: 'HostRegexp(`localhost`, `{subdomain:[a-z]+}.localhost`)' + tls: + domains: + - main: "localhost" + sans: + - "*.localhost" + - "localhost" + services: + zitadel: + loadBalancer: + servers: + - url: https://localhost:8080 + passHostHeader: true +``` + +## TLS mode disabled + +```yaml +entrypoints: + web: + address: ":80" +providers: + file: + filename: /etc/traefik/traefik.yaml +http: + middlewares: + zitadel: + headers: + isDevelopment: false + allowedHosts: + - 'localhost' + routers: + router0: + entryPoints: + - web + middlewares: + - redirect-to-https + rule: 'HostRegexp(`localhost`, `{subdomain:[a-z]+}.localhost`)' + service: zitadel + services: + zitadel: + loadBalancer: + servers: + - url: h2c://localhost:8080 + passHostHeader: true +``` \ No newline at end of file diff --git a/docs/docs/guides/manage/self-hosted/proxy/_zitadel_cloud.mdx b/docs/docs/guides/manage/self-hosted/proxy/_zitadel_cloud.mdx new file mode 100644 index 0000000000..706393651f --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/_zitadel_cloud.mdx @@ -0,0 +1,11 @@ +## Fronting ZITADEL Cloud + +You can use your reverseproxy, content delivery network (CDN) or web application firewall (WAF) to front ZITADEL Cloud. +However we currently do not recommend this for production settings. + +To configure your service that fronts ZITADEL please have a look at the vendors in this page. + +## Things to look out for when fronting ZITADEL Cloud + +- Cache-control - ZITADEL Cloud uses a CDN to globally distribute data. Please try to avoid overriding this header as it may lead to sideeffects +- Rate Limits - ZITADEL Cloud uses a combination of static and dynamic rate limits. If you recieve occasional 429 headers you are rate limited. diff --git a/docs/docs/guides/manage/self-hosted/proxy/proxy.mdx b/docs/docs/guides/manage/self-hosted/proxy/proxy.mdx new file mode 100644 index 0000000000..3364f8846b --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/proxy/proxy.mdx @@ -0,0 +1,53 @@ +--- +title: Proxy Configuration +--- + +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import Zcloud from './_zitadel_cloud.mdx' +import Nginx from './_nginx.mdx' +import Traefik from './_traefik.mdx' +import Caddy from './_caddy.mdx' +import Cftunnel from './_cloudflare_tunnel.mdx' +import Cloudflare from './_cloudflare.mdx' +import More from './_more.mdx' + +# Proxy Configuration + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs/guides/manage/self-hosted/tls_modes.mdx b/docs/docs/guides/manage/self-hosted/tls_modes.mdx new file mode 100644 index 0000000000..e8a5db7be8 --- /dev/null +++ b/docs/docs/guides/manage/self-hosted/tls_modes.mdx @@ -0,0 +1,58 @@ +--- +title: TLS Modes +--- + +To allow ZITADEL to be run on any kind of infrastrucute it allows to configure on how tho handle TLS connections. +There are three mode of operation: `external`, `enabled`, `disabled`. + +Generally this command is set as argument while starting ZITADEL. For example like this: + +```bash +zitadel start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled +``` + +## External + +The mode `external` allows you to configure ZITADEL in such a way that it will instruct its clients to use https. +However ZITADEL delegates the management of TLS connections to a reverseproxy, web application firewall or a service mesh. + +## Enabled + +When using the mode `enabled` ZITADEL is setup to await incoming connections in an encrypted fashion. +Wether it is from a client directly, a reverseproxy or web application firewall. +This allows http connections to be secured at the transport level the whole way. + +If you use the mode `enabled` you need to configure ZITADEL with the nessecary TLS settings. + +```yaml +TLS: + # if enabled, ZITADEL will serve all traffic over TLS (HTTPS and gRPC) + # you must then also provide a private key and certificate to be used for the connection + # either directly or by a path to the corresponding file + Enabled: true + # Path to the private key of the TLS certificate, it will be loaded into the Key + # and overwrite any exising value + KeyPath: #/path/to/key/file.pem + # Private key of the TLS certificate (KeyPath will this overwrite, if specified) + Key: # + # Path to the certificate for the TLS connection, it will be loaded into the Cert + # and overwrite any exising value + CertPath: #/path/to/cert/file.pem + # Certificate for the TLS connection (CertPath will this overwrite, if specified) + Cert: # +``` + +## Disabled + +With the mode `disabled` ZITADEL is instructed to await all connections with plain http without TLS. + +:::caution + +Be aware this is not a secure setup and should only be used for test systems! + +::: + +## HTTP/2 + +To allow ZITADEL to function properly please make sure that HTTP/2 is enabled. If you are using the mode `external` or `disabled` make sure to verify h2c compatibilty. +You can read more about how ZITADEL utilizes in our [HTTP/2 docs](/docs/guides/manage/self-hosted/http2). \ No newline at end of file diff --git a/docs/docs/guides/overview.mdx b/docs/docs/guides/overview.mdx index 015fd36373..8407cd8455 100644 --- a/docs/docs/guides/overview.mdx +++ b/docs/docs/guides/overview.mdx @@ -7,24 +7,24 @@ import Column from "../../src/components/column"; With our guides you will learn everything you need to know about specific topics. You get step-by-step instructions for certain tasks and have a knowledge check at the end. -You can either use our cloud-instance [zitadel.com](https://zitadel.com) or deploy your own **ZITADEL** instance. To get started, we recommend you to try out our free tier first. Jump directly to the [get started](./basics/get-started) docs. +You can either use our cloud-instance [zitadel.com](https://zitadel.com) or deploy your own **ZITADEL** instance. To get started, we recommend you to try out our free tier first. Jump directly to the [get started](./start/quickstart) docs. Note that your console design changes to your design too @@ -86,7 +86,7 @@ We'd appreciate if you could contribute to our repo with translations of your la ### Projects and applications As our Hosted Login is a separate authentication screen, you have to determine how you are directing your users from your applications. -ZITADEL's Applications live under ZITADEL's Projects. You may add multiple applications for your different client-types (Native, Web, User Agent, or API). When setting up your applications consider reading our guide about [Authentication Flows](../authentication/login-users). +ZITADEL's Applications live under ZITADEL's Projects. You may add multiple applications for your different client-types (Native, Web, User Agent, or API). When setting up your applications consider reading our guide about [Authentication Flows](../integrate/login-users). ### Access Control @@ -99,10 +99,10 @@ Take the following considerations: The data required to check if a user has access to a certain API is stored within a user grant. This information typically is stored within roles or custom claims and can be accessed with an `access` or OIDC `id` token. -Read more about Authorization in our [Guide](../authorization/oauth-recommended-flows). +Read more about Authorization in our [Guide](../integrate/oauth-recommended-flows). ## Learn more -- [Creating an organization](../basics/organizations#exercise---create-a-new-organization) -- [Organization Branding](../customization/branding) -- [Authorization](../authorization/oauth-recommended-flows) +- [Creating an organization](../manage/console/organizations#exercise---create-a-new-organization) +- [Organization Branding](../manage/customize/branding) +- [Authorization](../integrate/oauth-recommended-flows) diff --git a/docs/docs/guides/start/_local_instance.mdx b/docs/docs/guides/start/_local_instance.mdx new file mode 100644 index 0000000000..f8852770e9 --- /dev/null +++ b/docs/docs/guides/start/_local_instance.mdx @@ -0,0 +1 @@ +If you choose to run a local instance have a look at our [deploy](../deploy/overview) section, where we show you different possibilities on how to run ZITADEL. \ No newline at end of file diff --git a/docs/docs/guides/start/_zitadel_cloud.mdx b/docs/docs/guides/start/_zitadel_cloud.mdx new file mode 100644 index 0000000000..3860f6b818 --- /dev/null +++ b/docs/docs/guides/start/_zitadel_cloud.mdx @@ -0,0 +1,55 @@ +This guide provides a quick start on how to onboard to the ZITADEL Cloud Customer Portal, where you can manage your ZITADEL instances. +Follow all the guides in the get to know section, to create your first instance, upgrade to a paid tier and connect your first client. + +## Try out ZITADEL Cloud + +1. Visit [zitadel.cloud](https://zitadel.cloud/) to create your account. If you already have a ZITADEL instance sign in with your Customer Portal user. +2. Enter the data to create your organization (First name, Last name, Email, Username and Organization Name) +3. By clicking "Let's go" we will create a user for you. +4. You will receive an verification Email to verify the user for the Customer Portal +5. Use the newly create user to login to the Custom Portal + +![Customer Portal Landing Page](/img/manuals/portal/customer_portal_landing_page.png) + +## Login to Customer Portal + +Use your Customer Portal user to login to the ZITADEL Customer Portal. +Here you can manage all your different instances, subscriptions and billing data. + +1. Go to [zitadel.cloud](https://zitadel.cloud) +2. Click sign in +3. Use your ZITADEL Cloud user + +Find out more about the Customer Portal [here](/docs/guides/manage/cloud/overview). + +## Create a new instance + +:::note +This takes place in the [ZITADEL Cloud Customer Portal](https://zitadel.cloud) +::: + +The creation and management of an instance takes place in the Customer Portal. +To manage your existing instances you need login with your Customer Portal user. Be aware that this is not the same user as in the instance itself. + +1. Click +![New Instance](/img/manuals/portal/customer_portal_new_instance.gif) + +## Login to your instance + +:::note +This takes place in the your ZITADEL Cloud Instances Console +::: + +After you have initialized your first admin user of the newly created ZITADEL instance. You can access the instance's Console, to manage all of your resources. +To login with the user you have initialized. You will find the link to access your instance in the initialization email of your user or in the detail page of your instance in the [ZITADEL Cloud](https://zitadel.cloud). + +We generated a unique domain for each ZITADEL Cloud Instance that looks like this: {InstanceName}-{RandomString}.zitadel.cloud + +**Customer Portal - Find Instance Domain:** +![Customer Portal - Instance Domain](/img/manuals/portal/portal_instance_detail_domain.png) + +**Console - Landing Page** +![Console Landing Page](/img/console_dashboard.png) + +## Manage Instance and Billing + diff --git a/docs/docs/guides/start/quickstart.mdx b/docs/docs/guides/start/quickstart.mdx new file mode 100644 index 0000000000..a9b5e26c72 --- /dev/null +++ b/docs/docs/guides/start/quickstart.mdx @@ -0,0 +1,81 @@ +--- +title: Quickstart +--- + +import Column from "../../../src/components/column"; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; +import Zcloud from './_zitadel_cloud.mdx' +import LocalInstance from './_local_instance.mdx' + + +Most applications need to know the identity of a user allowing to securely store user data in the cloud and provide the same personalised experience across all of the user's devices. + +ZITADEL's authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users in your application. It supports authentication using passwords and applies additional security with the help of a second factor, for example OTP, to ensure a safe and secure access. +It additionally leverages industry standards like OAuth 2.0 and OpenID Connect such that it can be easily integrated in your custom backend. + +ZITADEL currently support two ways of using it: +- Use the ZITADEL Cloud free tier to get started in minutes +- Deploy a self-hosted ZITADEL, where ever you like + +## Help me choose + +If you are unsure you should opt for the gracious free-tier of [ZITADEL Cloud](../manage/cloud/overview). + +Chose [ZITADEL Cloud](../manage/cloud/overview) if you want: + +- A turnkey solution that just works +- Gracious Free tier with a great pay-as-you-go option +- Global scalability without the headache of running +- Data residency compliance for your customers + +Chose [ZITADEL Self-Hosted](../deploy/overview) if you want: + +- Total control over all components and your data +- Run ZITADEL in air gapped or regulated environemnts +- Flexibilty when you deploy updates + +:::info +Support is available either through the opensource community or a support contract +::: + + + + + + + + + + + + +## Create first project and application + +To be able to connect your first application you have to create a project and an application in the ZITADEL Console.application + +1. Click on the projects menu point +2. Add new project by clicking the "+" Button and give a name +3. Click the "+" Button in the project detail in the application section +4. The wizard will help you through the creation process with the recommended values when choosing the application type [More about applications](../manage/console/applications) + +Now you are ready to integrate ZITADEL into your application. +Check out our [Examples](../../examples/introduction) to start with your app. + +## Elect New Managers + +:::note +This takes place in the ZITADEL Console +::: + +ZITADEL allows you to give other users control over the ZITADEL Console. The manager role can be restricted to some kind of write and/or read. +This is especially useful for direct administration over several users. You can have managers able to edit project settings and others able to create/add users only. + +> Note: ZITADEL Managers are located on the right side panel of the ZITADEL Console. diff --git a/docs/docs/legal/rate-limit-policy.md b/docs/docs/legal/rate-limit-policy.md index c9004eb747..094af0f306 100644 --- a/docs/docs/legal/rate-limit-policy.md +++ b/docs/docs/legal/rate-limit-policy.md @@ -25,7 +25,7 @@ You should consider to implement [exponential backoff](https://en.wikipedia.org/ ### Login, Register, Reset Limits -For the rate limits of the Login, Register and Reset features please visit [Login Rate Limits](/docs/apis/ratelimits/accounts) +For the rate limits of the Login, Register and Reset features please visit [Login Rate Limits](/docs/apis/ratelimits/login) ### API Rate Limits diff --git a/docs/docs/manuals/customerportal/billing.md b/docs/docs/manuals/customerportal/billing.md deleted file mode 100644 index 8e8b59057a..0000000000 --- a/docs/docs/manuals/customerportal/billing.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Billing ---- - -In the billing page shows your configured payment methods and the invoice - -![Customer Portal Billing](/img/manuals/portal/customer_portal_billing.png) - -## Payment and Billing - -If you click on edit payment and billing you will get redirected to the payment page of stripe. -Configure your payment method here. - -At the moment we provide the following methods: -- Credit Card -- Apple Pay -- Google Pay - -Once a payment method is configured, it can be selected directly in the instance creation process. - -## Invoices - -We show all you invoices, and you are able to download them directly in the Customer Portal. \ No newline at end of file diff --git a/docs/docs/quickstarts/call-zitadel-api/dot-net.md b/docs/docs/quickstarts/call-zitadel-api/dot-net.md deleted file mode 100644 index bac5d366a3..0000000000 --- a/docs/docs/quickstarts/call-zitadel-api/dot-net.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: .NET ---- - -This integration guide shows you how to integrate **ZITADEL** into your .NET application. -It demonstrates how to fetch some data from the ZITADEL management API. - -At the end of the guide you should have an application able to read the details of your organization. - -If you need any other information about the .NET SDK go to the [documentation](https://caos.github.io/zitadel-net/) of the SDK itself. -## Prerequisites - -The client [SDK](https://github.com/zitadel/zitadel-net) will handle all necessary OAuth 2.0 requests and send the required headers to the ZITADEL API. -All that is required, is a service account with an Org Owner (or another role, depending on the needed api requests) role assigned and its key JSON. - -However, we recommend you read the guide on [how to access ZITADEL API](../../guides/api/access-zitadel-apis) and the associated guides for a basic knowledge of : - - [Recommended Authorization Flows](../../guides/authorization/oauth-recommended-flows) - - [Service Users](../../guides/authentication/serviceusers) - -> Be sure to have a valid key JSON and that its service account is either ORG_OWNER or at least ORG_OWNER_VIEWER before you continue with this guide. - -## .NET Setup - -### Create a .NET application - -Use the IDE of your choice or the command line to create a new application. - -```bash -dotnet new web -``` - -### Install the package - -Install the package via nuget - -```bash -dotnet add package Zitadel.Api -``` - -### Create example client - -Change the program.cs file to the content below. This will create a client for the management api and call its `GetMyOrg` function. -The SDK will make sure you will have access to the API by retrieving a Bearer Token using JWT Profile with the provided scopes (`openid` and `urn:zitadel:iam:org:project:id:69234237810729019:aud`). - -```csharp -using System; -using Zitadel.Api; -using Zitadel.Authentication; -using Zitadel.Authentication.Credentials; - -// no.. this key is not activated anymore ;-) -var sa = await ServiceAccount.LoadFromJsonFileAsync("./service-account.json"); -var api = Clients.ManagementService( - new() - { - // Which api endpoint (self hosted or public) - Endpoint = ZitadelDefaults.ZitadelApiEndpoint, - // The organization context (where the api calls are executed) - Organization = "74161146763996133", - // Service account authentication - ServiceAccountAuthentication = (sa, new() - { - ProjectAudiences = { ZitadelDefaults.ZitadelApiProjectId }, - }), - }); - -var myOrg = await api.GetMyOrgAsync( - new() {} -); - -Console.WriteLine($"{myOrg.Org.Name} was created on: {myOrg.Org.Details.CreationDate} "); - - -``` - -#### Custom ZITADEL instance - -If your client will not use ZITADEL Cloud (zitadel.ch), be sure to provide the correct values for the ZITADEL ProjectID, Issuer and API options: -```csharp - -// Which api endpoint (self hosted or public) -Endpoint = "api.custom.ch:443", -// Service account authentication -ServiceAccountAuthentication = (sa, new() -{ - ProjectAudiences = { "ZITADEL-ProjectID" }, - Endpoint = "https://issuer.custom.ch", -}), - -``` - -### Test client - -After you have configured everything correctly, you can simply start the example by: - -```bash -dotnet run -``` - -This will output something similar to: - -``` -ACME was created on: "2020-09-21T14:44:48.090431Z" -``` - -## Completion - -You have successfully used the ZITADEL .NET SDK to call the management API! - -If you encountered an error (e.g. `code = PermissionDenied desc = No matching permissions found`), -ensure your service user has the required permissions by assigning the `ORG_OWNER` or `ORG_OWNER_VIEWER` role -and check the mentioned [guides](#prerequisites) at the beginning. - -If you've run into any other problem, don't hesitate to contact us or raise an issue on [ZITADEL](https://github.com/zitadel/zitadel/issues) or in the [SDK](https://github.com/zitadel/zitadel-go/issues). - -### Whats next? - -Now you can proceed implementing our APIs by adding more calls. - -Checkout more [examples from the SDK](https://github.com/zitadel/zitadel-go/blob/main/example) or refer to our [API Docs](../../apis/introduction). - -> This guide will be updated soon to show you how to use the SDK for your own API as well. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index c72f543e0f..de3b99ac85 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -28,14 +28,6 @@ module.exports = { // options you can specify via https://github.com/francoischalifour/medium-zoom#usage config: {} }, - announcementBar: { - id: 'documentation', - content: - 'This page contains the documentation for ZITADEL version 2, if you are looking for version 1 please visit https://docs-v1.zitadel.com', - backgroundColor: '#fafbfc', - textColor: '#091E42', - isCloseable: false, - }, navbar: { // title: 'ZITADEL', logo: { @@ -52,8 +44,8 @@ module.exports = { }, { type: "doc", - label: "Quickstarts", - docId: "quickstarts/introduction", + label: "Examples", + docId: "examples/introduction", position: "left", }, { @@ -179,7 +171,9 @@ module.exports = { { docs: { sidebarPath: require.resolve("./sidebars.js"), - editUrl: "https://github.com/zitadel/zitadel/edit/v2-alpha/docs/", + showLastUpdateAuthor: true, + showLastUpdateTime: true, + editUrl: "https://github.com/zitadel/zitadel/edit/main/docs/", remarkPlugins: [require("mdx-mermaid")], }, theme: { diff --git a/docs/package-lock.json b/docs/package-lock.json deleted file mode 100644 index 5106c5956a..0000000000 --- a/docs/package-lock.json +++ /dev/null @@ -1,23336 +0,0 @@ -{ - "name": "zitadel-docs", - "version": "0.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "zitadel-docs", - "version": "0.0.0", - "dependencies": { - "@algolia/autocomplete-core": "1.5.2", - "@algolia/autocomplete-preset-algolia": "1.5.2", - "@ampproject/remapping": "2.2.0", - "@babel/core": "7.17.10", - "@babel/plugin-proposal-async-generator-functions": "7.16.8", - "@babel/plugin-proposal-class-static-block": "7.17.6", - "@babel/plugin-proposal-object-rest-spread": "7.17.3", - "@babel/plugin-proposal-private-methods": "7.16.11", - "@babel/plugin-transform-async-to-generator": "7.16.8", - "@babel/plugin-transform-destructuring": "7.17.7", - "@babel/plugin-transform-modules-commonjs": "7.17.9", - "@babel/plugin-transform-modules-systemjs": "7.17.8", - "@babel/plugin-transform-named-capturing-groups-regex": "7.17.10", - "@babel/plugin-transform-regenerator": "7.17.9", - "@babel/plugin-transform-runtime": "7.17.10", - "@babel/preset-env": "7.17.10", - "@babel/preset-react": "7.16.7", - "@babel/preset-typescript": "7.16.7", - "@babel/runtime-corejs3": "7.17.9", - "@colors/colors": "1.5.0", - "@docsearch/css": "3.0.0", - "@docsearch/react": "3.0.0", - "@docusaurus/core": "^2.0.0-beta.20", - "@docusaurus/cssnano-preset": "2.0.0-beta.20", - "@docusaurus/module-type-aliases": "2.0.0-beta.20", - "@docusaurus/plugin-debug": "2.0.0-beta.20", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.20", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.20", - "@docusaurus/plugin-sitemap": "2.0.0-beta.20", - "@docusaurus/preset-classic": "2.0.0-beta.20", - "@docusaurus/theme-classic": "2.0.0-beta.20", - "@docusaurus/theme-search-algolia": "2.0.0-beta.20", - "@docusaurus/types": "2.0.0-beta.20", - "@jridgewell/resolve-uri": "3.0.7", - "@jridgewell/set-array": "1.1.1", - "@jridgewell/trace-mapping": "0.3.11", - "@leichtgewicht/ip-codec": "2.0.4", - "@mdx-js/mdx": "1.6.22", - "@mdx-js/react": "^1.6.22", - "@slorber/static-site-generator-webpack-plugin": "4.0.4", - "@svgr/core": "6.2.1", - "@svgr/hast-util-to-babel-ast": "6.2.1", - "@svgr/plugin-svgo": "6.2.0", - "@types/eslint-scope": "3.7.3", - "@types/http-proxy": "1.17.9", - "@types/react-router-config": "5.0.6", - "@types/react-router-dom": "5.3.3", - "@types/ws": "8.5.3", - "autoprefixer": "10.4.7", - "axios": "0.25.0", - "babel-loader": "8.2.5", - "body-parser": "1.20.0", - "bonjour-service": "1.0.12", - "boxen": "6.2.1", - "clean-css": "5.3.0", - "cli-boxes": "3.0.0", - "cli-table3": "0.6.2", - "clsx": "^1.1.1", - "cookie": "0.5.0", - "copy-webpack-plugin": "10.2.4", - "core-js": "3.22.5", - "core-js-pure": "3.22.5", - "css-declaration-sorter": "6.2.2", - "css-loader": "6.7.1", - "css-minimizer-webpack-plugin": "3.4.1", - "cssnano": "5.1.7", - "cssnano-preset-advanced": "5.3.3", - "dns-packet": "5.3.1", - "docusaurus-plugin-plausible": "^0.0.5", - "eastasianwidth": "0.2.0", - "enhanced-resolve": "5.9.3", - "eval": "0.1.8", - "express": "4.18.1", - "finalhandler": "1.2.0", - "follow-redirects": "1.15.0", - "fraction.js": "4.2.0", - "html-minifier-terser": "6.1.0", - "html-tags": "3.2.0", - "html-webpack-plugin": "5.5.0", - "http-proxy-middleware": "2.0.6", - "infima": "0.2.0-alpha.39", - "invariant": "2.2.4", - "mdx-mermaid": "^1.1.0", - "mermaid": "^8.12.1", - "mini-css-extract-plugin": "2.6.0", - "multicast-dns": "7.2.4", - "nanoid": "3.3.4", - "node-forge": "1.3.1", - "object-inspect": "1.12.0", - "plugin-image-zoom": "ataft/plugin-image-zoom", - "postcss-calc": "8.2.4", - "postcss-colormin": "5.3.0", - "postcss-convert-values": "5.1.0", - "postcss-discard-comments": "5.1.1", - "postcss-discard-duplicates": "5.1.0", - "postcss-discard-empty": "5.1.1", - "postcss-discard-overridden": "5.1.0", - "postcss-discard-unused": "5.1.0", - "postcss-loader": "6.2.1", - "postcss-merge-idents": "5.1.1", - "postcss-merge-longhand": "5.1.4", - "postcss-merge-rules": "5.1.1", - "postcss-minify-font-values": "5.1.0", - "postcss-minify-gradients": "5.1.1", - "postcss-minify-params": "5.1.2", - "postcss-minify-selectors": "5.2.0", - "postcss-normalize-charset": "5.1.0", - "postcss-normalize-display-values": "5.1.0", - "postcss-normalize-positions": "5.1.0", - "postcss-normalize-repeat-style": "5.1.0", - "postcss-normalize-string": "5.1.0", - "postcss-normalize-timing-functions": "5.1.0", - "postcss-normalize-unicode": "5.1.0", - "postcss-normalize-url": "5.1.0", - "postcss-normalize-whitespace": "5.1.1", - "postcss-ordered-values": "5.1.1", - "postcss-reduce-idents": "5.2.0", - "postcss-reduce-initial": "5.1.0", - "postcss-reduce-transforms": "5.1.0", - "postcss-sort-media-queries": "4.2.1", - "postcss-svgo": "5.1.0", - "postcss-unique-selectors": "5.1.1", - "postcss-zindex": "5.1.0", - "prismjs": "1.28.0", - "raw-body": "2.5.1", - "react": "^17.0.2", - "react-dev-utils": "12.0.1", - "react-dom": "^17.0.2", - "react-error-overlay": "6.0.11", - "react-fast-compare": "3.2.0", - "regenerator-transform": "0.15.0", - "remark-emoji": "2.2.0", - "rtlcss": "3.5.0", - "rxjs": "7.5.5", - "selfsigned": "2.0.1", - "serve-static": "1.15.0", - "shallowequal": "1.1.0", - "side-channel": "1.0.4", - "sitemap": "7.1.1", - "source-map-js": "1.0.2", - "stylehacks": "5.1.0", - "terser-webpack-plugin": "5.3.1", - "type-fest": "2.12.2", - "wait-on": "6.0.1", - "webpack-bundle-analyzer": "4.5.0", - "webpack-dev-middleware": "5.3.1", - "webpack-dev-server": "4.9.0", - "widest-line": "4.0.1", - "wrap-ansi": "8.0.1" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz", - "integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==", - "dependencies": { - "@algolia/autocomplete-shared": "1.5.2" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz", - "integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==", - "dependencies": { - "@algolia/autocomplete-shared": "1.5.2" - }, - "peerDependencies": { - "@algolia/client-search": "^4.9.1", - "algoliasearch": "^4.9.1" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz", - "integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==" - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.0.tgz", - "integrity": "sha512-nj1vHRZauTqP/bluwkRIgEADEimqojJgoTRCel5f6q8WCa9Y8QeI4bpDQP28FoeKnDRYa3J5CauDlN466jqRhg==", - "dependencies": { - "@algolia/cache-common": "4.13.0" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.13.0.tgz", - "integrity": "sha512-f9mdZjskCui/dA/fA/5a+6hZ7xnHaaZI5tM/Rw9X8rRB39SUlF/+o3P47onZ33n/AwkpSbi5QOyhs16wHd55kA==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.13.0.tgz", - "integrity": "sha512-hHdc+ahPiMM92CQMljmObE75laYzNFYLrNOu0Q3/eyvubZZRtY2SUsEEgyUEyzXruNdzrkcDxFYa7YpWBJYHAg==", - "dependencies": { - "@algolia/cache-common": "4.13.0" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.13.0.tgz", - "integrity": "sha512-FzFqFt9b0g/LKszBDoEsW+dVBuUe1K3scp2Yf7q6pgHWM1WqyqUlARwVpLxqyc+LoyJkTxQftOKjyFUqddnPKA==", - "dependencies": { - "@algolia/client-common": "4.13.0", - "@algolia/client-search": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.13.0.tgz", - "integrity": "sha512-klmnoq2FIiiMHImkzOm+cGxqRLLu9CMHqFhbgSy9wtXZrqb8BBUIUE2VyBe7azzv1wKcxZV2RUyNOMpFqmnRZA==", - "dependencies": { - "@algolia/client-common": "4.13.0", - "@algolia/client-search": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.13.0.tgz", - "integrity": "sha512-GoXfTp0kVcbgfSXOjfrxx+slSipMqGO9WnNWgeMmru5Ra09MDjrcdunsiiuzF0wua6INbIpBQFTC2Mi5lUNqGA==", - "dependencies": { - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.13.0.tgz", - "integrity": "sha512-KneLz2WaehJmNfdr5yt2HQETpLaCYagRdWwIwkTqRVFCv4DxRQ2ChPVW9jeTj4YfAAhfzE6F8hn7wkQ/Jfj6ZA==", - "dependencies": { - "@algolia/client-common": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.13.0.tgz", - "integrity": "sha512-blgCKYbZh1NgJWzeGf+caKE32mo3j54NprOf0LZVCubQb3Kx37tk1Hc8SDs9bCAE8hUvf3cazMPIg7wscSxspA==", - "dependencies": { - "@algolia/client-common": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.13.0.tgz", - "integrity": "sha512-8yqXk7rMtmQJ9wZiHOt/6d4/JDEg5VCk83gJ39I+X/pwUPzIsbKy9QiK4uJ3aJELKyoIiDT1hpYVt+5ia+94IA==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.13.0.tgz", - "integrity": "sha512-YepRg7w2/87L0vSXRfMND6VJ5d6699sFJBRWzZPOlek2p5fLxxK7O0VncYuc/IbVHEgeApvgXx0WgCEa38GVuQ==", - "dependencies": { - "@algolia/logger-common": "4.13.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.0.tgz", - "integrity": "sha512-Dj+bnoWR5MotrnjblzGKZ2kCdQi2cK/VzPURPnE616NU/il7Ypy6U6DLGZ/ZYz+tnwPa0yypNf21uqt84fOgrg==", - "dependencies": { - "@algolia/requester-common": "4.13.0" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.13.0.tgz", - "integrity": "sha512-BRTDj53ecK+gn7ugukDWOOcBRul59C4NblCHqj4Zm5msd5UnHFjd/sGX+RLOEoFMhetILAnmg6wMrRrQVac9vw==" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.13.0.tgz", - "integrity": "sha512-9b+3O4QFU4azLhGMrZAr/uZPydvzOR4aEZfSL8ZrpLZ7fbbqTO0S/5EVko+QIgglRAtVwxvf8UJ1wzTD2jvKxQ==", - "dependencies": { - "@algolia/requester-common": "4.13.0" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.13.0.tgz", - "integrity": "sha512-8tSQYE+ykQENAdeZdofvtkOr5uJ9VcQSWgRhQ9h01AehtBIPAczk/b2CLrMsw5yQZziLs5cZ3pJ3478yI+urhA==", - "dependencies": { - "@algolia/cache-common": "4.13.0", - "@algolia/logger-common": "4.13.0", - "@algolia/requester-common": "4.13.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", - "dependencies": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", - "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "dependencies": { - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "dependencies": { - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", - "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", - "dependencies": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", - "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", - "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", - "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", - "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz", - "integrity": "sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz", - "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", - "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", - "dependencies": { - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz", - "integrity": "sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==", - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", - "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", - "dependencies": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.17.6", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.17.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.17.9", - "@babel/plugin-transform-modules-systemjs": "^7.17.8", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.10", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.10", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.16.7", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", - "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", - "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@braintree/sanitize-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz", - "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==", - "deprecated": "Potential XSS vulnerability patched in v6.0.0." - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@docsearch/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0.tgz", - "integrity": "sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA==" - }, - "node_modules/@docsearch/react": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0.tgz", - "integrity": "sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg==", - "dependencies": { - "@algolia/autocomplete-core": "1.5.2", - "@algolia/autocomplete-preset-algolia": "1.5.2", - "@docsearch/css": "3.0.0", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 18.0.0", - "react": ">= 16.8.0 < 18.0.0", - "react-dom": ">= 16.8.0 < 18.0.0" - } - }, - "node_modules/@docusaurus/core": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.20.tgz", - "integrity": "sha512-a3UgZ4lIcIOoZd4j9INqVkWSXEDxR7EicJXt8eq2whg4N5hKGqLHoDSnWfrVSPQn4NoG5T7jhPypphSoysImfQ==", - "dependencies": { - "@babel/core": "^7.17.10", - "@babel/generator": "^7.17.10", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.17.10", - "@babel/preset-env": "^7.17.10", - "@babel/preset-react": "^7.16.7", - "@babel/preset-typescript": "^7.16.7", - "@babel/runtime": "^7.17.9", - "@babel/runtime-corejs3": "^7.17.9", - "@babel/traverse": "^7.17.10", - "@docusaurus/cssnano-preset": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "@slorber/static-site-generator-webpack-plugin": "^4.0.4", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.5", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^6.2.1", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^10.2.4", - "core-js": "^3.22.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^3.4.1", - "cssnano": "^5.1.7", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.0", - "postcss": "^8.4.13", - "postcss-loader": "^6.2.1", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "remark-admonitions": "^1.2.1", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.1", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.72.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.8.1", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.20.tgz", - "integrity": "sha512-7pfrYuahHl3YYS+gYhbb1YHsq5s5+hk+1KIU7QqNNn4YjrIqAHlOznCQ9XfQfspe9boZmaNFGMZQ1tawNOVLqQ==", - "dependencies": { - "cssnano-preset-advanced": "^5.3.3", - "postcss": "^8.4.13", - "postcss-sort-media-queries": "^4.2.1" - } - }, - "node_modules/@docusaurus/logger": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.20.tgz", - "integrity": "sha512-7Rt7c8m3ZM81o5jsm6ENgdbjq/hUICv8Om2i7grynI4GT2aQyFoHcusaNbRji4FZt0DaKT2CQxiAWP8BbD4xzQ==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@docusaurus/logger/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@docusaurus/logger/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@docusaurus/logger/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@docusaurus/logger/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@docusaurus/logger/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/logger/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.20.tgz", - "integrity": "sha512-BBuf77sji3JxbCEW7Qsv3CXlgpm+iSLTQn6JUK7x8vJ1JYZ3KJbNgpo9TmxIIltpcvNQ/QOy6dvqrpSStaWmKQ==", - "dependencies": { - "@babel/parser": "^7.17.10", - "@babel/traverse": "^7.17.10", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.72.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.20.tgz", - "integrity": "sha512-lUIXLwQEOyYwcb3iCNibPUL6O9ijvYF5xQwehGeVraTEBts/Ch8ZwELFk+XbaGHKh52PiVxuWL2CP4Gdjy5QKw==", - "dependencies": { - "@docusaurus/types": "2.0.0-beta.20", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.20.tgz", - "integrity": "sha512-6aby36Gmny5h2oo/eEZ2iwVsIlBWbRnNNeqT0BYnJO5aj53iCU/ctFPpJVYcw0l2l8+8ITS70FyePIWEsaZ0jA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "cheerio": "^1.0.0-rc.10", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.72.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.20.tgz", - "integrity": "sha512-XOgwUqXtr/DStpB3azdN6wgkKtQkOXOx1XetORzhHnjihrSMn6daxg+spmcJh1ki/mpT3n7yBbKJxVNo+VB38Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "remark-admonitions": "^1.2.1", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.72.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.20.tgz", - "integrity": "sha512-ubY6DG4F0skFKjfNGCbfO34Qf+MZy6C05OtpIYsoA2YU8ADx0nRH7qPgdEkwR3ma860DbY612rleRT13ogSlhg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "fs-extra": "^10.1.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.4.0", - "webpack": "^5.72.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.20.tgz", - "integrity": "sha512-acGZmpncPA1XDczpV1ji1ajBCRBY/H2lXN8alSjOB1vh0c/2Qz+KKD05p17lsUbhIyvsnZBa/BaOwtek91Lu7Q==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.20.tgz", - "integrity": "sha512-4C5nY25j0R1lntFmpSEalhL7jYA7tWvk0VZObiIxGilLagT/f9gWPQtIjNBe4yzdQvkhiaXpa8xcMcJUAKRJyw==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.20.tgz", - "integrity": "sha512-EMZdiMTNg4NwE60xwjbetcqMDqAOazMTwQAQ4OuNAclv7oh8+VPCvqRF8s8AxCoI2Uqc7vh8yzNUuM307Ne9JA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.20.tgz", - "integrity": "sha512-Rf5a2vOBWjbe7PJJEBDeLZzDA7lsDi+16bqzKN8OKSXlcZLhxjmIpL5NrjANNbpGpL5vbl9z+iqvjbQmZ3QSmA==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.20.tgz", - "integrity": "sha512-artUDjiYFIlGd2fxk0iqqcJ5xSCrgormOAoind1c0pn8TRXY1WSCQWYI6p4X24jjhSCzLv0s6Z9PMDyxZdivhg==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/plugin-content-blog": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/plugin-content-pages": "2.0.0-beta.20", - "@docusaurus/plugin-debug": "2.0.0-beta.20", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.20", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.20", - "@docusaurus/plugin-sitemap": "2.0.0-beta.20", - "@docusaurus/theme-classic": "2.0.0-beta.20", - "@docusaurus/theme-common": "2.0.0-beta.20", - "@docusaurus/theme-search-algolia": "2.0.0-beta.20" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.20.tgz", - "integrity": "sha512-rs4U68x8Xk6rPsZC/7eaPxCKqzXX1S45FICKmq/IZuaDaQyQIijCvv2ssxYnUyVZUNayZfJK7ZtNu+A0kzYgSQ==", - "dependencies": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/plugin-content-blog": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/plugin-content-pages": "2.0.0-beta.20", - "@docusaurus/theme-common": "2.0.0-beta.20", - "@docusaurus/theme-translations": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.39", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.13", - "prism-react-renderer": "^1.3.1", - "prismjs": "^1.28.0", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.5.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.20.tgz", - "integrity": "sha512-lmdGB3/GQM5z0GH0iHGRXUco4Wfqc6sR5eRKuW4j0sx3+UFVvtbVTTIGt0Cie4Dh6omnFxjPbNDlPDgWr/agVQ==", - "dependencies": { - "@docusaurus/module-type-aliases": "2.0.0-beta.20", - "@docusaurus/plugin-content-blog": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/plugin-content-pages": "2.0.0-beta.20", - "clsx": "^1.1.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.1", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.20.tgz", - "integrity": "sha512-9XAyiXXHgyhDmKXg9RUtnC4WBkYAZUqKT9Ntuk0OaOb4mBwiYUGL74tyP0LLL6T+oa9uEdXiUMlIL1onU8xhvA==", - "dependencies": { - "@docsearch/react": "^3.0.0", - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/theme-common": "2.0.0-beta.20", - "@docusaurus/theme-translations": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "algoliasearch": "^4.13.0", - "algoliasearch-helper": "^3.8.2", - "clsx": "^1.1.1", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.20.tgz", - "integrity": "sha512-O7J/4dHcg7Yr+r3ylgtqmtMEz6d5ScpUxBg8nsNTWOCRoGEXNZVmXSd5l6v72KCyxPZpllPrgjmqkL+I19qWiw==", - "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.20.tgz", - "integrity": "sha512-d4ZIpcrzGsUUcZJL3iz8/iSaewobPPiYfn2Lmmv7GTT5ZPtPkOAtR5mE6+LAf/KpjjgqrC7mpwDKADnOL/ic4Q==", - "dependencies": { - "commander": "^5.1.0", - "history": "^4.9.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.72.0", - "webpack-merge": "^5.8.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.20.tgz", - "integrity": "sha512-eUQquakhrbnvhsmx8jRPLgoyjyzMuOhmQC99m7rotar7XOzROpgEpm7+xVaquG5Ha47WkybE3djHJhKNih7GZQ==", - "dependencies": { - "@docusaurus/logger": "2.0.0-beta.20", - "@svgr/webpack": "^6.2.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.72.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.20.tgz", - "integrity": "sha512-HabHh23vOQn6ygs0PjuCSF/oZaNsYTFsxB2R6EwHNyw01nWgBC3QAcGVmyIWQhlb9p8V3byKgbzVS68hZX5t9A==", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.20.tgz", - "integrity": "sha512-7MxMoaF4VNAt5vUwvITa6nbkw1tb4WE6hp1VlfIoLCY4D7Wk5cMf1ZFhppCP1UzmPwvFb9zw8fPuvDfB3Tb5nQ==", - "dependencies": { - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.11.tgz", - "integrity": "sha512-RllI476aSMsxzeI9TtlSMoNTgHDxEmnl6GkkHwhr0vdL8W+0WuesyI8Vd3rBOfrwtPXbPxdT9ADJdiOKgzxPQA==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.4.tgz", - "integrity": "sha512-FvMavoWEIePps6/JwGCOLYKCRhuwIHhMtmbKpBFgzNkxwpa/569LfTkrbRk1m1I3n+ezJK4on9E1A6cjuZmD9g==", - "dependencies": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.8", - "webpack-sources": "^1.4.3" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", - "dependencies": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "dependencies": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "engines": { - "node": "*" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "dependencies": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dependencies": { - "domelementtype": "1" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", - "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", - "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", - "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", - "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", - "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", - "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", - "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", - "@svgr/babel-plugin-transform-svg-component": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@svgr/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", - "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", - "dependencies": { - "@svgr/plugin-jsx": "^6.2.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", - "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", - "dependencies": { - "@babel/types": "^7.15.6", - "entities": "^3.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", - "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", - "dependencies": { - "@babel/core": "^7.15.5", - "@svgr/babel-preset": "^6.2.0", - "@svgr/hast-util-to-babel-ast": "^6.2.1", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", - "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@svgr/webpack": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz", - "integrity": "sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==", - "dependencies": { - "@babel/core": "^7.15.5", - "@babel/plugin-transform-react-constant-elements": "^7.14.5", - "@babel/preset-env": "^7.15.6", - "@babel/preset-react": "^7.14.5", - "@babel/preset-typescript": "^7.15.0", - "@svgr/core": "^6.2.1", - "@svgr/plugin-jsx": "^6.2.1", - "@svgr/plugin-svgo": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "node_modules/@types/node": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.32.tgz", - "integrity": "sha512-eAIcfAvhf/BkHcf4pkLJ7ECpBAhh9kcxRBpip9cTiO+hf+aJrsxYxBeS6OXvOd9WqNAJmavXVpZvY1rBjNsXmw==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/react": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.45.tgz", - "integrity": "sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.13.0.tgz", - "integrity": "sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.13.0", - "@algolia/cache-common": "4.13.0", - "@algolia/cache-in-memory": "4.13.0", - "@algolia/client-account": "4.13.0", - "@algolia/client-analytics": "4.13.0", - "@algolia/client-common": "4.13.0", - "@algolia/client-personalization": "4.13.0", - "@algolia/client-search": "4.13.0", - "@algolia/logger-common": "4.13.0", - "@algolia/logger-console": "4.13.0", - "@algolia/requester-browser-xhr": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/requester-node-http": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz", - "integrity": "sha512-AXxiF0zT9oYwl8ZBgU/eRXvfYhz7cBA5YrLPlw9inZHdaYF0QEya/f1Zp1mPYMXc1v6VkHwBq4pk6/vayBLICg==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 5" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/bonjour-service": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.12.tgz", - "integrity": "sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.4" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001339", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz", - "integrity": "sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "dependencies": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", - "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", - "dependencies": { - "css-select": "^4.3.0", - "css-what": "^6.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.3.1", - "domutils": "^2.8.0" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" - }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", - "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", - "dependencies": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^12.0.2", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 12.20.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/copy-webpack-plugin/node_modules/array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "dependencies": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz", - "integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.5.tgz", - "integrity": "sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==", - "dependencies": { - "browserslist": "^4.20.3", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.5.tgz", - "integrity": "sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz", - "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==", - "dependencies": { - "cssnano-preset-default": "^5.2.7", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.3.tgz", - "integrity": "sha512-AB9SmTSC2Gd8T7PpKUsXFJ3eNsg7dc4CTZ0+XAJ29MNxyJsrCEk7N1lw31bpHrsQH2PVJr21bbWgGAfA9j0dIA==", - "dependencies": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.7", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz", - "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==", - "dependencies": { - "css-declaration-sorter": "^6.2.2", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.0", - "postcss-discard-comments": "^5.1.1", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.4", - "postcss-merge-rules": "^5.1.1", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.2", - "postcss-minify-selectors": "^5.2.0", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.0", - "postcss-normalize-repeat-style": "^5.1.0", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.1", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" - }, - "node_modules/d3": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.2.1.tgz", - "integrity": "sha512-E/5sP0aeK6YPXI/+4QlefvBFgmcyR2jYftId0PrYWv4Y/gW3c3thp1XG4rQzF0eUwV9tR1x05X5eWuJ6rQXvew==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "3", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz", - "integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "node_modules/d3-color": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.0.1.tgz", - "integrity": "sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-3.0.1.tgz", - "integrity": "sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", - "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz", - "integrity": "sha512-LtAIu54UctRmhGKllleflmHalttH3zkfSi4NlKrTAoFKjC+AFBJohsCAdgCBYQwH0F8hIOGY89X1pPqAchlMkA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.0.1.tgz", - "integrity": "sha512-HNZNEQoDhuCrDWEc/BMbF/hKtzMZVoe64TvisFLDp2Iyj0UShB/E6/lBsLlJTfBMbYgftHj90cXJ0SEitlE6Xw==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "dependencies": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "dependencies": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/dagre-d3/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/dagre-d3/node_modules/d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "dependencies": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "node_modules/dagre-d3/node_modules/d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" - }, - "node_modules/dagre-d3/node_modules/d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "dependencies": { - "d3-array": "1", - "d3-path": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "node_modules/dagre-d3/node_modules/d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "dependencies": { - "d3-array": "^1.1.1" - } - }, - "node_modules/dagre-d3/node_modules/d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "node_modules/dagre-d3/node_modules/d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "dependencies": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "dependencies": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json", - "csv2tsv": "bin/dsv2dsv", - "dsv2dsv": "bin/dsv2dsv", - "dsv2json": "bin/dsv2json", - "json2csv": "bin/json2dsv", - "json2dsv": "bin/json2dsv", - "json2tsv": "bin/json2dsv", - "tsv2csv": "bin/dsv2dsv", - "tsv2json": "bin/dsv2json" - } - }, - "node_modules/dagre-d3/node_modules/d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" - }, - "node_modules/dagre-d3/node_modules/d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "dependencies": { - "d3-dsv": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "node_modules/dagre-d3/node_modules/d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "dependencies": { - "d3-array": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "node_modules/dagre-d3/node_modules/d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "dependencies": { - "d3-color": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "node_modules/dagre-d3/node_modules/d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" - }, - "node_modules/dagre-d3/node_modules/d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" - }, - "node_modules/dagre-d3/node_modules/d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" - }, - "node_modules/dagre-d3/node_modules/d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "dependencies": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "node_modules/dagre-d3/node_modules/d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "dependencies": { - "d3-color": "1", - "d3-interpolate": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" - }, - "node_modules/dagre-d3/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "dependencies": { - "d3-path": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "node_modules/dagre-d3/node_modules/d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" - }, - "node_modules/dagre-d3/node_modules/d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "dependencies": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/detect-port/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "node_modules/dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/docusaurus-plugin-plausible": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-plausible/-/docusaurus-plugin-plausible-0.0.5.tgz", - "integrity": "sha512-8wiglvMjkGjhGUnBYgJM87V1Ip0wr8AbIHiC5YHNar3DOfXX+JL0nBoThlnvaX1ib/emraWgimR5QiMDOgMJjA==" - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.5.tgz", - "integrity": "sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==" - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", - "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/htmlparser2/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", - "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", - "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.39", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.39.tgz", - "integrity": "sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/khroma": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-1.4.1.tgz", - "integrity": "sha512-+GmxKvmiRuCcUYDgR7g5Ngo0JEDeOsGdNONdU2zsiBQaK4z19Y2NvXqfEDE0ZiIrg45GTZyAnPLVsLZZACYm3Q==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "node_modules/lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "node_modules/lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "node_modules/lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "node_modules/lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "node_modules/lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "node_modules/lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "node_modules/lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "node_modules/mdx-mermaid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.1.1.tgz", - "integrity": "sha512-3Dc6zFRBaqxJ0S0cEKrbDSJEjdlJ/OUfTHFLY8uBwoDrTnF7+Dn8ukVPeVL10gNqqTvaPmQ1KGdgyx9wMuktEA==", - "peerDependencies": { - "mermaid": "^8.0.0", - "react": "^16.8.4 || ^17.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/medium-zoom": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz", - "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==" - }, - "node_modules/memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-8.14.0.tgz", - "integrity": "sha512-ITSHjwVaby1Li738sxhF48sLTxcNyUAoWfoqyztL1f7J6JOLpHOuQPNLBb6lxGPUA0u7xP9IRULgvod0dKu35A==", - "dependencies": { - "@braintree/sanitize-url": "^3.1.0", - "d3": "^7.0.0", - "dagre": "^0.8.5", - "dagre-d3": "^0.6.4", - "dompurify": "2.3.5", - "graphlib": "^2.1.8", - "khroma": "^1.4.1", - "moment-mini": "^2.24.0", - "stylis": "^4.0.10" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "dependencies": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", - "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/moment-mini": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz", - "integrity": "sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==" - }, - "node_modules/mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "engines": { - "node": ">=4" - } - }, - "node_modules/plugin-image-zoom": { - "version": "0.0.0", - "resolved": "git+ssh://git@github.com/ataft/plugin-image-zoom.git#86f6f0b4f927ded94dcfdc18c0a9ee702ffd8d06", - "dependencies": { - "medium-zoom": "^1.0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.3", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", - "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", - "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", - "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", - "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", - "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", - "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", - "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", - "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz", - "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==", - "dependencies": { - "sort-css-media-queries": "2.0.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", - "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/react-dev-utils/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.1.tgz", - "integrity": "sha512-v+zwjqb7bakqgF+wMVKlAPTca/cEmPOvQ9zt7gpSNyPXau1+0qvuYZ5BWzzNDP1y6s15zDwgb9rPN63+SIniRQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.1.tgz", - "integrity": "sha512-f0pj/gMAbv9e8gahTmCEY20oFhxhrmHwYeIwH5EO5xu0qme+wXtsdB8YfUOAZzUz4VaXmb58m3ceiLtjMhqYmQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.1", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", - "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "dependencies": { - "minimatch": "3.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/recursive-readdir/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "dependencies": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "dependencies": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "dependencies": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-parse/node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "dependencies": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - } - }, - "node_modules/remark-admonitions/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/remark-admonitions/node_modules/unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" - }, - "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "node_modules/selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz", - "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.1.1.tgz", - "integrity": "sha512-/c645XdExBypL01TpFKiG/3RAa/Qmu+zRi0MwAmrdEkwHNuN0ebo8ccAXBBDa5Z0QOJgBskUIbuCK91x0sCVEw==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", - "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", - "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", - "dependencies": { - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map": "~0.8.0-beta.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", - "dependencies": { - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/terser/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/terser/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/terser/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/type-fest": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.12.2.tgz", - "integrity": "sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unified/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/update-notifier/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/update-notifier/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/update-notifier/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", - "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", - "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.1", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz", - "integrity": "sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/webpackbar/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/webpackbar/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/webpackbar/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/webpackbar/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/webpackbar/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.5.2.tgz", - "integrity": "sha512-DY0bhyczFSS1b/CqJlTE/nQRtnTAHl6IemIkBy0nEWnhDzRDdtdx4p5Uuk3vwAFxwEEgi1WqKwgSSMx6DpNL4A==", - "requires": { - "@algolia/autocomplete-shared": "1.5.2" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.5.2.tgz", - "integrity": "sha512-3MRYnYQFJyovANzSX2CToS6/5cfVjbLLqFsZTKcvF3abhQzxbqwwaMBlJtt620uBUOeMzhdfasKhCc40+RHiZw==", - "requires": { - "@algolia/autocomplete-shared": "1.5.2" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.5.2.tgz", - "integrity": "sha512-ylQAYv5H0YKMfHgVWX0j0NmL8XBcAeeeVQUmppnnMtzDbDnca6CzhKj3Q8eF9cHCgcdTDdb5K+3aKyGWA0obug==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.13.0.tgz", - "integrity": "sha512-nj1vHRZauTqP/bluwkRIgEADEimqojJgoTRCel5f6q8WCa9Y8QeI4bpDQP28FoeKnDRYa3J5CauDlN466jqRhg==", - "requires": { - "@algolia/cache-common": "4.13.0" - } - }, - "@algolia/cache-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.13.0.tgz", - "integrity": "sha512-f9mdZjskCui/dA/fA/5a+6hZ7xnHaaZI5tM/Rw9X8rRB39SUlF/+o3P47onZ33n/AwkpSbi5QOyhs16wHd55kA==" - }, - "@algolia/cache-in-memory": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.13.0.tgz", - "integrity": "sha512-hHdc+ahPiMM92CQMljmObE75laYzNFYLrNOu0Q3/eyvubZZRtY2SUsEEgyUEyzXruNdzrkcDxFYa7YpWBJYHAg==", - "requires": { - "@algolia/cache-common": "4.13.0" - } - }, - "@algolia/client-account": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.13.0.tgz", - "integrity": "sha512-FzFqFt9b0g/LKszBDoEsW+dVBuUe1K3scp2Yf7q6pgHWM1WqyqUlARwVpLxqyc+LoyJkTxQftOKjyFUqddnPKA==", - "requires": { - "@algolia/client-common": "4.13.0", - "@algolia/client-search": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "@algolia/client-analytics": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.13.0.tgz", - "integrity": "sha512-klmnoq2FIiiMHImkzOm+cGxqRLLu9CMHqFhbgSy9wtXZrqb8BBUIUE2VyBe7azzv1wKcxZV2RUyNOMpFqmnRZA==", - "requires": { - "@algolia/client-common": "4.13.0", - "@algolia/client-search": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "@algolia/client-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.13.0.tgz", - "integrity": "sha512-GoXfTp0kVcbgfSXOjfrxx+slSipMqGO9WnNWgeMmru5Ra09MDjrcdunsiiuzF0wua6INbIpBQFTC2Mi5lUNqGA==", - "requires": { - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "@algolia/client-personalization": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.13.0.tgz", - "integrity": "sha512-KneLz2WaehJmNfdr5yt2HQETpLaCYagRdWwIwkTqRVFCv4DxRQ2ChPVW9jeTj4YfAAhfzE6F8hn7wkQ/Jfj6ZA==", - "requires": { - "@algolia/client-common": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "@algolia/client-search": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.13.0.tgz", - "integrity": "sha512-blgCKYbZh1NgJWzeGf+caKE32mo3j54NprOf0LZVCubQb3Kx37tk1Hc8SDs9bCAE8hUvf3cazMPIg7wscSxspA==", - "requires": { - "@algolia/client-common": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.13.0.tgz", - "integrity": "sha512-8yqXk7rMtmQJ9wZiHOt/6d4/JDEg5VCk83gJ39I+X/pwUPzIsbKy9QiK4uJ3aJELKyoIiDT1hpYVt+5ia+94IA==" - }, - "@algolia/logger-console": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.13.0.tgz", - "integrity": "sha512-YepRg7w2/87L0vSXRfMND6VJ5d6699sFJBRWzZPOlek2p5fLxxK7O0VncYuc/IbVHEgeApvgXx0WgCEa38GVuQ==", - "requires": { - "@algolia/logger-common": "4.13.0" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.13.0.tgz", - "integrity": "sha512-Dj+bnoWR5MotrnjblzGKZ2kCdQi2cK/VzPURPnE616NU/il7Ypy6U6DLGZ/ZYz+tnwPa0yypNf21uqt84fOgrg==", - "requires": { - "@algolia/requester-common": "4.13.0" - } - }, - "@algolia/requester-common": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.13.0.tgz", - "integrity": "sha512-BRTDj53ecK+gn7ugukDWOOcBRul59C4NblCHqj4Zm5msd5UnHFjd/sGX+RLOEoFMhetILAnmg6wMrRrQVac9vw==" - }, - "@algolia/requester-node-http": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.13.0.tgz", - "integrity": "sha512-9b+3O4QFU4azLhGMrZAr/uZPydvzOR4aEZfSL8ZrpLZ7fbbqTO0S/5EVko+QIgglRAtVwxvf8UJ1wzTD2jvKxQ==", - "requires": { - "@algolia/requester-common": "4.13.0" - } - }, - "@algolia/transporter": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.13.0.tgz", - "integrity": "sha512-8tSQYE+ykQENAdeZdofvtkOr5uJ9VcQSWgRhQ9h01AehtBIPAczk/b2CLrMsw5yQZziLs5cZ3pJ3478yI+urhA==", - "requires": { - "@algolia/cache-common": "4.13.0", - "@algolia/logger-common": "4.13.0", - "@algolia/requester-common": "4.13.0" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==" - }, - "@babel/core": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.10.tgz", - "integrity": "sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.9", - "@babel/parser": "^7.17.10", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.10", - "@babel/types": "^7.17.10", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - } - }, - "@babel/generator": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.10.tgz", - "integrity": "sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==", - "requires": { - "@babel/types": "^7.17.10", - "@jridgewell/gen-mapping": "^0.1.0", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", - "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", - "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", - "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", - "requires": { - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "requires": { - "@babel/types": "^7.16.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" - }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "requires": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - } - }, - "@babel/helpers": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", - "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.9", - "@babel/types": "^7.17.0" - } - }, - "@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.10.tgz", - "integrity": "sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz", - "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.6", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", - "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", - "requires": { - "@babel/compat-data": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", - "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.10.tgz", - "integrity": "sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", - "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "requires": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", - "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", - "requires": { - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", - "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", - "requires": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "requires": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.17.10.tgz", - "integrity": "sha512-v54O6yLaJySCs6mGzaVOUw9T967GnH38T6CQSAtnzdNPwu84l2qAjssKzo/WSO8Yi7NF+7ekm5cVbF/5qiIgNA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.17.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.17.6.tgz", - "integrity": "sha512-OBv9VkyyKtsHZiHLoSfCn+h6yU7YKX8nrs32xUmOa1SRSk+t03FosB6fBZ0Yz4BpD1WV7l73Nsad+2Tz7APpqw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.16.7.tgz", - "integrity": "sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.3.tgz", - "integrity": "sha512-9tjBm4O07f7mzKSIlEmPdiE6ub7kfIe6Cd+w+oQebpATfTQMAgW+YOuWxogbKVTulA+MEO7byMeIUtQ1z+z+ZQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.16.7", - "@babel/types": "^7.17.0" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.16.7.tgz", - "integrity": "sha512-RMvQWvpla+xy6MlBpPlrKZCMRs2AGiHOGHY3xRwl0pEeim348dDyxeH4xBsMPbIMhujeq7ihE702eM2Ew0Wo+A==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.16.7" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.16.7.tgz", - "integrity": "sha512-hs71ToC97k3QWxswh2ElzMFABXHvGiJ01IB1TbYQDGeWRKWz/MPUTh5jGExdHvosYKpnJW5Pm3S4+TA3FyX+GA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", - "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", - "requires": { - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.10.tgz", - "integrity": "sha512-6jrMilUAJhktTr56kACL8LnWC5hx3Lf27BS0R0DSyW/OoJfb/iTHeE96V3b1dgKG3FSFdd/0culnYWMkjcKCig==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.16.8.tgz", - "integrity": "sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-typescript": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - } - }, - "@babel/preset-env": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.17.10.tgz", - "integrity": "sha512-YNgyBHZQpeoBSRBg0xixsZzfT58Ze1iZrajvv0lJc70qDDGuGfonEnMGfWeSY0mQ3JTuCWFbMkzFRVafOyJx4g==", - "requires": { - "@babel/compat-data": "^7.17.10", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.17.6", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.17.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.17.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.17.9", - "@babel/plugin-transform-modules-systemjs": "^7.17.8", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.17.10", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.17.9", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.17.10", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.7.tgz", - "integrity": "sha512-fWpyI8UM/HE6DfPBzD8LnhQ/OcH8AgTaqcqP2nGOXEUV+VKBR5JRN9hCk9ai+zQQ57vtm9oWeXguBCPNUjytgA==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-react-display-name": "^7.16.7", - "@babel/plugin-transform-react-jsx": "^7.16.7", - "@babel/plugin-transform-react-jsx-development": "^7.16.7", - "@babel/plugin-transform-react-pure-annotations": "^7.16.7" - } - }, - "@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" - } - }, - "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.17.9.tgz", - "integrity": "sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==", - "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.10.tgz", - "integrity": "sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==", - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.10", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.10", - "@babel/types": "^7.17.10", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.10.tgz", - "integrity": "sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==", - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@braintree/sanitize-url": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-3.1.0.tgz", - "integrity": "sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==" - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" - }, - "@docsearch/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.0.0.tgz", - "integrity": "sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA==" - }, - "@docsearch/react": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.0.0.tgz", - "integrity": "sha512-yhMacqS6TVQYoBh/o603zszIb5Bl8MIXuOc6Vy617I74pirisDzzcNh0NEaYQt50fVVR3khUbeEhUEWEWipESg==", - "requires": { - "@algolia/autocomplete-core": "1.5.2", - "@algolia/autocomplete-preset-algolia": "1.5.2", - "@docsearch/css": "3.0.0", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-beta.20.tgz", - "integrity": "sha512-a3UgZ4lIcIOoZd4j9INqVkWSXEDxR7EicJXt8eq2whg4N5hKGqLHoDSnWfrVSPQn4NoG5T7jhPypphSoysImfQ==", - "requires": { - "@babel/core": "^7.17.10", - "@babel/generator": "^7.17.10", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.17.10", - "@babel/preset-env": "^7.17.10", - "@babel/preset-react": "^7.16.7", - "@babel/preset-typescript": "^7.16.7", - "@babel/runtime": "^7.17.9", - "@babel/runtime-corejs3": "^7.17.9", - "@babel/traverse": "^7.17.10", - "@docusaurus/cssnano-preset": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "@slorber/static-site-generator-webpack-plugin": "^4.0.4", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.5", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "2.3.0", - "boxen": "^6.2.1", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^10.2.4", - "core-js": "^3.22.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^3.4.1", - "cssnano": "^5.1.7", - "del": "^6.0.0", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.0", - "postcss": "^8.4.13", - "postcss-loader": "^6.2.1", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.2.0", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.2.0", - "remark-admonitions": "^1.2.1", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.1", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.72.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.8.1", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "dependencies": { - "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-beta.20.tgz", - "integrity": "sha512-7pfrYuahHl3YYS+gYhbb1YHsq5s5+hk+1KIU7QqNNn4YjrIqAHlOznCQ9XfQfspe9boZmaNFGMZQ1tawNOVLqQ==", - "requires": { - "cssnano-preset-advanced": "^5.3.3", - "postcss": "^8.4.13", - "postcss-sort-media-queries": "^4.2.1" - } - }, - "@docusaurus/logger": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.0.0-beta.20.tgz", - "integrity": "sha512-7Rt7c8m3ZM81o5jsm6ENgdbjq/hUICv8Om2i7grynI4GT2aQyFoHcusaNbRji4FZt0DaKT2CQxiAWP8BbD4xzQ==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@docusaurus/mdx-loader": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-beta.20.tgz", - "integrity": "sha512-BBuf77sji3JxbCEW7Qsv3CXlgpm+iSLTQn6JUK7x8vJ1JYZ3KJbNgpo9TmxIIltpcvNQ/QOy6dvqrpSStaWmKQ==", - "requires": { - "@babel/parser": "^7.17.10", - "@babel/traverse": "^7.17.10", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.72.0" - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-beta.20.tgz", - "integrity": "sha512-lUIXLwQEOyYwcb3iCNibPUL6O9ijvYF5xQwehGeVraTEBts/Ch8ZwELFk+XbaGHKh52PiVxuWL2CP4Gdjy5QKw==", - "requires": { - "@docusaurus/types": "2.0.0-beta.20", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-beta.20.tgz", - "integrity": "sha512-6aby36Gmny5h2oo/eEZ2iwVsIlBWbRnNNeqT0BYnJO5aj53iCU/ctFPpJVYcw0l2l8+8ITS70FyePIWEsaZ0jA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "cheerio": "^1.0.0-rc.10", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.72.0" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-beta.20.tgz", - "integrity": "sha512-XOgwUqXtr/DStpB3azdN6wgkKtQkOXOx1XetORzhHnjihrSMn6daxg+spmcJh1ki/mpT3n7yBbKJxVNo+VB38Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "remark-admonitions": "^1.2.1", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.72.0" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-beta.20.tgz", - "integrity": "sha512-ubY6DG4F0skFKjfNGCbfO34Qf+MZy6C05OtpIYsoA2YU8ADx0nRH7qPgdEkwR3ma860DbY612rleRT13ogSlhg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/mdx-loader": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "fs-extra": "^10.1.0", - "remark-admonitions": "^1.2.1", - "tslib": "^2.4.0", - "webpack": "^5.72.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-beta.20.tgz", - "integrity": "sha512-acGZmpncPA1XDczpV1ji1ajBCRBY/H2lXN8alSjOB1vh0c/2Qz+KKD05p17lsUbhIyvsnZBa/BaOwtek91Lu7Q==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-beta.20.tgz", - "integrity": "sha512-4C5nY25j0R1lntFmpSEalhL7jYA7tWvk0VZObiIxGilLagT/f9gWPQtIjNBe4yzdQvkhiaXpa8xcMcJUAKRJyw==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-beta.20.tgz", - "integrity": "sha512-EMZdiMTNg4NwE60xwjbetcqMDqAOazMTwQAQ4OuNAclv7oh8+VPCvqRF8s8AxCoI2Uqc7vh8yzNUuM307Ne9JA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-beta.20.tgz", - "integrity": "sha512-Rf5a2vOBWjbe7PJJEBDeLZzDA7lsDi+16bqzKN8OKSXlcZLhxjmIpL5NrjANNbpGpL5vbl9z+iqvjbQmZ3QSmA==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/preset-classic": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-beta.20.tgz", - "integrity": "sha512-artUDjiYFIlGd2fxk0iqqcJ5xSCrgormOAoind1c0pn8TRXY1WSCQWYI6p4X24jjhSCzLv0s6Z9PMDyxZdivhg==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/plugin-content-blog": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/plugin-content-pages": "2.0.0-beta.20", - "@docusaurus/plugin-debug": "2.0.0-beta.20", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.20", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.20", - "@docusaurus/plugin-sitemap": "2.0.0-beta.20", - "@docusaurus/theme-classic": "2.0.0-beta.20", - "@docusaurus/theme-common": "2.0.0-beta.20", - "@docusaurus/theme-search-algolia": "2.0.0-beta.20" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/theme-classic": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-beta.20.tgz", - "integrity": "sha512-rs4U68x8Xk6rPsZC/7eaPxCKqzXX1S45FICKmq/IZuaDaQyQIijCvv2ssxYnUyVZUNayZfJK7ZtNu+A0kzYgSQ==", - "requires": { - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/plugin-content-blog": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/plugin-content-pages": "2.0.0-beta.20", - "@docusaurus/theme-common": "2.0.0-beta.20", - "@docusaurus/theme-translations": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-common": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.1.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.39", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.13", - "prism-react-renderer": "^1.3.1", - "prismjs": "^1.28.0", - "react-router-dom": "^5.2.0", - "rtlcss": "^3.5.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.0.0-beta.20.tgz", - "integrity": "sha512-lmdGB3/GQM5z0GH0iHGRXUco4Wfqc6sR5eRKuW4j0sx3+UFVvtbVTTIGt0Cie4Dh6omnFxjPbNDlPDgWr/agVQ==", - "requires": { - "@docusaurus/module-type-aliases": "2.0.0-beta.20", - "@docusaurus/plugin-content-blog": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/plugin-content-pages": "2.0.0-beta.20", - "clsx": "^1.1.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.1", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-beta.20.tgz", - "integrity": "sha512-9XAyiXXHgyhDmKXg9RUtnC4WBkYAZUqKT9Ntuk0OaOb4mBwiYUGL74tyP0LLL6T+oa9uEdXiUMlIL1onU8xhvA==", - "requires": { - "@docsearch/react": "^3.0.0", - "@docusaurus/core": "2.0.0-beta.20", - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/plugin-content-docs": "2.0.0-beta.20", - "@docusaurus/theme-common": "2.0.0-beta.20", - "@docusaurus/theme-translations": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "@docusaurus/utils-validation": "2.0.0-beta.20", - "algoliasearch": "^4.13.0", - "algoliasearch-helper": "^3.8.2", - "clsx": "^1.1.1", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-translations": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.0.0-beta.20.tgz", - "integrity": "sha512-O7J/4dHcg7Yr+r3ylgtqmtMEz6d5ScpUxBg8nsNTWOCRoGEXNZVmXSd5l6v72KCyxPZpllPrgjmqkL+I19qWiw==", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/types": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-beta.20.tgz", - "integrity": "sha512-d4ZIpcrzGsUUcZJL3iz8/iSaewobPPiYfn2Lmmv7GTT5ZPtPkOAtR5mE6+LAf/KpjjgqrC7mpwDKADnOL/ic4Q==", - "requires": { - "commander": "^5.1.0", - "history": "^4.9.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.72.0", - "webpack-merge": "^5.8.0" - } - }, - "@docusaurus/utils": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-beta.20.tgz", - "integrity": "sha512-eUQquakhrbnvhsmx8jRPLgoyjyzMuOhmQC99m7rotar7XOzROpgEpm7+xVaquG5Ha47WkybE3djHJhKNih7GZQ==", - "requires": { - "@docusaurus/logger": "2.0.0-beta.20", - "@svgr/webpack": "^6.2.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.72.0" - } - }, - "@docusaurus/utils-common": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.0.0-beta.20.tgz", - "integrity": "sha512-HabHh23vOQn6ygs0PjuCSF/oZaNsYTFsxB2R6EwHNyw01nWgBC3QAcGVmyIWQhlb9p8V3byKgbzVS68hZX5t9A==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.0.0-beta.20", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-beta.20.tgz", - "integrity": "sha512-7MxMoaF4VNAt5vUwvITa6nbkw1tb4WE6hp1VlfIoLCY4D7Wk5cMf1ZFhppCP1UzmPwvFb9zw8fPuvDfB3Tb5nQ==", - "requires": { - "@docusaurus/logger": "2.0.0-beta.20", - "@docusaurus/utils": "2.0.0-beta.20", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" - }, - "@jridgewell/set-array": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", - "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.11.tgz", - "integrity": "sha512-RllI476aSMsxzeI9TtlSMoNTgHDxEmnl6GkkHwhr0vdL8W+0WuesyI8Vd3rBOfrwtPXbPxdT9ADJdiOKgzxPQA==", - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.4.tgz", - "integrity": "sha512-FvMavoWEIePps6/JwGCOLYKCRhuwIHhMtmbKpBFgzNkxwpa/569LfTkrbRk1m1I3n+ezJK4on9E1A6cjuZmD9g==", - "requires": { - "bluebird": "^3.7.1", - "cheerio": "^0.22.0", - "eval": "^0.1.8", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "cheerio": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", - "integrity": "sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==", - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.0", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash.assignin": "^4.0.9", - "lodash.bind": "^4.1.4", - "lodash.defaults": "^4.0.1", - "lodash.filter": "^4.4.0", - "lodash.flatten": "^4.2.0", - "lodash.foreach": "^4.3.0", - "lodash.map": "^4.4.0", - "lodash.merge": "^4.4.0", - "lodash.pick": "^4.2.1", - "lodash.reduce": "^4.4.0", - "lodash.reject": "^4.4.0", - "lodash.some": "^4.4.0" - } - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - } - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" - }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "requires": { - "domelementtype": "1" - } - }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" - }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - } - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz", - "integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz", - "integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz", - "integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz", - "integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz", - "integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz", - "integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz", - "integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.2.0.tgz", - "integrity": "sha512-4WQNY0J71JIaL03DRn0vLiz87JXx0b9dYm2aA8XHlQJQoixMl4r/soYHm8dsaJZ3jWtkCiOYy48dp9izvXhDkQ==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^6.0.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^6.0.0", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.0.0", - "@svgr/babel-plugin-svg-dynamic-title": "^6.0.0", - "@svgr/babel-plugin-svg-em-dimensions": "^6.0.0", - "@svgr/babel-plugin-transform-react-native-svg": "^6.0.0", - "@svgr/babel-plugin-transform-svg-component": "^6.2.0" - } - }, - "@svgr/core": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.2.1.tgz", - "integrity": "sha512-NWufjGI2WUyrg46mKuySfviEJ6IxHUOm/8a3Ph38VCWSp+83HBraCQrpEM3F3dB6LBs5x8OElS8h3C0oOJaJAA==", - "requires": { - "@svgr/plugin-jsx": "^6.2.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.2.1.tgz", - "integrity": "sha512-pt7MMkQFDlWJVy9ULJ1h+hZBDGFfSCwlBNW1HkLnVi7jUhyEXUaGYWi1x6bM2IXuAR9l265khBT4Av4lPmaNLQ==", - "requires": { - "@babel/types": "^7.15.6", - "entities": "^3.0.1" - } - }, - "@svgr/plugin-jsx": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.2.1.tgz", - "integrity": "sha512-u+MpjTsLaKo6r3pHeeSVsh9hmGRag2L7VzApWIaS8imNguqoUwDq/u6U/NDmYs/KAsrmtBjOEaAAPbwNGXXp1g==", - "requires": { - "@babel/core": "^7.15.5", - "@svgr/babel-preset": "^6.2.0", - "@svgr/hast-util-to-babel-ast": "^6.2.1", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.2.0.tgz", - "integrity": "sha512-oDdMQONKOJEbuKwuy4Np6VdV6qoaLLvoY86hjvQEgU82Vx1MSWRyYms6Sl0f+NtqxLI/rDVufATbP/ev996k3Q==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.5.0" - } - }, - "@svgr/webpack": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.2.1.tgz", - "integrity": "sha512-h09ngMNd13hnePwgXa+Y5CgOjzlCvfWLHg+MBnydEedAnuLRzUHUJmGS3o2OsrhxTOOqEsPOFt5v/f6C5Qulcw==", - "requires": { - "@babel/core": "^7.15.5", - "@babel/plugin-transform-react-constant-elements": "^7.14.5", - "@babel/preset-env": "^7.15.6", - "@babel/preset-react": "^7.14.5", - "@babel/preset-typescript": "^7.15.0", - "@svgr/core": "^6.2.1", - "@svgr/plugin-jsx": "^6.2.1", - "@svgr/plugin-svgo": "^6.2.0" - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==" - }, - "@types/node": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.32.tgz", - "integrity": "sha512-eAIcfAvhf/BkHcf4pkLJ7ECpBAhh9kcxRBpip9cTiO+hf+aJrsxYxBeS6OXvOd9WqNAJmavXVpZvY1rBjNsXmw==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.45.tgz", - "integrity": "sha512-YfhQ22Lah2e3CHPsb93tRwIGNiSwkuz1/blk4e6QrWS0jQzCSNbGLtOEYhPg02W0yGTTmpajp7dCTbBAMN3qsg==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-router": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.18.tgz", - "integrity": "sha512-YYknwy0D0iOwKQgz9v8nOzt2J6l4gouBmDnWqUUznltOTaon+r8US8ky8HvN0tXvc38U9m6z/t2RsVsnd1zM0g==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", - "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.13.0.tgz", - "integrity": "sha512-oHv4faI1Vl2s+YC0YquwkK/TsaJs79g2JFg5FDm2rKN12VItPTAeQ7hyJMHarOPPYuCnNC5kixbtcqvb21wchw==", - "requires": { - "@algolia/cache-browser-local-storage": "4.13.0", - "@algolia/cache-common": "4.13.0", - "@algolia/cache-in-memory": "4.13.0", - "@algolia/client-account": "4.13.0", - "@algolia/client-analytics": "4.13.0", - "@algolia/client-common": "4.13.0", - "@algolia/client-personalization": "4.13.0", - "@algolia/client-search": "4.13.0", - "@algolia/logger-common": "4.13.0", - "@algolia/logger-console": "4.13.0", - "@algolia/requester-browser-xhr": "4.13.0", - "@algolia/requester-common": "4.13.0", - "@algolia/requester-node-http": "4.13.0", - "@algolia/transporter": "4.13.0" - } - }, - "algoliasearch-helper": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.8.2.tgz", - "integrity": "sha512-AXxiF0zT9oYwl8ZBgU/eRXvfYhz7cBA5YrLPlw9inZHdaYF0QEya/f1Zp1mPYMXc1v6VkHwBq4pk6/vayBLICg==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", - "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - } - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "bonjour-service": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.12.tgz", - "integrity": "sha512-pMmguXYCu63Ug37DluMKEHdxc+aaIf/ay4YbF8Gxtba+9d3u+rmEWy61VK3Z3hp8Rskok3BunHYnG0dUHAsblw==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.4" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24= sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001339", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001339.tgz", - "integrity": "sha512-Es8PiVqCe+uXdms0Gu5xP5PF2bxLR7OBp3wUzUnuO7OHzhOfCyg3hdiGWVPVxhiuniOzng+hTc1u3fEQ0TlkSQ==" - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } - }, - "cheerio-select": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", - "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", - "requires": { - "css-select": "^4.3.0", - "css-what": "^6.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.3.1", - "domutils": "^2.8.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "clean-css": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.0.tgz", - "integrity": "sha512-YYuuxv4H/iNb1Z/5IbMRoxgrzjWGhOEFfd+groZ5dMCVkpENiMZmwspdrzBo9286JjM1gZJPAyL7ZIdzuvu2AQ==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - } - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", - "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==" - }, - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" - }, - "copy-webpack-plugin": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-10.2.4.tgz", - "integrity": "sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==", - "requires": { - "fast-glob": "^3.2.7", - "glob-parent": "^6.0.1", - "globby": "^12.0.2", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "array-union": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", - "integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", - "requires": { - "array-union": "^3.0.1", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.7", - "ignore": "^5.1.9", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.22.5.tgz", - "integrity": "sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA==" - }, - "core-js-compat": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.22.5.tgz", - "integrity": "sha512-rEF75n3QtInrYICvJjrAgV03HwKiYvtKHdPtaba1KucG+cNZ4NJnH9isqt979e67KZlhpbCOTwnsvnIr+CVeOg==", - "requires": { - "browserslist": "^4.20.3", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" - } - } - }, - "core-js-pure": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.22.5.tgz", - "integrity": "sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-declaration-sorter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "requires": {} - }, - "css-loader": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", - "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.7", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "requires": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz", - "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==", - "requires": { - "cssnano-preset-default": "^5.2.7", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.3.tgz", - "integrity": "sha512-AB9SmTSC2Gd8T7PpKUsXFJ3eNsg7dc4CTZ0+XAJ29MNxyJsrCEk7N1lw31bpHrsQH2PVJr21bbWgGAfA9j0dIA==", - "requires": { - "autoprefixer": "^10.3.7", - "cssnano-preset-default": "^5.2.7", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz", - "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==", - "requires": { - "css-declaration-sorter": "^6.2.2", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.0", - "postcss-discard-comments": "^5.1.1", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.4", - "postcss-merge-rules": "^5.1.1", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.2", - "postcss-minify-selectors": "^5.2.0", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.0", - "postcss-normalize-repeat-style": "^5.1.0", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.1", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz", - "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" - }, - "d3": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.2.1.tgz", - "integrity": "sha512-E/5sP0aeK6YPXI/+4QlefvBFgmcyR2jYftId0PrYWv4Y/gW3c3thp1XG4rQzF0eUwV9tR1x05X5eWuJ6rQXvew==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "3", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - } - }, - "d3-array": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz", - "integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - } - }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.0.1.tgz", - "integrity": "sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw==" - }, - "d3-contour": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-3.0.1.tgz", - "integrity": "sha512-0Oc4D0KyhwhM7ZL0RMnfGycLN7hxHB8CMmwZ3+H26PWAG0ozNuYG5hXSDNgmP1SgJkQMrlG6cP20HoaSbvcJTQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-geo": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", - "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", - "requires": { - "d3-array": "2.5.0 - 3" - } - }, - "d3-hierarchy": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz", - "integrity": "sha512-LtAIu54UctRmhGKllleflmHalttH3zkfSi4NlKrTAoFKjC+AFBJohsCAdgCBYQwH0F8hIOGY89X1pPqAchlMkA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-shape": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.0.1.tgz", - "integrity": "sha512-HNZNEQoDhuCrDWEc/BMbF/hKtzMZVoe64TvisFLDp2Iyj0UShB/E6/lBsLlJTfBMbYgftHj90cXJ0SEitlE6Xw==", - "requires": { - "d3-path": "1 - 3" - } - }, - "d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } - }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "requires": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" - }, - "d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "requires": { - "d3-array": "1", - "d3-path": "1" - } - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - } - }, - "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" - }, - "d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "requires": { - "d3-dsv": "1" - } - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "requires": { - "d3-array": "1" - } - }, - "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" - }, - "d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" - }, - "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" - }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "requires": { - "d3-color": "1", - "d3-interpolate": "1" - } - }, - "d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "requires": { - "d3-time": "1" - } - }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" - }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", - "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" - }, - "dns-packet": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.3.1.tgz", - "integrity": "sha512-spBwIj0TK0Ey3666GwIdWVfUpLyubpU53BTCu8iPn4r4oXd9O14Hjg3EHw3ts2oed77/SeckunUYCyRlSngqHw==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "docusaurus-plugin-plausible": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/docusaurus-plugin-plausible/-/docusaurus-plugin-plausible-0.0.5.tgz", - "integrity": "sha512-8wiglvMjkGjhGUnBYgJM87V1Ip0wr8AbIHiC5YHNar3DOfXX+JL0nBoThlnvaX1ib/emraWgimR5QiMDOgMJjA==" - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "dompurify": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.5.tgz", - "integrity": "sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==" - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", - "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==", - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - } - } - }, - "express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", - "requires": { - "punycode": "^1.3.2" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "follow-redirects": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz", - "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "github-slugger": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.4.0.tgz", - "integrity": "sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==" - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" - }, - "hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "requires": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "requires": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - } - }, - "hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" - }, - "hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "requires": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "requires": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - } - }, - "hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" - }, - "history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } - } - }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" - }, - "html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - }, - "dependencies": { - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.6.tgz", - "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==" - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" - }, - "image-size": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.1.tgz", - "integrity": "sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ==", - "requires": { - "queue": "6.0.2" - } - }, - "immer": { - "version": "9.0.12", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.12.tgz", - "integrity": "sha512-lk7UNmSbAukB5B6dh9fnh5D0bJTOFKxVg2cyJWTYrWRfhLrLMBquONcUs3aFq507hNoIZEDDh8lb8UtOizSMhA==" - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "infima": { - "version": "0.2.0-alpha.39", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.39.tgz", - "integrity": "sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" - }, - "is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "requires": { - "has": "^1.0.3" - } - }, - "is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" - }, - "is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { - "is-docker": "^2.0.0" - } - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "requires": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, - "khroma": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-1.4.1.tgz", - "integrity": "sha512-+GmxKvmiRuCcUYDgR7g5Ngo0JEDeOsGdNONdU2zsiBQaK4z19Y2NvXqfEDE0ZiIrg45GTZyAnPLVsLZZACYm3Q==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" - }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" - }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==" - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" - }, - "loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.assignin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", - "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" - }, - "lodash.bind": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", - "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" - }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" - }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" - }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" - }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" - }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" - }, - "lodash.foreach": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", - "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" - }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" - }, - "lodash.reduce": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", - "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" - }, - "lodash.reject": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", - "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" - }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - } - }, - "markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" - }, - "mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "requires": { - "unist-util-remove": "^2.0.0" - } - }, - "mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" - }, - "mdx-mermaid": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.1.1.tgz", - "integrity": "sha512-3Dc6zFRBaqxJ0S0cEKrbDSJEjdlJ/OUfTHFLY8uBwoDrTnF7+Dn8ukVPeVL10gNqqTvaPmQ1KGdgyx9wMuktEA==", - "requires": {} - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "medium-zoom": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz", - "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg==" - }, - "memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "requires": { - "fs-monkey": "1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "mermaid": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-8.14.0.tgz", - "integrity": "sha512-ITSHjwVaby1Li738sxhF48sLTxcNyUAoWfoqyztL1f7J6JOLpHOuQPNLBb6lxGPUA0u7xP9IRULgvod0dKu35A==", - "requires": { - "@braintree/sanitize-url": "^3.1.0", - "d3": "^7.0.0", - "dagre": "^0.8.5", - "dagre-d3": "^0.6.4", - "dompurify": "2.3.5", - "graphlib": "^2.1.8", - "khroma": "^1.4.1", - "moment-mini": "^2.24.0", - "stylis": "^4.0.10" - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "mini-create-react-context": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz", - "integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==", - "requires": { - "@babel/runtime": "^7.12.1", - "tiny-warning": "^1.0.3" - } - }, - "mini-css-extract-plugin": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz", - "integrity": "sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w==", - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "moment-mini": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.24.0.tgz", - "integrity": "sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ==" - }, - "mrmime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", - "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.4.tgz", - "integrity": "sha512-XkCYOU+rr2Ft3LI6w4ye51M3VK31qJXFIxu0XLw169PtKG0Zx47OrXeVW/GCYOfpC9s1yyyf1S+L8/4LY0J9Zw==", - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { - "lodash": "^4.17.21" - } - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { - "path-key": "^3.0.0" - } - }, - "nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - } - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "requires": { - "parse5": "^6.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { - "find-up": "^4.0.0" - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "plugin-image-zoom": { - "version": "git+ssh://git@github.com/ataft/plugin-image-zoom.git#86f6f0b4f927ded94dcfdc18c0a9ee702ffd8d06", - "from": "plugin-image-zoom@ataft/plugin-image-zoom", - "requires": { - "medium-zoom": "^1.0.4" - } - }, - "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", - "requires": { - "nanoid": "^3.3.3", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", - "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-discard-comments": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", - "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} - }, - "postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-merge-longhand": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", - "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" - } - }, - "postcss-merge-rules": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", - "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", - "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", - "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", - "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-sort-media-queries": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.2.1.tgz", - "integrity": "sha512-9VYekQalFZ3sdgcTjXMa0dDjsfBVHXlraYJEMiOJ/2iMmI2JGCMavP16z3kWOaRu8NSaJCTgVpB/IVpH5yT9YQ==", - "requires": { - "sort-css-media-queries": "2.0.4" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "requires": {} - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" - }, - "prism-react-renderer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.1.tgz", - "integrity": "sha512-xUeDMEz074d0zc5y6rxiMp/dlC7C+5IDDlaEUlcBOFE2wddz7hz5PNupb087mPwTt7T9BrFmewObfCBuf/LKwQ==", - "requires": {} - }, - "prismjs": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.28.0.tgz", - "integrity": "sha512-8aaXdYvl1F7iC7Xm1spqSaY/OJBpYW3v+KJ+F17iYxvdc8sfjW194COK5wVhMZX45tGteiBQgdvD/nhxcRwylw==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { - "asap": "~2.0.3" - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { - "xtend": "^4.0.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { - "inherits": "~2.0.3" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - } - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - } - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "requires": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { - "@babel/runtime": "^7.10.3" - } - }, - "react-router": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.1.tgz", - "integrity": "sha512-v+zwjqb7bakqgF+wMVKlAPTca/cEmPOvQ9zt7gpSNyPXau1+0qvuYZ5BWzzNDP1y6s15zDwgb9rPN63+SIniRQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "mini-create-react-context": "^0.4.0", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } - } - }, - "react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "react-router-dom": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.1.tgz", - "integrity": "sha512-f0pj/gMAbv9e8gahTmCEY20oFhxhrmHwYeIwH5EO5xu0qme+wXtsdB8YfUOAZzUz4VaXmb58m3ceiLtjMhqYmQ==", - "requires": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.1", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - } - }, - "react-textarea-autosize": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz", - "integrity": "sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ==", - "requires": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.0.0", - "use-latest": "^1.0.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - }, - "reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "^1.1.6" - } - }, - "recursive-readdir": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", - "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", - "requires": { - "minimatch": "3.0.4" - }, - "dependencies": { - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { - "rc": "^1.2.8" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==" - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - } - } - }, - "rehype-parse": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", - "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", - "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "hast-util-from-parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", - "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", - "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" - } - }, - "hastscript": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", - "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", - "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - } - }, - "parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" - }, - "remark-admonitions": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", - "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", - "requires": { - "rehype-parse": "^6.0.2", - "unified": "^8.4.2", - "unist-util-visit": "^2.0.1" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - }, - "unified": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", - "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "requires": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" - }, - "remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } - } - }, - "remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - } - }, - "remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { - "mdast-squeeze-paragraphs": "^4.0.0" - } - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "requires": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" - }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "requires": { - "tslib": "^2.1.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, - "section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" - }, - "selfsigned": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.1.tgz", - "integrity": "sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==", - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { - "semver": "^6.3.0" - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-handler": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", - "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", - "requires": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.0.4", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - }, - "dependencies": { - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - } - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", - "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==" - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "requires": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "requires": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "sort-css-media-queries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.0.4.tgz", - "integrity": "sha512-PAIsEK/XupCQwitjv7XxoMvYhT7EAfyzI3hsy/MyDgTvc+Ft55ctdkctJLOy6cQejaIC+zjpUL4djFVm2ivOOw==" - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" - }, - "state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "std-env": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.1.1.tgz", - "integrity": "sha512-/c645XdExBypL01TpFKiG/3RAa/Qmu+zRi0MwAmrdEkwHNuN0ebo8ccAXBBDa5Z0QOJgBskUIbuCK91x0sCVEw==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - } - } - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, - "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", - "requires": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylis": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", - "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "terser": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", - "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", - "requires": { - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map": "~0.8.0-beta.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", - "requires": { - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "tiny-invariant": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.2.0.tgz", - "integrity": "sha512-1Uhn/aqw5C6RI4KejVeTg6mIS7IqxnLJ8Mv2tV5rTc0qWobay7pDUz6Wi392Cnc8ak1H0F2cjoRzb2/AW4+Fvg==" - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" - }, - "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" - }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "type-fest": { - "version": "2.12.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.12.2.tgz", - "integrity": "sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==" - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "peer": true - }, - "ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==" - }, - "unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==" - }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "dependencies": { - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" - } - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" - }, - "unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" - }, - "unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" - }, - "unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" - }, - "unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "requires": { - "unist-util-is": "^4.0.0" - } - }, - "unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { - "unist-util-visit": "^2.0.0" - } - }, - "unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { - "@types/unist": "^2.0.2" - } - }, - "unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - } - }, - "unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - }, - "dependencies": { - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - } - } - }, - "url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} - }, - "use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} - }, - "use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { - "use-isomorphic-layout-effect": "^1.1.1" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" - }, - "utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - } - }, - "vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" - }, - "vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - } - }, - "wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "requires": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - } - }, - "watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "webpack": { - "version": "5.72.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.1.tgz", - "integrity": "sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung==", - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" - } - } - }, - "webpack-bundle-analyzer": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", - "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", - "requires": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", - "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.1", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz", - "integrity": "sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.6.0.tgz", - "integrity": "sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw==", - "requires": {} - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "requires": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { - "string-width": "^5.0.1" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==" - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz", - "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A==", - "requires": {} - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, - "xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { - "sax": "^1.2.4" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" - }, - "zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" - } - } -} diff --git a/docs/package.json b/docs/package.json index bac30c0d4f..5e67ff8a7f 100644 --- a/docs/package.json +++ b/docs/package.json @@ -37,16 +37,16 @@ "@docsearch/css": "3.0.0", "@docsearch/react": "3.0.0", "@docusaurus/core": "^2.0.0-beta.20", - "@docusaurus/cssnano-preset": "2.0.0-beta.20", - "@docusaurus/module-type-aliases": "2.0.0-beta.20", - "@docusaurus/plugin-debug": "2.0.0-beta.20", - "@docusaurus/plugin-google-analytics": "2.0.0-beta.20", - "@docusaurus/plugin-google-gtag": "2.0.0-beta.20", - "@docusaurus/plugin-sitemap": "2.0.0-beta.20", - "@docusaurus/preset-classic": "2.0.0-beta.20", - "@docusaurus/theme-classic": "2.0.0-beta.20", - "@docusaurus/theme-search-algolia": "2.0.0-beta.20", - "@docusaurus/types": "2.0.0-beta.20", + "@docusaurus/cssnano-preset": "2.0.0-rc.1", + "@docusaurus/module-type-aliases": "2.0.0-rc.1", + "@docusaurus/plugin-debug": "2.0.0-rc.1", + "@docusaurus/plugin-google-analytics": "2.0.0-rc.1", + "@docusaurus/plugin-google-gtag": "2.0.0-rc.1", + "@docusaurus/plugin-sitemap": "2.0.0-rc.1", + "@docusaurus/preset-classic": "2.0.0-rc.1", + "@docusaurus/theme-classic": "2.0.0-rc.1", + "@docusaurus/theme-search-algolia": "2.0.0-rc.1", + "@docusaurus/types": "2.0.0-rc.1", "@jridgewell/resolve-uri": "3.0.7", "@jridgewell/set-array": "1.1.1", "@jridgewell/trace-mapping": "0.3.11", diff --git a/docs/sidebars.js b/docs/sidebars.js index 6b3f880432..e2c0612eec 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -1,36 +1,38 @@ module.exports = { - quickstarts: [ - "quickstarts/introduction", + examples: [ + "examples/introduction", { type: "category", label: "Integrate ZITADEL Login in your App", items: [ - "quickstarts/login/angular", - "quickstarts/login/react", - "quickstarts/login/flutter", - "quickstarts/login/nextjs", + "examples/login/angular", + "examples/login/react", + "examples/login/flutter", + "examples/login/nextjs", ], collapsed: false, }, { type: "category", label: "Secure your API", - items: ["quickstarts/secure-api/go", "quickstarts/secure-api/dot-net"], + items: [ + "examples/secure-api/go", + "examples/secure-api/dot-net"], collapsed: false, }, { type: "category", label: "Call the ZITADEL API", items: [ - "quickstarts/call-zitadel-api/go", - "quickstarts/call-zitadel-api/dot-net", + "examples/call-zitadel-api/go", + "examples/call-zitadel-api/dot-net", ], collapsed: false, }, { type: "category", label: "Identity Aware Proxy", - items: ["quickstarts/identity-proxy/oauth2-proxy"], + items: ["examples/identity-proxy/oauth2-proxy"], collapsed: false, }, ], @@ -38,36 +40,90 @@ module.exports = { "guides/overview", { type: "category", - label: "Get to know ZITADEL", + label: "Get started", collapsed: false, items: [ - "guides/basics/get-started", - "guides/basics/instance", - "guides/basics/organizations", - "guides/basics/projects", - "guides/basics/applications", + "guides/start/quickstart", ], }, { type: "category", - label: "Install ZITADEL", + label: "Deploy", collapsed: false, items: [ - "guides/installation/run/run", - "guides/installation/configure/configure", - "guides/installation/custom-domain", - "guides/installation/http2-support", - "guides/installation/loadbalancing-example/loadbalancing-example", + "guides/deploy/overview", + "guides/deploy/linux", + "guides/deploy/macos", + "guides/deploy/compose", + "guides/deploy/knative", + "guides/deploy/kubernetes", + "guides/deploy/loadbalancing-example/loadbalancing-example", ], }, { type: "category", - label: "Integrations", + label: "Manage", collapsed: false, items: [ - "guides/integrations/authenticated-mongodb-charts", - "guides/integrations/auth0", - "guides/integrations/gitlab-self-hosted", + { + type: 'category', + label: 'Cloud', + items: [ + "guides/manage/cloud/overview", + "guides/manage/cloud/start", + "guides/manage/cloud/instances", + "guides/manage/cloud/billing", + "guides/manage/cloud/users", + "guides/manage/cloud/support", + ] + }, + { + type: 'category', + label: 'Self-Hosted', + items: [ + "guides/manage/self-hosted/configure/configure", + "guides/manage/self-hosted/proxy/proxy", + "guides/manage/self-hosted/custom-domain", + "guides/manage/self-hosted/http2", + "guides/manage/self-hosted/tls_modes", + ] + }, + { + type: 'category', + label: 'Console', + items: [ + "guides/manage/console/organizations", + "guides/manage/console/projects", + "guides/manage/console/applications", + + ] + }, + { + type: 'category', + label: 'Customize', + items: [ + "guides/manage/customize/branding", + "guides/manage/customize/texts", + "guides/manage/customize/behavior", + "guides/manage/customize/user-metadata", + ] + } + ], + }, + { + type: "category", + label: "Integrate", + collapsed: false, + items: [ + "guides/integrate/identity-brokering", + "guides/integrate/access-zitadel-apis", + "guides/integrate/authenticated-mongodb-charts", + "guides/integrate/auth0", + "guides/integrate/gitlab-self-hosted", + "guides/integrate/login-users", + "guides/integrate/serviceusers", + "guides/integrate/oauth-recommended-flows", + "guides/integrate/export-and-import" ], }, { @@ -80,42 +136,6 @@ module.exports = { "guides/solution-scenarios/b2b", ], }, - { - type: "category", - label: "Authentication", - collapsed: false, - items: [ - "guides/authentication/login-users", - "guides/authentication/identity-brokering", - "guides/authentication/serviceusers", - ], - }, - { - type: "category", - label: "Authorization", - collapsed: false, - items: ["guides/authorization/oauth-recommended-flows"], - }, - { - type: "category", - label: "API", - collapsed: false, - items: [ - "guides/api/access-zitadel-apis", - "guides/api/export-and-import" - ], - }, - { - type: "category", - label: "Customization", - collapsed: false, - items: [ - "guides/customization/branding", - "guides/customization/texts", - "guides/customization/behavior", - "guides/customization/user-metadata" - ], - }, { type: "category", label: "Trainings", @@ -188,7 +208,7 @@ module.exports = { collapsed: false, items: [ "legal/rate-limit-policy", - "apis/ratelimits/accounts", + "apis/ratelimits/login", "apis/ratelimits/api", ], }, @@ -239,19 +259,6 @@ module.exports = { "manuals/introduction", "manuals/user-profile", "manuals/user-login", - { - type: "category", - label: "Customer Portal", - collapsed: true, - items: [ - "manuals/customerportal/overview", - "manuals/customerportal/start", - "manuals/customerportal/instances", - "manuals/customerportal/billing", - "manuals/customerportal/users", - "manuals/customerportal/support", - ], - }, "manuals/troubleshooting", ], legal: [ diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 0981c42c99..9fe41f95ee 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -27,7 +27,7 @@ const features = [
    Learn how to integrate your applications and build secure workflows and @@ -97,25 +97,25 @@ const features = [ content: (
    Get Started diff --git a/docs/static/img/manuals/portal/customer_portal_create_user.png b/docs/static/img/manuals/portal/customer_portal_create_user.png index a42ef1cf5733dcea6a3efb264336150353a338c4..c70845222c0a6dc531aecffad058fa91aa39c1ca 100644 GIT binary patch literal 228426 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�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∾}UDYp=N>B`GrkD7$$qOA6j;a04~=M%@WZ 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%0A(v0;l?>?^%@Wto7 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

    QKPaic z-n!TPstR6rA+Gq=(CDVKoQCc(KNU%e(Cs^S3;l7*(26j#mJ%L2W%R`Z`^C&rvo6KL zb|b}#E=d=hzUl3K8%0%7J>&S)=Zz^I;d91@xvE2#a}WAA zkQ-#UM68NrRKJsqU7)(2YZt^OyNk_tu^79SmzwzO87Voja&DxnB?^KFV0Yg#P3Y@( z4H3t_@!o4?oEaDoKcV`R(QW=Sj3g=ENW(;29e=exOSV}DPsev}Gtj&yAI>Zio9l`> zHW=IM5wn$yh4lxM?Qkr-ct>w@NiJ?+F9)ZLXijnfJ2#~OgaV^>`2-pQcZ5=Ww~`UD zVZRVVO#g)Zu~K0XXre?FRk4!>$@0aBP@9hX+#7I_cj>iD*p=4vXEVv+k=sfw0G#Rt zsDAR7VXOz`&bh=FZwe2_19lE(Xow7V9kQV?g+!*NutmtQx-|4KD>zSA56BA_WLH`4 z{5!S+x{hZA3PHH@^*It{;K#N+S@JKW_DGKZx)kl^vvhv zL)B66nK)>PsEX$=oqS=EuKm_DC4qHm*19h!<5)oe3;a87#*t*^b_FfX(AkO2ITEm2iEbPQMSotQ1U>vMT`~H-P zuiL0P+%Nj(v0IQ8xzOnPHxYXAk1e|6k8T!?Y@ZlMhQs<>=S!fV&ut~-7Vc#ZB2>PQ zQSV%QkVW@xVfw>Y{0iIOhxKRv=)dx^9+cWFla#6)z#Q!nTR)^L8|-TY3CUM6AY2~w zt)!soZml#WuOo#b!sP=xd`!t}8=NFko|35n9&)x^;Z{8xZ_k8>TsPBaCx}z+frYd1!L_m_fDjUo!1hDda5Jl^(1l% zlS7dfTJdPZ-Yu(ZGGOXLZ*GL zu$IpnI#Q@`*euOkGn$k|_MJ1roQ2K<=uQ@njXEy#Dy+g3tG4wTwYjJEkcXJY_%*JG z$KlTQ;QVDT2V1C1@Qb8#CYQe0eyt4H*J`vn;K@j4{BA8`2-87So0Wt$F!qU$oq;E- zKGqoE8)c!wcf=p;6q7h{O=g)cU{kBlovJPDB>Vs_9Nc&|Glq*)3jma0>wH0;Hk^a5 zEhI~>@_gg;Lk`60MzRuK{~pvSIAG)w7JisHJLux!#-t6<(ATTzwlLnKpjKwNb_YVh-Hw?ay9X(Q%iEVMPEAO`CJpTr)^L22ocX)>o}u(g8TWf(yc zA=mLPB_`pfZ#%=pVcB;=Gmjxbovdyd*30{Co$??GsW8cAu)8Het?neqgrUk$DA~j6SBd2OnxH6gZN;t79Yr9 z%#(Ps%?bw%Bo*Y~*&D6i;wBU3AzkOgzC5SShlsEXWVQHRPch`~D6<-QZN7BX74j+I zH;4w@GV~O=(KfMW+qv|fkc?HiDNo8VSQx}Nd^Czmw8clE=g9xC0iJpOXY)kz>LE!< zsoS<|KO?*6%;cUd;AbO!)iLT@c21B9D%`Ampz1EkdmApuB^RoMUmjf_V9#ZeJm(QV4KN4{bE9O!ziMq3PFA7%jZ} zFW2OVd2%1L;{Y_N8Ro*|L9bUVg$v64Q2UmFRqp|CKQ3^OaY3J^gMpON)QCb;18aF6 z%C-F85@2%w_Tzrm16Gh+eI;JmX-GAw6=R6}Xs+Ia40mhntm=lIbd~quSkA~>vD!H-m4;6brx2KP$Q*?_U zcIz>Dm;6hS9iZDQr}?1z=Ii}m+6}r@4tWMim&qwWxh)Q5(ACWqmjHV%*1G>_1VD*Z zz@D7@F&dUTEtvX$V5Z*X2}J4Hkx6d+%xQ}!Cv(z=$s zLwk4I)*F6*LNnM2N(|{~Nj@VhdnJ=p(50So(@&o|1JZU)m4!gBWkCUMSGA8`5Ew$Y zfL_}qhRAV@@ARP|_G)p5jiOf&p4GE=d{tMTXAulF7aPV4F|#aI?g;rc z{376sCVNgS8LUbNz^9>77oL-mwfybIU>4x18J#@YkyMJe2P*A7&+C&=W5jMVZv!yUjOLRK#%?WQng6PW zi_pc8@E2gfrxQ|tlJW^o)}w|#!7)&knF`{rZIkG@7c?_QAghOSkJOQk>UR`K0xUJ& zw-JE`BSO3nT3eEjd{@Bj3f7JA$~_m_$O8VIJ5E~|xYASNG@y&>O#WeuI(`F~EKOuQ zEz~}7ND?7nvTDuwWZ!dlCh<--+l&MY8; zf(}2o_;Xvpwcy%G$^D;y@YBqch-Yhma%lf$A4j-i_9UxSBgqNyhO zH^hf(qJKkts3w|fqJIq&s)_y$9YZzIzXlK0L{m-lZ-@`oME{2P{9iZG1XMa7+lCDr zc5jv;B+)6D|hVse>KCOh9|sRD)l~;Hu7&7Z>VJ9 z%1Eky`cqrKniiD-|K|KSl>z@6MN|p+l~_?oI8_Bf89BdH#Q#63pxCSG92+(;-aP+@ z@}*ztVyZMyrQt_|LN&<0k`s#X3DqN_Fc!a{71bsErPY9lMqLw7NYk%qMO8t+5GzV8 vO;tgVH2uokr>dY|i4{eh;eTHRZI*c^59fQneLIM#Y&fr?@kjb8lRN(hu5D|; literal 259935 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 z z*y3}o$nl4ysF*E4%Rgv?gUnpon6cq{u|xX&mZjIrg?A5J4jij#E9S`h`r*xU5`R^s zrdIjJCJSLEihtG*bBd+c{aGOj5OLWa@T+Y9&3JX|@sOS7)a6EUn+aMel2f(ohw5kB z>ntgA++ki~L~IYBfA@46z;yNp(*CjTh=vDY`Gp6OY!N3ly1vaW5u?t~bO`6#_`QRd z-YG=$%4jW~;b}DCm@G3oOy=x)o^Q@vW z(3Wnet4Og3?%5P?Ekaiemn!;-SOYh z8)dimaZij)QWyV-t=bH?210lS-!#zLpn`B}?`1n{bI?zHK6U_kKh9_L>w4JhDdI;KQs6G z@(r{^VvDZ#86l@I?{Ire3sxLW$D(1RoodU=SJlK3amY~-q`vQjsutbyiwmhA&UPhP zJ)|_Mt+}ptdmpGX=|JCk;_SM5k>O(Xg0$O*5Z_R-yrVHeIcN@Fo0W2cYmv1s0JxvO zhE}xqD>PXMLNgcyEVW(VA9kBGKT^@y8-Fj7^Zr(DXIj_H-e{na7J2E>=5pFVF>GKT(WqvB zxTR0S%Ic(GG)nI4*JjC+)NPM+O)kGzKNmamL(eSQjD;j;$N616wMrM-Wtn8t?u_+f zH~U40I#v!mrJeC?+FnZX_|U-O7Q1}>^t`iR0BEG`v)ZEHQm}FFt*yZVEmkXGHbWS` z#^Gg&d()IuNfg<3K{T>42U)AGJLV`PiCWQ#(Q_xH?I+dNB!H2sNJky33=jlJ#~(ca z-7lVOWzohTotYT|?yah%7^-%F9f25luzR2E{d!!G!?K2+z=IRTFI1*ukYY?GB5Z43 z|Jvb(tN=Ts$D&WOIfKO=wHpfd1lH=N1Q`4X|Lw%!1IuC2!9-y>1DD%_q{R>Q1+~ng z;-30=9yd`P^EBnRbfBUWZ}P3^{lkV^)^z1(44uw#t_KY!sfsee0{E5~fRRb{(9MIY zb)~GI#@r~^0pHRDP6fnlUTR2VD1MvXylfy3iweN;vV_&=;ge}+mKXWICD{L|7zZwO zOP7*Cf#|F{8qVXwmFcGl5EnO%n*;8%%_@;g;xVAODDOO>#bfjAxPW>CIm(=S>R40- zaVvP_;&tQ(n9~$yE#N<~HSjA4BYzlIp!KM>O;#{+7(j7o6`%=J(LKF1+NpKib`!UiIV@LP{Kr{(;=NIzd>_H`i8zaUQi$LD*)=Z~ zg>PO&_NRu;-(hcUln3QNg){I+pE`HVEhn$}6H+l#Ci?^tA|dih*P163;9VmI{?!}9wNenFglCv$S|Jx%BDj~-fTrRkb3wkc>gZz8ca2A!}Y7i7dO z+i`M!dD>on_^WHLWd&WdtuK_EWO@KUQcm2KYWpw+U3CTfUPBqwQKTqvHWAOx z?%ig}!t|Zc8WcWGe)3i`=RfYEQp};QR%V1?$e?gvpsDKMFq+CTpcV#L{aOf1beRt{ ztL!euF|BPr#?G|1)TX`j6JtYh#7`5Hc$10)0V>Ebz!SV4K|G)-trf`Qn}Kdr18eHR z_(FFucBmzSu0UWXXr)|PY65w|* zWY$qkt#n{%w88_(!+=~D!$CF&-HSx-SmaX!^7&=gD+YaBqyV$^E;_iDp~i`en22qZ zO{OfI9A%id;^O>Letj2R2(5KE$heW_RVqwmzrt!v;NsIA+H90+)V)b}F1HGJM>){n zN1_u!U7;rdaK1LRdH_6}0ss=F0dPj7w&56IP?5;N?VP%eDx^4tkpPxOdPP=K!exfh zXgDPS5>%B1|M=i?Y*%rNJ zD3v2gXjG?%t!dn#NNk+JCJBp?{t6n?hhGlus_xSeq4S2K^)ChD)A zN1?|1+~myt`X1u}iVu?k5RKqfXH2uY;(jG8@V!&NMxBT8ZQ1>Y01CAP%}B|;@9-BN z9ZS?dE1-o{Ob`bSjbY>kc-DA3U?q1(Y7LMDTn>|yw9%BcL;lhB`l%g3iCywfZ?EpE zjM`*~4Z+ft9H47-(?I#WIc zp%hq7zuMXSx(vn79K1hN8MQLA68ED(_=7~S&cQ#16hX-WJRMMbR$ygPKz6DFY?Pn$KN=p;6QpB3pg-QwS|a#iI{8V zR!__q(eL*+bGZk4YM5=Q@Akh6Wz`z*Z&{}&3sQbjjU(<*+L}dEEC#LL9l9(XzYObgr{&0>O zet3;-S?}FE$FqWZFEV$kNFbJg-wGM0j=3NlV;B1XX2{t=8oAt0QsV#`tUYoUu61j0aPr^!Gji3PC5UnB2N3zdjso(kCFFv8AW`4?FBQbdA@PV?cO_ znsKpgy{~s7e#9WEQs^r7HJow-zT=HamP{*?dx>5gH}{(W7T+7JW)HvXWm3jI6w7FT#GU z-cd$5I3!oH+V8wcH*GZVhI8YyQWD}i&%D_GN7*J(|B)TeFs};Q{gRql-X{@~d!A!O z1sr_?W_FQ`PEdZ5dMKrDN@t{M|l^lRsneU17fvnvS>CjSp;~`nsTKZ%tecUdW z_x-rr(%a6hw%&mN1#j%&B7{svm_2FVls>Y4vl)JWZ{+c4J?uhf{d$-S-V&NIl#c~S zsmH2d7k?U~iT?CE2f_V*?FexrsyuZYKz*eujFW_X*0)aG=>$TSYYDr=7(T=TY1c;i*d0>Poa0$>qF3N~~7=+?po zuc+N1tKGcz;&_Z;efnTw<#O&;+Qy?YuY^}s3CytDB3#oA=Q?%C%g1T=%B}C@ZFq+F zL6?bryV{(osZ+{&&}QbnC*6Bwe=y=5J`L!=CmvRHL0q0tr@-0zIo;K$4}vO4`WP}| zob9C(hnnn3Pro#EryqX^*U>#2153mYbtz%@A`LT{xKpSbOp_qJ-XOf)E9mjfg=yOx z44NNz+ifhgZ;*DJ?#StjMmBVJg$4t~k-@7+|0sj&T|#`R&fLnnt*qrNl6^GlXEj>j(j%wdMt^N27u zmSu=u3fs5TJSMGw<}bN)C0#VJntv7?Bx{+d&Xrjb zmgm+wabv@xrke($gYmv%v0S<$;czn`eh3M}?Dt9A(*WBGgtbO5RfF#DKBxq?UoIO` zGIMjDM6Nx#CdFCZo!hd8TIOHim>R+Aa~1wGo{eWPdYt;S(JGTgufoU((L=LESJf=D zF^^C?xFaI?OAYserq$vfbsSHxTK`S6bhxlG*lTMyRKFMGv*tW{p|dg=1ru~3!4J%` zt~As%wX^hoPZs_LksvEE?VquYUlvVeMGC$=?nxS1zFCX*E~L5D1f^@rNLv@Rdt-pY z5VAAe-1SVo<)!GEZS3;B|TDhY1Y%U-u7g@f^Qcr>o-wf=!>CwW7 z_CFN!q*ZmhgFS7S%#c7yGiQChnF~+0ZIcTu-${ zpIdHxtv}*ccCQsx$}0jD2Kc4+CH(5%gouN>47YAQ%_dwHAS8}~xs9{iVm6!N(elz8 z^9~yUZ%p%u4Rb%~(jiMe2fooW|8tXG+@DJ>#wSI;Gt}W5QGftoHr_~LIi`qcIuI4% zIn52it)ZAbvm%&PRRGzH{-Zqfz)Z?ihhe2rwf1kuN3Ero%la5+Sle!Z1l6x(j7YZ9 z7e(sB*fkgsMWzFz*Fo!&YC?Cvw_54ordmoR49VXmc=a(|5;6J*F^|&Naqd3{wWPi9 z*b=k9Wv&1U4#j0m=^5X0^Lfq6bNtycBPCfyv)s3J5=oAlc3zyBQj}YkpXYra+HK1@ z8FQc-o|jRLu&1`-B}$pn5ZuAIGebU5dCE>YT9%f*=ZsYXV1?RUQiEi2Rh)hM3@ZO( zRT?|Kupk<(sv*WQj(EFI-Va`Rvy*b!pMARn>9+DjOG)qiG&zs=cCuL0DOn`&s*4$& zJWsmipfFjXY=AbV1cpCy@`dZOCc;X| z!@Ts7#@_b3ORh$bRq4c~w6l=3MMIP2ySP2Qc9FsA^xAguKPeYK{wuI*@lvuAOuEpv z(h}{(GFSx+B!G-Wh2RskI#Ont#&yn1{VB8c9#JuZ5_m-o({11-;hqX0M$myjECyH> z)Z~ctB;l<^f5Nxc@HytM>6c_aL@TLusxs+L^L#6_H?Jt{o*Q(HvYrEZ`F>m6fef&K zVbZr_#I5ht)~9z4c>@Lu`w-T7=F7j@SSH%hBrfrlf5il{j;O@yX*Vw%0@%|7H{|-Ch{f{y({IdTh)merK3w)Yt#-$?|u>RWbErRIU~!X z_ES97{@FO%UG_e15@$IQ(i|~U6!KM`&*9^45u>+vx%G@&?@Hn@?JWTeu%TD63^2U` zSZ^4Ayzeu7q8<8duypOpQ8-^DWerAyoKA{>X5>-!R$fYSWE#n9%;eB1QT4e}f6^2% zEfcIi6gJ;vH?hZrJ02`R*QkR&8)Zz+!;S>Bn;zlzn_t(=(=1`8QpXGN173G~ z-xVmDGinYr#K$y7Efi#}hRfc?6B#3J>UM?Eqm0q!YA?Yp9b9DI#ua#>y+-I!4FB!X zlCurZ@gX1p3Un1QV^9Q;&w;=9y7!A8d~quBh|caBYyfbW1#4uAWDMYtS_0Ims#clm z1jC-BX6uW653LX_1In|S0pr52>!lq4DY0>=?Rc6YqyXcV=i;EQwwaP3|3_e(&57|=| zPmYq7C#BPX#y%hDQ~)DE-yD64TE$CDgmhPntukPcmwomPHV~k#e?qWf6>oF?HMvfa zT9ZquZ5MQVivXN>yZk@EL$nbE__L_*F4*;C2Ck}dwK0It?0)zx1wKsMPKg>Y+V#z* z*?e9Td+pM86N6iDg<9s!E+@_}mq^!eh%`q`aM!2HsRK%ou!h3h1XhgKWYK9aRc@wc<@t2cSV2M{^&Tu>$EA_ zo{`3uM;T~Kcb0`>I7BbgWk4e>lJ5waibI1#i#6107;U6P%U7EdCn zfLgsIVa@ddywI3+*pKilACTvz(2HdS#%amchjigH*AbU*obC2?pV1Z#zKE~q@6sz? z|JAH0B{~do&)S7H-~i7`*{ZAj<2prV*aF?0?|S!sQqj{^=e!}w!<$Hesu+d1DPKu6 ztJ=RxK64g-OpU|Hl9%z+bEofsY1v=7izIkg$^qL`8?*kV(w{27{9hUC1`ZePmSGjbPWUvFCtwjtO4msi8H! z%~9x{k7CP1G14W0a`3#j!ER}X{SPTX+vQ$l%m(Qjkx|zAZ)PCxU&*^-FLr0M!udr5 zg#3x6ZLdRe2*w0kC(j@!Xp&P^#2BJq2(<8QL6Ngc_b1H!;ABR6j)$YP)|%ngU=~k$ zW`ms6&#Qj7S%c5fcsR(4tr%rO_B!-`!5rXM|gQfg9rtiR3^lFGxY(%fZOlX>)D zR1X6Dj3OE%bUO2^!0s0;jY z_VmqFygC^8F?u2kh3J_G&$+F5(Lu^=uiC&KUaLV%TFGo#Kfo9`^MO(4h<0hzlvOYX zxC^ZHP2{ThZ+vjoQO4y_`$)iO5w^hqJlw{VhIqjW-vDE*K-%j^?hx;IkXpjrsfTYq zF?(mYjaHW|!0X`^2&Y}C;{i>T%Q(oh>exFXTZ@!p9R)C0P%mwyp;5=8+A&~ub})CA z^kQDT3pSPvT#c^!0Eaoz*zEO@JshwHKEU7VIcM%bvwz>85`QI9a^`L=i! zkIC<_6^C1@mCc{i$wa5PUTW=z*Ttz$f&0+cXHHiq^rMXz8S{c=SX5GUMC=&QDf#aR z!9>ZDWj)Exeli9aI&}CUX2P$xYfK+=i|+vut_zXX1OG7+c(gew^ptl+CVH6 z?ntG}e4Zcab_D2+c|PU1%KJyEJyyH+^v( z5!%;S#ssk3cGG22A7>I|sPgVm(Zv{^6DgTf)MM+&wJfq(xeA+{HL9G~EK;o) z+$G1sgK8qC+V|U>LlIAdN!_?}kC;^{HmZiSm%ArsGmkdK7#=*wtJe+^T*emPH9QkT z_vtdanM~&I<|+3Cn)_7ku;C3#)65`{B85OasMac~XHf zKBeYtO40I@!X?+REp%=5&DxwBnBIosi3gxCw+O^?!yGP~Vd;<&elKnW`H+iqJX0%Y z_RA8T(4PB_y1#Aa0(FqtR&mkkNVN3CI#QIah1aE3!E2++TQ|dhs@N_Gb5jT5c1LgI z+Ee4P!DNETEJE6~reN(V8E`Q`A*4!dNQ5a*=P^uB1usqv4YHH=C>dk#20r@edHAU%U}a(cVutlh)Y*3MTx zi=CS4A|Vwj9b@39&;wE%Y)*>IDpb=nPx&vB5)(_COmF@sABA`9AB17&3H?S?-`)2F zB?CKI6=^}>;cIe+B2VdT?5>Rq;8vD};t4Z`q>;8-8$i$^@Uj-dms|QHP zmTC6@1xgZQKA_at)8?*?`1(=}FrK5Txz5FZ(VLAhKBv(+-w=(K*56o4rmLcHjxLU? zUlDD5UMGEDk^8S*@PXP%tuu2YJbX-p&E}3ALn2xN54-L0Mg?^AE_nps!(j!%YXgN=d$zX zrxdwlUA~%BWMHo5fEo+R%r$YI{&ip-J75+)mOMpyBo`Y71twx6X(3x z$KR5bk{a0R@fYM>&b5EF`=qtcqvDzPlho0~Wyqc;3D5fziUicYjxA~gA`dhQ` z-=&+snCE|Yn?JjYzZDo8G}imKY~^1Q;T+??`*$sX&#?(0M*n?)f2)}OZ9^Ktw7+IU zf7{KMX!N)G@Bh8)>|4FfG`$B{OxoV`7qQNA#i}EigDHp5sQ^BI_Z>j8`PUALf8Iz9 zAox#c`3vDF5LZ z|82^Ez&HQD*zl00?i(i_Ja}vht(APteZ#Ti&cn(-B0}Xzwc2e0iHH(MtV}-iUA~X@ zxB^@OPAu3>By_v)$xIBrlO|mx_okH#SttG{O!uFELd$xh?v$>;-$)FiIw=WHwr{2A)MWap~NY=^I|7+;$ z(RFRw#@(TM0goc{KQwcIlCEz4UH7J)JO8=*{6B~K|4$hI@ex-23|NOb7&J{ViE7V0 zC3rUjPdZafwz%aLyH@kG`+(fZUwjoKK%E-(;Z1I1T5@lZt8w5Q4tMcpj;7@8Urq!F z^g|#1eN*>;gChU!O=GiwVz1S?w{IFE%mI*bE#|KV|E$#-jcKFRrw(k^XiNv*2H?hD zesiE5TxK-;@(-Zcs&BsWe;Y=LUAcOPvuw(5tO`^aFvb*({E*f274W7Sb?Uzc+B8o< zEtMBGhjP)%PQS6@o8P{<0pPx!R)6_hHwOZzx@z<9QO)rhRQ7)LUj=_B-GPe#x|61e z8Jy;LOMuev!I7nvX%w{Q4UsrUg;ca$zPVeR*kdZZ?_U3=O6D6{X(>MPoiL&V6`$7~1lQ$1-W5 zLa-4^=eZtGfZK?{6O{T%^_)T~9OKcK&8@dI$6%Fh%BoiUzd=*U*R7F)_^Wyb+iRu= z``TwQ>d8K2Xu@LDo)479Xt8W|1oSX@nTs9g#G|m#bUC4t^d8VjKAQgaUHKfyb>0uPHe1)dU$JG~tg-&T7V&$XM0C@UrQ>k*ABVH>WgC+7f&Z)I+9WfVZ zjC~{*B{W@7C~icqlTeaOFcGty#zvGx8tUoPm~UIGeo*~I#rrJfsg~R@3hLH+?&B}% ziUk`^T^8}lhQ7Mf*D=X)xYK*}vf?)bHq~7&d}9wte%%bZ}S3S>k53MA9wwY#2w=oFkCAD$uXVKukRg(sXVu#cHvwp^JS#xLJ^-1MI< zD{Y$j2L;pyo-U5jVX9{(l;%{r`ti_-u%xxxb5AC-=O&(Mjosha{X|~d(#*iyq;Ijo zUG=ucjsFhl&s5bEuFEKB`zB{cTO(?Dq>{Dy)lJc+O8Ye>qNdb3RmJ*!rfW&7I<_qN8ewOh2l(XE(naaV>nUrvG#Hgpsr?G{)66e5otn zVhqbwo(Zl}@bxLRIbR*ajdsIf;_S^rWhWfY#sYW9EED}!A7+k>lupwOunw-HFoLq4)_F}Ci*@cerf;mSG9wEA&?PH^QP z(_P8>li;vp=GU5Z>I}Yr5k_k?kj$ptiyZ67ab3)0G9p#8U+8K;9%)(;;gPc7T+4bqPEm6ilSqId-Tk?b9Xq0&W@CJk z-^64he-WjQGsP^i@e1kS#%meWTwqYwD(UkW-8t&&X+QzWML4Wl=Bo3GgDRbGoC`&s zd)wKe?jOUd(a=Ma@DWA9#WoPVNYt)et~{3023NFFU^e^0SWo&b65HnD0QqfXVMgUh zH-^<5fE%g3dJa&YuF&rG(HO#Y>vPr4-Lf>~gBm}#r4PY!k=%`zOIyI0)ILA#WXou~ zeINeH#61=Q#12t4r9o^BxSYd0K(FrTng7Gyo5w@le(}R4rA^xI7P3{gY$Z!}Qg%jE z_N9c-7)!`7q=mc1QuaN!Em=lk24gI_BgRq;!wfUT*vAxRCdTl5hEjLm=lSD#{r>&^ z<25fcpU-t&=Q`(H=Q_*#l&(N~@=H&nCGAk5B?P~g%+LEZg4?{gSn&c_4H@klC=syU zD?5&D@OUv1s`#1_$nW^UqO1Vt{WsQ*g>0ldae8GmlvF(ln28SfhOC8<>gE#UPIy7L zx%X7c<+?%77-W>u$F41eN$5aeurF!SO8+AK0WZom|L?R;^CN3gP4|0MmaDj|JVsGk z)i*$X8(Uwpvz@8Um8sm3@>1WSdenZ6Xw?1&h9k%hvpfwc`bI z^ns&}F#=w%d&Yy%jF0L$*_P$e^=ox_AcsbePvDH{ev&PuP6hu6=)s&Ty-qaF08=5I zX18NBMRLt*CrYpaAlT~l!O=7_@nhn?=8FK+rvb_ooKx|S2)hx*)xS6S>fJv)8p{=X zh5g;Z8OLp=zb|wV&+eUCV@;r?m9~_YtcaoqqP408LszPqh{c2E7QDue_vTVQf3o$r zaj0KjzM8bd{6|k%p)%`r-YaL`L$!xd(RzmV)Tv6XDx)NsKvGh{(=b&AQ(V7PC0Cdp z&Ws5Fkk|WdV*B#sPR}p}L(JU4`jq(zHj)J z5PD8Tt?Jp!9PJ0cui_lTqJ|2wXa}`byTC3$=PzlpLTZ@gBvK7<$P}Ak($p5eE?UF{ z?(!&-Q18s27@+76bjg<@8CPbYR5X&aJAqkfz(IcVl%2H<$j$|h>IgBj()_!Rt_apK ztM(RVzSuTyfSeT|HK1PvMYq1=+}X}fSq|0lv=U&mor}Z<+u@zAT6P17o{NK4&;=T8 zw{t$Zuv2ZQny=dwaB@YXu3jL8E>v=Z3Nw}c5X|K<|jc1XNc0HN}Ow zN7U8LjYjP@sEBxnrXi$1ZDSN$~SC&p8QSQ-`{=!e$?@v7e#oOM{~It z1snt`*c;cLZB$_C)E1q!RrsU7lNR2VuGsM!P@|TQ;9KS4?0|v^(Uwod>G>jb- z6S4Bj91|d^K@&yFY5@Zw5qXDyU>uM~?i98)n<`lkevWwxfM>fv`QM0BJhdySnQGC4eqHzgi?;xJEvW_or45KQ>bj=@2<6ql z{8>!J;`LqkG2S)`wBY!n9!Kc6C2r8$)hiFUG_Co0Pl6ijmgm1+p&m(DTgf_FBU`6( zlv|l` zv@Csor$u476BRP_BEH3W?Oufyafl)t9%t~aBkIE;v3hAL9BZuy&v6dRI}vO!z!}3PHz=!V)xsHL z6oSmV^z|)Q&8a-MXLgQ$>S|%DH>XNwTRwj^38a!VZ+`!A8lTgjpFIzXnwBbb%d;e~ zT$UEoUu0GS?H-o(N?W>;((VTvvPRk*Ek$?GCu}kV9>o~u~ysw3Vk|k4O z0@HTx#2h`r;b~7*+ERD$x3yYUGk!LXgFGieWC)@mSL;ox$5!ghyrx4fIhM_3SXg8i zT~LKS{Q8A5Z4tnJ@5xXOM$B9<8n9k-CaWg+NgVQXSi3sS(wT6czBi>VLVgKd%=5LI z!1!dWl4tYxTHuBp>-ZiP&Qg;cv+QO@WG7&CEy}naTVs=@%)DBQIfESH*07aA*O<(M zRHZTqQ0|?oRX|HCX71?xds#M z;(qO#OZ#G0cL=CphwL-+>uu_Smo&(#=Vb1`T16Xty&a1DR|2t=Np@ekFb;7GO7*tWw1z(!Yl*KI@btA0Ad-%xl?3O8esA`a zeye$3VUEi^6ju4BTwy_dynSe(OA7YDf~_#HlxI^@^9}P= zcgv^iM-gCNw)&gp2%kT+97eQRlg?1NT)F@+MYxl9uCh9rN_KFj9wK4Jdu`PwA~Ni2 zBNGD|W$NOp{U%l?L&X_V)3B#lWnZ`qV4MwgqA{9XSya;mMZ6CsFK#aC7KvFucV1i3yunLAJ!Y5J?b{eRc>MheUMnT{B^8+J zHgY#X-)k0&rHd!&e#AKhy>*R>h`PsM#o#n1OwM#e&`Z|#tqf2jS~b7hsU5~WtaK!8F+EW%cuTl2oe*DdD>QasK36g z-_#K&V_z-s9;1g*YjNmn92vd~uT8{EVT25s#xn-)4ThhrVCEGW@H)^}rW;w;y8eLV zQcV2)G%aOwcZJl3%3vF zl5Bm@)s{1`flju4L9~+;6jT3(R}9I2D@%K!Hh5MhLz>&(kuI?BHfAyhq>(kbpQ?5@ zwjhWp;s0d924$RZy%Nevk6?1_f$f8njbb z+Zyaa>B%twJ9$kMayNIWv2IlxKr1?If=PXTIMGCS^1NLUh2v?U(>#dUMeF)-Ox-n*gwg57#QWXL6!Mgi1~PZIvhdEHuLOTJqF{;z(c$q>hgIzLew` z6Y6+6*2#_+N%2`o(Oox{MLzW%^^?{=<;C%#CC`WUp#`JJY#~=o!qB*1`#w$gjl|^JM+FU7a@VR!HPK`Rn1C= zI&&FfJr``ew)DwkxNB4(4onO(>H{TYlo)0QH8JQqXu#5{_E~VVIWs@X`(CUAqQcfh z`;UozQhYR4^V0LKCYsUM;t6sVO;*LdNi|n$?I_?JLi#^l^!^IyI_!WhoZ<~iiFN7O zpDa*;cR6(Fr9+j62jo$&dyoxny0S>5%yo^s(J>9^NuuM_oq@i;jL?SnG4byHj?*(z z;lBRFT37qG1WTx*k&dIu)Q3`vb*XfY3do^nf8ul~vq6Wqc9lugquj|EF5&d)jnDif zlh|CL+V(AfqO^t*YX6qIGv%&Vg-%gljRn*_7|yt_(^+)XDCQJc8OLh%gknE_tB9&y zV`c^7pdLoC#8H#`F0=14RNK~?x2Mn`w_PVcsRh|tcttd8ga?DYudjtC`p^dgItldP z*d0^6YS5C!FCklIXED{? zgjSm~*FL!!sh>j=qK&F86N0ZB&}{m4Oq1(wR&R;6z1viYE)g`{eav&F+u71e6p?fH z4lPx!6MDX08ezjozB?EfU1b}VL&&rV+hgHj9tf>R^pfPCJpi86tt?`W9 z@f$ggklSH1E&~AklPil|Tex%9D_qGTIEbQQ%rtW%97!cD#z9RpCREhC25yh9YU_r- zX8h#~5mAbtR)CPTD^&Y9mfjgd+q?94g5UUO7#A^gJwnqg3&;xof7>|{f{z}r&gN&m z$sh#-b&E2<&1NPb(N1IiW&>1ZvMtp1re{>49g=WR$+kRp5tQ^edh7jK&e#XA-8?>W~_< z+Td9*%hg_k8?n^*DSz+dtC4Z~&JaGW0fDs&t?I%4Gi!o*VQa`m*Yf4Mp=bvCDhHtc zag6d_G zfaP@(iD?Bqn)&Q&Vqqv9;EV$k&J5G5BVvjEyKo2%lSG$+h|Jdepiq>hiI3 zvwK$SF{L8BCkqj@%(v=CY)oCdk6jE zu1@CH9ME}!INDBtx3KA{OTDi#rKf!==$v{*FE+5G$1TWYNTcyV?^*O{C3>P#Da004 zjA9Yj96Hg9-s&=dfDVP-el0kbkR5P-#lVCD$qwqI7DMnpI10_tFLYe3gCWmM9l^YO zCre>msIQ(U6y*olru5POj_YEPTq%sIHG5-k`_+BpjGN{UWEKM7DRL~XMLc(%=UKnu zR%q3a1eVi2xQF}F!ox!!dYAH52lPhDn2Q;8-5Ll$XZ6z$+VM3r{ZoC)j(?FtFZIPo zOy1FS7k4TyIYpb1@`nWtO)CUtl8!83)gz)&>WF0x9{*dHqEqKlQarubc$H8nt+nh; zkoYMV96TrA?JM?%XPY|4(m};xnmaIBG;cKp8fd~I2@tH;N(f&8jOwi%D2rF5xdbi+ z%Lkv@&?&wqZRoUAe5deqMQx`a{~Ru9o}i>YG@fZ_zP7c_?x^PK*faBb>*GP$Kx?O^ z8CXFr$RiBNphi^$r6AYR>d^3%mDTwa(E~zfv)DfH6)ChG+Y#U9r|@_4ry?CQTMV2# zzg#B6>Gh(NnIzb{l!z^ynPiN;m~#JavdufKTPw}b!JPM4&)I}FhfH2@PZ9hC6@Me> z;C;)7mCNByyJ9i17GMv_l9ajxpr#o%N}RaR{rA=2s~9y_n#xq?y-dL8)VW$WkxzP7 z#QnClE3|@}1k37>BFW-3dtMRt8YNI@krPnB7}bqpw|{#FahEcJ^RMfu{r#rlp*kNY zM81w9Nu5zcmx3)`Q#!IUl*1>hm9JV5B(3uEv}OGN;WMB5`%4%R>MR{wKs1|XTqIDx zy(*oEnjhAt953cRTevjpKp1VUR8;!jJZEcN)yG_>Jq|#FWsgxbDwO8mg-pxSbZ^>g z@EpwLg6FO(;^hpzEqM1br%IGCv1vt7_QzAzqf!mP`_1bQ6qn|}ymK-N1k>Y$&FfWs z-pC+EDk-qyM0?lUGk2$|Wx4Mul)a{NbkncCY;K7+GA{|PZ27dKH_G+RTKvMq8k*(G zsu+p5W!o9|pu=3OnEO2?s=H64DNFQzg^BwXQyuT_*Mo+#V9LY2;DHGxE$%HQu_KbQ za7L-xRIL|eUbO1$0$8Lsf+9uOmt>3U<*g(qtpG43a#YuPl6C$NU5RvLG)s}!Ez_-y z6wieLu4rs%cO|@Ep#12xW?U!r7LqV07>J5qWg4^$BnGYtrw7=InTGacX!s%O@ue(E z;{8wQa05!}L+oNX}kppsXw2pltIp|TF%$`YRU@Cd#}EL?^RC9b>F`q3O+36aiJSsp{tC{N5C z_{eCf_JTtsVc9(N5F;`UWIOd5Nx1d}p?=rDJ0kK5Gv`ueJ%P#CiLa&CSmOw!fM7^r z=P1yRYzc?~bxgQTk=NbgnH%m)xKgUCwE;(-dC;`d?ONJ+QBInQKflu6@Uqm;f+s5} z$4g~Y=PJSdhM|Wq(yO6>=NX%(>IQSOUM~`_Wev`D;nvcdQ|0ledmY5&23@Dm z8}vZo$$<51yS z%+!*M`Y_rC+NM&45BBBb?Dx{7dLAdkXr5gJ_oy21eYfD8yC3WLZN|Rjb@R1E&Y*p6 zX})ZxSfU0i7HWpp+$V@_iOp*Sjo$QmgNK2Az4;!Q?!Bes$a=ASR@CbS5R{+6@|s!6 z8J*eA+vl%-4Qd!P*}p9(2CTEHHW7GTky15-P-5C(P>v4ecZy(IXVA?oe>$H-B*$VTM>AfRo~^RX%?A;EjuP!+ z5^iSJw0!bWLeCL*VGr)|(MJU=uIK${z}o;IRDs60lXS=x<`8W4q5J{uODlOHg!ihki9 zryA!91J)}J0Q2YF{c1Ki;XMEy{jX^5mL3c>8jy%k97~2;=a+ya!pQQNTf7-ugHA0~&oi0XAv*{5-gOp5@z7t1~sxo#V*s z$^`iK)W9c|F?N$XpaJOay$X-8v`Y0%ZrYvR((~xv{1F#(!~0edhYcb6AdMxfK+8hR z>E10UL`&)UJg$7W5y*J7J6EXEXQ9u%d~oc|LZ4@_=J&ku3IA@5cHdL77^HuU;=OuW zI*?*2k?h_FwMIBvlq|IKrpJ+qQtHcj6QziwL-fYyiwc$XeFXueY; z=Xi;%DS+q1S4<#|c)%;G9r8jyYxLVv{b`X0;It$k^^aFOtv6UO_!V$@(EnTFvrlOeChK1Ab3+bHpxR>l&}H{8eZ@SasrwKu^xv)P(7hY5T%J8HdJ=UW;4N;o&o?(Z7J(@c;g3-dF(8lDOJ}W z^W)olZGnIbIEGQ2ye$uM{~9!w?VJPE<{0ZvJ}(2{{^A^A?uYf0g5=U~Ll5&MiEb~9 zN<*5akwq;tkbqgxD660ekE7p67x=AkgJ_Q;&yLT5iDyJanCz8bc z7yk9?2AV(<&}I>nhHtbXIXvVn=t3FEq7}yAm%yllys{N0;PZMnXU?5YklN~V|)L7HoCjNo47x!E_m@ctFefG&gpm!>!p)q1V8Lg^i$ zUV;*eV`b3snWPlBeO=gKPhT9#XX>x7w~za}l89($H_BQ`vb*gE$l(6><)KGoG}rD- z2~TEzUd>giUOdBYmwCToZhtbe?gG$QJXkQK8%Wy;;+!AngFi35!D5DkKLym|NHxa% zCI85(dafVXC1S2D9l#la7VWa(O1lb&z$aLvf{f~t;Jy5TVM}!4WTht#qc23IxmAz& zspi_(XAWg4qiOlk33sc5oNg3M*Rv?h^;jFq=oRIhVz9=PaGhP6=XBtwb5#F(iOc4} zJeObDN$-MlCbIi~`^M+w^smRlqJIl1R?f{DZEKm_)s%lRc_omv_ImMofCvO<9>yQX zdmFg10O30INL*r(_O+Bx0e{shHa${OI7~rkxUqq>1C|efk1Og95>@tcZ%eIq_*$n-RRK;~YBN!v2D*-zJ-K8e&5-6|df! zCp4D`8adf=#JrR%p7s>^T0-YlO0`-wXzHr;v{c%w2Xr`gkk*MD*R?WVGr)fSw>L~w z!L@Q>k%Yv}82Fdf7?+gO9y)r2I*3u4qyV#X1qkU?q8%#Gf8Pq$aqk;WFD^*5P`&FJ z+*v^zRu7z;TBUX2^wR3@PR-v=9;%UrC)~Jh!E=J9W*4#3!~-)0bU~5ft_|xQP^#^d zYx~zG6CC5Bvo(|NI%4_8B=ar6?R3@dzJwNvPOw8Ui+D`Q8DbNBh-tU0lv&IpumW((;gYevOrDPgW2p}tTNRM;}HLPGIgz^&Py!ys-Z zk66Uv$!;te#Kbjb@Y^8}bzP60+Yab41P%){AV)J-FmOFC{EoWHCJb)*!_uCky6Vc7 z2|)X@HyE>F13}n)5Rh;4_%l-nh_=CNSKd#uj*=UP95LH!!Fc0!{tH%5I|9ti)3>DD zm4uxCaoQp?gTf~40|OxSOZeNqwz895xKLB|(@k|E+|oULy|NCq@-^@ba=@F_G=HP@ zNUZ91{PMr9F|T0WzQmcYQZx~Or=^7#4)v=8nk)chJ)(epbrSE6Le`|{nJ)gB32 zzT=Q-{b$)8<|;v9(Sx_D`_r`^SKj>XZPygm-Jjm)IU{&4PHUWY(hO%BjFw{j>uT$k zpi|j5NrtjUm7U!QMqv+f%#Z3D#;!6nSNby~bg+)H;l6)k2gD;q!|1rlZdVV;#n7eR)+bByCiCBuKZk;XoqcqCJQ^7 zBT%rgM3rmTpZ=%N4`kR=w;Bx;Sh)FS@<0!!Ohg-4m_4#KP{_ zby~J5p7ph-i=1vpCBqXf>wTb!;5?10yg1K{d2S-iY5v!kw6nH&AnOsyY-<;wvQcG(3B8C| z7?Z)%ArZERgAx@fMcmOw_OlIYpU9=wt@$ke`=za*`)f7cQ9h8^TZleu z_|VE8R38~5|4+f&Dw8#dru&tRce!{@Ogg~G-| zm60oHSsH&oi!Zpr#DRbJ8LDTF0}*5dZtBS$M%IL=QpK`DKeN6~ETvY`@qHLPESaq9 zaQ)pOAeg9qL4B8)eU(+jW!7yME9~b-;bE@aovj}D`vo=yv$zTK7)%9L$AZzy%;m)7 zB{ljeU5U$Db^sU>e2RGc{j?@)prAWiM+3 zSUuyIS_K+kwHVBDW+e#RMeUOb0{TR=9mXR`=NAo4)>f%ZAl5uX`=Y`cIB3jh@SrME zJ{4{1O)p1+Lx5?PG9lx_l1Z96)UgX$0;u|WVLVB%Jme^YLa+=)0gan9!LrewhtM00 z`4{_mmN1jyvJ+IfEjSFz$La`3(O#q;d}U8v>xJ5sx`ZVxGgf`03JWQJ<(m@ju+?Ng z;I#+BDx0?v%Px9lqJ4e`-u6zgBO*+&#y*fw|I@y5lm(3xKp?L7pq@K;J4_XXLSS<| zf*D;Eyt6+zF&I`vdF@|6kJtE{VdOru@}?rF4=dodM*LV&TeBkNpR580uHuU9w3P+d zL@S4N=dR=r=k88(AZ^9m=+v<7T1W}Xukt`yCvM;IUOKPYf?l`_DM`4^a48QNwK#p9 zZ{K;4s?-(eRZLulLT^NCi0SFe2 zb_1y>F6y!g&NT�l0j5`Mk!$e8iU&_n`T)qC=#3;$NkAfn2?^;Q4Q1>@*2Bw_fj` zG0g;eHpBeCj2Xg}^Kem-m~$(mf-%o|BM7>r(EHkiv`h9$KN5EA+2=ha055P@POU3a zFf2ev_F7@^36;Cv6;{)SsbODRCt<k1L;|cdk^*YDJ&~BOxH|%+D>@D2?}dZ%w>bdMx1G* z5l(1?!&&Km2w-Y1H=cJ)s==l>_RZM(NA~RT@w%1&qF5vOtdX~=eI0CP4u8#5cBH^; zCiKf&6~d$fcWI$gy%{vk2=o}N0vk^{7_tafb(bH5K(Ck@KBSh*deBt4ZBDX6bNM_GT6+Un$OI$d>0roNXN*!K;NBwEdYp?2^WB|hVjZRBy~`tnkP z7WFBrE?z zp=92mYNwQNPV#JjUYTQ?Ew9qV&1+NnIon!=FnuObFj?m$#XeLx%&q5TMUO(7^maj5jhWHm%jm5E&?SOwC>8) z8}5I|6VJtJV@38}eMp?1Fo0926qUiHjSD|;lS=q|iZg(nojl|i5$(ieU#hIx$@A>Y zr^U9X%i+E$0lD(4=qeRsYYnkH+;fKEHb;}u2hASDDjXv4KH{9p!uWXe>+Ir+Y9K4w zMZYM39{`&oEa<6rRWJyDi6=D|$X~$e*4{bK%yhWf{XGt==n*Ztccok(0Cem1QQz$f zjV@Q8Gd6k?wah`juC}tC1*oLw^jbJ~=vio!*@Noyx#LT6V;8*wL|%z3V6lBs_{eR( z(ktKNWZB7a&johq@4w1-E0GL9bQ2lD!zO1tZl~py#*Jt&5{0T1dp$k!(N+&~qvN@@ z06x894+y?@OTLQZngY*$wJQ91+xdePi-c;wp%I-(U3B5l(EBYqTeb*T7+li6IyBQ* zJrrr}HRh6`dO$phhG+^I_Y=_gp0^k6UoC&vmE_xVUOiZ(lIK=Mqw?s3ZF+m;*D4wx z6d0bG0cn zd0u(q?t^1M770(h+R7&#&#kxI$Be0M%Jf`%GekA_4xwm-L>5k_8bSI-%_E$_+c*kf zN9VVgOp_Hp09altpWa?^a-j!h0tWb&ba1X%r6Xo32xlLdNE5K0F)8z^2VnRrN`PdY z03cw#jQUJJ8J9hAP%51y6r?2){_O1=36})ncux;xg8T7A84!F8Mx%aaoFX-);swIw zN?0=Eew~qvXW~c!Tnk7f=hQwLJ&wGQoMRUrH1iDXeKoA&Df_NL1kwtx*o$q2Ons~F zlknvRp+{GM zs#>&O!Q5@-wOz19Qu;)yS{LNmEb01;Ku>hA`H&33bHQArkSj~F@p&PDvJ@+4yo|<5 zYe+YdMJv&5y)Iws1F7~ouWINw5+L==8}hs#Z#T|&nf8UvD6ThAYM484TQBT;xtdV& zE2ee#0(sdRzCZnsRv#bjZrmXOpae%vI)KzrL&xIOlr($eViOH9w%8 zRV_ktc(ryZT|l#Yn~@1yr~ucN43>t}c|e0y^#%cX4hfX@9!13oKY~+gmjO6WIg3zm zW87XNs$|y#wOV|UX`iMk)b6KJQ1YqlWgWU0)3$yA8mxHqfTm+D@&W4;lD|1RvU? zc1H`|JrcAc^gu*gqVA=B@J(;4A}O30)FTHU&aA#mN+#kEQkw^QX{RAYB&t-Junu!8 zoZ>Ua06`56fGD`jlJ(3WWhukIGMci^)?v%)Gm{1Jma7g}-@+vdV!FZyzNGqnq$Mkc zL)$ZyX`OCtuW<@fOF0N~2W^+^|6wP;OIxaAG{yE%SO% z>XEaFE1|MQDc3Coq(16!FWALREP-FJ`aOo6@jgh}qfq{n;m?D1suD8d-?dLTW**!A z$t6?m`TUn}ZUw9Kwh-2TloqG*x*g_u09m{smLwUVXF)dusQ-g5Op0T|xx?zcTHBAoP_EKnhI zN$$b=#Ow~@JxX3BpCquAtaAAWINi28ZZ^&xeq_-hRuL!x3tI+qPwjb~=V+ zM?TQkxjT+pn}m6`AlT8mW0iNPYlaVRP+D`r#ikB~dx>2JJ&BGfIWq#{=q|OT@6I_6 z=cX%`Q=9uCn6s!UlYjC#ciuuPh**6a>h8(h00;}X2%HtS1{MA6JG~30(1;Sv+|HK* z0vgOOMcn9!UjJNeNp*`#?eDD^Gp(RwLh4SvT3PJ0VWTZDlL6Oh&O$z{{F_q=TdKS2 zzt`*?3A$bK4NeTfgdBe(u6|vF7I_}Rm)mSVp|?k2?R4x!-qEa?Wps;(zNCNYAZIam zEM?t4oEC&yOuZgCFnH&c9W?$;Q#TTAAdk|VZk+vQ?p9lLwAgAU704>piRr`cm}mzY zT_|pGRiFAiixLcdQ@s{JcBV|^)~dWOH0H)C{v9@ zEoR(XO6#VtCc`j+l3{$l8dzZ$G494hfn`PD?#qgc4#tzB7NwT3aiC%vJ&ATaq< zYam8XFz6o8N-MNwOv#FH=w@A{a^yTiib?n#ZErZN%*-a9rd%{YasIW2(^FFCy)-({4I(7UOaS+u?9m*|nh;%EI ztpvR6uMg&MCxziZ?>Eho(5cN@LAaXK>ct)x9n!S2t*Uj0Pl#dE5zlo2c`bthvWMvE zPF=UIvgLrd!Rd;!CH94uK8Nze`u$s3#K+exO1aDH1~gF%7~6p@#`Mx$mgHAN8)S5> zrOge?MqbEOTsMz+_>ntrDB1i)SM1$gJN2Dy>JQve5{QGbt31L9wnAHp?qvh*H07;s zQ$7lfnrYTvr|nhDKYABbCyt8_NlEypFD@nu#Z#*2`JW}C9=ktpYubxCmzVTpFE~Xj z*P7o=y>n6JJ5X&@vi%wWh{$!eGlMzWtTN~kl<$Mw5t=tb2X53URn?qF^W35|jbMR; zI;RgEy(6bPLCN0c5>^@=0UNr5uD0$))R_p~=DpHG@YcLgTA$5n*xUR$lo%Z%Ovv+tT2Al8fTc7;T3O#lqO9S8)3GB)U zOb{BHKl_o0LZRq_Qap~70R+wV0DE+xk^{xA4w{=UXAs!MZ0x=%zrjj`6U>IENn!qB z_ABTWMhp1f;=c7@%dbJC5Dj(P7f6QTTtnc$DpbOz+ha9+~YPUX@_42;;NijL;g0)B#^D7GlX`!6^@kTHQk3jG{f+I8? zeSFIIc=&kxl!cPB1%OIz#6F1n{~(tMXZN$g51OWdmhct-v=eWePHzsd{sHAU+=*t^ zY-610K@HBy8tQF)jX3Sy^@0m^id>)eB6N*q%+Ol`oh*CJ9>Gxe59(+QQzesX_DqBV z^^B+hz7r)ne~f_<@ovdfA8HI1oSVZ3Gkp1zbAA9Zx*n`L-st;a%=OIf^Fue;zJ~1p z{eOdJvH>`LBVYBoL zR(b~PdmejBv|fn`nU!++HtB`?D#a#mQqr5b({6d;PTtj*@R=x@0(jV;o5X%@e>g!`NT+l)h>jwR-{Tkm@5`#}Irov) zl7+1xN$&&F*C)ju#uM0?K5@}n0IOwd^R3M{xg4$f-jXs0e-UX8nnf$6ksL-0bE#|{dluv^0ZB+B}Slip+f7DN1j zv*FsCUkoDv6J6;lmL2KY2pY2omdb7boY?_KLp9Nl^u}XHo6E!QICK{CDl?T{ql*O(tBo;cF3h1ak9nJz_yJh739^b5pjf4C}RZf2h#Z10Xu`UCp{*nDPJ0G!OjP7anxri57^fS zfOo~T|1p=X90#hLyE5lKJ_I%Xdbu}&U7~%)gMDL}XNOhRDVAt9JlN$ZJ90&N{p$AX z=UT7+s$yij;bYc4dm9V2@?cZs1KTmDukmw+4F`7vjiBCN^k+9D{r&lMuKjXq^LOU! ziO&vyjt{Kv;E^|fZml{nlKOtZU-PtKQ{mfxtN#Hi0EJy;Wbhsbzw7_x zi83r(g*>(VuL=ZPksWnS48S+6 zY$8E{k)T39%jN*St7Nmmm%sjG0{~OtMz+cyH2(y+>2ce>z4*yiPKE4xwZGthC=m7u z_5Z?wnZQT_f5&X@g3$&j(tqpXtu6wDHL`lW?`J*a4~bd?R25AtWK)O!->qKHH(@ic zRQCVLR!?!322O-(yuGVOzW*Qj08G3n4u;0!-4ySZ<|i7z&KN6mwv=uEL(0r|6<@u- zy-oUBw#u=ethpgtXRkW}oz<-$kefMDezE-3b(a6brpP;BRkD&e3TS@$$J1K>ole80 zaGF+i`$;RWlkw|_(QI)F&s(p=ef|gYKW>1=+TmO#d*h6JuI_vAlV5+xTe6flRR@&N zuBcTC(+pBp-sDKm0QT9FZGPy#(tz7jq3x@D3}_@-r_cZAyR?U!f#$TQt-N-qly9n+ zSvD8zJQn@0A}T#H$<<1B0*tEZla&juA7Hp|7A9nb^{@} z-z_hD$+I&0GF$)}Gww(s{~y4#Y5S8;h$kiNOeApTS#PSRfN=K0F8`XO`eGG&0@Xi04Q2a{9{regcA6W{5|dJYUwJpH@nfHHM5kG0!( zO9b?4uvGG@>K{mUiqdC+nO)nRNRThyzPYzY%-M?bEui{;KR${$^S8H>wMqkV7^(WK zzMR3*GuKr&s$wu%wp}7V-JcX zRRi0Qda*L+*Awg8fZ@miwiA6&TB%H+(RZ8HyG;@vv13nkE4w)N7tmjsC+7|T8G8V* zXH9(YSN>r9f(Dycb`h5R&mZ!o-{?fYz3}s_*%F@d7ofDq{*a;4{mDS9BCeBWUY3Uo zGB$PH#<@WdDib!7nc;i>7Z$4EOkm)wBC)wMm}k#kH;V^;sIqL7~4% z&H6+d%y$+84QRZtZyR=f`Y_EsKkuyX{!QZk$k(&v<7QAun(_s|VJz+uFFUebDU_sm z3m)>Zo`c-%m$IG>zWFR?qJb0O+t}xQcAuAbgv(7|sm-s9P6D%iEo8|D+~K*kf5CKH zsfBZ2@m886at}xzng`A&zG~wi#`RCCVMNcK10s$p$Mz^)XnNn)ai zJb%1YDxB}1VZ}LO|7^mOCE&2umC5?~wv8Dz$n7=;yw+QJn%{GGmOZ}{y?KZ^B>_eV z-yyTszrP2=(yV7Yju z8>)gUw*ozBo_$%5w6k?j!_7UZsR6 zs`nvLc-r31GL53ZO@eZIu@4jBmEOdQf6P-kZb;C}(S*?myJ(2&YFCA(=nzB{0$FNd~{>z<$o@31C`C`;4f_ z|6D*gAE0xFw7S#SmyO@dwwrs5pFB!?S?OyGjkleBSNYpw)?XC7-F06)#tkXGqCswPvcqMx3 zg*PDixtzuEKaYiBSN2AC|6x|&;LN}D-lX*nO4h8@klk$O=g-+6kdY1f9OR2~m7@UN zkX)~GHU;16Hv1U)04Vz3?b-J`jh{rMy-XN#Y<0*oi1FQH@jBqq?=J)@oRYPGZg@Ib zzQF8?PZuZu{1!-80A^?I0G1p?hOK={|HX$p2QP-xgphmzHw~|k+jo^x0gwPo&`=rg zq5m#@OE~%91>f0LU#&{9ss!A!`Y2FF}c{_kzC;>qi5B49MM%=*te4_^YjRybwMz%8j+I?sc3h|zyik?`;9?y3*waRYY z9AX3ICYI`9n+-6q_%8r6q^^^C6(xcKYHh3KD_?Mj0r{eQ@+QBwXPy22f6@7X6^|F{ z1~aX#t$hZ#C84x?IDanahhDkM0fZ!c%Pg3W3DEIwWfh^H--izgv(;((b;9ods?#b3 zj+sUH698;hRgNyI z7k6TInMn&gv|qII>^bN6PmOY+8ZOfLmHDT?~r?+g;+QJSm&kpTs zFz#Jz`3A4N^TIq{+UVrrfmVUSM|UpkC&r$%HM~?l@s&L9;Pd#9 zjS=4gtu0$Q_p|?)C*1!4#~%6M#p_(j_?*Xjc2u_QTN87rVBzT&j-5jHfB)liCYFK^ zc`0g=ib4C;PdEL``d57qC+3ipq?FgCbHDvsLeiVwo?^uF_dNWK`_8t!*#_Uhjp2YX z!|xsay02CmpWC4Jw&e;))GQ_F6T6&Lv~@=(3H@!0_LZ2;=l9!hCB>%UdUQ(X)xZ5SIWV@^{M^?ebN1w~hu1&tFW^uS zFF+cVw=Ibh55^o~7z@3J%U2)2{M(9i)3<0>J0X(lRZoi_-TM^!YXOtHzefz#W(xQw zP@iy;YYz`x{z=VslJ3_Mn%lm!?E`CnkM`z6TV=OC@O3zrkK!a7TZ>=XeBkfO`;dbmxiq9#*})yv)OTbC(>d7c!(8bLuZ192*og;e(`L5A6UE+KAb9D~s zO%~a&ufTpUw*o+pi`Y|}q`YL`AT<_HeL&bUB}3m#W?H9po5}X(7?}1MOQ}&yWC(f3 zl#)}jV>Lt@)yJdXHAjIxBR4cQb-#KWR!w?xSbsG{>ErvLL#)%Q>Y*3sAVlkEe$_ck zw-yfKo`4g7;U8`8s*@N%y8vEp{DaMZ#dfo&wChm(9??tco1CYG-QIrDD~a!bZ^FQn zZ~XC?O!c%{xm?Igy_qi`p3PIgjm~$y4I@u}4kHgcM!Gaj5XQcaoHD38di0TK8La1K zH9fV6WlF38Bjtn2o&hs&Bpiys*jE-UAHlR*6y)`T{aI}iUyq7kseK(%v8STS;dnTT;X50%emB;;}ISwqvlXXrKmaH)lHC%fRByKRfkY`^7%O;zwsqyqB0di4NR5 zF8{XVMNamTvjof&dJTXjqY9lgtWkGN|BaX$toEBPNX@=Op5~Stj|v?7_#*6N02Ld0 z>VfauFs}Xa&sfJkad7UhI&Fq9HaJe3KX0CE7HSYDI-KgYbFE%}nVaV687Fjy@^c)pq&fi(o+deK~!}HM*kFd}qj*#NA9q==J{X z&k~KOt2!dWBNzJ_BNsQw^2Pf8D?7Cq8JNx{D}Vh zl6vaz7j>;U=ifQDgzXH247knMpYKms_ETI*%bl0p)%IbPTgyy_?(Ee2K$p>*a9w&X z>F!idwP{Md)01`>)w!rgLa*TkheDBMJd$)m^tjxuzxA1xB|}nRReJPCbk(j6PW&bs z8~-YOF8JP|mhH7?i274Jn;d#S3eXJO`O+~Y;dhH3XT_&~Y2tsxoDSSA7YE|8*N?{> zB$$}Vd_EZz%*Df!4(tO<6qsh15~IwgdO68AHNUd|>~NK?`ttPoI|$A#f-JViVmunO zne!^|ksty1Uze?}Xi>3b(<D)$9C^YTjw} zco5s8^JcgA%bLay&yuEN1c`zfbC@oQwRMCxFmXU;+Keaz+%rG#M$-5O7NV*|QPw128JMMLHeY?_k9+oyYOO%G{br*oB z)1P00ERB$v4^IQ4_etRYVeh@)n(CUcQ5&M5U_&27nt~K5N|D~=p;zf08$>#W-bDng zfV4;pMT+ziiUC3pR3wzpdldqN7NrFUfwS^h@cYjB56=68*TuEjhMl$6%-l2gJ+u3Y zZkuMKM7!3cW%4a1qbuGn^%{i#XO6)=yxXw-i$A*(>^NA4nMyHlA<@cdtw3`X z;S21Ml}^rio!R$YOi`W)JLb@z29T*7{Ol-BBn?*pjc3SxlOnrs2%l6bhOpT(e&zo* z1otC94M7VS!kf~zBe+*A>CAXj7bAZW(7}mR43AVD8U2P_+SGA@_ zW=5IHp4+efM7&d1KoI;mAs7@1V(mZY*7yBx=joDT)u!hbZZhV-Qu%W8Y^<>F)4-mx zL6p!u4#Fq+VXLwlI^Sd0;>-IAEa5AbQt`{&7iiZfup@~3$OpHDO?_PeiV+=9VY_{Y z7@w6bT&JBZWFAJxn(BSo@7Ib!!5`1vIVn&4?XQ9ju7dp@c>Mo)D1SOKCyFC`<#d%B zvZgxJDd^W{+Rp1`+~`>bA<(PU+~t)`0xLwF`fHic%a&YrUH?G70i(LA#CYhkwUg;( zi85=P%8zd)Vh_583EOe{Ke30rJ#h0dGZlE?pN-4a2m4m?2)!e7FYFZ~c~?ksAnPxv z!gk8%;LEfmrP9EGbt5IJMJ;jNYZ>jM)L*-795ffW*MNP@x|~@$ z^90&?o_@F10$KFNiRt_{fH>`uPY)g8u&ge($M=e62f@6&rZ!gA#YnopuvBmhSYPjJ z`=B}Vd@u!1BM}fmkN(Z^D>>o{i5a*g>g_Or&rGLQ4hvKX1%#cj_k32)ZvEx?{*E5Y zd<9T>Cvdwb|2u83Dchzdl_<7)GS_0#v->5SSz6t;b+@BjfG4!yDoKC7Klkd^%FG*S zpCTCT1p)Pq{4$JnI9&@N=u)gsd~qCbsL8SBSGPvYHO|EiiSo9*7PAoSw}xpHH77KB zM1sTn6}Kr49~)SXY(?7ZoI={5QOb=78+qUi*@I#j;rLEH+h+5MUp@A#B?^;S~s# zqon|_Wo~^vOdLPn7Y)J0s?qHQ80>B@MEUPc6&DeaL@eC;a06dQfSqn}*tu$+)R8Ez zss}BJpFMK+dazr;hpBB=`%=n0$??|-fq0>DEMj%`Y|lR?LC*7XHTFiu+*umuVHu&c z&$j*4wruuTSC-%bLIE4pr!6yTzoalcn29weZ|Cd@i3F8O0nGRdV~f%P=+X90XZ(*D z^>C)`Ezj>DTY^}1bldNJ2lo9|JK)hbl1o%AI~JJm>`VrgZq{xnpV zs{e8+{*GdQL}6Cz5+_G@obgcv6MYWrxKPK(&_U2(R(r0a@QTj!~y`}2gd zfWghHfLYYBhBtT~X`Dvt4949KRvFjYt8IIGR{9xf<*OL3HKAp%B9ow{8L{+z@O~Gc zac7I-wrW!NMUvq{nnkdA1FeE7YIa@5VQf@AP*09E-Fav^=zf^$XK2-P)6I6GEcKow zpNmea;1pNeN}+mJDcvbgLYH#l%{p^u-l%@}o1z3JxN-1=j9*Y}uwX5(c~t<;lA&uC zlZCJd79+$M7YuPPu`bM7a`?Ek@)t)2T47-PHrzznj&`tyv5=#$R|M$%_7I%HxS7jT z5oVDJIKawf0qCXw~8`_|%;I9ky+Oo4f($6~& ze^7Vt**8hdk?XeE)O&So-ImUFSm=?6>~z91LcQ2=g;=Frtv3@F3^0j zZBA~!#qau~$}h-OhV(emMyRKak2_~?k;kMq3}TDqGH@*>=%<8)ZLA5S^@TI~kh7Dz ztS&xQdt;H!Q;`)n3avK=CGj2WjNOtnKX*g5@K7g!Ym=FK5wT`Xq5CoD*uPd2J6mqh zkEm$P*dS4lk*@r0FXAi4;%7VDt}4I5D*!>a&X*iRnx3n1Nis?KFk2*C2atg;$I={3 zW(Lcs-gvt*b3NBQU;RDI z1fByqesS&FKM6M-f^iac3}Cl#7?0Qf$X&&5ws5+D*uo)hwZJ-ZXOo{N-vz{hmsVw! zj&YjSG2QQ1}zEaY2&af(lSza7wAxm@PoZz6I`t7e9ubWu#SgapPPAxp&6--g{LgOWYmYr;iS3rDTXVYCK{&^+Q&RBk zg7$XsAEUZ+KNw(d4uQsVIBTtx3$gkLhX-HZ-X<%Vn=#SzXzizq&s=_@g5k@hl8>;K z5Pwd9RgRHW1slZ!7f*H5f~Fs_Tq}Y?w7;xqA9%GB6V=x)`m+bC7y=&gX`kJ zBZR$Tf|ZaimLvPH@S7p`@9)%?W-=feG&V0ib+xPPI(O9cW-8BQw9!gh$XJ?o028M>?rDa|M3uOU#)D-B!Xdd`6%5|Vm>1oE^@LN zFLjbhMqyX%k!_bVX7CsMJ4AthccSo@_Y+yO+xRERQeZ-yh4$Cev9#ZdKI{bC8*<0@ ztmNYlC#y32x%0pw9-jXIp=TAx-^;wj4Qanr<}peguVK-iSfjg5e~GcH4LaM-nPk*X zze!-8J$uFikwkuf$a{S6JK{lGqLTWknWl5?q;GRFUcF@&OaKeay-i?m@wI$& zlt=D^>aK0sWv037pMOm4HJgem>O@>JR`XpaXarX-Nul46lDz2LU*rg!S3s_K#l};) zwKf_~Q%$9}BQ={@fVE`sSVzt=gLgs$QWl z#^zy`YoY0t>}M2^CTmkEYFDzf+b{>0qRki|DkDvTHaIE-J!vuPzTa;9sFUwk;IT`r zftyN!gL^fX$g>}=J@bD@Q^oK#=pBw!tJO4C=DTE@Z(fZN%V%6X6gs^&yEbl*93}H+ z))H%2drx@G;`+{rwPd@c-PdnuN0))9u?gM z0w#lVcMoTNK75i-r(2_?&tagw3{LaYXXzn89@itiy`Pb)${d=-rW&^tUA35Zja7th zr?)5E)~*6#*Ni9kwhT`;g#EF_Q%nbmg4wbAiQ8H&{Dj!8zS3$9nIutqM? zMKVV*Jfe!pgME2QiavI#tSucwn`*+ixZ7u21w7*LoW|&39Q5K!X=egX4|GL9S2-?UA?w;UNVOXAwo=!;M}Du-`Br0ytBBKejm4l zCnSi9-ARBa=tSlZZtOPLbRh_|wuWi~*V1iWwx=7b_!Y&r!+gW?AgQc8q##l^Vb?cd zJg2$}w&9eRB*4BHpuo*u0g~{qnPLTyNfKe22S4UeQecAoNa}+JjKY0{zo73uOI-}XlRQzzVmY!DS_K@tM6IViFy=~L|XbmfuVGV z@5MSK(&imM@8Y@G?t@bVw3*!&qUuhk5aV_4@?_m~-Epl*w<_(z%*HGHmg$CGkk#x=)mC&~3U)`44XYukGExqTA)O=d@D>IPR)J?OpD-43In zMhX&SNNR8Dm2C*|Jq8LDAvbtZO3+bsk@fC7=(CHL%*pJ{bJiupC#P zIv*Lz>`8~bk^D2aeXK~;a2$g#I=bWBS=Lq7knStO^ryg4&vU5M!qbpRLYO`3|9{hRE50bnT#07esGkl1eFP_onR=juJtcAn?%x<#((hl+4Ug-@i- zl(Bij_cy}X*=6=x&vumtXmq>jq{#9wNfKkUQeA`#i2}6>ZG2U(%SXEFVRYOh{^rc0 z`5jaQjT5Alp{ghath60>_d$#uVhqMEh(0ay_T0mbLNa=f$IxC>Y-D(m%}4)+}@dOlYbN1MmJ~7sH~6{H6BWPAq8~zqb9bE^c52~+(eG}?^cF=~ltd*t%VU=#Rg1YK--bm!p^{r) zZ$6G0%w??>bjwCv?d2U$_c}R@-h)S(w~RV*YhZ#cW&NVNY^A7h^L<6U`dlZ(oObi4 zvcJB4q_4G5OY5PEoVvoF*-T!?wJcdTr(I||dcuP$@t}TC>gncRQ&qQ!22$We5>XTBQ=XV>zI5(?7BXf7yWdDs3Wuoq?B zIBYd-h=epjn=@?HS4Q3M3#IYV@M77P!9JL?!Lfi5l04%}F4XJxoj;G3VT?h+>1{68$ zAQho!V!IUxeynqEGvyQu;Io#2C^G@y(G`jK)c$RR%fQ@mp};OaLd(GK z65d&W2d;Ae#XWtBlP`e8biZvsi9y=NX%vHhti~=hk|BQr!NifDSZnzWsK88*PxVN> zONQGy)kk#(a`;xJTn=5)0AZ3d)l6?ql7XY+V2Q{)x{|(}*;r!{f2UqYF1+&TQq1U( z+BkeBJ=YaB>yHbSUHKmJnw+?mZ{~@xUz$Kv;|I&#OZa0=(f+Jmg>DW$**eDK_xc}6 zh+Z335S21dyv7DFM1Wt(DH!Mj@HXP7J!!X7{Y|V%{JdOuFR&B6`eMi{nxFTai{!&=? z89w!ESJElF@&nN%?0wJ^IA`-8o$frIZtUnj0pk`Lxgne#dS&`NrO;|5kYMMVH{elmsw9eC>Hnru0)MxN!p0dy7m0chdb{V2T390s2KC_Tk}MmvS>)≺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 z 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%0AJF8$MiA%y-0nj| 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

    c)k}myLPrKC5P@>FJR^)s|K}tJl3Y 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

    LY& z<%X6n{pA#DbJIsn;g-^IS5Q48Ux2w|0l)=U?#!*oMj2U(TI>*8Sszh=i<&V=`p-57 zwbxO(!TKA{nxk2hX@SDM!?&BqWZ#BxW<%lH`~7C;Lq*+Xutgr181NztW%XX`UFXtP z^Ms6!Zu)zT9MY7~t*E#?+F#9hoWsb{(NBxdN3pB^&aGRMbqgA}OT(M%xRWj`2sut?l4zU3!1OtT>vxdd zuDQKg>HQbbmZGxen-~h1)5_VkGcDcRcMe5Xd5Y7%AkFJL{w&EUA)v5sg1Z5(;AByV zjlTo|Bt@unSSfRpEEjV|u0*bV$vjy&F)i9~=gBM|ZM`*xH}Saeb;OijZryY3#~jUO z%&u8ZQtisbG4C%g8*JVV^=5+Lg{HIXftA+=j+9Xr7oTgBu+FB+fLjx3ILdXJW5BET zpY^p>I3XJWPm=tK8kce(A=u*X)14~{P75Vc7bkLei9T-YBD#LKY7}}H7A58|&r&&e zNR7wkfx5})X{SO+KRaf;j5EzTw9$rOzTns}R~k;4gjVVZ1S&5t;KqW(3WO4rNVQ5* zm=rfQA~UB$WWlG96-&Rxtf|2=FrECa4=A*UNHMPf38pF2u59ea9ksNh?c>4TZ(uWY z-&SJ}JYJOkxSI@R#Os-84(`Ya$e~oxA|Yc)PR2?4HEM%MZr&jU$KtCuRA`%*AOvzX zkRjF1fUDw_Id@GYiSrHJFe7DyU&T`oo?nxUzJv&|$;CPyw@>vn2a?ngU_}-O6vaeF za>Aemm12e#wv?D6_t=5TsV-5QVlCOH3~m?eN)9*;WSr*#(j7_^_4{v}_$GY*(bvD? zmz6cAJ2;qg@sU-8Odv|VAEd45r)F~KOXraZ-P z2+Eh)5dO@E!yH~N;5JH$e!|BFnXk4PEv+M!VFNhbS}Jda^C-xkcIPv7{JiVmlf(Dt zfnMSI9iI>L@p*m6JvO)$~Z>_Mv>n`?>&$IB#%_Bl4E zl5$rKe0!_%fJJfY&8&PyW-PdxY9^v>_FCDU*eXSMg%-L6!ccx+m=v~%pKnx~4==eo zvvz#T8NVhrI1(ZBB69hIQ`vynO$Ewp4xET zO05N1*?84&;)Pv!qLufnI`*~X>gR@;3Nu4tHkZgR9k}5?&__N8w48&Y3>n`-gU#$= zE`BXi>v?n2Jx*m<*2+0#U^o{^Ka4n+$~?-mnxhgaohR+PJT+8y@G08T-LA200I-k2 ztJ!nrW(r-Use_JaHD_pdgNPwFEZyAH!Kp^84AjFflf3f=0NmbnPFF=eM4bHBE1f(e zCasQ|6I^ZpQlzc{nO0j!>z-SVIXX#~ZZ)KN`=$g;goI=mw&Pgipr!5S7O7tZ`JE{J z8*7A|LWKeM_Ho+xuK@wnOy4EloX zfa7}7QU7~yz)e3O_iXQGQf&wVoTAKBwhEZx^Yt$^Q8qBz=J7|C zzF9g$(>|RcoKHdUsx#TJfPtd-<^#!#z@q;%rPT{3(8Ks$GBgJXH zi@nd3>2ZGffUirhLqlCgn3yp~lIAG9#A0%5IY*hg7CT0UTHRu5%6d2;gTWqG<8uLu z{{s4a?UhqY=LvDe&_HYaHe_P7mF!YA2gI@SG0{MsU>a0m2x<<{9w`@27d>p9QMqhf7&!dK) zP|2@IER}Kc{Uy;0yKX;QjD_J|Oj?GYB%;k%$=$$e#zJaw`}vcy{r6Czqm3tF`y(#X z{cZ%Xa!v z(hor%>Ly7ZY-3!k?=b{wGKj!pA9_!kl5g!2GQMsC2A*F75(IC2kK6$JG0+=Y$r45b zsoM9Ns8*M$z2DL6eSQ|v&@64IoA874xaIDvu%Wlk?aC@bBfjgy_f?F@p7>qw0LXgZUJ@_qFVH%O#Q^BvW?)A&(W3s8+Sb=(qs?5A2J%YXt1lu5?R$lg8X+d%xlsycjqaNe;i~ zyN4EhQ(QTh1e8=BX?dd_1CN#TnJc{tj7D5z`Ukjwktom@HH>V&)y{xFD`Rm0V{#Gs z80xy~-|NfAZU7JYaJtH}hCMDfvC4Ds6ku;00^dL8|J&4~pB?C{nIE!!I|<4!yr1IP zrEBYN3GjsaPmJHe*1tbPRTem| zqevd?`@J(ZzMBg>0Yd`u$KC%r#(%l^$0LEhH#SvnU`PXdvyT1fobLiwECD5DWBz3% zUmw)9-~Ml`>_k_!&}Bw*N3`rn*60em>O8+>3ZJ#r?j?RffNc=ld3WgDt3pdAvj)XnUEO zCKX((6RfFD7ILE8Ti*&_;NCkUQzQABEob$KW3suhgPW(X`7K&JA;2QP2Mb?A)1Mdj z&ILI@w0WhqRd64}3gGgdo2+hAO|ElXRC zb|$;2z~|c|q`u!B1RTb*Pv8tevO;ZhNFo|N)i17BIthb?vn4=v$_)b4bl@80zG&I> z&2z~3ao<|6%xevdumCQb294BS$jy@NXG?uwIKUj!PjnzaiAhcqZ^F1>WMy6x?{RZR zAnsmBj{?W~+b4-o$5+qYbm%5O4rhzuw$dT~KytA6P}1I=!eVmi*g(&Sjg4F)F7}R< z_OFJ1MSnDgse1TobxPZ%BE72Bh?#rkCMod;W_`&3JDvz^I4J-1LI-KfuW0tOc$Vy4tlP3^-oGw#EdU>7YYkaf{+~g8$78olLaRVM6T2TZR;inbLq)0G zeBDmH`8ypmAl?UHCc?)KDzSwX-n8L6EAx@7Kaki1?sPBb{Z6;GLl%`cj)48oCDW*97ZzC8J9)~iC{`x)&?OOdjZ=rOGR4i|F}@F}V- znj>bq&TnLWaY`0H`S3qG_n!EXKkq#bmy7!xX?!6ck%E3;QaZ2f_}Qn~<4vN*e!^#h z8;$YGE9MPBN-;N$6`Oorc6Ln-ZjL-gP-vn5_%j|tA5H`=*`qNnn~r@hpNuth+9HJR z#_q;ny2jmdU{f%})%J{Bx#!G>+s;W&KYrWy9&AE!q9~KWfqcer?O<0-SX%nfO3cC6 zyuq$J77Ne*palN2^YAHv|0@axr<;2Z`RB!_r$pUmQ~Lp>{Pr&=PBH9l3Yjc96vrG@ z8HG3!M>-rn_G7XKbadqvpvQ$2j$qeO7jmItu&Z*g?(rYAiT?yWWji6nnbv&?82!9* zFCbR6Gok!HqV+B7I265eH~yoWDKPqm;Re%vO_aUYTzz?dnhD+Z;~(q7bRpr#k8bn4Xo&}t zsb1G3XIc6xeZIUuDgR*MxzgO+UJQ9eL-*h}u=Z5qHz$Vu;l!QXam~pBvF_6yrcCUg zL`{nA5=4#QpWqgdyR8)wOSom&-Od=ivgucF%urAF>3*z-w3cs76|J1w^{PfKvS}iJ z(6%nL=dAO_FY;dVe&=|cs~TcX)y)+-eh_PXelpc$zF6H#6Ep9Rvv?A+4Woy|b~eTc z#5zm5Ki3lo)rfR75ui9V+7d@-MFBVtlXtfZ{V1(07qjklFL7~gTvLHS(d}lxtQ-Sc z=~<7BQk74hO!yXdJH@v^W-{@2kddJVyFNQ2aMt-3)G2YOOpKW`Qs8D3yC~**EXN#v zVKlR_>2706r@0qqUa2sF0ra?_2Ikq7A9 z#-pN{{gv=GZ;a`O6EDBkUFR|>atu+5n&E^7AO1SFAn27ZgbKvnTIv~hk=SEY zU>U!Qkwrbj?1=h63AtSHDCP;8dZA~)Ey~JHx{{!_G1m`kC41mjV*8Z;8zP_DlMI}BT^C;#%S zdG!8_%VZlYahcFnQF7Lcy3ExWQ=Ft}5-7OyK$DM~Kap6?P&BeqPCWLBUMR86VF4B( z{u>K8z3+DxkSQuet|@~x^4n_k?+GOK3*tpo96Z5qrDK0l7eiT2pW+!noH26~wN>2c zJ=>c;TuLwY${e-@y$*Jzo-hR)6I6BDx+YnF6L3%m(<^oVGRNU}pR-~nt!Bkzv;9Er zqIyE;@MDXm<8AR4*;<<>rX@ZjmK<~Z5!|1nIa-f3yYQdyD<;1;-fO?_L3LRU?wHTo%NRY}vuOYbO%mt(4jw=M%lax`i4kaM zSzew>l!9Dv%U;j2g3ZUMSUDp%tM}UtPqw8dDnZE24>6BFNut{j%_E*>t`5UvT*8JW z?-VUjMZ*kvo(C%LuUx1cNy?WVp))^LDX^ta8~>;iH|N0PQ)K7iET6JLYHmg(v9Dd>`?wr zNq3){)K%Y3t*xu9t&oHBku=CJ!gx zgj>?IsVsh)0c$P^iruf_B@UFl@z&Vps?%$ZOPH>*O=wKplseXZK{b>RM!iQ`(CD;3sPnYl0&0{$a~xyW|L6DRkn z@@(L!UgGex8R|&ZbE(mG;(idf*HE@k=a-#fxBM$K!9@C7t7VruGNzDPcNkHvwGYt zY*$l!=EIV%{hl#R@8%V;xRf2J(ugnT5Hmg9UOIIm=Vq$s3qH)1x}~U3Ieby>`z9(A zQ>A8%90oEnO@qO*lL-z=@r520w7`|@skf&txlxftX$*}@L~oAMSn6MVIOo48Q+={y z-FN~1ZijV&1qu@T428zLy1zwQwgnjBfV?P3Az?H7|#JT!Hyi=fcq(UJeJX%SC2Jq zN)+Yi87zyr#IV#)%4uD@YS&T)yss-t+O9c-ne&x7Guv2q<;z6>7_@aHkaAW6qa! zpJB}n`<&06paD?!!I}GV6HWu@+Z#$sBHFhKezCcR;s;2tbmGj)#nB_|cQ=C`6?sh_ zOHAP4E$F$PAZ}#~7R1rG?zV;^SC{lRVW1@+`}Z{**ctYdUdT&TFJ0^;`DCin+R zyGwd(QHGJA^LNZEqvR@%`a5+X5^YKxg@RpuSr&7_*^M8sY6^hU%$NKcdL<;^w3xlC zb^M?;6Gfz2CNeH5*pMpfVph}6RdBg=K(Zb^iF{6}5BtcX`24ExQOWs7Z%-^9nZU`kZcBP$1 z{Ty@vc>T5E9#k(T`5e(D8>Lbp&w~Zn7h2l%s3gw; z8B67&J*Y|JbYl||{v;?ZU|O?rlUHG$>~Az#dh{>Vwgroa=_y3J55|wu&Cjr1u8x>u zZW1;LWh-m`B1ctEHI1s{PU@aFHdDg%7_JHk*%yr8sil1=8F|&!YnJx`%Geq-qBDr} zK@NFfQVru>7rv;R{jySq2O?%a>FCAZg3uQ`_SXPgS)L)qbRKhDJ-=`HrFN$td#mB- zP^HDD|Hvu+8!D%JD+Xk8dk`}%u*pxwtqPy~xw@Jw3`ny@$38X#iH;HqGAN?{;%ta~ z{)ZyRYamxa?X(!x>CX{Jt0?2)ya9HFYh#e-cI>1H>eXhrg}l)`nmF+2iaqA7=0y8B zv&46$CNDLdOezCnWg54K@590!S#D+yn2Hzu`d7>qyn#%*m_f#ZcT3{wDRla4%)2bj z9w4KPpDs3?dPL<`eM&_*ZGxg+PSM$N!%70-9 zUI0U=a%1uo4tD*(aiDQELt1F^mG5i!eGY>aZ*Jx4jm#fxMJn2qesrB5@^MQ*%Q-Gh zHj9TaPsA$vxI*PJL=3%av(_=|;T(90qvFjbkK|aAccEUc0+~~W_+UB9K-N%^iecjn zxSD@}=h&{_pDtJY&~tF4%HeY6)iU1+>;tbbtAJF|h&2D3h7vS`BD==%>hmLn{6Wt? zixf$Kb>GV^?p-i%a9(Ql>du<2$-=LLPn#Co_Dm!6@QXRE1l1XLmZq%6=Y#MD|6i&Z z9SlvtaH|r>Zu{xxcP|S}a{mu|?-|w9zI}n7V^;)3lwL$clqy|1h=7O)qVy&ry@cKZ zL_k5MN$*XXw9pA5B#87bH4;h`2%!e4fdJuc)N`-rKkmEle0^iwFOGr6&Cai^GS{4I zbpjCxms{lf7;#6Yu?EiySxEoXfp+fmli-wpXO94!X`%q3l|kpjhf6nJ0$Gb!$)rEI zbxPQ_3x?*pQ4o*t$}TDuvoG%bYmHkIsnWq6iP-%M-AzO1A*%>q4Bf{6f%2yT!$RMv z`5^%?Eb$InFy;eAN$y0?tvr(e$x!Q*nplIzeW$*4T!==!yDe^#qm0o67Qe>u(QT9_ zGHb#S#+3-T@awj#YBLj;6W0pmd*Vh{Or4Y4PyAZSVuhxCAImoC*xm$N{$T$->U-JK zILp0!`B}mfFM}#1X`o&f zY=QBAN^F)tgw8Ph}usYO)R}J;+ z-xvO9$r^zKe7BYE`~4HRW7iwlnCsv{t~~WVlg|>rfB6bi?HFH;6sJ zNbc27%6v=XXXA@U?~QOTn!$kH9}(Txwk8W5;D(xF(aP!x?aXl$vtDgQmTuS7=fXYx zNq53M8y9=OuK4SLYL)*Ez5Efl15_GXS80p#fXtDLd3Z&|OiMs5rUgi>aJS=+(jv)9 z`KN-!0%bT-8vVNVixnlpb2YlZz>i=4K`NINR3bvyvZ3FQk9-10+FB4Wk*cYH2^|!S z4VGAPgAG-sylgC|ysNCp|BB;rRa$`!>vzyp+A|eh0-$=RN#i4)CoYbb{g%qte;)SN zR|AbeNFC8!&#gtBC{>-xyEMsLGl|>6#mexg_6F`6ds(Y~_V1Vrj6#bRU`%SX5PJjX zRz{IIefsVOi%)|g7nn42Ha4%lyUa9|s=N<~8?|%mCeQo{b%)QDQ};0J&JNvN*Dm|B z&mjCajO~KUv9puF)Nm_^?MOof5~~~L8aRcv{|lc({0pD+xNG)Kwj7K+n2zW}2-Pl~j3i-kjlX0G2~)tf56K67yG2E8CP#lN$6;9CY}9aSrM3ee1) zH}GOQwivmtk%Ck)H^?7nG7zYaN2e-uv`erG-kut@d{yz-cS)F9HyA0 zv_l$1K3Ov7snf+K59NQ^kU7~)HYOv`itswaC$^*q{*22MQ=r%kCV7#u z7VRsofuoFFS;od_!RbDbq;pQARhHmbUSo!s-(IG;XfXh|hz$*153J0zs#u zc@eqnLoa9=ci!M!%8)PhW|Xr0cy}7{@YrtpnrlCF5V=&7=&qS5$7$e7SG82362pje zHm>&@!=2;;5fFw;zegxPN?A!j7475xzDa6UTB9r4137=TYs6>Wg;BycskDIF{7}Eb zaIVjcPfx%sn%iDi0`Xu7#$Rf_iaM@cch|>WTP1?wD&?ZAttM!)R;i1*v{cMLKZDPt z_Wr2jmupAB6wNASZMV&h)uu|cVUkOudG5(cqd4hGNY#XEH~+SHwb4sX)hM<2`%zsT z)bc`je1D?RTz|4v;y|=lNK}G(vwYk*2%&L`fkSeV9{=@x*Mf^XI6HX0LC*{_juO(z z)e1=7*znr6TYL-)T#66}bNsc-(I4C7>F)#XVTDu5T;@B;rA@HXWytELPGwyjxH^0y zeNg}mj}&zrcx2T>(y8Wplb)*A0jMgi1kp<`3z%yzA~QZ`-+_l(ezy0&rq{P@bpd&= z^X)d)%%00%KaaX};2ygHc4~SE@cLkh^O1=A%g+P?x4-Y|k(#a6pd5dIh~;AxXG8|`W1HuMPfP=Nr86ZC&hn_vnhJ5K)3>7Djk=QZ~A=abee z&zR~DXLG(CWzYOv6Lu%o(y0gBlQ$IOb!ydSe1-SZznIV(1j-brZ86?UZ=&k*0UtbD zK?DdS%MYEWlEUj0ZO84yJ%iooW`0kT;}raeXJ#-10cBJP)GARh`aQ6jro>maxGM1? zenT^qt8&bBwP(G;@>>#W2`sHWPI?|Heu|PNY=EoQ6g;~mUNf>V+ZhYrpEE4CNgjrx zpU|uO<&XNKdD|+4ezO5b`SS?@pwi*21gQm*XZD&U)WgjaxXo{yxtj8q{Bwk}6|vu! z#}6qP_d2g7zQ^cb`g*%frcQa#F^D+5-weP}R(V`<YYJ+p*u zKnU2K&gpBx>z}_r$4As%Ps6$Ie|kj`!)G82t_7Ia+J$Kkb{)dIBW@zzSF_-jXd?TDc-d-8%>$)cBv*25w&AvT^{T@W!iX~Xl7J5lE7KggcLKgm-`*BxtsEl z!XzVhO18eum!oYcAb@yq-gbzroTyBmLJvi>T#j=q{CY_1EBMH)VHbynZ%+e|gyCl_ zma(2d#6Gxm;C~sLMdUA*Ay+$mscYq%Tk%Kl)OHI0tE}-85?%%3BOm;wWo-b;<7bLl zQP$Mzo4%POUv{2t^X(;G!yBXH@ki#gW=UM_S4C-*M+YPnixBdlvhL4_CCW2cyJt#0tc9A{$-majlx#GvcOMfd%0{itOeHc! z=~UnsIx1$kkKmZ2Abe$)X@5w-GQCN9GP6}(?_StwIu1}@3rFeb0YH;f1`wki`Lmm* z)#a0wX?vyo{J24-rbEpy^ zGbQ$5b#}lh?s_;gN3w`z_?Cn&I`h^V1>^p*Q~vP2so%n7 z>uCKM@-X~YItJ&LtpyXhY3&iC;d{clUbaGB09KZ#zi@x_*~U=f61{yZF%)U*iFmHz zwKRs^tjOQ}jfit4=45s800(G0vFkFs2VC#NUWwo|LEc#leAK8-Q;a zqWXqE@z>1(7YwkGz7dizZ5|jf=8f z(8;~7&e(#I>A3>Hl$q#0J@#{x|Jw79f&lOzP;s*1q9Xjo*|PRi?*(t*pLC}!1PlfHN4JkIPe^EaQ{|sffv9}pJ=ZU ztGn2GE*Uop#a>z^FGRpY*?De;M(y(!qf1~2?R(`Hb6$j;uCnUArW)>{cL47z@Ia2q zS^f;}>S#_@D+kM{l*?4DNthYE8?W|B?GKG!BcIoMa zg$aI8nOO{%1`ookB;i_{M-mn0^5Zs#SLvzGej~L6GOJwCSVSlX+Yu*X4RuS5IZsou zt@~n+!^`j`cg?2w9UAJuJKt#rz;9eANv^ADnT=KShe$xj&#yC(u`N2ix*C2>?V@^e z=>5*pHgz>$(6DSZzEA)N4SWrwe15ZpN49F}2v6<1`6Um)Q;kHgjfWAkjPG@Px$&=L zSRv@x0m(g4ARY4s*I+BzFVOP~Qv3O!9scj%I$(JLlZM+Q%=F|;4b#}r@1g#Y5xfig z!QwId&n%vg6oEhDaZEw5Cw)98=w_9@k)Uqg-+v27x$8pNds&BT!iHXMRAnfkCsXW_ zqmp62*AtyBj5~hXpi%sDFzacW6$O#6tx64+lK%4k^ghd|MsK8{1GQ@ z>dRxw6F8Z|yAv`&t~6fvzi|9zWB&Ww1OK{z0f0nL8(z=_7+NPwEpxT}P?a;3k$$MdE%yd=ufNm54Q2U5&%H5+bHS-G_ea8lp4<- z9jE+L|KY3t=Owu#2%P54whTL98P&L^=V;=>>K=ch`gbY&|3p#$_s6fHe<(`Ie-0`? zrwG4tB_x3M=r}!~{0HCs=SN|%T4PLMV z7ieFB;u8-L^1NUmX&fCVA+g^-@?RhIKLhYT1Mois@IM3auLxij=s`Q}8S&38;2(cx zo*Z?OeOlrc*1uE{1Ua%tZiqg6nm9z?*C(O>)%yJArxorUUBozv(YCW)tykZ)FrtH8 z?O|-;Ev(No|FJby_(<_*z3JAmn;0qp2~IhxAN zIiR`ZJr{#YD=AJ!5!3kb@TV+Fn-pmxL2h8;^%xVdHozi#lXLh&^3Feszv~u$@Ok5C zfAV>!j1}R}JE8Y7(h6n+OH`^X&P$YjG($K=_l^_ZQP79yA7}h$hB)vB%~9%2tM)VX z_T2z9pbY#SmpdSjVm>D&MPZ}o`2rRyJ4lpjmau_OEdMZDxj+fHmQQYUzX-UX$SmV; z$J%X```STmz1qe`iAGg&BfYM5EWa}Z{@)XUyA?m62;-lIesrF?D_+3mfp9J{`qi{V z{KvrHtKGU2{*PHjPKW)YD?Pw{l$Ybo^0XHRQf;EjsJKE zuH65zC3k^3_>o3R1*8>8(DmQv(K4P7i5L9yAEm_;9Y5A-8}NWfa-|%R8;M*)j5iH; z-bc}0QdM}qm6BTt);xFPA8sb|!yo!3#-I8n`^}TM7%s%sc;2+QYj6B>vu+;?`Iy&z zwUHc9U|i?S%l2cz9|^nz&`qEHiu>B{^&cH^vzEWCCGJ=F<@N0PXD{#Dd&RLI)HMHK zIJ3$=h~ZM_IXF!f4HWJhYH!_Xk71zqJ=jBCQ;WSGpDyjyIbV^fGM`at^zY4-cz;B2 zyEj&8xj(h#vq9GxZqRtYV4EKR5M_H-9_%iH7ba>FHOCz=xv0(MQG3c=G0^F(MpjZ_ROxLTh2EXM9qiYFgM~Ph8DB8Zm0MriY^ulnSb;I%z zwUmsh{KV(B-=fwT4SUjnGx#l{P!K)J;rqw_B1faLjI&IjQ$W4Tb`QIbjFn*Qbfli_eTJbyxdsZpyGGLh`NF>;O78kkH&m`g?=W_51w>7@d%rKFc#K=v9`K$;ap&e zfw0;U0VpKG=uU-C?OzlnnycR@^=NaA$3pj~m=9zh!OSU+(62oI@wquq)LuYHwe8`1 z^!PBAf6ue@GE%RwnQG=_v^KTghOa;9+^FCCq6Z8Tp9G`=rs)Tf)(~(?G_&f*@m2LZ z=&I<=bZ@w|-ojK3(&wTTSw=O(af)M#_Prw9#7Hm2^5M_&WEf25_iFKLs~^xA;@`Aw z_2}u!Cxy;ks=@ZHVf4j(E93r76EE&x3#C5fLhi|310)7W-4_+9Do?jpy#R7j3Ri>e z!`r9d{&5VruIsIh_i9g9Ui0puk4U&AjK9H?SPdVz!A71!Va}8FLzA}24HZxb)ymk7 zH?&xu$?#As+VD{8Z!8)12PNlyOUsZHCvXnuRPOL;)jt{P5R>sQqc0_P~?IpIRE{)wIJ-iTya6v(qZ~p5xE6o0&*Gv9V`2qBLW3mkQHEXKF zU`M4>WdLbScswN2Z%~Dff43>aYIct1ORa3Q!xukvuiHnKqvtrsp4ptA8k?`5#{_3) z29PyEkn)D&pt0+(&drJ(+u)yFvy1Q1W%fKo>b;GJUfL2q2tRFM5`Ox*ls>=NZE7h1 zWwu-j$(t*2K8>qJOuTA5yaBMLD!rn!(lnaxy*_!wc<@SB(GqC+;=uL;$qBqgaj7R$ z&lT52XD@h>t6oPX%5Oa5@D5Q=X8V4Hcjq}k(xj!JC|UY^TN8V);_As>(y0dVyDH(N zFHmU)&O$={B1oh2ZyMy? zh#yA#{$ED>T$fI<-vcLg0%u^(PAZ5m8ob);)Xykg3+Fqq$OqQFm(!Wh(9z#G<-fsl zOBFaPXC|&4Thi-IJkL0oth(1Uzc#o!(o_*?Y?KOytJ3>;?Sxj^Zq({`=eUH_%Dt2E z5gtRVDwH%A|Ki3<%BLy90ZhF+za|Vvcp{{@eMsKxKQDSQF3h7ViRNlxbTc+aWy?O* zi2DZp)#u_reTTwJiV5GP()IqSh;36liec-%w3>oR)ng03BbWrwc%S{9vyuVRxnjH@ zGD#Qj_pyvU2g=6pQDQ4upOoj@ruR_ZU|HsySO8q3A#qv2{%yIP&iuGV8h_m)pebG~ z2^ft+ON_V)dg_YfyK0hgs0-NFo8w-52~D7pH7l{MyM-TvT4CJ-kXYq~0T+G1s($Rf z31HpV5n`2_KzaR2M_5_YQMnFM`8BWhapb2s{ zO}qQ{g!0qTD6{*W7nOS)0cFs+o6Ns>gCVqMRJ8~pO3y+$b-$`0G64HnVaDZo{$D`g z*HZv^3PALCe@Uc(QuKtR=KZM&JwKU%x11MXAM^QPT?vj}Z6+_ce%OAAw2#pTslB=# z?(OOcg?7~`<>PpZx|zthBNEol4K3TwM2SS2TEsPG2~hkhBWy*z=z!7fc3M0wBz0LdtPPxKow<-Yw)v| zY6{Ne95Zc>JOdBLa*^K5pBwuyoda`!YCQNf1Ny#X?|b`E$9Hq3nTZti0v*A5Z`EP+ zQb`-!khN0(^Oztbas%A*^OAoaKysd2ziH+#xG^Uv+`g5$AOeZbn9NMv-*xRCDb~Xw ziR~RRmb}Y20%v_XJ)%~k`7N#dp>{ypS{RrnYG`F#Tmn%#_zGZx3izB$pmAi?3UI;HHv7fLVm=krejHPC}0CF`%KLb!d!w2uGOrW$XKPpI99`NHAaoz zw;O0&RR@9qj!y4Gf7gX|%Q4vD3qKjMTcWG35553)$ZEKhtDdN{Fdwj{IE&SRG%riOkl*%ZMWK*l-)v)%Qxf9z{+UuDP}CMc7x10K^g9*Zec6`epi~vUL5%M6u27e@I8^U? zFoOXBn#CTA4`!=sfM)3ZuF=x>ft*U$5yJ)f@1@>GOv6}f%0;vg#2VL;pcBc+e+oKY zu4cv17?p;O9~CR9%|GaR(KNSJRJ${Y$I;{Da`HAe@PZx0p@54k33{P*C_$8I|MkuE z&-D$mr}*tDl_}`o)oYH3HttbB@8v7d%#7Y*hP@_3C!hM&Qv-`>DdEQ~QNnwLcZFHGgGL)ctbxw}Y!;VOgyeYhdH?Q<-?O$)PXp2Y|*0`4U=rFUmfLX%Y)U|MX zZPAg-4Am7Q7cBQeKwHW(6;*$9F!Q6+u5zI&~MiIJq<4%q0P-E1M zy@*>)4ZG~j5}uLctrAX#*H2Q!t=U4f^BbDKFLF@JXlZK~bl#xv%M_|bs^tgBYi%!2 z+JeTJI@60k3>S@!FQ1aItsI~2_%>PTh8Nx?jVrb(%~R+Ksiob1v*uh?Hrr*QtDV>N zbb>{Se{b9AozF&FXNm{KiYqyi<@SwAhm(_Kq@{LW;JPSWJLfQ7*F#lrbB{1^zh*XV z8@7Ve8mNQIt;JG@YenEuQ)npm#uihxXtO=(f+H4MGZ*19xjz(P*a>ozJ@hXkKA~jX zXp){YWx4Hq@7yKuFbg_VEmLzxi$^a!S=?HRJn(d&+uuxreekwbcato0kFS^(x>{Lv zcO`LkIbpNJm9grwc$6$Olo|mm6^4pv>$l1VpoF}Wo_EF=q=**T3!vYbLHC79Q9g#| zLn+EubsC8^OPeukF#nW-X963dFC|vd>^%y}A!}@fT0?#c&mEV1PvX)ht!kWzL7RlJ z5x?8Bl~rvo2^NAgY2LoywFv{l>&a^eY5<>xIMQS5uZ78<3=^PkcUQc%xUHXUVb#lB z)b-MZvqzHTT;tH1a%2OkSH^6NgD34w6Q|tF*ua5q>{|%3UqP+aAH4!k!{>=+i3?iz z&UVY;*BmjTY8Txw2kc0K2Nh9X>&to1MHw@)bam~c4+^Hc{@cX4+*5LoCjwH3iyrkF zF0U6-GaE6Q%d?6y6dX22f7Z&H&vE_wHT&h;ioYlUPR@Y}L9UHVf}A#W_YU!LEgqD+ z57l;!?=xSiXOREKfY<0Huf>iLXmrkii$TB@?y)6X0lArpPd!amas zg}QkS-7@ym>p0%FunU~HbfStu)%5;wLbg1!JWn5%o>Y0awMet`NTo6EY-&aVA2@=R z4>_521>bEhtcn$E!m8C+z$(#1Z0d zLOF)(FzT8JFIWweM^~-+b5~zAi&X4hTE#@kv0SeS$FgLcLT&?7am|Gtb{G;{T@G|T zZq6osR`?1n?Oim{3Da2NEdM&h}CXXa!7V#Q}q)HM-RknXb@Y5BR1Vr1l%262u84`nMxd zPOq}k%AT3uWCv{1eO%O=HKW^E*-b;pJiC#k&}Vv3Jln9 zqmt+BqVymS7f1bjS>&CcR@uB3)XZ=ly^h;?6FgW7=5PbFt1N>x-CnL}lZ6#rUo-`M zUx%tiYGAg(GSzB7(idewtOLMzU3jJAaRU$R?2WieA1(u zG!gvq@N)}>=E{rdXYT*~GjzpsN zgH&AxrLhagkK?lfOZF<;jHO$)zALi-F>gdZN^tZ>{68NW1lJnhYW03v<;B(QoW!fYHPN_5F42=$u@GrOZ86VfUB22PVRY+#=2emZIO`c3XyO_SN6Bu#&{n z1|)xXK#PgF+O$TbT;_VIyH5qITdd?1 zyW4ZfN9Yjd^{J&I8QuQ0%}xI`ystQP^`-9glF+B;#dIVYX4KS;9~2- z&|-LX3IiIXGZ|9Q#2Du$fL@(wREeL<^;CLHU-JIVg$b?#np-v&r*S3z&H;vdv9d;gE*z|b`jp!u5HoWqeRD;VovH5_ z6$#p~2nk{JdqgLpZwl#UdjX5X<};2%qT8tR;8it)M)NlfYox1cnF0lLBB5@0%`QkA zWym;4)AAuZ$r`aqcszHgey~^PZV*mq0x*FJ+6|9_iRb6$m4X~qK6F10GX;mAzJ$T$ zcuM-H9iF*;3b{}U$~U5Z4>Vj3+FUuzH@O3oK--jd*|AQ)N;HjrlL@gz*+K(FST{i> zAidS6cZke?im%kJ=g~_uPTuek56id}q#qv<%H9WkmR|aKA@~%f zl|k^x`!umq#hkM6(Q&!tTb;|(>$z)MPGjpjbJH)`W0&4kynSo0%5B3HaguVyR6VNIu2;)QKWTdfUt4vGk-bCblhfqK z1CDG#k5uWet@2Ihy9`Dalrp2_GHi_TjtSGs6kSI`VlphxSqvE7SaJ_p#-|~Ie_CAws zKTS@!8}1ggDnGR`R3#$$%5f}%otdgFvFNcJvqf1#ffge|8m+Lh93iC=#27c!YsVX? z5kauqBAJ|Cq1!6%oau2nXy3i~=wZ$hhHJwbqX=UUNVD`jw7WctrNQ8AYflTS_eyCz z;3V4X^B1EF0gNl}fkeG6zxM4$K7;x}vc^R;v9+jqd}*u>MN4K09z8$~tecL7s)q&W z8C4S;_N^wK6Jkt*?Rou~{uov?BM&BiEaAw;7U@bZ4FT+X^XgjGdiYCad6wPUVTpSA zQAJ1&J)dr0z&EaUS!t+u1%h)6SxqA>ZL4le;OxW3if5e;Rbdt;P~yc+38CLh7}-a? z#_mtn!8Ei4oKnviUIgL;?#$a(6EKF+T4+Y8^CLM zfVr4cx4l|qZ%BZ*_tsa2VLiI@Qnl>7t#4&*%cLDKOY6;1t6>FM6BRRimd&KG7#W}Y zIpE}ET+{qTtX5H5gAfJfLhZsrQHR^Z zd^t_kk?B=T^3(mPxDe{`=O@l;r*>CwA)<2(Q)i|K{nAQkCjO5t)ec_YKG`zv>x$(d zLX#49Ggd_v&(Q}=Ok|8)H7%xFy_YO3G&yM(7SLbQZ!=Z?IrZ#FQMGuziLCv^3sR4< z^@M8ZvPH7ofyPXT>H`XXgR0pC)o$@bcI)$E^)Okxge@ZbjOm;GTfu-DC7|SpD{!|+ z;Yi|l#FNG@ZdXT9`7Ysxi~66L@ctVCkE`|Iv&(p=-6QO{q@TQG(gS^Noy>GL05pdjmM>T-zfzZn& zg@JQ#3@j()rM+ypj+-u+_l;&{%89x`Y5TG!MjfSR0R@FIo62IO6e54{mhmo6P4B@f zx&Yz6Fx)1WP-i&gR$G1RTa{p*QB=U3RA1;z)TpD=$1q3`Yupe)L)v3up~4Cep(RXS z#?Z^H{M8F!;T+Id;7K)DfEDBEJy55cVIFyU9hNkMpahP zdx;$Cif$96_VLqUx;}qtK(3HZ03LtWjg?;Sd*_(!hmDhzkd~Qq%B+~G0Y4wbGVG9L z7yA+homjuwdKHOsg>b0B%ss4&X86ZFg$S?u1|KE9%a-??Q<)&2wbCN|5~J0RT(Pnr zx7BW+(DVbfsIFtOyn2MItONL4-_i-U&-lVS{4M(I^-b~xy)NH0XhJ5*vH~}i=j+Or zgE96jB(kZ<2=QWszG31tUZ@_XmGl{;Lv#eZAyd%M$8P{4HW3C-tv(;&2Fk98{VY@o*$s*;64~_FTC}v?nDE~g zCem1I5&Go|x?fX2W2?89T(L9X{2=SO1d{d?h*t!Sz6H9;pe)`rNbVSB^%c!DQ+tk; zcG}XH`tQlw@e9jKdoXY-11_!{Tkj}kJK_A|NeRP-!W8ndxb=5nP?i~PlE{=g?n2$= zgUJ*v9O`-p6aTVhlr3)`QX3%QJ8ZfU2%oC^?C(Ozl!|27tsd(ws)^hxd}z_$Qa$y4 zqt?mjM)Q>Y^9koLAMg+l{X91y$2)0o)Q;k{L*V;Y6t6wGpFo$DJb9n?$+GQlpYhq7 zjGikQllSLrecSTVO3IzUVHU6vT=hW~YVvMTiDu=k$Wd>C{rvvnL~|vJdMz)|t_H>O zBwVG0V8+I`mt>PDg^3>kM3y~U)a;TxKIeR$xVDZItOs7FlX1SAY&O-eB|2HWPT?jH zYoZjl$!hc8f+Z9sC({UJBPU~PSw^82UI;qt&r5*LM7jCV8YQXxF8jKTo{DdJR%zK$ z7m{us)G1uG$LW>p9Yf9|A2+hAs^ZC&#jHs|9RFsy zB*8Ch)=%F`zYf8Yz5`AQXxs&4~I$6e&mf+(ZwQmCx=-qQio zz`xYCuceOCY?P@IkEwA}LB2*fmI2hh-&W_h`*z^Y2($2ZY!dbu>V5m=w-~2}IIvd{ zqNmrkd}(Zs^*JDvLpjMct+Pk@XxgEDd-x=l529wbBrJj~1C5Wj>(~OXs$t|V>id32 zOjoB5s%A}=X?GvG(`VlawBl+Z`P14fwVlU{m5>EoS5t=l(*b}^R}#qd(RW;d+kz)e zu?6dR`DJ=4^sZROzYHj@2Mq!4G_iErSJC$Aq3K|S35DC%uZ*eJ1uP$)h!=h?@D=6b zW@tpypTS=Ytmc9>AnggiW&GF;wE=@mHt%plP!qzCK2bOAMhViv-=u7DKrQ)BAv3WS zU}ZVdDyqNdzTqW{F!et?C;QHk}urKHtS}AZ*a)KRA-t z@>fNsPuh1Av@lS7wUX@7AXHAYSDp9be@ne%k zCddNQB{(Nryvfqf^>2SUW2)tlF45ur%0HE{WtY zh#sr~o7qS2PQUgwD0P0`t7Cj5ArzpVZB#07GzN-zExX_Q55AfEbuS-(`j^1{z2TKh zfHD`#aakDp^>Gn`5U0^5_IU7`nghtO!f`F;vasJQLluQOSn(LA%d7WkrK1L^JK%n~ zfy8Gjez!(ZDpd))q(Z?l8}ARr1Fwp=q#b(d-VE-=OY~@*bfsiLql^JHLSmm|Ugp}k zb|@ClFN`o7NerM~4O?&;PQ}`clEGj~`}nA(y=VNyZQs!$uTNNu@Do)z*DHigmUTK=WYip4)V{6)(`UE6$PN;_UADYTngZwe}k^t4ba9FKOraW zAMO@oUryEDz_Y~_>*nPRm$46N#7-@L9vzrwx_GW@YenQSTZiE% zJ%YTC;Xh95kAA>tVYuvK zX5AEYRz<>Fwr5QFoIFpuRDk8O#Z}@nt2#m{$H;Rm%A_J;S6C^tvoD!>NGC{e=@H#g zmF{cX#bt`8^_A_}Os#9M88iUAC=9=zR9bgQ!%i?maLPD{zkRIG9=_|#qMcmWR1 z(01c8I7k!r2*_86V**2gG9Rk?LY;1T1%}Rc3_wh39W}0re2UwP(8{B#*VO$Y{H`7; zO8`a}A2rY9Guo*di%(=LuGJC-_xTN+MtLj^-;(zrzvt@C8-1+dKFo4#clGmlX!x3} zOgJdHChD(FJPPgQ%X!H1FewR@g9VnEJO-nwCx6bc5qh79P&BN-cz zAvLv^yMSQ0{prehy4MuPQ6oVywlY4(!2%ITw?TJF|I+0+UX#kCo;2~+lF_ks<12vo zP1+Jpj6B@vr%9G_%ukbtG}Xb()LiE}@~f21UJoX;3og*d=?*dBAGM*5p zslEoF6?y6`A_31&t1zEcge!vh65NS%x2R{a5Mr0QY?u$w@q+FvkSLfR_gho;nhBh_ z3$#I~lzpd3+RU);XBMi=*oRx8avwx%Pchd{TFfs4$fWSImZ3^}A{|&36y$2jR&uk{ zuvMl6eYri-Q9v((Zb^m`Xs{ROu|z)}R{aXaqk~|eRb*FLDJa}6aBBwx@+(&V(WbV9vEBd`Dkj#|%bF)kyoH#POVA){TdQHq$ zg=b#T_sEZfu zuARWCM3IbQuBkb(wU0Vd;7U0(kB;4CIVNO3Rd}hfq>f5NKwoRl94%{}=L&hd;bFgZ zyc@o+i`U;uZL~y4qBwzn@6+;i9fbd6rAM^G)WspOG-Qm>w1yUefEeod%pqiQZoXdk zMn63LW!vh*c*8}xt+z5ePc8O17TY2kJEfbM+6-%+bS@5l_%`l}Pe&VWEDcMBrAb2s zfL=M)4j9*BhcV9rSnJInr1lG3$ILX?xZ`=^#G=}KwM6jv)!cj8Ndiv|Ygewy@89mm z=a|TV@&`&EJRmLxW7#+uMW(nlm`2248-O?%2agn*+?YS_=wgo>H0!n0{o0fEeLd6p zB(8dVxDi%X%l_g+{MH|L5dFhWqO?ramf;obD0{ihu(D;K3z~(%=&h{F#uJr}p*HCJ zY=&cJi}``ahfvMi6}Ll;&}=;Z4Vf? zjEK2i4{CGYs;Itt>-}2>Y*lN${PHo#$-ciytUec=4HuZk(&&>O?n%9R6`%Px3~_Mk+pi&)lky z*Z{B{kH&*&alSLsg63CWkPl-&C{=2Py`|85cAH-@Mdmyvd-LX zE+^SVVC|=^KY6<-+UIn&Mk9DQ;I~sSl6bRA0*L9w#T(s?J7c!rc=refZ29X4ymB_( z`0mmCQhu*5%knjk%LsKFa^JAjy}JnOmAERsLvo07%Omb5L~ZG-JLJ=BbWTX*nzWHe z@bp9V$7OAJUhKg1!JonMbb!mITdl3H-V$-Jz~r`eR=2yi$@9(K&FwTju<^pR1LE8l>nZ3kHPoM#?RI{ysSq#g_?o{Q?QY7AEqTp(%3A&UsB95EsvU z$DJZ8z4&YFL{{+8SQ!Ry0R(+qD#ZiSV*2zfW2|Mtt6quJw3hKPMfjr}HY#};|8~1x zvx$Y*n!UEQEhL&(MAt3~1 z=an~~tMJ0OncK+4>`+MVer3SGtJcr9hej%LhpV?-TN;~Rz9|b;TWw%$yCnalVQ29B zb$Ra^fDGiN$4p8UUFdb5IGcGR;6#d{o|$}Tv?+~ z?U|+C4^Dc_v&`blk*IQ6KZyH4<4=!(@B4?OFq)<(Hv2Z=eHUe^K_uU-noueqP@a1J&2JTsnsVWz7T zHqPI2>yc4n*V*tn^ZW!%{}RtZQJ| zAJh{w5N84N&Z5%|a8IxKg!B@R#EfI!Wc!}L$!&E;e9}N4LQAG&y345A{qe(eJSlEE zU08D?P2qE0y$epi#zKEbDf9s)%Xp=?VJ>|KtqZtjhS6OIq5B|vb#Rbt{K0VK<~Zhc zr#jz&Sc9;yKBL@Qjt?W~G0_KUI}a@-aE{ieaCWNHjr(2L(3~h~xElXjQ-A+$F_t>W zjB@?f`7Rw)V~fT9Iy&)HtfnK2qKsU|_~2-NdHgmjYg}q3+WDJc|9Qk}?PG)Kc)bG- z7LT4c@vgWqSA=t03&V^kx^zt2Uq|PBx}G_O zB9SKkJ*cSs3NSc^?xpXUAXkbuWV)(}dywneD-aRBru?EP{e)Pmm#3Bho7BTH(u5oF z74?=;9)s=k89Ond4$m(%#V@^s5T#AkO~IpQxYKvYBi=%M#N{gDD@Kw05Ha+``?|_% zJ&(ggQ(xyDd?VRd4$ArlTCdofKGqsn7$xKCzq19R;z!rkWblh)IhPv`1&hHcl5U2N z`VU&|eFe`ml`Vt*l^kF4b^pEJppJERQa*tm`z_12!1=FZUFXO^r|>lEssJMQT6#yq>J81kOM z-@{JdM$@A6mGb2+_QRi3Rca*%)P@dyNm-?~V@RZNF=DgHA+_rQfS;lErqLJ^l z3_Qn|K7J=cWVC$rr<|(4`ErC@)DWjO zugz;)Z@qN*CVPm%H%$HfW4X(ydQ*Luk^swiW;1?S*BXT<)h7-}Y&v{=% z=l3=f6e4@z5F2JRQ(-Uo8NQIv7;>DN+=z*ptCNQvS=YUnrbu5p`p+mC)zpGRH^@91 zwCn1>(f^=^x!u<2&>w5orL$HwCAB0GIbkw(Ju-;+{Wye@_x!vWba9>r2W{BbGY?&< z6^PQ24sy%OV6DYU8T$^v&EG&xx^;jXmcEa)_yi28HYRwH!WqqnuHF+PwF<>6CBoLE zn=%lq7az*(Zr&Yc(%pL2U&+8GKiDm%# z;@ekH077kiHPhYr_Vnj6UGzxg4fN+yBL-6M=pWm=M?)C3+S;GdvAkDrk#|gkOF=x{)TZQRrIi-tnzZ}u^2cgvH?`lEwo>{zG zmY`?7z~;NNy}nR;YG}I6Y-*#WyjQ&R@DFi^FW9$_#bJJDy9a5UF20EOPKO)j8U&+B95eI>T^BKy^HQ!T2WnmBo-LOII`Sw51W z^y!^Hlj>~pcw`PXn0itiR)B{G?7VJme%#L|+rQ$VaO7Jlq7=CFbqc+GU8XrA%WqBZ z(tld--lAl7EH~A+E9BzU41F9n(BH?eqFBsV!^zs>A=Ki25CMzJ&hQ8usM}_)wDzzY z$!?|oYUGHp&$Hdy?#U!yVJSBo8fcjlzieH?73riWsYZJoyw);s{LuHq`6Y)9IDd1Z z=NN}OZ@{~#ZeTn#4I6L3>nL>~r&!BXmhquU)Nj@d@O-H6zcum+4;$z4bJ`QE*-<(~ zdQC9M8K%`0^Fa_BQ|s51aW1kzUugKP6S(Q6QcAftT49O(-P&i>pQO8KQ;qyRH!i4> zKfIh}^V_K?Z>A?gh4V6=mJ)2(yx73sp|@=E+9(*GeOTKR>7(kWgvdF-R&>o11p`nl zCo3w$fZ#rAx+{S`16(4d46@AZ1+_QIa_lenY`i5N#E%rr5m(Dgxfua_-uj2l`Jgsj zo{&YeU?1wrGQ7Rd9FFP^(U3Uwt5NxNKmwKZt^i00Zo_=vFQBczpOW6pQ)kz}zkNlX zUSNMDnImB8t-5+s?i_MR`v%XcS(Qsz3U$TMU}XqX^exTNmc z;rHDY*x6J_(ZXsDaQRw;$GQzDSZOsc;oKh87^g$k79Gwj z2uvpTm+vJ~7lDDX_LQrR9{7AX3y9xtOX@C1)mBLc_x^nD>)MWkBS=-0Fj7^TA`uXfju;ggnut;a5{eW-N|0U^5s(NtfD}QBsHi|dS_qIt z1Cee-q=yzjkY0p@{#|uu96<)wyS|^vkF2|HZtgi}-(8;loOAB(+9z`a9NJMxRW2Al zB5EKb=421t=gb)8xe!;gVkizma&Cm-)6}>P@|#V+*R7ugDg$QXt{TsY03~^!?7-GP z+7~m@WN+PSUHi10f(oH(l=8B>x28>L*l{)Oi8>QHGCz!btK@+a|6IM8 z8Hwunn3_A79BzOm9BY6nJciApKYIAPtvnm9a&#(_ctM3fhE1jG5nb|I-SHJIc(1{+ z-B8ZuYlT+BG*4nzGA&P%+OLiQ5{_wVxOZVqc}N{n7OD-&ebUQ9+74V zP_gL8;g>0SX6$;ouB9PKQ{?&c1KaibT-2aBhM8;Xiv@_Y@qVr)8d710M1 z9m`%TGGb=N1A;KYQqVD2o9s%i|46t2s4+Olz^IAruyle#C7*sTNT`1CQG@$_Z=3n* ziYH3RrzZtSi*}tY7pTvy5{JIAP+Z)fehJv*=+MnMz{SmOH>b7yhfgMrN1F z^4;tB1e?_t3#~lg)Xc15Z(k&|HOX*kED7-mtKg!Bx+CL90{; z$FaV_*HoT<9FZxdLug<@W%X0dlzLX#>%E`^B<3B{m$R=0kb0&!cVWNL94#Dc=^P=@Ba;oU0qvF`Dc1yLh(Z?~7I+ z@>z+60T$U)r5*$1NA18$WS^3+r2W4iRZLn(gOEkq{F2Lx%vT}Tpf{zVjJ~gAo!U)`*mm`BK&U=4~~zRf~R9Io9huXEFJPkjjlpzL9QE zOB31Yp^4kF+uKR8ev~$)Bp33_G@_)&3AxwoIsTDAd38P?7tcBL?(6ov;|n9R=9tKA zJ>`Hi5)bewgzmn}#<7Rbau+YuFhY{B`I6oyR*NUPxDD=>IG>RnEJHk4;(`)WO%$8e zyOm0kgr3dypJj3#^LdpfhHVx@Q7=;a3gcp}Soo%VL+%#MR-{v6^`r=s%{@(nJpNhn z^%D-pfoAZaaM@jECS+UNOyuke!|NJ&-$f<0gq~}1dnhF(4t-<=l>akO}T4irv zAUze6eltd{9*{^6j_oC?M|Uv;8H#}7{D*)(y#v3g?_`A@_O+hTDnG$0m+Q;jqB1@7 zF1J%#>(_*_<*#@X2#f{tc~@qxR*-GlxK^nhY`@;VFF0q)J=K>AiOBlxk|+`VS1ouB zrJEmB(Ez=m@2~%$L)4+x=5ez!q=>_J;p2gwL6$f_!)T(z%LrMECN!=@V5yjsr&z3( zbV~Qvg@9tJi6@jgq}GCra4~IzCFx6Qe`;^1B-a#4oOJEuL(+3O75H0S^5RkpR-Q>> z44aU|F<2(^U5*I!SlJO5tmp51cHZ}eY4oio#ZW&^l?g}OSge+EWaUJl@WX{ZXNnRf zBqO*B<_`@&6vlIX>2OmsrTe-@=oXM3+cPnvBU{5EH+& zn7YB?z0)OHCVe*Jl_4ymYUGG+X7bnEa2Yk{f2X5hc4m~+#eTo9U{Jb3#%BzBJv2Sj z;H>=J5%S=W?4Ctc!lG@JvQJQY5*3$EMeK*JMa!cEpk0SvFby!JRM<`h0v&;e^ z4)1>^B?miP)0>ANigqg~jF;)iku69=H*wwi5#oI1u4){hg^GJtCgdG@Q>W6Hm8Yhh zdkp4~!Qz8%4JK`^0pCHb06l$;V2_~Gz8H;HBV|t!(DTSNbA2i)mL0*jUtZ^>lA7IN zk(T7S*{&iPkrQ?w%6pqT{5hb0ZdZm1ucTP)Dlx@38}nWEopR#V9S`QxW zb^*t&gPjMJFbF=mL4Sg|{tnULFH}zyorSnfzSapQ;$C5Ii_}bv22q%O?`_*!0WhmXWbx7sP%#}=GI#FQ;3x}P) zvy;v<4j!)h35@k{vigfikT6dv2j68rztKBFs+HW((@eIG`gHhY?}fG!EUK?MEoHTT zaX>@yW6(rMEz;Jj0Ph(%{Ara0a|Ed!x|_b|t%DI;K*$I(-x}Uf88hiQg<{hQHu_s& zjDPU|hLdSG!${tn0n*VBl(1%&&*7>3wl@Tce|m2W3B3XULC9S2hfs=yG13JO?*7w%R-A#dcdTY~pI7pG%+1 zVkK|Dqo(>e(JlzQpIS^>r0m4UVM)^>AExFF&Z-zew}DoJV`1jm#WknC({2!el#mZ{ zOIFwylPIjq!gbVJ75z-!wx^WvOtkU(w&e6+QlJY=g}RhG^+ro=C_a72g76H)%b>E< zz#^tpcrM$=*A^wd@C1tZU_Wi~RZb^uc2(@=AfID|C!9}uyjb;MA`;t_;3lh|yxnGX zDa0Iiz$b?AaB60zT!*NbLpY@)J6`2HirTMsw|M%6N>F-)+)Kh(mcZBi6}UGv z-KFx+jJ`b(w~o@A@e2TV7?-6U&veD}{8WJTKxnao$aKS=dHw z^1XMa1gDhiuT$wko)=(5YS5!ugNNZUUg=9JJG_H0SVP} zAPBO2Qc=;{SB66^ba5%#h64ny43h@94aK=V;56sdQhIOw30UTYs${3JB4wfHke_6> zw$ayS%zD{E^(2*MseS|drhymx?h?(;gU0LAJv>Thx5Iy-PY-Xv+M3~h2|>vq#_x8Y zf4|cE+TzF&#($m-aNx496~0KkEeck`ErCgw!}D#3EGqJSSpa7WDk@4C{M+K_=mi)7 z7sdXzg@tb5BO*JWOROEx&;(0EWWG<^)MXG`lznGq{?~q`W^dm)x;ijDj6-nZ5f%G`LZFS-aH^p%cQZRANwjx3?I0*Jli98;}172EvYEr;91qL;mKlZ=6&E zbj~g2+Q{O*82e7)XdBRSs!7mWxBbnUU37dylA5T6o8$h+lE3|->SStK+5skBsa(!# zPZLf`GnMJch3)?q(nlEoTaorN*;PafLNdj_}6A z#-&@pYw2Qd{f6agHns7VusAbVCI3g)cDQqtxsDq^ybs?8iXI&LmtFnS@gENgbO8+t zKkwG1`GxS{$uDKqJ`Y}yma5xjkDSwnOSg=mV#L%AF$G9N3KCmg1NH_(EK*+*I5InHmT#XibC)pesWUpDDHaHi7P>t-7XqFBk>In%&>qT{fH1l|CwqcX>KzL2=I6e&#iU+Ti;_qX#fRxD{!t|1jX35 z3Fa5(m&<2yynC2Jl;|Y!aot@4|n}$T`Sv_N{;Q;H-7FE zFX>>-sk{(Q-Ud{jH*oZd40I7Iy;9`vZuqI(4=;%+4Ux#vqIc4Yk23PB`Obj}Ls_j(pC;!jp7#I^jQ!mwf6}mrArB4o1??j*X56r1$1%wzHwK2s!1(4A^RcE{@9`Y&4ym{ z;v<;0-sijF{uV#DtnV&qZF7v#ujDi57)?1~M->%@!^Ium)ID-lMZX97 zg{@{^sM8^3s-av?qh<4wZf`|3fE)+HA0Yrz16J?Vd={T3z*lRl7;4<~CxEY5*J-#l zs2n_Zbk*>wcH-`2F4Lu#h8uVC-=4+n!_MQPqWH8cvl#9JQv9FKs?iTx-v?F$;@i>zq*5j*=tl+uMMjLN?C@6y3_HJNqDI(0c}-kA@7Q(rcL!a%fiNp~c>eGoevlmAPJF4}(-6=btk}^w z-D8KhB%+f{)y%xPn$ms8$$$aABpd-ZDcs-Zs9*?qj9WKHaEotr2TI&c6|>4Ly5FUz z*~{gTG|setkjk2EDN@^#oW}NrHfFONwGJQc%02z{DM(wJ#LMN!OXt;9GE^6~|G#39#IDoUz!})HMFsO=XNv z5NFhg?%ji+IJlDzi)EP6!9SYk=8*R!!*7Zk%oeI_(?$6cjp1`{&wdAypJ&2I;&RBYlxls=9V{J;V zMr9Iopq(Y&WAz^RAoa$e{-~Id4#V?EZ1Tf0)Khb`=cHBKxb70p#!bFi8(h`9r9t}g z?;uNM0>08@2?rNCcc^+`R)#I6HdEze{sXyRuQPX+1U>PV4odDUy**Hk`lf$==AHn*NL)q6_vCGpk@tgv>wQ?CN3N6g1|o<8&{-5!>I-eS$*sQ)m;@|F zahW(UyL+oT5d~n0Jt=Q~KD_m<-YW&JA6I&;yj7hzw}&l8gWMRurS1bmbO9z#Xh!f~ z(xn-}Cc1r-W(1qS1zIH7%-_)>!GF1+FVdq$g3SUl4GwJ<^l5NtGgwE1L+dfP1?Tys_)1K_eP8S_^$>Owpz~L1T(G5fP0k+SuoQ zgNZb{bThb2qf37T$Lnd1{|Oq=;LygVNrOY1_;ngnw6XI1<OT@8yfyrIQ5evan!q8-SW|6dQyb4a)7es4HJ9V zY6O+Hyd}mH#8!g|sM`9561pIlJH##Tmgw3M#lz8yZI7FrBek|V|$fVFGWFjK6%Wx+c@t3@pE5c+S z{Jx?ad=hxW9ZFOG<(s%7oEE0Moin@<-3v-A;R=1-ND)D8Y-Bd2YsB~ZuB+}RDXyal zL#{T*OAR-v36Ldd-@`$S7ZZBwP!o3vzZeN!Eu^gQF>f&R{9d&~Q|R>@1;brNMnd`a zEj_rp`ydKTUPxD&>q4F&KA7%oVqGv$Az~a+bOt%3OMc&XX#E)9LQUxlmqn*g#cv8pSOI2{%PCqF=HEdqDgN+j!yBZ@ zq2Qz=jeKErc}-_Bl&wL!?Y9znWeozG!mmn5 zefm*jE(q!)j+ADoFB)%D_8|ii6rS+w4%A%`h0Yt-8F@RpE-E}~ zkHtW37A{h-{&d0i9=$~lpFB9N^Ts}Hbyo9-XX7rz-TAv8H3>^EbR~|5?ru4~z|FGq z-#@Ui^-fx@kSiE4^f|>Hl8GZn%{fkZeejT1sW-AFci`BW4HUPC|8 zEAHAoI-BogiEeV-bmHofeP@QDC|8qa_hz7oq7elou_bAT5~nlrd>DPdd0}GsB8@?D zwZD#srqK)XB3<&uK85Wdg6aBV>X+1CKc|1r$FlJC{vz{fCtXsG-w6%(OHVrcnCUzCXgzo}f|(%f4wiV-`_4C~ z3LH2(&^zt!r)>53rT%E0bf=uRNM3mFzv{NXrS$#ri7KO7&V&+o02cFmh!9!E*Zi7% z7$uxS)akDlVpr)lnF#U>@@ZpgEb!7INf{|)t-InZ$Sp7}SS^^^!F=Cr1YNUiGlRx9 zc5UA=i=r5QvF~DJWQsSEVk0M144jYP^y7?Z2*c@U?lq|RtOi@mJA;iED&0}qW7B=y z!)C}`{y3+92!|S^*paZ7Y~R5_PX9J8qNtsqC#8G2J#3Bdcg|^|8%;AiAL?kYZCBhn z+WP34?ONJ8#mh=K-Y=xY@$KZrBp7e5-z>bGeL?zFA`^eycUS5=QSNK@*Mq^*T^B%? z)hQ?_EGVEVWGL_yTq$fRh~?0KMv(xK^hbY}c%SX|BfdJ!$#+VyQOrY8NW|PB# z+#RpMZ%M>k>WNZ1iY?AWyeel_LRF$pd^OUWOek_ZI%AMFx<864nv>p9dOL?!P(^n} zD3+>8rS|i6_Mz|LSA3BX1$s4lZJVMc;s!~FtaA=`kUN8Wtyij7i&xwOBfQ9XhMSyP zjC2er<|5_|eDN1Q7$IVj47v4hpVEHSXEtYs8N~el+)dp*8RGw$k_thpR%VO1vRElIR6&3}!6+E+Cs;)^1 zGEt=|B=VH<6iu~M71`z3RqNz$THgysxVF7QY#$oHnZ)cQ%}xn~As7GWHsVW2^YMo^Z&v$KD;!6@M;$AcZ(2 zZsJr$TP0dW>_~P2brH5*vR#I?M<1eD4U!+tw8g5$GRL~7eXlm430AkMwyN_oG`8xl zEUauamae_7)iGT*d0gn}3N)uYc4sLKH`Cl@k zzDB4<{N?BE#|=Y>um^wUui-DqNa`kbn)TX05|g;?tAUWvr=m}3f$D)z0{5G7~N9Hny&23oreOAKFxB}J?gki?^>XxK1( zDBce^^cN0*;|YF(ymFR4KMkxX_Y~C@d&F*}Tx?ieTFmT^Xq7CXGzeMlT3XD0vV1%1 zQaY&~S7&3?G79#``-Z2$uC;7dQDL;vBt4$Aa4~f;vxDNZbD?e6>eR~UqgOS#op>_7 zdeM5aXwZ^lFjxoU(y{d^^jGCC22FKM28iCB&>foM;*Z)Z%z4ZssvfM1&=V`yW$$v~ z(hqq?ZenZUu?iOEf_qIVgRVN%Ra8auB1>c|tZMJ&R#Y-H<+aXoerUQk4YU+CXq0$J zUIi^5F0)_PADI`*mr)hpHOJN6*p$dxOQv{htMk_K6+P{>=7V_oC%moZ${O43AhWO! zu>Odhs4nbt>@4^S+)7g~*hBDoQF{qny}K^NHKWxPt*aCq*X8Y$ye{u#U-B<=Zu=Bp za2&Z!j(YH`rlluSn)zv{)O@dV&_rA`SOm+0Qx2_ME%?tu?-&qe%u@=vO57TEU!6&< zBotI}no@AV5ipFBrQscGt=y&4vc9o)+ZK`d|URM`{Ha?f(z2766 zv076-s;)`~7GY1UR-9$NO7VE7J$auCb%_0pK;$3iyYdQudaz=?M?RLkQ_U(nT778a zP5zvgh|U-=l%N6?@QQ=#r7t^TjnM3{Ut=j$`#1B0E1 z2Zt#qaR5Nx5Mwn76KQEE0QW+@fP#a@g@Omxpn)$RG~R!$i$YUE!Tz-!1_~<3918AV z$H)N7=T9W?eQxvj681+R6e92s9r(JX!~FYbB;0h^f3G8W0Q;Z>6@?@ufTg0LgR!xV zqnWK!&xYn(V8cs0adk&1C@iw)FSLZhhg0DEbLL8FPHNIpT!yyR^!i4&2FCPm)^^Y5 zf#PxF0#>b!o%D&^tgUPux!ib3{yKsSSbyHkKtlA_Ax@UOBx=%fL_)R>#zbuNjP#5o zd`Lt@L_7{gCR_@_qW@|R{Np7tb8@odVqkD}b)|RxNN?+4%D}|Q$;rUT%)rb{2OL4? z=x*br??z|iNc#6l{(T-{V@E>=b2}$=_kUU@LzdnE8r?H#)e_zSQ z@n4SxJRrmK9tI|QMuz`7H_(*lc`KKkxtp<-y0E!5&}YCk_?XyOIe7kR@c-NO-^k*=!ua;>0gj=LqZHXLr|K~2M-SNT4VJ@L@Es6p>yEm zg)ySwvV(L!MJ0-wnSUVecO6A>WsW{1PcmX}l6bmt?;Bc5XxOS#S4-veEL9Xx+d=>2 z2L(q21^q$*3g)%%KVKz>OMY!;_6c73KWX&uW5uE2aDQV%|3?@6SKBI>7c4B2{%`+% zs{iD+iN;>H!Tw(w#$yVkXQ<;Q{|Ei^-ac9_Pf$F22v5Zv@iyJKgD+-u|aEY8rh_;1||#CnXPU%qO8QB61m~ zHOK6(_Btz^pCw1rW2RWRTzHfbND`Z{uEH671%!Hi!WcjOr&m#VYll7makl0>(hmaCcB~j)S128{l%4U(X0{+83lq2;s5%ilXP(%#b9V->R z(LBiAd_*)qS$T9KxyY_b6y|2b0;W=!-#E`dAJy_a-=ZQKcTe}Ipgit|hQ_GS&??>_ z|5jo>SHH|m18N>!@w*))N_K{bku-kW8>V>=C}QH_e9hUBsYc~c>LzL)RpA84ww#UV z8_X1E;yf=^2hJ10((dEUPoGxh zbyU@Zf+Fy<2%4_tJix&N^qriDuYqTPZGQ0%=0A9dS}4SKY}UWUR#tRoY;cbR(*<8{ zZf}n#RH>sduZ@k4#(7-rlE+Du9*Rh=#)+7sVMR@vGn`W)Ip`?QtlO&V*E7Umw}j#O?0x9vM+rCu(;-Wj@f~KOKH>KhnM2q+nDQIxMr{^qD?o zPDh}WA}P`|xNQEQ*#392B5Dd6kI-qFKXtyo@G#O35BcVk6NmcvdT!fNSYMFo>^jN96n*_s?;bN@ zfFB1onj#%TyGVP8cMBEEhq+B21=qBk;^mP|SNg6^cTH6j_uOdRI0K}Ei7q2m^F5qu zn@5x1?XnoXfZ=9rG-Ell{kTo%rW~jtCEF&OSLf%CF~ohZ+t6O;xBBwUF_N*S05+rhD0=8725D_6u#EeLM9LATEiR_A{X6VigOL}i3HHFDLuSweF;Bc^- z2J|`$=4mMDZ4;JzzJ?S3)6iNTE+D4|d_v%>_u?g*HTjGyod>eflTSnrq!CCv_yw7f=LOk9eKEN?QpZnRRrPOG9hM=Vgj2|E63mY*zp$i6D;Kf}~bZ?Q2jg>N>as~ZEe>bHd zkT!hk_8Auw6LY#!WC_);hidKj?@z;>LR*^$LMlRNuCBOjEFqtSsOf`}n>W9AnlQ24 zEOyVMkczSv*m2SE`l~$r6u*Oq#~jJXw1InVrp7+vazw`G#Us*CN2g7H_ldl7;(K6@ zI*LDYTJ6E@80SBBH8pR|e(#7$CxMBR^pD=zv%_Wk4p=-JOUm$ogBm6(bMr%`Bvrk7 zy8ib(MF*;n9RXe;Ft4tzwupMSFyKY7qkQV?^!soqWF`oGp2GBm{68-f08{X|_-I1W z>*9cNA*&>qNT|ZgA@~IgtwV+Y9PYwajbPrtW9Xj%iRDW;M8v4PAjFhD9udI5%vfL@ z38c#-xw*T`SEWO7#ihyO;3S}$w-1s<)EkHgNCg%&jVkE>Xj7w}pCsHf|8Q=|XqH8-o3I7W@l^e;x= zEX|R~gHk&oZ4f`@e&Q!O4>ne*jngQ@Y6IiU3{=Egz)~`f!j2|{yo%n1Tw7@qN9#*e zAae$%3q876921g^*%fH_1k3zmTgh(`D2g36CKU^RUj{NX1Aruvn78cJ$zoEYOE6>e zXB4JBIq5N_^7Yc?{%V^}6X%z;&P2Wfom>K?2lT%+BQhyRRTd`t9D#P6d0W4}l9lEXnR=4b9V6C$}hm~e3FKE}8o0_v_| z`P$YGDykv5*)>#;92GTD_u+-GYIb)Y|D?h!nHPS6;oyNOJFPS8vRt#WSPiHQqz_Vk zyfRGYRmMeUg02eHmWV<`21D}^lv9PNfp%KGewu@eyMga}ZrNP(cbSig`n zed|I>IUrfw;!P|`{PUYtfJkXfe9|YT0>>JrZZK*N6`yL1HbrS#;yriw7Nk(ypWrzR z*P`#@%}4+06bgn^i2ajES4_J0O;CO&0Y}5n7X*iY#_K%&O&uJek4SFb+C7J-Zm8HruFxDgYECi-I65=#hYWBaBXvk-*h3wpOR^L<9W z*dbzyd)H=7{@3T*Me*Av3C-XOxS&Y$u?#aANB9SBkq8c-juMFh32wj1m$W7C;lay% zX*UXC;yHNSdq>3-zlr^V+FRhv@6$Q7!vGEdP!)vSGrVEk zl^WNfqaxOX!+9Uf&Yh~ZI!HOASv+5gEcLzrDH1*8I)6l;_x1(A^^PFLRs zU%d{q?>B<=Lk`jx`cq#`0k-@yq>x?j9VJ}hYrB}6 zsd8d@0O%uISMS|d=DP{)S$xqjCSA5aP7)<1c&wf$_+}{m2e|4E%F)vubFS zJj|2^#S!{oNpEc#3T9c{eLFpZ=UeO@C)RWapCRteQ$@V%iA~cLh=L7L3{h*0k$eV# z=oE>+Ie%oPG|4SB=u(yHRjj|qe-69(VeO!srQGEaNpi>Xe>Sq(&|)t_Dv!U9;ldr# zti3oX5QM##7Y=g472ZFt5|+?kU~>5?P^JW+W#KGwtl&A7GW9Y7!(I=7g{V%=>8z=C znP$KkuK)$u^FAI9UUsWiQBP&T08zuY2L5vX6}!#CXFN9R3Kwj%e-cVw!-T)a2*8Gc zL6K-*IiUimxkN_q?|v-q`fPV8$V^kL*Z#DlP9g6$EcN1fU5POcho4B_FO&5 z>u0ZOaQU9X?01;HF=b!hrV%~oSs1wiH=>-?S8-SBFRwVOGL~Y$Sx3F#;)(oZ4|!jkj|Ym(;1iHG=J0xIE1T?1 z16j*!UblYZS370Lz7&Cn6mUJ_E2ps5f(3XiZ{(+&F9pMD!6t!xFGgZJTpl!HPC^d` z+QMs*x;|o><=>=Gf1$nV{{VSF z!F`9heigzT-t`bwU|R20<6$#6YB#+fw9QPQagWn_H~w475F6+ai@r6#sak28BeM3& ze%yfhl=DFfi0AH$60Mq^!z&JX5a2XaR)@%4g%RE5AKF#0nQ;q;0(*{j=`^X)U zi-s7AtGJYh6lgE)N+%BwrRhTCB+h*f0<4eHJcHHp!+eP!ro_dv@?b1sOMB^6C64 z#g&^1TCjg2TlC-)>D0z5du21;I zEoW`fM?2AX0p4(C7si?+-IsS&aic7hn1Ml7+8EO81<+Sx;UzV1XByRO5|DUp zD1k?1`Hp&85;-0zY|{BPdLE<7ICQ?X5Q%vcPkC*!tnE?Ib?H8TJ{_|vg`@o?2r8Wp zw)gUJj{1d+{XRd2`Z@9EW!1?NzFV0Z{XqeaE6-lg-hBbG;iH!I-F+thm8RpxjPB&? zn=46j+oft{gaOtr_d?E=%U_e1r~a-*LW%4?Ov^W8lh2(Q7rgds)U;U$-%L&YPUK-3 zbd%jn)t26Fm+<6zWcwzDV>^)h)eaqJ{YmQLH&`s?hMNwGy*zlyDPnE@V_dKkSo8TT zp;!z#+!VYf{W2hD zDCi=i|9o~}+G%k)no8^gx?n*olFT6+KaO-`*Z$kOVphQ}6zcrcq0Fwee2pjNGav%vyA8W0 zpQq__1~YGOzJR);0s__AP6$=P-8@U9 zMOXO%{m10N;o+>NW6$JRI*4S^Y+G;rc_mF*R(1(@^@Z{gKyHq$Z-xchcB+w%***Ot za~g$}Rhi};`6KvLlW5lwl#hL-3y~^f8|@zCKbhh8uQkG-ZZYZHU+pT?vo35d5%_>? zKFw6AL+(}R;K0_bC(tGiX7!FeB(67RuK;UAp?DT~PhNY-)|fB<2-M*c$Futv)~aB2 zEyOds?U<}GTb=1#c%7V_yc-x)mMuu?88ugve>nfZ0J=Me;fhPL9lx4x%vYrjaHf(x zznEPu+8bLB@r#&HmfkFLCNY-7Dhom7Zwe_$5D!cv=tCSR()i^r;(|8StU_KjRJ}qee(oykdu2T0A zQS>p0=aIw8xOjz-M^+OuLMd6p%5Ll2N^EmA{|cKyT@>GHE^;tuJZ|ilyRLHl@6F!S z9Cb%5rTke{!0IPU>53@p)gx83wX~#yEoUYJ!!*sd3a4X8zaZU*w6&EHdZLJ29~1M% z{Pd>QtaRdBcG)pH;(I*7Rdpb8Ulmlf*eP0AmkLZCm(!(2W}&5|&8}cyDrj5Ue7a6) zIvai+&HPu6_`ea3wQtH*<&>1GDlQW^_*YZTjrJVN2Pz5n(^wbJ)$6>MczShx?xR=S zA#WF2C=xuJ+P=MShM?lQZ*84(zDH!fdT%G9jKQHR9r z+6xsoLB#=F)%&$mAl+$bTU0ADk=De+f z)A3YPE5w4!{<`C7TotGFWsXlo0m4ZuKto3cXD|?*~%sfHn~u!azum-z~{<(`jdYrBxU%NuAeZymJb~$mDn#i@*_C2CxJft? zdhAqJjwEJhWZSj?|BiO0sjdO_+B9BATUu0E_xT0x3*npI z8miLQ4qfMgH@q*)G_~Iy_}E%;ilu7a8Q83Bm042uhS4QuL`2kS*{B)gY;J`>)WBJ> z&gEjO`c9W>A^mZ2{s^j&8nq^uja)hwFD3P{jQ%9*f+ISG8mLWt5RI1??A<}CIoch*k6~A3-kkShab*0F_ZP14iy04T zpx~J^sAASTSC9hGFqS)}(M?&fAj);4@cG(l{?b@DoI+8Rr&eG3;}vCsfujvsNL=ev zsg=Z*S=@`ylnz5LJVA0A+Hl|Z?u+(ezeCp`AUdBxi=#+B9-lICJFIijgNX#x^>YY; z&;lZK*4OfGebAUuW@0~S+;5}5-@}_%q#qvv*(_E6Wc$|M5U8W$^(5ipbl&2Sh%eXY z7XWTE-Fd>0y^&2d_(8lr>eiTVN#TCne4E=N(t_~TG`_@KzRePcg1LXP)BoY&^Q1!C z-LcpucXJ8A+ z_i454cl5YQ9#Ua~OXzhq?-v52HvZuFm`Il6T!hs{lWc#tF{*rdW~!Uid?Xpg7@|rv zIMScPee5pWWYUExv^DVa9t}TpZbvuj3g3;*=903}NPv)v#~^COo2Ui%%Ss2-ArH0v0!?|Hohe>wSujG1Ot)3#Y$n_H~!pw4Ph z@a>6v%+m7m=0y8P{v=U9=%@1~p$IVm^+T7;9GJrnmHH zu7X9<^?5zJr}&GfUovk}1qK9;Ap@8sS%;N$18(@i1Qo=7FV=Y|%XTMDKMz0{YZ(rP zN-C_-z6bP*uZ|UJtqonl=;nEI=X5eLYt_?sWprp$$;yPWUg>hPGfqX2a>IkCLrk+i zLh4L}>sc5SYgXB-^>AI}N5tMnMtVq7r{hdqeckt7uw%_KJNwB(?Sa|NL7dcf#aYmN zkKFZ%h9vZp^p=vY*OoMREsNnB{~?HJgFsz%{`^-#P;Cg>$nkk&1pi}5s?S-NMpVIS zjnkRyeJDel1fh>yVr5HudE|ogv6#F2j#O>i!>s#ne)t^o;yB1%-2=kRw5kqynMitu z1hdkgXvrX~=U{0}xvw5e*5M1@X^Q1(o8fny;SVjf;+f{Gv)$p>c#V&UgWBp?H%kfv&^Y>=RD!Bj9Lofz=}9S-P(@ z-stU8KYeR^^|`CI@6x64f;PnQv1cOJ(mCa+(~pdh&tiH$An6LEaSol!2AVNW*S~WY z3APHXkd=w;+#%x8gj*><3ttL;>eRlg$bS`DQ$g!f<}n&mwqvLXp-)JvE2x;-Y3!*r zVs2BxFK^lHovn7BcR)Fs z*K9)5+;Vrd^_-k-Clayb(U6E@%D z5|7Ef)JOh9INwk6ZTXTpB(aw^t8vbw;nPAkx@Y}3%GIw7Ew8fIhu=ewXuDq#W86C3Wr(}*gf>bfJX9l0 z`u#V;~r{#4*%o=+I-m)rNzfYI9!iA zw=ukn!Bipa;GJ#R?;cgPLKOp#-Acm4wga;ZzgLTFO>y2`95;i zm_~h7Kl}o1m^QOvP`Yb{;qcEZ7JA0M! zUbT*UUbK=C8Vs%~E*n0cl<>7zHXd=DUxBTjD==n22`ZdNt0?Sf_Ex>i{8z&%yK~Qy zUC`1FVKUM~pgoD6X3QoC(X4$f%0c(>o%1y2<$aCB_ z)F*P-jxZ|jRh|&ZV?(QzI)tJCV&;8ygzsT65PJEjN~n$jIH@j`QjILzk@7Z|W%5Mu zh!arz`lBAsiXlA}g3sx(be*C;=KthgLN;o4HLHn^C%1e+_pWjs9Ssd_q0SKH?$!-& z|IRmzKkbfp`1K$OHdZQoa-B&!F?({V_m@Cz_Y^EAYo zVL0T(ussQE*Ax%{iIm(NF>$XI47(GHKAnS&WjicvOZL@cEZ8NivVZO64;awV` zBrHl1?#{~Qqf>uQR$=3-oj=w$ifQ%A(kUG$$N0-?MAp*z3L?mklJHE8uQD<^SazCZ zhv>DnN`UMsg>`iHYz*^t&08bocjxf*3P1~nueCEqUyY{>d z-r2jK=PwwnKGJO)o!zdspTxrD+ZT1GzZz3mC< zKy!z$FK5FZ{2r{8anf}9;NF$9=fJK|a1-sm*gK&E?*Al_oTs z8UA+SNZc^I>atCF6#V@^MDO83u(@F|(o4x|bf8%PYBI zGXIZ4m+~lIQbgSSGWib1w z#>rv+1@-YBEDFQ^s^78a7Q#_xRi49cKoZ|r_!aloNAf~Pu^)X$30Gh@$q!Xt#6+5CDYjOoDn%-3!{eN*87!A&P|+I-s|Z!pdIr-- z^R|8a9dcBq(vaB3TzQ2EJB?<0K=MN7Di3n%FCdg-kW%vG+Bbn#I>TfFD_w}wME#UL2%0@57^>%2G zdH=7IYRzBWK^Ii*8>SX4cIo3Hy|w`ulq;H=f*qf?JrNmulPi(d z_#AHEfQ&=oI0+n8Z@}bygib8Wd;hEGvVUiF03->XsS6SiY7w1(l4k$@2D&6Cfvn-W z4~>3P6cbi!@Hqc2mG5=r#qh&Zr$uy_ac*jcPpnPU&eD?hUP-sC`7CA%LoS7=^fWN2 zCv+gu4}IgaF~^J4W95LzYg*bkc?cfE1?6v`D+6+rftQ4ny3p~|wFdA9JI>KC{TuDH^gMijfA@u{zJZd)RRK~e7j=ak*HFHuxpF4Ew!Tj!vV{B$v-d>{-I z;rA|)W@TrWrRCH*J8?2KHKj8o(tQ}q8XY@q$RX5PTGFCAvQu}Nv+P|K1z0aj>lq`l zmfitG+;jEWATDVHu-H%V2R-&=mft-?|5HO3+_&_?nJZ{f+He1O+ z2Y5p189G^3X&+_S&Mu~@QAg-V$_)6A<`TKV0-awTK6!9$TZbn4IF3he9;<_C6K!uV z1Kg_(m!FVs0_#w6BeDD{pGL5I%ucX1;c>S)P34=;NMsH^aVGsNF}_!Fo}1AEpfzh< z(fP<+pF!fpqy(+tA@xT%@@y{op_4o171J^zA=Yw{_p+0_5A4$!%eDJL&}i*59o}02 zwgK|4)?s+4SVBeXh~eS>na2ZNu}4HP$Blv`o~s+uF}X7Rl*gV%Bj$rgT>emm%g|yr zBcKq=qIW8O)M|+Mqi=9f@%@EEPjj)ob%;mAPc)WIwlt4JXb<}9airnr>XC>J^O9VI zfDkO=pD>a@%UioHfzExNh#CIXl6_8)^FqxQa>A)8kM>ke^x-FC!s4Qw=(wKI+^0w3 zYZ`gJhg(VT$zTr77VXPxWK`5lUd^{#E$}1_pVbaR_kzVvvLHMc^~H;|AZ!#IJ{7>` z&K7?Y=IgHNoKIDw@n^;9(4ojwW!r*00s7Z6=17;-;9Wpq41MTu&HeVy4_m>iO61~t z)k%TQ-qohC1sCg#un+9_K$^S^q{#&-u09E$M(9V*V@hC9s+MKtdhJ&)cOO?=nS)1b7--nHC;GA#t!Gu$Oa%N$Fzhw|s@^q75+SUz_UNiA=yo+mS z-S}30IZSj3hd?nmD4N}3wREoB9@*G*CmuwlrKSDtBT?ZmAkoRo9uRtD53M)Y+|}Go zbHG zZzIHpkev|ftaPrsf2X)X)Nb-AleTrmkmxDPQr+R9AA0=nKSrcTdVpW_0fVE=3l&~O1z8Ja7rQqE}QkX7z5}g z{rXi(Z?)~9e&ShLgOZxv%I50>k}<|XhMy#&tmEJv<91Hy*CEc&VjKc7A({#hvT&q+ zg%#EebXWilV?a=VoS-1IbmKkSyoxf!44138Loj~#q$VycizWyy=dc(b zY;zrPIdE_?lTNm{l!^AK=m3f-HLBG|vkj{j^-{4cvH?v4jAmI|&NgeS{ch32W?*J& zW~o_PTT^!**O9FgJI&|E`xLJ-uY&XQ5&6*ToYj$n!dZqUp7PtbRvDo|KF7zfZXV_0DKAokiKN}l=zVA%zrfZZsp$U?{_#b)a?0ugq-1gY|#pOtbZ4rzA2Km)#+>UL_1u@uokI>1!uC&_W z4o2Pe$?Hu(^}fmZ(*i(yTD_6cWREd6pQPZc_%LTX9-(U)tjHnwl7jlo&NVMaNVBHm zywJMYL-TIp8Nk_sC5w*T#>t+=hwfGqs|#TUh<@myp8eei^UY>H1EJR?e9LXfW1Q3sV$j*G6~S&EyWG9=8@N1h zVJMp5mh_-cmJmGkS^Pkn;zse_jMk#FesP+sF`=3zSKYwzNA{C}WBW_TFxDjEHhM6G zXz0%V4ezO))lY_5pES=exBP@!=NA`L&DOF-4BCkSu&YkaQ%gV>%bB;oBPR8cO zNw=;Zn#-i~__`z{wY0P-H_X)aqWLxmbq@iSD%1z8qIq3k`91LA)hYU$Q&;ei`g{bq z;vud9W49{&EUf9L5Qclh=Y&pB!7nL2Hw1?vn7vxC9G8a;KGgWHOup$tD} zkCtjw>C?27l(2SwQF!Yz2Z4oS`RF*3hx*)tW6Me}3_(!1t|NYdKQSFw z4e}3D3rF^P^$rApNS(3Zm0oBiqYS^a$3La+*}Ap3Z7&*Zo7tsvOO8aS*(7TdEqUjD zQKut?sri7Kkm#y?WnGxIFmr`Th;c6*>n+Ed`hz@9y3{)9YRelGV)x!LqP25(w<3l* zXfy#CvRtKe?>o{FjGvu9P391ap&PDM-Yiq=e-bVV zw7bAu12Re@(dRNg$T=nh0T}yi-AA;*~+wK@M(JjqJK2wvP<*8@(8Ggy%RMwC?$vF8vDs@`JZ1(Qd~R& z%o+<&IEz}hrvtFYTVA)-6pcl%RxjUFr0Wewtyst%`&m_!V&2GDeoSMGL-jS}mYtN6nJ$MHB>T*Q(q9UHyo-KK|u9iyyL@I2Q&o5yiKU)2g zPx>Bc0ld6+oi%=gN@|L2s;sSOtm?6IY3;=saz`EPYWwjK7sgGk%!UZD&% zv1fg&efAtQXV?6z0`Z5+5V9YDTBG;jx75o5pgy`pCiZ?b?INdt#X3dZZc{mK()D9r z(jj;CRkso)jP{|r(%APL!}4x+3|x)$3~#<%=KH--)f-rCWsWGK+72_=?mC*2_ezAU^Wa;z$!7Jmak9sIC3kMb^RTuY zr<{+@_IF0)g*w)pr@{Vr97(!&>CNXr$??77B9My5=(s-;bW&j+n&z|EN7|D_)3@z| zkt9@X+KhQxu6ja$@^x-*erPrzM-f{pvpxbVQDYS^Arguv!>EOG5s7QRua0q?U8 zwuAZl2kjf9_&iPe2HG)3li;Ek%*AsOv-EFb>J99>-(p*ge59xFvHT-7TTG-knocPhWP6N5&)+1iRVBj~O?l1fNsJ9b5K<@hj`!Fu z8BzBf6m*RytdE|X>CB?_4ffAvW@g@tqJRhu#zKrM7ds4U`fa;D*5)=I1|%=rEeC#R z+^fCc1rTBMJiPn-R;0>uHQS|MAU_1mZT}syET(6awjsZj&=U;*{8oZX+QK;E{j&4w z#$^Y0nZ@AS3s#=MF4hC{Uq?5g!b&|`>B@LO8Ik3FF`__n=S2m2Qc_{=uZx|%c0Zx> z6(2N$@%`!W)|2#YZRMJIx>55ewW#Q{qQYMnnib6Q5U=z{sSFjW;%T*gMIFI zJoccFAa~H!hFOETsmfzj^1j8_-75iK3RIjd(^GEc+%`r4;3}@Em8z3L=wuK>fOA;7 zY5nO;HNT1iM9*aFop-(0J{qPP0VjdlS-VY{omPR{9(dgKczr;l{e+Wt6{=_!N9@mM zFi_ll$vwq9R9v!Vj@iAonBL*#r%nuw=$+gz6emgMx62CMh4$TkOePRnr}_KB;JX^| zviEH%K!sAUtVf6tQD{p`g_{et&7x1G(e=!#cafezdw4Einlfj! zU6Xv*)0;18tkLae3!n70?x3>(&I$#-R#gYZkcT@LcP&6EKnqY|2$!1{0lvkfiO_O+ zxwd)>VqaSZwQmVZ7%OkUaz#M%YP+g(7Zx9*_mfH~1GeBZpe;|KR1k4KD*pOEvjAqJ z#DIiz`$kg0^II##x62(cy!xqC+Gyuo!)OmsmAFS}$NIj0D5X(YQz^0S9oCDb)kJ<# z+ZX1gTxLc-U05hDhSN}hf^-t##bR#xcIe(~N5oB@f<76>f#3)JK;5xPuTx)bySO?J zEv^A?ku17K-%uuB_Zku=qgnfxwDjz=CBDqN>c=M6vlE?C)+ZY<-Zv{MOFDV&BKd8+ zxunJ}nXE*!VHoZ?NlEHBDsp!$M@Mi7pLls}fRudat03(kJ^FcUM4Ho7q;{Dd%So%l z@k?A&Ww^Mt(y6Bn*J6sP2jQ_Qh}Bw<;b{^o=cWJ2!k(RV{F>$sGxx~r0-#T!i_X*3 zFXSY;yXju~ehb*EPe#$Ag8M{W*E411c`Pr#RnZ*>Q~24q!fQV{!;fVTKfz*TCm(8} z@vp{8%SaBf)K@u@J;@ev@Dgq(ZfYtYp{B84Fp7+SqPL)3{)lDekN0yiv7cn5RzaOn z;hJB3G^JtR==Q^7wMqurz@&yf*&4Bk9R87s579vJmkiXFa~kL^CocG-f{1HeiQvfl zZ)@=Zy*3O$I>ib!4#+u;!$rc}O*e0lb!p9QunkRnaN}&^!=D@>xvt1H251=70`CgS zg};jlK2V>UGv^X<*B*1{K1|pKnujySSiRsKJ3zeVBeI1g(O0UP$ z{4@n#6_XcLR3J;jP9a{EQ~skwij7ug+2YCP_NJ=h(h28sfcI**!I!3bw)8F2vl%A8 zx3~8y#UNPwQ!hqkFI+t!y`-E%*9jnzpKBqv@6==Dr=_)h^7r`@`Uw0+iU;MsfL#NP z-BU6WgBW~Y)s@{f#g2ME0f#Cy&jt#2JS*?89&W;|-e}%Zlh)(^0%ov)wIm85c1*18 z?Q0iGNlMLpZvezzo|b=jJ)}(2VvEl` z0hnQ~G>A6c{WxYA_ouw$3gQ%W2rR#!ji-6t&}6*h-_`p#=N3alE5+Xxin9?dp{Ha+4hWN8{Xi`Px)hJ}>`2?7{w80*!7+R*HNw{r`EKOT4{_vA^n(nLJtmjj-sw8)8 zJ8_Jsd#|o8yQy+1qyBv??TcYcRMM9;1&dqX^h4y@p3chy32&qE38m-fk%TMZTJB|l zjL3C?&hHLoiuU8!>xLv5-4r02XydzUu?fxWRs8lkNOU0`xAU|P=d0t($aGxhVg@$i zu3a86EB;F9d6R7kP5p}&7mM8CaQ&6VMY;6G+vWrEW_B~bq9NN9lSfHXG!XGjpb${` z0VY0<;U7r<%`;4P@}=oz6>Bq| z{`%Ix8x7X6DR@87D^eMEPnZ9@fv%={gT)~5u~mBBSMES80x!2$>|fuivUU~~xuckw z7KXCfe48C<*1xJe?tn|KeNOEm$7k|5^_}Xl&WH6}I6<`k1RmP_!y+pU~^;fwK7`EEBVYqA`dW%wY7c5Z|}DWAcK_ley!Aj z@VkCI9MtD5R5=nc8b@g}NW!KZ}2gJD8L;VIW$TpXUrlJd=Q4=)vq)yBU6sO`H++96Fq>{St0>+B}}nV%EaWgn+0yVrRC@N#~+ z@KHqW1nG&-cVT>_(Bl+Ud*h4TH@BjeJ;-`ABmoZ>}-Nl3O}%()wEThPIDc8RJ_1foD^QuaFYIg{~Jv zi&Uj%{n641T-oB06fb~8Qpih5hFI5~9=X23!5jicwa<=0qpd48Ha13GRoI)?7e_PI zlQWA`hX)2JF#~3hsQ0am7oDoo+*|e^y42szxx_GW3Y|nx8JmuOjXeg$P3x@Fgphk!69!)}$oVn+* zpSY@Z4|B52s?4sKd@!+!?ncyXC(bm9+7Mwbe|891jWok0#gk>0x3!Y}IWnw(!qd>x z@0U53nuD^QfXX>T+ABjgdo_&QL4;X<*K-DMWysEwPQ=VK8mnPEA>r|i`C-F35MW?9 z+#ym+K4&z(@!Uzj6Yep5=@Cvmi6UQJNCmoh4!{A}bJhXoSUGc6NaBatnslkbCQQCJ zUmvvOp_(QGv2)qYdm0rH;rHTQW6R?W()%HS6W6jTEiYjJ$w8#e>OY;?)}5c5M-fgJ zEAn563o}YB0xLJXZY1M$mO^rg#H!J!1#Pge)eHQHif6zy+pW0a~YQ17V+Q# zhoL10Fg>HUD0u7I%k3%~4ejP+V@`7LwOUrIG~Ti-ue-WQm;+Ed_yd_4T5TaKGLRr% zx~o<@($d`PxBabzL~>9@<`s<%85zHGlxnpRqt65EJ&-Vw(dKxLn_6IlZCR6lGgmR} z#hF7u&FJT`sv3Zw%~MMK=mbJbCLoN(F{qZBuk^2ZV-`IXLgpbTYP&~yHbqG}T7XYq zeN}!xHUL#|X;es|&+!x@ofgO+@dSFlZplSLzWx#UXcN2{rQWByDQUivUutf71@vsY zzpLm0%|cmfJ0)XAdgXKPI?O|W(q^+|<1s}YHM^|oHH{}C9#*uCD;2$*n>>@-5(!JJ z5jkr=UerFL4x~S?f6G2Hu7N__LdQ;2Al&{wcNcH@z|q%)#H2I%Z0_B!moKd^-K;D{bV@XJH}i_7KFk^YS^w`|kEFtfqW>$M~1>NXG-LlVn@V!ZDsuB@wH z4?=_1nWH#0H8qd-<+EGCw}EMcrcW92V?NF|x?tM{Yc!VsiQb;{7#E28+St4|?jRT8jB_bu}gO=N+ul=SScS!65 zbM;@66gD43+^Cx5sbzb2+?wzz!%DG>)sDjYn;bUv-eGzLBuR%!ZXMvMvcRbWiMT)L z{?YVt@*vFgC;ITzkP`peYLY<{NP~Rahk61vN#hghTr$6d%-+%U$%*T3_m~h){B=do z)Kn~$;B{I*L(j=9!s@4BxqR&4%Fa%|LItSA;}SH~*Ct{fgiJVb(SA#wLD6!f$v^bK z_u7BR=F=;*uLaf{3nB?ebEd{yuqY~N_fHt_85kI%&NfOlXasn|%R~!fY{6u;U@AwM zOV5w?@R?>3P7L#$0WTCeGEw*3V!RTmfI~7rvdpPP$sHe3$>=$ zjrD|T=KV!bcNyVN!0?bo?N@Ta>}0aykw3l_SkW^9Bt##&B~lK+yDc?;VVIZCUmfJ@ zTKxA&iT1C=-^$YSU$nQ2g^mP9|M06{Zack;%bLq4T*8Sk8=v4o9*U;H_9mj@qUCml zzPT}H(rUJ20_h0yA5wl)wXZflF~%3csCdk>M>N9}8*lyW-{qEQ81|nmuT=4P!Ut}f z%}4NnqSn{d@M#fEFcJE#Dk9fDRh24^Uf<)0jEvVdE~jZf$=>}0hJGx&WL!U6u1IUo z;~3_1UYEq{<|lNK#=-xR0_HxXfk!2zZoRnb&injRG#Z7=d$4KU@%o!8yCVWdpBGx~ z58OznyI0e@DWX;IoIsp!L?1pr6k?X2EwD40$G5rgu{Vc`U<)Av1lAaQNlAM};*lR} zzBTRgZ3Y4gnPB=P^JbHbqGgIiZu1P7he`n%x5dbBOHB~@4ey>mGK~|j0TbzYx8#ST z(N1-q#McIPD-qNc&)oMX8#z`EwK=|qJIZR%G%+0gxmiXC4emvD6Oac&{&;IQyYr6`s^jbmP?m~0c@JbMjB(Lke1$WyHOSLtw{p8xBq19 z`Br1#LbVAqO6h@XZp&eU=vd1YLL84WW@Ysd8lm-m@;BwKP<1eilI!u_RaA1a*`xhs zXRI&Fe{c;t_B^mxKUO&oB^8pYY(>aS9${kzEbE2VyB^P@eS@qp)DMApSi*d6>MZ|w zg?1>&w<_+`4;p{&c-y=Ft$H*k7C37j2xgM7UzWB^)e6VU8a!6#=%Tg(65 zO&ZrN;x^}Uilg$N^k;5e3Oj4Tf^Z3gM~V*`ug+^ix10}yr{`fkB|IyK;1yo;L}WAt zbW99<6*72?f71?IE&H0^_R8l$btg9VNTJ&eT)X<32?MKZ)64D-NhO;R1NMG_pW<4s z>h|!ETA4JiU5UyUh~_0`){==)WmJ&@VXpKoo0 zMMA-}j{})r0V6!x!`Wq$vOtLI#6!_0G>N&p{J`Eo@u-ezkj$$d%Tk4z&mr%%9`OWQ zZ%N3>5XSd^&C}9XK_%^S6#VdmDe((?h&9Q05z*XD8>QJEscDypfdam~3dTiBn!ZRz z^VP~OsckMBr8QR@iA8gKQzuCO(t0OPIYvqMU^!zbqgw@?m;WW9!@)pwHxmk$bxdom zrW-&8P&Cc5F*o-6#^UBY%Yg2+yd!S#3Z+TbW~@j`Y?HLINl`1`S>4< z8T!L(=J7tA>7w?_3L=J7bv5Z(SRCqjMXzaiM1uLph?M{)Qd1sN!!N%5egcy#Zwz{v z>1Ut%o7qdLxaZ@s7Kr;ECG}c%YW)CmgfHYB@Bu1@f7^LVz9>lfaa~9JHzR>)yhhC) z$Gn;O+wKhf>yKm-`hr+Sz0a}W`j45^GBsTD?Xq3_}q?L z_Z2F=`Se@MV|y?{JwY{D_SyyiO^JGT@)R?Av;7INF{A;%+7R+NMeB71iS>ROosQ_~ z?*OLc)x}drC_vT*868H38U0Gs@;H5yot;wvUR8v*tKjiMGw3c`cyTGwNUS&Ks3ZKs znj|!+*vQ=Jyk%uS9fwOA4QG#3xWndk?-(a&JVw(dzv9~b;4LgkGMEnUoZa)Nww`#SF;56eL+-?5;6iqb84 zQDD8bB7SLl`NYm}dj7WO-FTLfyh<)m8ISu44cS_S#+&RcFiniF(NIIr11~z{ zg~fON8~zq8xsv`rp7@Mp6Fqc*&x#&^7#Em1&&)ECn9YoAt9mTVcf7jH~b!+ z73-hAmY<9WejkD#yEr<3)`baG=|JuIT-Jis2jgNn*D7?in~Gx52;KLsySJ`~FbGBl zcllT1Ps#Xu79{L;gU>)&ULzyp>=m&^eD?2kU9Jl_pgNxCpWKFg&P>4EHe4cubUj4G z5PuBj?EVK)m!l2RBn_LVYP$HX=1n_QbeC57ZKBM~%ni3Ay)$eRuEox7jz7#ajT6Cs z)!Q3Gdf-(d_kRYl#hyZii?rpV>NU#ESO9lgrrtI+<&ShNxy-Wlj;sBUeH&KGZMXY5 zVOqjtPu>0{nM(Y283dCzNW1W*=E~-F4n@r@teQW5(rj8iogClpZkR^{w*`*i2g0+g zyo`A~JE70lo01~#*$<2`zgcr8z5n_t?a8+>*x&loRmdn8@meqz&-D6OQy{#pNenZcL8b~lZnSak%G8%E=^R+mZymyNBJO1OS;ffn__ z;iws+0;zI1BbS)3j3vkUW#KL@F$UI87NoC)S3eW6rQ3eNjCOrcg{_B^&*MUb1sWd0xGPH9)aAa4{b-)OZH z;kW<(ZTPDxmF5EqmVG@APtUr&8BCmv&yG^|>Bs!Oi=*`)>;iyx<|$D1=}Ec+Jlc8p zr{4=`{{V%*;{Q1rxM{!t`7b}km!hvj-V0OcI{s?_aB(a<{NHmOt#^QNYa9Js28Up5 zE~l0f`bq(|JfpL3kALj5LrxN^NsKHG-6PjOshj~0bCHY9@w6xEJU~YzeD=qAMazh*KdFdc zeiY4TLe<8vy&qUGV?N|ie}TpG!lJwfuTBkR!D@sVy&sHWgF_KZFQ&m*fqEKqrN&J? zGMeh~^9rET@P377uDGij6T96&2(43nuz44T)fZQzxQk(5`{^8CHfAEo-9F{CXzm&W zdJe{?x|d}4HXpUP(C|>cPv$bc;5=VUgzK*T{`8cE=U~2Z#R>n|uuhrOQkW9$b%C&) zo%_$8!#KM&hB@b{_X^o&yk(Kd4`~BHNX8LD0hgQe(8~Th0o6b-mx*pY!75@2*7i z3Xv+6mJQ*>6hBcGdhK-8z-&8PQa45VbjCAl6yC6Ca;$}wcE$GDckC{wOsU+W+k^G@sT2}B6dTL!gOSXUg8FTuds(2 z%_;CAsoWzKcdKt(AUL`e4NE;rTC(8UnHm?<@)N~PrwZ?-%=igJ#B0`%iaP4K+YP=* zaWIc74ax^ylu>b2;@;nTf1;3=Hk?-+3*3tNJj7gzszjt{Qk}@NADLFGZ||I-!9xPq zQ^<*X`@Am1Mh#+HcT)Urw#M@#35NQ=^TS-OlAp8g_+IO8(*5j>ne6@9Pm4}ZU}xHL z5);oDU)z64t@w^jO`h6b%`DRCw7*e2l-Fi0OM4)f+~XA{H5EM-)yrYZCkdpzHk3A! zp@}6|O8WVSTBA0gzsURl75sny_>_W#s>CJLB@KvBzh8n-_bDHPtdY*ddoN1$xa->^ z5^i(6iwEs1yvBzTexl9(c8#{7m{VG{c?DHF-QumC*c5}Im-30-pD_*zr28O_==A!N z7o2NMSMpVRqco~jU~n%U=L$dE4Tr+@TwG3}uRvLNxGYf16FOz?rKei;(Z{BDva6Gf zQMIQ38f`AvHoARj=8c^=)Gvg%3p@VU{@JsBJ4z@HcVAT^m!0ZQX<|;}C`dt__~7L$ zenxF=wln9Gt(*tF-sx=-e$u}a(I~7OXBa%x)^ri#IM#jGpr~=dh%*-UgJjOaj+!@| z$|VDb2l7;`AeYmfx6+ZfkHk|-IgV(@M^OJy)A;Wj`j@fLeS86FHj7^y$Pka5O;35; zP_2zVPU8i0Pkaix5ojJp664%@5EyS-*;w;oqbLR5S@Z~p=Ebm6 za<2&b!m6mcU1d;{$TwrDx-{j^jEnm@iONUq-yN#yQ#n#mM?v)cO zeBD{jK=CGzyH;*I6~?k9dXtxU5l?#bTAsp2$9xXLT8b!A9yT-|HxXh^U{GRKEv~TT zP^K%@u;L~KX@7G)?%g=wYm6XFpfe}6!)JbBsC>}1C+ykw?6E1tZF|}}v3N}GgU6v! zgWkb2tbG2z7s1`rEnrg*H%wHNuO$?Ubx$Z2j~Y-Mbxxn}R5CC5)5;gxlACKfKM-jj zRWlOz6vjs{YF&I-zL-Oj>)^3m{qtb)Dzm_l%3Sh);^6;&k9ikJm?T_Mwep&JtN57% zhhT+1WVfrivxAAc($^3wr_&usw6!cZEeN>TVI{}2`*;55J&mKS+BPtbL`Lv6Yz-dAZ z2Ko&cRT*#x*w@8z%B_~WMrbM@fAe{Gl4(BIu$iVolBY;vcX0{|)8;tD)qLWtgp_ zR9=s*F&k1WpYqVlH($z+?3>LPsTFP{ye=7z*BO zy~dNzkqNY*3JEKv3JzsW4GUz|axMFwxh?aTP5s|(>I*esa$Cn-{l0hGi~0D~=cFcZ zfP0gO#B5kFf!n11z0PLSITA=VmB6Bv|COf8QM}{XO)R0u3&DHg*~|DP@KB7JKH_(8 zt}WuxPLmFNqkc|kq-Bmyk}bFe{{@THsM0}y8QM~Bx)1$V+jsY)arE6aiTd_L?j8;Q zRatwDODB1AXuxFgjAGCELq?DnMUGVHE!HN*P|N(DKloBw(9zg5#He*iC?Xo!98UMrpS z3zg3OfOkV7e0E!3W(4Q*T>q3Fz)_gmwIAwn693B7OR3q2L&G&%5(RE8~2)X0{8Z6{&rh;R}?k^>`anAo9ymdU-H|^-7ZDL_L>W9 zvCK6QNbO=zek49j(n27U{QNtO{d31O+;@PT$$|6drJ_8;wMBas!>oKU3%gxdFz$Qt z;gZ6`EV04Xci+n+K&p`}At+7%O|4C``k2}t`M%X<(*Py~N$0-)^WIf$SkOIuF>-rN zQCQdc#QTLBD085JmSbK*e;3ESw(jK$JclcK>zzucsiNB|=j*7u9r(!Q$|M_eGDqg~ zc%fntbZoBgku6gP=hr1ZkH7!bR00YR-)nn^0A77KJn&$(Op{piXe;`&ybnm3Lau^L z4TpKg9Ixf?cPCIV-H`9Z3b>buC}4~l z>eby|B=G7k8q!A^6rd7KnQ98uf7*+V45XY-x>x)VS$4jmlx(FlDwT4r zFk_xv%^g-_rbJsF_V5jcy7Pe5!QK^f?Chs|tw=cSEnv^|Q4R+WVMnEn9iE9L68v}J zjH0qxdnZXAsmnyM8aH2Yy>ov8Cw&Vke+#J?7oOJ=>gkNm)P~1$bSL-a?aWZ?a}t9T z8>1&K2hpN49*29taD=Htql?-4qi^-mlLIy4zk@AWFKwM~=Fa3Z{#;%MoC2~DaH3vp`Dn-DXy-mbqh)Il{yG`{`yi{yG*|(KW$^1hq>!Z;5<}0 z4PBjnH(W-_8f%%CnkyUB9tO2X7aK{w7Z8*`0~qrLzsM6Y!D@Iu9^RM<%^`VAtk`zN zrF(#c>f=|*4t-|Pa8d%n8c5^};bf;b+p9Ukiod;~t?V?Lt71aOF|WIj`DyBtN#Io2DJ4m(Y!7AxI&e$VApl_e0QO4pcd??cW<7+KIDKciCXI ziR!@oVd!x8m7#J=iX@*Z3?*H=J^I+A2hWT`e#y2;kBPh^Is$DE9N^4x}?z!4-A|o|E2w_?`_Y@32T+ z^#pir_n!r)(cg!5FUqn2G?1iIesEK$Gi z$8l^Dh^oauMsQw)65FX*}mz!++#dO3h({X82+v^--b2Lx}k7Hi>ThH zxz9;MhoF!7N2NeX#VG#OU=Q7HQhxKdO&60cknNQ$5uZz|9+4~kwK^+Xm0Woai%Etq zy%|C7>(#o$nZ(D{(o7L9v$i*H4xqvDR-;Di-Qz}}t}YV$kekyzd^L-D6%O;JFTseN zpgNoVcL(Q@LrkNsUqzP6=4#ZsE;Xip0EY8S%axaD-u0@v?xKcYr*GT{HBo;kQV4oB zO}88QownOmh)dJiPFMXF{@|zSFST(w)z*wlI{HLm6>q-_HCJkf=ch~bvBpVv16N7n)UwUe!%TD=MB9h6xIhpvlDq9Lyu?6wsTz|5^( z>srAf;L?`zNwYE611Fyh`EJa|LhjK?O7DT`WE_8x&&zE`)H+ zza%?bPtEPPML4Lr#?)I_7d4;im#>pki#9u-RJwsKbak7~=J%h2v~3xb%U&pI=p`%b zgq-NKW7ZB`H>TE-In`LPK<$LotzWIBt1J3SnfZvN_mJ4x@#p7_bI}hJz zQtaly8MT?ZSuXc~n62I9OYssNb+4iOSJ3yLG6JV%cStwJs71IJsSe_`RVKAx$+zmz zM(YqI#A^-N{H+GDhZ$Es7ufeRoUz@^@C*F`lL|F+*~16v{tmwon_@~{?lho~VTQXc zjP&>Ykj|JY5j-lyxN%=8&s{Fdlwtf5qh2&zA}x>%;o^qO*XQXB&ek8CRWb$gKLo`U zYnHn;Iv$QRTAzv|guv zwDVv*b=M~KIx1$QMbp{KZUciVN|E+nt>#2@S5Ap;V~F|gPF!!V1MUY=pUV^W2PHqO z#>^Z#^lkl1l_{UQp6IQ2YNNrGbW^iDo;?PGB3kn~r{?%>D?T7v z{_P~urMftwVYc4btE*32q;lvgkGJnu*raZZtw;2?CNfq|h_f90@-GQ`fPASBewc3R$^To7)TG%6%n9}bj%rkYib?#7m<>SoQ|QI3|kw7Ab9-uDM6ts=ivVIv>E z-tovZxnw@O(cJUBE80!F#8oweRO8Vs3!Pm|7v0jxXr$B&STjT@lG=kXRbLUqbj}!} z+-TFy;Tl)86pIoQfsby{dNL!WlKeKk!@KZW`syH8Stq$E4J_w|6%1y+6vT`Ceid;L znWg}(0UNCEkJ7)^Icvrm&?J09tdGG?UCA!eEFO>8Wpg9pGL0*~gf3F!t3t{&pj-!t z#G#zCUW=$A&GX$_Sniodjb2a{PrL(EVRGoZ$(nwbDQ@PxD-&)_e(dC%GvbrQ+@C1a zkqXa`uKH8hsTH@IoVfl_BxqHqr&${sfsdj`Q5nV+WjLMf-iD@l%utcpe$cn;kLEW^ zXxYAQ{GvC^;(^r*U*W%|I&y#%8I39H$Lm81{3+bnE=g^iPcPGuPlG))Y~)V)RC-xd z%s4LiHJBs z^RRq56s`Mnyu!0cd@Pvb(PkCE8JC1fDGsjx4#y>3vL*qw{L=YV>I({q;y zY#&Nv08Zh{AxszA2u3x7!Gvfb=?cvKcW1LPZWX#$)4C*(l{%M&R-M@7nj!wyvsSC$ z`Rh6Byy@iu<|(=lVa~M8GTy%8`z3jq^7GAMoQ_6w#Q)eqG@1|EZ;#t;fAs#@TW&ebf_}4mTf1CgBlA|bRKH6@r&?k3 z^v>trwm7{C^zSYBo@h}cry7gWZx20Mcnbwt)DFaqz^}(%$IDlI`(`b0)#0{z+TVMT zhYk9XY!4?Bhg~nncxa`VizTarQXz*nbv< z*T1`x;;}6@oK6!_O={{UWAkbZ6CzKBG2CcOh_qAUx%T4U2AUw8Ozbspn;NvPi_bJS z?G8Jb-Of+T3{xSRyu2lKYhAX5E7yHwHE?q5SvN`Ni@Q|riCs+(qIk77|3@oD z-Ey<(qXxQlEkKKa1LlWL7#O4XWOgx)=jQlL&_(~ zY^EsbLUXN4#$yob?9_?R-zCl6lA=OXtKweEF?Pk9}0 z?xMl_`6>*6n`dJ9j9CJH#&JEA=CXWT$*ih7nd)&YQKiadK{B|Fm;+sEIBU$T4Jf7b zKRkW>5QmT`O;`i~CGl9wqBs=PNCjj2^!Zt?41I8WjxFUu_x|e`fA_)7f1qT?^43;^2v6q*>Cv^MA^6DL$G+TosSz zt8rzilsO@|ntBWT%=n686&XXdez7LUY5?Lc%bFj{y?xevDrEX|_jjbb0vX3n^;tUW z(&|rN@^qET99BdncZJ?u4TSN7f#P%NP+DA2e+f&&?*fvp-)dGKC!0MxfdOEL4b>Hx zy8QyN^=A?vzafx^th#&W%S{rV-74s}T(YCVAeT4(Zg_5$j^9*gaE>I?h`IxdDUynqe(C_6?&JNbGO|MKR5zdciBjtbo-P0W3fy+0`cSche)=Ffad8e$UDqF3%EakLE9W zzFpL;pJe^}CuBF!g2+-S$!%V5(@g@GLyB1DdTG~iG|Orx_atyTN39cU%fsz>hSP#% z^@_roAyjCwsH&xo0u}jtXEnWYZ0qIn(m6h9w-W^Q@k30HE3*$(T7njdJKnFWO`udv z4GZvcu~Lx1JOAEOm^cpiZC;5;dwLjVs5Cd^MeltlLgZxGlvS>`AT9*TUyU zURSPKT2sEP&kTd`G``jTTyxl$taG({8fI1l;a61FKFOkS!Fz(Ek0HrJTle{!`!EaS z;YImNC+OJvmiunCSf{+~ZA*l95CJ&%Xr|$cJRZlSb_e#k1QD%(Xpic(>ZfhBVAN1K zv!l4rc@kc@%RRvu3kFm~fdJ88U@`99@^wqDzG6v1Z4Z0v?XT`~xJWnNOha7}aAe}Q zt&jr@IVS*8#y?#sQCIOfNDp>A*y){$qvw|^3e5w6frt4$SNIIB7Z+k|zq(~089*7B z!B7xiJjg@DbR<(L_~IH|)llRv8j@dhjFgQ|ycQPIl<2;GD|pK`qhB*U2(zxsLB+)8 z`#N+!#pwjipr(ICrM&=54x*_%x#%0AuVgcv)sxCI=5r`G>NlnVMG)rgbA>K2|_z9710rz#(+G zF(K-=F=-ada~fyDUZ`4p@+0#kmywqWRwifnCqEHdcL?VG7@v$oioCv) zZD6@7GAy+Dwn4JWs8ao$yr= zwT0yd0vYLpw91k58RY(ShROi!mr}Zv9CX=rGYocg(zPb$WHgNHzv$4x4#F7X7vyC; ztUL1(Tb_=*Bv4Vp#R%ISV|KQME3C@5o<|@rbrMoYtXs|3pM5ynbBW=}Z9Y?Bb-zAn zteTs12L2#}88;?RYlX$O z`~4Y!2Y{|4J)c;uV)OPxO||p2H(TnH9178}?^An9pTF(4ad5CQ);_AAjY%wYGd%|h zUkoNo7|Ql8R3VwV6}64S0vu50$BE^7f0>8s`q(viZvA{);hV%$pQ+nPTYleUgtHg8cKzpU z<-3Cn`a!|DZ_^*2+PQPY%?PsVf%?|w`>jlNsWJ+4xOw9{>bRJD%LO_3!5HB3|TbHe~cq_K( zi(_9tRIgTa-g&#V>tcOQtH9uVCGw}$lDJx~+1d1R2hZ9@;n>lfOLbp~qa$2UC(~~G zG@F>&s0ui=bc2Ce5M4}-T(UAccW!7K6eIzJDq{a;9zQA6I%wUC%rEZhE-*np-i!6R zdTscM^iB8&h3)?D*Q@z**g^ZlxJy5BQ?*uTWrP+3>e4LcCEQSzE=|VEw2NwH`tDeH zf=%|k+mjKKsT89NZLw5>uqRG*f?7b-dA_u)G$4YxEp*9ItV!DH+ij=8bw@^W zLmY1$S6UvFACF3pl1L?=>J+t{!VCK+s?rvl9cG{NpX~e;l01aB1;lEFm3Fz2MYdiE zoOyslstZp+PchHq6yH41t;oweS1}%wbmXXPkx}b{DsL>$qU{XG~SciAAcAF;< zka?)D!C;!*IqPR2OS>n}!)xEzSC}0^4CbB!^aaB-=aI#JljH6QHJivjex^=0?AGEv zz}bLq1>VG{(p6@=wP!yL5p>ww=`RS}9W7g4Dk@MmEPK;*?sQqjb6sZ^Yl$~^erhH%5r#i=`=7@-J zYsiPWMq&0oaamkFhsh6h|L7(s0Dj?6lWSV3Y=G9|R_sZ`mDk6&?r6KM2I|*g>={O5 z*_F%DO2aHfED%0k$Xni9$6KGUWsuLFw2!iyJ(NdAU~k_L@-1Gu?5l_=K*q@O_7X+Mk4LW4l_&-v727<->Ops z;7^6czcuc-oh(mlKF#TJe$(8gNRJf{6tAiu?V^rm~k!!4r z+e1smwJEe5Lqcv$A#P{9&7U9vPqDj23E`>e$mTe1Sgjll_PZ(Qm|OwnI-uaf5+Q-E zU?*-f4}gC#c)PHjvkug%1-4(=hKNUYVx1dYgIV_WjI@yK~9Vb97gIpnJEs7(N^t@ zK98%N^rkb*?bkUmqF1#{fxHSU(9gbn;E&d+sJ2o(7(M<*yOgpn&cpR;_YA_K>;!my z2Na~PCf7!dO^hFp;I;d3UA=B(guQxyf*^l!!-hBeQe7q%6Gyl273EZz;DHqB?D~rG zv(}6*1x3EQ49Mv5N5CC!SyV&AoA<5-e78uJoo0vm=K#Wgyp4%4U_L+lGW-htt3AZ< zDvsj<>fOnC=z3Rg(ULo-%(#|8;K$tH`61Dfm+*b%ZVzi>Ae5fkb1=al$ei)UQ?D=*;Hz{qNim@ES5S3aV@Y zHYltS4Z)w>ZqYgra9U{b#Zc&?aO;h4eT|IJT0m=O_RXNg75*$={aq4b`6RY$uW=`Q z&YZ_%|IU@Gc(%AKE0m}ebu*`(ead=V{wtnQBz7p~jaLZ?yI04ZYsM&9BSwC>uv@-K zMWPF(q;5rAs;S=$sV!f6oP}AmxKdXdPkugtC!%#-+>}T_?RH0bHC;~^k6r&oaURtK zNn<>|etruf87Wd3tI7hRqC5KO@wh(2DeQH`{#PJbW&n=-L-A1kw(fkUZXF?3v3fy$ zS2q0cq?M^M+orLfPN&u1C?b4?P^Y^Sl~99BR!ESc)rqRV($O9AASp`aYi+Va0RQdL z(6_5MP_$bXJ>w>prD~o`06Ez!AFuuvvje=R)8V#h=l_Sj_YP}1+uA^9R76FkiMn-HtAsR}~GWfE~_VEQ3FPa>O| zl)xq9jy&bWysKj7&0EVgujr_TR>ydKv8&0a9~P$Yn(Th9#fG(vhwvL+ElS*yJt$H# z+wAl*s!;Nkwi|q2ft}!;rbiuxxgBU4jsQ9isNQz2f%cqWHN#=`i4O&&qwjX7 z=I5Gt-S@pf7Dn7$@M>yBTLJ~79NwpH7 zP?qd_R3Aum1&)Dqurlhbx)V0qhkQ7$@&eF_A@P>(gEBS>@<)tb~xUuf=0uW2V3{|M70? z@sAD;-n7V~3&#LdXKqO;nK9ey|4#4vuk4Nwr+|A$JP>9Fs~9gg*{0O>>fD$KW+_5mu4$e@xe z+*j#%&UNSSJRJ4aS@y#ZCau6gt})pF!bi}3x(^2Bjx`egcir{fw$Ed5pjgntZh$!t zQhDlTqe+94HG+;&1x8f^r8dc!^Jkv#uWeT>wAJu_N^rh@1We(29F z&fF=fo&Hppq1vJTl+($Fj&b)mFgrq!Fn)nkW`XnIW zF_UP5+sP>x56^u^g74&$fA@XhAFJiU<0P6t;h?NW)$X~g8p4Rs6AA&lzGE(!0fE5J ziJ`WJhm#oxv_Rscs_x?EcV^akvR4C?*aeT@N*xE_jc`WI{CZOT4-&pr9$`9AchZaF zFgu6@c2J>fFF|@2Igj(h;GEp!Rvqvzpjzu=Uunm+EC0y1^!cx*`u$PDq||a)omd~q z0)y_5iRe1z4*SQZ75AJR&+vi8M~Xa9=lnNvDEDldr#fs~@)`a+=kc` zi#s{j4`&wseP+~yBzQ+XOWwVW`3uW^T^(5cUHZ_!@G`%G1(*D>;QzB$|8D2N=bZlA z|NqM;e)!yB=J(fq?#B`w>Z1QwhrJ(5@M8)71;zdUaP$A+1wXvthZp?tf*)S+!wY_R z!4EI^;RXMvynwxM`V|E-0_d3V^nNRQ>2!xUO3trtY)qzO=xWR}nr zF>vbq%Ow9jNAmA~;gSalkP8E#W^$1ljfMVd0CMXy!=B;N5qaD(pIc`X?lgo^GF-I% z6in7*8`>55n)^@_{`+B;j?};X{2SG%6Acy}VE2;u1ZCvohey_~C{qSQOJv}();$}| zb=2I^?ro5{rQb{?b@Jff+DJ|7W~0bd zNq!lEyL$=>I}I2~l1*^lj~m;+s5K_Nsekmzd;!MaNPtLIJ$eXw-2=vaXS9m-*qz@j z-8~lJMHP5MReC1aP^EX{V+pUPI@h86oIlL`K{Uxm9u01#o1WjQ{`wg<^R&TN(bag+ z{PPgHQKmNLc@H$ec(9N#oq;vijGR++O&X)0~GBOTRmc92ux+(H}R61sw?W zn2>Ulr}XVY{Bx(33hoE{V#kPgQ~dXR1e_*n&PxheKadS0U5Atzz%!$|PK9yc2Y9e9Ab$?ftym~uZ2Vl&oD>v+Z8%=!=OFRFjmMkL?5o)a*~Nc+MgU*k(9RZGD$eUC^(m>k&sKUQRoKdvaxZ zZ;F4GSukgJa%HM1>}+iJB(+9X^Y5o=W@gk{-g94N|G9oZ+o*Clj=>6af^5L z3!RV@K96FiBog`T2A-{Ujxm zu>A$J|8`(k{bUF+K^&yst z=;O1DK$=8+yx$JU27Eh<0gtaDA|+ns#}je&^(jFO)Ux|RRYXqgZfjy?a2U+8GeRMX zkjPF;nRB-}>y4416Wq<`(pXd9}o5R2DJP%0q?xrV0 zjpNV<~;qCfmQr=>Zp_MCa9$S6WvBu(2;KMF7C1ZaKZna9-*B)l^(g8l|g7kLkSG+R_ zC_2Gm6kd1dw)zDdrW0wp46iz)ex(r^100pAn&d@t)wj_`DO|~z;>*GUPvvu%7*J?%e4wXkkXL zTPRY;fmu2D{aG;~Ym{HT?mbz^$pdarbf(qI2K$m()%B(X6FNN|b<=_efM3V_3z8a= z^JVoKp#RGp{O*0wY8AO`ko36?&fA$%dbnQ5A7SqfXw{;>Vh9!nJMN(bBr4!{WCqf3 zECk5%I9Uzz0E&E4^p=wIsdMs|GR1@{s_7%D>B1+~4H@6lo_TE+G;KUq7R-QiE`JpC z`_;R_w02MZ{n(c+F%z{(M}9ynIfxS$#UHeeI5QAjer4G zkBLRbzcE38_>NnI%gN!B3Bligxp;{x>LVK5Bvy=8x==V&(!Sa!1=0m&(h8WXWH1j=VI)7N(KHtvw&Ymh zP_t&X=jPCVkA|$Q)M1*Imgb+H`oChj^f}e%U+A*^mDFi}S^6=X2v7igMDY z6xpbwuO*mdFAF&E<^fMYDg_)7%4hFttu~!k4u5a@U{xbqWn-88rZ=c~**9 zghI=67D*AyH*Ql3vrS~hRgBjG$DvKJY33jTgK{U)M+Fz!`Cz{tETu8E4_*-RzROd$ ztZ#wUdgr|RqWqmw0$)@T5IS}57_{qAn9U?p+R_tRt;COrgi~rrnm0dxmP-tDWA<5Y z74Y3!=*^-S#Uo{eJ;xj)KYQ|OCncvA(cfxtk18w556zT0;%?B*2=-yi*HvE7YZE@( zttG+={(D*-=QCL#YEZ>;=&f;_Z&@+-vQt+`M1{TW3-PiL|2*wKk}3 zGaG#GiW36QwX7r6W4z!d z1@+QWM2awsZjtd@Id4?u&Nay2X%fQK27JZ#q?{9ojyQ#Y=jQZ>FEz&aLfv z19U*_910x>-q52?Ac=%bukfg8HsKj=^}sK-jEm)i-%6F?UV^kuQil=KIA;iP-wBQrFYOItXK0lmiBqtX-@nCJLTD&ZpxY^4c{{l zIGnKceU#}}fZ&qBTUqx>?w6KX+~uVB6>ne>0-6PaW>2(${_Y2unfBrmuE%b)Q1=v{0z>Z&YLyXKrM;)y;2{#a} zoedmvgWo?qVmvE-2!br#qwExS_vKNqA$GezcaY>UbP@|GrXDx;;|g4l%t_88BuAA; z&Zj{tTk&zj0!uuCEl-A^T%-MFO8LLs4x_Rwa>7V^MaV+^4MR!}nysJ#zfkbj-4BF) zgQiMb4{MKp3|Tzd_Wbj)e2{9eC+pSJP`wCr;^k2~XXdGikH2&edq<|4Pb!9N+{q^x z29(83S8?+{waMDM6WdaQC4{3oo~dYm=#JL2Oyisgm{}~z?;JCKt1xR+?HQ#e%O5ssw^rxSK*cwH6wfg&ZsbQ)B~XbY5h1oH%==y5pc_c_A3JB&5dlTQoMXs zTS=BnbQmdOifjwjsH3r=rf0wmuV(}YP@i9}a}BlGso@Wcxn7=&DmlJ0E=}-0cp3HW zV67ph$8F*oDT4J8w!#;xTQF^_OrZb2*khHhEk<@v8HMkpD<~T4bx}uLdFO>OcDcuw zw>#vj0>u?pogsw&NTc42K5SNz$Q3I5UXETK`B7~JHm+e`+ zQY4c-HOszD3S^3Iea&30S@QS<@Pz%v?8r{g^h`D86r(T?Efn)y9@cfM<((cdd;uF% zUr9GrM8#KYTO2WXeIOBHnKBa${fl>7#)n#7Yp9}{uZ$W83>P8ILI*^j19c&%T&jsb za9C2B@EQ&S`4YM{@fBBjM(E3x>7wQFRkL{L-smPLI=(=dX_qb zP?Q~!cNoM7@HYH-bqh1BC4+j5b=)d7lSNT7rPu6FEr9aX7a+2T2Ueq^Elg_1G$|H6 z8VnqYA8J&OY7u%`Ld;udhitZsb&NcX?MtS7^9#@;5jLJ*YN^G3b*!GLW2ers>@E@< z7V(+#JR(&wJpzF4mBv&q(Tu6iArr>jf*OBGgX<98GyO)Mv)e9PYy{0Zd5TO9sI%sB zIkq4_P}t3_GxH+3j-FdA0KU3z1B@$@--?b;e`uh#)|{9K7NVJnA6@BL&P~=B1v8Yj zBN^f#K~3?$!v22_hPHqzDi$)j18Ei&Y+7Xd6Q=N)uX38hOg0bOX1p}LN5 zu9=V6RF`>wDMtq~@Yinmjs?yKxNM`H9E$^8Lczg>zwSUk5B6!WNsGg~R&ZE#?T+<7 z&({AAjQ`j=)D3bwZf+_U?GzF_e)Z@sPR{Z?$N z%gDFWvUPZ1Thjt+g_SoGY^psX`4yf&y%iGHIQa<*nvrS;=Z1vJ;TYS&rL*vX8X1S9 z9S3jNfaAC7$PDJ&5n&f#Y{N(g$c^E9N1db-><%Do-t#*!l0Kq&o;qi(4R#Mb)}w+! zpxgVN7nrn73?lc4mIrDIouq?#yE(^^N0nF#td(PB-D~@Zp%gT2=z({)^jSXQrVmCH z3kMR0@1+R^X-6%4oD$-`WIfCilX~P)J?aIbrYWT@=z*h|2}o=NS%P;@o-IDSnf%W@ zgz^Y5l-Ql!YTqM5hI5y?^T5^vlkz+w#08_eXCT+@+{+5lIb0j^&sd!V+H~#XTaF53 z&RzQ9B>z`ANzgszN6S||Yxxr7q))r&WJkXFP;jT)`5hx4#}V${xYX?#e`^P{kU5hf%KLzPi82UFovlPkuxhmb1@`cAy;MoK2 zpkje}=GvLOzSW(oulg^S!sW=%ydS#G=DWpCT9Prn#DOCH+n0eLyWYxCqCmgyCDCNl zRS5ZtpD##1gbA-2c%3-q{`&iJ%o}<4BgIL}@jN8mR9Lg@D0|ie^B|YY4Xo0>EtOVd z1~YXYicjPeDVY7gDhRkQ$eA{9QU0E88uv)}CZ zCc_N6A|+Sre(Nr}Zw_Adnr`QjURC{({qs%>N*s%a&6b{hlfGvj|FIJiLG`(XvMe0X zIvw}ciInB-);QMlw;Jw8+QuBkn46EySPFLFFD7h3u39D)`$ge~fZ{p}@7k;mR1tlA z==nNn{_aOVOE|+o)MLy>jrKvmo6R|J zTg{1Fy(8=jLHeh^hJ=~V#M_}iXl3tTmP?O4ZC~5>t}@-!k-cHPkI}P4FvVL<5$NZ# zNLn4GB=-VTS@#)&ehNATE)>8U02YL_0q;>Z!T#U=nEfjq*19x~spl5nALF!6%o1ES zQ)q~Yc>$Wl?g<~IqWZu90D=+Ur6{?1(gjWv6<|h?+U-Z#x`j#i$DD?#o^p2u-|>wS zJapT>O!){n>;VnYEcko&NFAe?#@cza;L4gh{T{$Q{qIE46GS@2C;wa{x1geySzw2?F zkfA5cm3kWY^VBi43$0(|T*Jyd+C^~+1y=I*y_jgx8< zQJ+H4Q90R3?7rLjH+*+e_(8g#yUH^)Pdob^+p#FX17doqnFlbs*=xq5Fo6~>00XqG z2FVLkLyzre>vPF!qN4-RlFUp?1?3vbBEOuZ0^%UJ-SrlX*@%tR^HvV%JJeDs%nd+v zZ70LO_A=U$K3j=B>lla;%MjXGKesy3YeJ^StFW&`kIEq60mldLwad9pPk(86XM$id z586xkcEai_?FbhD(b~m>LkvRpwQ)&DamZ9s3m#*`O^|O9TUxH2nN48h6_Uko!2qFW zInmE(LtbFWaMMbV7(m#Y^qw6cHil3eCv=`llddrMH(ULepU9Du7Tx@(H2;l)iiPPbXH*Jndb5iA zR3T3t$1ShFrYi($j|?t-omS1mAPxh<5VH}-yCDwhi~F~jJ^J@iv!DnY^R2NAh&k4- zp9lBK<;Nch6M&9FT^k@beUUYsrB2l}>~oaJH>OcXH}A~qMWL12{ckht34+)!U5edB zeP@-D)xeh5`8Zz&Oxu7a*HJb-cU53G_hZ_Hhtim-rJNlGmpcTJzgVRZ3KMNVnv~`y ztI7EA8~ZO#E$?oP%z}(tvt6O=FGy)@;ROMI-S;~~`gYX|<9nNoCYyFZ5;m@Z!X+|IDVf=DvHhi`~MTLdoUSNH9* z$QFX*Kgaq31$E<#%NSBIgGPG(K&u1gR;O#WE=)=?+Gxtsl@7pb&2{0MT=YPkpIYay z#fi)}F*0-IFF#w@h_5{XHz&+C*J@Wtp*3z^vT`Ts=e>c`1W-&OHm&*{ zRCRZe&C9a%smUstR_Aj!T`t=?Gv|k?egBXqoYmKbr?N3gZ!d(}h(X6BK>ckO7q=6= z+nnVh?prQ$S~do4e2Q(g8u_NU_kJ?%w{b6Yrpt^9gwq}==>%PPlZt| z&TNcIP{VA(=q1ZGvYFmo2xPCl>7CtBtE=f}7bFutGOwG`OSb*;dNEh zhUwXO17t)srtUiTw;@ckp|^9+^f+pNxY&HUF&6%eTE<&=lrMGBrT+tTI)WS5G*fxw zv3@kNOc3(Mvm~`rmR-o&dk}?te7UuM0!s8ZIi9^``<21O|9ZTkYks0*)teGNjz&1I zd7{VQEeMFM)W(0!#jb^fHN7n%V=!bVIFD`92t_olWQO(H#SG~NER{GIyREdY*B_se ze?rbOEE{jMBO3LscC%}9JzK-`OB=P!!U53#-ag|2c80gh+>tHOEKG{5Wr1gzc1*R) z`*VeFHCRF0YmZeCD|F-v6Z{6&RV|D?4)9oXl)1OAnG&zO>YZb!!$ua@F7m!?PKhSk5W zDn7e<+J-OUwrwOY+?CmeVV|?YeDk zM2w0Es{CQ9E7|v)2jN&h#-v$3$4RGTfRZ0Ht$rtxek~0a7MMNQGm}tR<=lOO{ zOQ)7DcGlQ#Y$8+aJ$#9eqj|(GCON98w08O@)5W?hxQ?C=Y}gMYm^8w&=+T1q7nA~e zSg?w{c-VB=5G(Rqn%C+K$}V}691aBHsn5;D*enWm3VDCpQxny50Di0{1_8ih1SiV2n(Fb`$_eB}Gp14hE88p;VIAcYt-S{gs#pvhJ-??4stAe6q+3i6i)> zH`LAcu+H&SK7A&2-2M`B=E-p#zOC3`UtZotI&hJ5mC0Lu-#Z%yPSP|;#F|{qMq9>9 z`PkX`ofDKXVjH5NI{f8xV{>n;UXCqCB_u4#a3^=Co7#Sb605ihs#p6J0+gja%7+7S z8D^cr@J`E^ln0}O(WV(RIW9pU?$rM^jI5nhiC#}`sSk2`-04`^bgLL;NnTnVIT+R- zaXgw7HBy`pIvu`kwy+^$wtT-Ha0nTBqE0r;onNX8r z=a(dsYGN~c{{*E*GN>Uu^`3hJY3w6$rw$7*%cni;GX*ikcRUZZh z-ThYwy;q0hk7ROUCf=Wh5%!(kF)}*URW?d@S1M*io{^&9wp-@_<}qx&EUQl_c8X1H zLS(`ZGn==6pWBgnY0gseV73OqSF^MCN+~89yqokWIxT&QQZ$7gOPq;V-qj$udv!=- z<@3eM*q3O@DZ!q!H0&0m(KaZ(`(nVX@u{hv^+vCfF_!^{$!-$^w6PXze4bj`|F-t) z;P?c?1GBkdn{96(cJ^sp znlDx}B&nKK;IWdD^tz80<@Exu)xHwz-0^B*!NcAirGE@Ci7`1d|5Z?4(g;VgKS zpRGrR4#ZXJ2JTUsMQ~=>mdcvk@LWzD_DNWW{hH?6R@;+1bZl=NwG{1CjUTJPtwxrV z2uYf*KM%X2NH`~p7rI&Hk^I(KIdFE&4I49W;(ckfX6{?Ln;@fS)Xqqj!pP0AJ-3CY zYQQ3L{z?D^`3CyU{PI*9ukr2jlbuL`7JhTWUi{NEw@$VU#h8e#Gm}7Ft@K>IQcwkc zN0K|<(5!R00uEf+idESG@7OW}s0eq!D`iJtzC97s;wngyMd;nY-RA4~9CkY_@SGxx zFyC-u7iQSJ;29{PN%wX<=das!HVo*zr#E~<@;X-0rhBcp#WAX#PgZ1fyc+wicpR?S z$j}fD#77UVFce7To}2TVekM6HtrXoMN@L*Y@_?sm;r`3dFB-zBqpYAfE2*vSZ4`lW z5H0OFJhdP{?#d0I!egoRuc@elNbW#L-%?Hr)h6R2N9sR4H@t73Iu12z+H;21Kd{Cb{##5%@7q9Wg1ccG}6 z8^rSCAl3U<_GOhhP~jBet65mPAYi5&IsX14p*JtwM&$EB@8F9O@PBli=dis>)bq*L zac_cs!r20C=&u7Rl6#8he!=>n0h0Dx)+6I28vz7QaU)~s6EmCc8=dmIxZ5pcS2njd zp-c|_qNG4*FW4#X-JU<+D2;udY;nURdrNRTVAnLEIhcY^qbm2)4q)RjhqFv3=X6(YEaBEY$escXev-HqD2C%YX_hQG1r1$3i-{6M`X72;m;zn%JH9 z&cZ?o$zUv+U1QO3317Sh2}<=y{v!ss%tx18KdFnt=sr1NIJy z%iXP@6qze3_t)@_-RC@-W2uJVJA98{{RE3(UtljVWIb0s?Lt$y!fYQ2g-nG zu<^6|{=X#p{$oi8lv_agMhKK|B+nl^!7dQQkJy*mXRT0J{Rj}Mz!vb62LmL*%tMDr zN!G0Jn8?J0kFMg`=YgA1;s!x?XzH!WfgxygtQuOd=`19zqx*SS95Vw*%h}oHW{_t*^C9Udq>B%k^}Fe&jfrC3XhE~MIFXOD zrxzlB3ZkO*p3d=`8Ka2lNWG+;`Q&8ZWwiAzs~#& zj3bA4l&d0j6ydbygG;r1d#||FBEnf)J0B<3a_fC53a+t8J}<=6{_e$pwDy0t;z!f8 z*QuDI@6j+R#IV+yFLh!gwRA?Tr)#cSsXURpHMyR>8fCD$YjBoDVr?EpQG2uUiAED0 zSkGzOq$7NN`rxs}verrq!-*T^uPB(Zu8~mzwgER!xg!t!%La*UU=G*@0)10rERgdH zuaDWxeJ(^?WDPlqU@AoHDIcI=)S#Q@IE3m#mIfcy#jKU(+E$w;byJYkJ`-XaeUuSo zklk+xv#EX|rEG_qtB?&W812cmNxC z*Vkx|#Fy-DJrPKCE*i-&*To+fcY;DmL=tsJj0KR8#PJ_f)B>Tt$(GYFyzp zYh51=-lJ3@zEg*Ssz~+MnP6n!`XjCt-}E`DQ5o&zdts_KPk`uZ4>&jv;V+a z|4|^|U$>(l5akC%`B$6xPiKrD5akC%`2kV>dr1A^Bmdv=k<@hhYR?r$4P_ah10h>Y za1~J&3cle1gjr}n_4*^KN<&550uJe4=n;^>s%f;-YABO#y>ZYYW;%Su?SiZ7LyZ6p zNl!Tqmz|j@JT$7#wDTwPzwPu_%$wf2Y20g9k7TZ7AbPQDfvKE9%^TZ#G3BhtMDj8V zc1mfSW!$>wzc!_);=!=z_o3IX+~3Ep;EG9kX;iQ3<~A3~ve-un>odE0SqWJ@=2;ih z>o;|Px34shXxDeEZQ9QN^Kqv%6)!<#ht-$%aOGL6#|B^D!^pJ0$A z0rmHh$jTIHD>Km79y395ow0c!9n@5f33#xRs5v~iL+T+1WICH<`$G2?YFWYs zq%_gB17#kah|#H4@)8|k1?o5*nLSiwe=y!Tn9@5%@eYQ8J$icGPI1DbHaoJvld~1+ zq&Sb6t^=tv1*A`c^~U`{W4D2d*?lD#o-II1EZ#6Mm3^shdt*ibw>%CbFc{irYRek> z%vOeH3>ms9>?@hYi!<<*LIyJDo7tK0Sw-XhZ3tFxAvoFxn&rv;XUAx%!6gVJj&ayG zymtDnBCC^@fgh$)gSix))>Dhi6WIGY196!Kl*5>Ew2!FglHc94gvZt}hfW{|;L_AI z-}p+2haOaTjocS|Gaty})mxXG>R1$+H(Qp&k)NZ-+FCGm=lWDfd5yi-<8-|m94M+c zu-edoojW{L{ogtX$694q>ty0hJaZHrXc=)nnT!r;K>W!(+(8uSyNjbNZ@LxEsx#tX z>etv^4%^xg(IVbZce7K66&ZMIKKAnMnIWY@y$@*!C@-y0v1|S1md0(- z@t#KGroX2x%g%p6Q^Whw9n$n|A8FC(a`!^LvAJfZ0>EPRG}d-sTEQxy@zneiK1dN&&N-M=_o%(gow7W3rYcL9f^eT%7)XH8`Vt2`z_C{J|kig#3mry z)U;U%6$aOUHr|y*zvgS2H?HExGjGo7n6!|y`P0suxZfFbLnD-OACHO}`#sDn?_!MF z$(%tD<`6EM`Ccv0IEa}KPYDt??`0fUI&&Y&k?kfk&kwO*yYq-(Rj}eUA{s`8E4@YW zypu`&V(RIt-Izo#2k_?gBgRu4Ga*Ij2m~R%HqzA<`p{CefR0wPLSL zH(-D+x#o#G0>79IZ5eA%01p?Wf6hQDOFwf+`p6U!=PVK@kJu&8A*aPmQrK=cFOAoU>;gY{vUe4 z#hAyjU=P2RqI+}+1<=hK~}{DitviN)6l1tP-8 z7(TIDZO@jS=5L=Hc&_&A2BM`0va9hn6)2gA_bM~1kWp$hDY}_>I=;m9!g4b6LG=&* zMwZw=heZ?5x#4YFvs48)sJS&lZ&S(26jZLxu`kVejd{+@7SDa-wo1;VrjEc^ZEm** zu(}VkO=E`8`i==V|3oi9vVj&&Ei$x{C(Y10@sox>1e$gy%S7TLN%f?p%FmjV_Vr9( zUek$ma{bhB(3>{jio?JR-anBKyoaa5#=#kk%?5T4HmCIBsvT=3w2gfB{I@Rv{jCra zJ|&aDtbO|Luhgw~VguOQ1P4Ag@J;0|LsFklmep&Hukr^?O4rid=5VTrqU2-2oxJ(A zoX=0Z zfr-gZqnqDCy#Exsyix5iy*y^mxOXj-sjzM*%X@1*8^%8wDC~q8wkk|D&t@s_3VeW{ zN3cC(@kEK5NNH&>5i-%KI&uq|;&O`sqzm_IbZ$H|sH% zp)3rmMM19n zcWuH2&0~AGPsvWzk~`v)U+9tfy9606)xxa(&gM~Jzp=OE7#4`wJ~mVWC;%4LZX66d z%0HIUtS@SaUrJDBXIEq9ol;?| zi8?J)wh5IQ;%b@+z0u=O%L#!brIyb~6`QbzJqDxVPXYci)`{}|ux))INhxWiRoL)n z6wkGGKEYK=>CBm-!THujk7%2$mqHW)`+E)`K1L2rcys$XrXG9R!s_$DKc3Hy;jfr$9AGx|(H4jB0Z|vFa{IR4G`j;RG_eHv) zriU%5DXFUa)!fn{QmYHM&)iDv#dvV9rwF3G41&Y*14tGcO%PQgp5Wqsz+A*6?)rGl zk9b^x$zY&MJ;q>;444zkpa(L{YW@{iNuVtX3g*jbN}p`>)vq&rqnX|JwhPe?*WdGNL~ zFSFjK!m!hntOs9lZL+_EFBhD|>jKr%&EzNJV^4)B0~)1t7A@ zlR_phP~pZnsEav|qF0P|wi`*pdg?Fu@ed658`j+WRG2Vz>+U;G_ycm{EwOiRHMuG! zl{qK#iay(FEAPorWcXMrVx72JJ7^5a_1+s0J<~F$Gr}a4(k%iFT&~k~4l-$4`^Cf( zo6K3dH)n9%EUrwX6{;VCJZNb1pSqJ^MANb(DU3iZY(5LeMBkw|PJdwh-HJy?$df|D z^8TJ@bbl&G2rQ}vB7VJyarYK>6NbcKYqnaPzw#Sg2R|ulpL6_DuT$c;*W!w}`Z_H$ z%jCv=#8_-#YxbBr&?7X!6dSmy)d2aG={m^*-UDUWq#3tGP_=thlkDxdla!k$TfYGj z-ctN%eA#`XjyzBYw2PWDuPl$=X_!5GifqA@PmjhKR)O;e#5 zGL%Be+njTrW2K<`CS0aIX0_-=mf2F8jh`0zQ>IY9C(B^vJZFeT6)jXlJiK=wep=Zc z6lYWI8#kz3dKqc}ch=}V|Hr<4p!t_jD^a-XP70i`i(NMwwonPx)o;~wXCaa z8EO&S1$A#LD($6-=WM$tF9RNcIIIM{0*8zdk>QL3D)T!N$wUUyN##Ai>-;xV!}GAH z*R+3IH5T3%2*myQ9>eY%c=|Q+%AuT0HqX8Q-K4VjmHdgGV}b1pkU>t=EFGeG7o%fz z4uS6+(ev>wN?=_p^RNL;$6bX0dzbJ__xbwf>m*SYdE3}^7oB(5Ni^T_p2>81+qPw4 zKU833hOVo&%r1KbjiV^!;+7%V)&bt?j1^zea6~A-c;pg2G2V?pfNf3PA_Qu87wL9M z{4MR2zIo;=hJ2J!NE!PL{ndC#(tH(VRh7_z)Yb9LoX2mgtyiQ>{5WJRYHB6EL^p{$QwbxO))c{n77$qIc?`W6rQZ&L(QbxA$Y(tGd4UWAc z_7-kw4Rx}Zvwa`zf_2aVULEv5RKs^kW4$(DMCZUwzRq#c>JPv+=%9vcasUmHcDm5l zfN3a+T9{{>eot<(XgYX>SSO7Gdj=4^s*@u)txo9$f)&v{xMT0Ta@SWk0kRg$TJfHo zKU0ZtxgTAK5FRx0+Xh_ARg}HZ;s8Ttdt5?FEWX)RVhB$y!_K!10bF#>R}Oywq4Wl_ z4Xn=MZ%Gu4SvujFxa89JIxpUnd-3v;v_?BbM)TG^R<#Te2YZn%XMl_ zgENd&9V$7{K%1+0OILm40DPye`M8To@9e1UcgvVV@F<(yWRC&#PLl~_sAwP0jZDFm zuSh{+(al=py8);gVLQ5qR>v+CBzX8(*naGwjZwXvyOK&*&o-?Bdung{9j$CpT3}xVlb=`D(kK5d8{|#K09i!`;(*!dqaOASy?G>bM zmU2VJ`3-hNKFf7``C=Y1Xp*n)yI{G*y+3`Jt z=~KZJ9Smx+o=%?r`)}B#HPi~_9c{&@DjG^e$ujX?V;+$AknkiN87yn$;UB62wwx~z zCR_|cJXCcD+hdU>L(baY#I35D{m}zJFu<=eo=CqKDYs1)aT@}#Kwom&Nh)ud4RPuvmr@=nZ(5^mNHK-lG<^T&cXf3>)fl z`NkI0*|iZRihiaw#3~zQ4=n!RcEJ|o(}RYjz!qjkgzN{W!HJvPcy^iHwTzR;_QD@< zT6-I;-fCwdA}3Po?Sxk#%*1iTV$%F&jW6e3Mm&A@>glP_Ute8*dn&VouT?qh*Lyav zKD-aQu6dK1lk)BtDP)7k>;#ceV7@X4LkgyDrfAHk$Sl>Z`lMM=+hOn%F==H(`}t)G z)SgSReWFg)o!VIuqQZ>SY^SMYJ7MV<30M$z?7*`RUjx(jOL_ zlkGZff(D=yWysjkDlPDpq5qmm9JgiFQ~?p=lY_Vt#p#)8ss;(=2=e4s6r*WY%z7oIWrxD!rz+b=h3@u zZ5c633%&xLQkD4zWhOIMmQ%gZo5?7f?3734W6p87v8?e$&x7Lpl9P;qguMh#3oB?( zuXV&XXy85y@|EuA6X)c9BK`4*jAD0V^7ngcBcalfZGKancmf8JtN`6?O~3@;7w!0^ zY$WYX#-rAZ0_JNqf}8z)@W@Ohl`H4#ZUm?|%QY}c+FKRM$TqPwi}o%xFeuGc*(8|w z1*i%wDL>R3fJPbzu-Lo)E(J*&VIOsSI%uVo$!U(0nDCcCKW7xFr*fERO#Pf?FjRtg zx8dr&T6v5ToY1sz8yP;15ZQ=VGLI>Q>`~K?m}K5tf5pCm8Q+wq*rh$mIA;J|mh|JK z_VD#xj2m*OuYW7DzMdm9x~sK4k_6ZLlzsoBI}xB9Xh6VamIm*V+w_jmQ1oWpx@3Svr1-7`GJtYaA?XJ##|SX}nLuWO8SS){l+Xcbr#e)~H2we9V>Dq9f1Qy;ifDknD6p zJ5*^qbq6l{PA8LtL+0@|wqSjEP`TC@e~JqS=Y-#+nYH4#+l5P>DkoBa+nQ7w6pU!oPNA_nE)(-c^$4{XACi|{_sUu~}Z#W_qZuVRIGHR)D zGA|aOr9)QQ>>NwP3uR&jx}Aq7tCycPBvmW;MlEBP3K5n5{ud2@wjW(lN5}1rM<9r= zt2ELi-sbvw7Pu6UEb>a)sdd`U3%AEuf22$-h&jp*R5p@Vrwc)%7e8?I0E z^F-E@FPG#xI$P<}Z>Pxo)XY|WH7M*&MejiSdUeXZ$k|hxGC?;M_;u2!b`@ERjxz~6 zGwikVBa+fSy}Ck`MU%Kb7U|ise#haaJ{zkbO8dnaLTE4C=QVrxjWJn&C?-#TN~T6J z{T(cMTDP`gMG*x7-H1pKP!SOjP^!}1C`c~>LJNqBbRxYb zhzO_{P^$FadkY;DR0M?30|W?2FCh>JB_Z%FbnkPX_Z|EB&ffpNF~0MM5i)Wo_gZU~ zYtDJidH4S?Ff{%$hfbc#p6s7T@wub&w9(JNvNjJEpTLYA`{$QJ@hf67OGUgY!iifu zt%fB|judo?|0pnqF|Mx@1NnVdQOTe$m#>88yo#KxeEgN&M-Ur>)HJ;m4kszn+Msyn zh_d(qNpvfAXn>8p@QdIT@7{p|QdMZ5Q0FBC1`CA7iAImcr2 zp?Gf>I`GQa6|FqQzsB`H%q9H}F;(j_bk~vmeICEFbziK~hQp$1J0RF(YxqN&hhi&y zd|zhBZc@24ne_cQ))A8gy_oIi``*7@2)*B3xp<{8p}oy!4+c8+M; z&nYaskGo^axaL#v(jtzik!w=|QhE)_Z}~3&R2m)K<1IuzVq(+&oar(gZUM#?YqMVN zxj9bo%J#W~h@~b?vj%hsojF0Br5E2sKdbw}?Z4NK3Rg}Q(Y*A~OM`|{aCPYTg0yt&fg2tj7AMrRMxKZ@o)^>d$cedlnWul3oHyK3-VNbKds?A1z!;e&b+drpeT?jR<67Q?Jlz`hhLJi~g0Q=8W97atp}lS;puTJyqhE--f2<>;qnj z3;9y!AD%4x@~!ICTdMJ~Sm-VtW2{O^A#1Q^Es1YTyohzEGJsSqikX)V;os0Oxzd8> z`g1|aJcP5q{3qZ<4c|T&VV0Nmc#$+%W!)XQHcKfzUG$z;pUdFmWF$BT3lCKJoaEa= zMr#BFTL#7`-}8G)E{xjH*@b5?N;a->~z`Dc&vCH=2cU5ahdw z0^iu&ioV6w5eVA=WV-A z;T{z%Xxa%eP=@XRfsjM;f^){D%RS{b18G^l0jqUo0MR_~%%nB>>$FFss5AE0*a zPr-Rw_qlfCyiw#_Q7A1axI)hRjY#ue$0qEp_S7wPkj)3}{r%fMLS3(daqxpcjt4is zs}R^4w-IGpkaowNw~F^!e>z2Wi`OiMQM=&NIUPGYk!Z8$59<_L1LMWt2=?tY#hJsE zDlG_tX)TIMq$}&ldUBh0flw%YaZ>l9(_`+W6%XE?9tPr@KfD~P=Ev9)H}ertY}i{+ zbTCt0f6{&y#N7JWDo4zQ-bAukr#Lx?;GDy`S5ENXxn&jAayfKASr^5DyB-3a3wkvhD0z>* zQ;ufVw#c<2TQ><-r`z#WuIdu~>BrEBa0fH3V`%(|qBB9%`#CIF&NFGobS8+!{dTddd-MjP2u65X%QbWFY>G1czAY$%Gnx+Of z+~oV>z>+0aocFRf=IrmEcDqb2+QYh&xKr$QC}t1jazr=V%z<6)U)h0f{nl_r$NP9o zYO_N?@REMk{22xMTA0|$6gIa(4ugWYjUTO#W5j!IrtGz{T-Qvslnl8Eo8ZxjJAP8U z@S$fXa?!W@X1=f56++^izQO=oSPJxzBQuJwe281o?sp=+KBq{Xli| zK3Q;j*3HJhVI0vZ;RL_kH!&52xGWcHajw+a3kyX82(U*gajEeI zw?vD(i~hYLhDg{qbq~dL>`Y`1^V>abapD%n!hhOR(|a7qijC<5b&;)lM`(sqL-$X? zFxegJ4>v9v_jp~+vDh!OcJAW>(TW!~V}(9;qrc9GXz?)Qa|S9ZiL?mPu$n$sY^C?`_v6(9JZKW& z{x#is26n*Af@S*81}fY0H{*XnoE&nOo_T>|S#4K}T&qyR84cSh!L*2g;CPRjR!{RP z_aS2}K60hE{Z%l3gWn&Ksjk zTaEqaJ=aA&tVI4dFy9%VT)vmXU^L(cHNpINS@y8HBK}B&sW{$p}F4#b$#iryx$DZP*EG}EhuoSIbppGY-Vy5OCOnSJfejBe03Wv zQ~`TpH}ziSqMg*3AEeB>dM)n99#Duaeb0f91fKjbE+LrcDl-GaVq+>xIP!1_!x$a zb5;_E60g?Rp^NxOezW<|@`>&bL!GNg)8v;0)_acqo-3wYw~6<})qjDZk=aUN$~dqd zY!W#9qb)g3zEk`M?kFS2a9P_$OS_$oR&owURVltqrB?CwY+CRGb_>-G&aTB%xoH?1kC*%lL(iUHoBdRN zQatMOD>^b(O9E95KzR?V9UVS)o7{)BX!*ox>80GlCc@E>kc6BDSSi|kYv=L(Bs+2X z6y<4f2OnUe=ijY8{3SuaFOoVmK?Io3`SnlH(oW^AIy-Rnm0(Ch0bp|k;1Sk<&Y;qK7!Qg<~@jj~#<(zR9f!+3t7He=gBZk)2M zVD#hZQ6dH~5I?V1(BxxmETHVtCDzFo?cMD#E;+fMkV$Sx&i`t7T;B8t>DzhG`LFVw(kio&{$4A68cBs) zX#g`qt}F6XW<4rUwwGH?4IO) z)jL@!oF5p1&^PZ-j9>uXu8*a~bI zn&Voh!fA7De)KKrPZ2#rGkar_qr{c-Yb*x7D-WUC*6jfg(K>N-!l|w}H*N7S#j$j+ zBI^r-g~um5db@(M>x0(^az!+W6~9gh6|XzBC(LFnK1cRv?>BeosR{PU`3NIWey=o(A7kUh(0 z=9b0Cxn9cOqxUIY24ADp;O$~6H;?bny|!t z(ponV2TGnXR=ViL@FaXWx^YcZ%H&y-)tSLg&6IVT=FSlv;}AvOb0-7$U6S@I#FDF- za#9kA7vG;2{~n`KwNy2J`oS(2I0I8{=lwt})lz;p1p6yU-`x+fNe$(+Ta7gPZhc&! z;YdI*>&kiC{MS=TO`?;>&F`rY`BcQ60MAyHM& zMJ#4Jq((mGXtA>;Vn$HIk1C=b-bK39tR>y|@R?`$ncIxVD|0wK+{R%sBmr|+qdOQ> zufLvir1hw7>W{|2;GCK1V~jvnFpSgX9@Z;K#1sfO2bh{ZZA3$?O+yX&K6_uqor{AR{s{NPVJAebgrDb?pXp#6e1iz*%@41FlhRbddO2bOBv-1Zo8{Ue8vf` z**GE6?E{DUN{Cdo>PC#CW|EIzEf&*Drc%Ah=s5F8^kpmEuib{%hP)BPMe8j!ah5P; zQTZpi=R!vx|$Mf>=;HS&h{PFj~nfNz2$SiD2eMM;6PDkkMO z%~;7>@seE%DOamC5lqXG%y(*Dw`*o(+8lT1r9Fcn4N7^K%rmS2X9}v1P$QD(joTuz zqt`fK=M*v)>n7q4P*pOuu3r}`z@k&fei^(@-H&vXEC46l+FZr;w$gog+Dh51Ks$yv z#%Cu&FOw2?qXxT|M*GF3-BF?syneTAyx82CcA9WDcZ_D_#s0oo-9Xdp6I@Y^QpR z->)yYE_0NIv9miO@ei#3CvN%=|K_?JW;1F{J7|9;N&b~y{8twL-;(q{U+H)N>td34 z@BG7Mvxi}gOLY{(?|*ZHzp!cQ3b5{mjJnG|T-I?4$mGpB@w5F)hyTNM{knd|k;8Q! zF*E;gSu_g(#X83Igirn}NA`CvGobu%-O7#jQ~zw403YB&qwBNG&iqn?|M`Ia-yWpZ z;kpsy2$p}g%s>kea{*8F+Drcu^S`yC236<7KG*|PjZz_=T%#<<-5yVv#Wb5Tja zIxA~ct$(&m{|=x)1!F?9FaCqd{43S<>vR8AyuT2F)c-2pUrFEp4-_xJ3MfRq&~CW@ zcMRX3l9PLb2FRXS7;9DaCGiCWe-h&9x%qKY=pUFTo!5sBqB-Gys^#uTgxEh=2^h*~ zbHG5U`7_iW`DYfYLmOB}tl+i&XUhZ{0Rt7if8OQjU&+Y-{$5lHux{2`z59Rv$X|Ik zeILNE2~ve-X#SyLQ#eEv=$OR+3!(gnZ^_*}L=dpKDyH@^0LWkwcA4$pTlhP#6n761 z1p+nm_RnDA?_At-#Vj@e8T8?P7yd`PJQ6@WL=<}t?d*T5*nhYkzrH>|?J$Fs)f{B@ zk9G+}u7`-?zl!&NO2U5?@2`aRzl!%4-r~QC_m@8HzaH-|?C}5hJ)Yt$+rnT*0cmNX z>K>cRbP*Mx{g9(=xFwa31VkMAPZzPRzvYj9I*!Noa{5+1Da>Me<_83<*B1`p1(NB z_mG}r`{N~{U-*^l=ZWskTa6z>u8ZOV+B+tq!jJcqE1wgn%;^ryJl#=oe zfi0kIbiSSed->g!R02A=%Kl3yVsD+#bZ4oRpv{!xQCLa&MxeoEplP3s z-4Xk<;Qv?t_uub*e5j3NhAc3$dNb;aBE@*~u+E*UPqqfa` z<6p>2y;=qGxNygEKRoh|XPI5k^-4YaKNp1 z3d`f_JY@vs8*fct8;OJZd`|KHNd(Zjb$rMO?tYk_-u5lPC8C>m`kWf!&*jA6hI!i0 zzUST@s&rPWKCps7VF0nkFug(R&Z5`yU}FLGg8RV2Gjc6zp>bQiQh|e~^vdxes3)hd z*Nh^ziHwr;*t=T4lFwoI+4hOtT-2$ILZC`FCfRn;Kff!Hq&I}$FwXOrnrpl@?pQaI zp zs9k^dH4hJ^{@BvB?oL7MfBA|`aR7J(W=n#)2&t{wF}%WbEnAU0wqGp@l9Vg9l6tgy z1Y}?61TlB5kRuOI^Nyw~(fx$1fSYR|J~ z_%^D2S|#(z$b2vsKO}P^^TxE2bHH2|2usxsnw4HIg!)-MYNv4DC}WXMgk~K(BVde)B}O6&B}=~QyFQE2)6!&}IAqy1k;w_HqJ0|$Xzen9xIN#!ILy+0{d(%K#V`{V zQjIb9>Vprs4;DfZoR8$g_Z^KMBPGVlI(~SgEn10Q)TQZN)KY#y&82pLr04E^G2-!0 ztE%sEGsPfs>w~?Y{#-M zPn}}3)DOzLP{xuBDyl?db`;dH%D{1Z+-}sIv{k7oH9kDy@Bg}SW7StuN}wcG#d?#+ zlC3JWrKg!C_ z=vrzpW-5?k9C>Wp0(CRo6V&@;;Z;aMq2ql<@$V!~pqw5qB9d@;%LH{488t%Znr%3o zN}FUDB;4}S787926%!be(D_RS5nv%e*dmcq<(~76XSj>6AZIvI2IvtPCpw*=(m>Ha z`4NaJ0|iEoTj1CEQcyq#mUGbY$}E|j{3Z>??0m1S#mx%g8tY zwUa?W3&Gw5hf|b!N{%wSaCqvS6n`r}xutLCJ-o&HLkN@a8-f*Lg{#;se7b;kXG!13 zTVpdzdj6|JRgqA4<87}4Rc(zbrko@W|DlA0lIA`wf>%2Hpf%j^F($p+lAj}LBZNpl z0Qi?g*u{~7%hA7Civ8z%Q3U{81X5v+ZxF1U4Iq6|C!W4daQ4b zd)7*t?v0~LBO5STsY6vkf6fBH@@A7)e(yg45PDrLe22Pz%jmtvESFx?l`JO0i*4iP zuw~pD2~})8$NH=JMV~eRpq`hmhs)}$=+!0rzm~gQHzPJ5#9oxEsMG|06BW)L?s?|;Jjo6U7)&BvakXgN*rk*&sM^TTo~t48&YL@gsDCbZq> z+%llZdPb_~l|_?PmC#B$1G{2% zJUXM8N>4w=PRpKrj+R4!RocKMBBw`DX*Ork%Kw$}h|Uqtya$(dvH9h*sh4^1weuF` z3I}E&G28gYWHyhoZfmz^;3_*>9{V=gS+a6Jd8xjDf4wgYreL~|O$(@VlGdu#anPLP zBZi+IFaL7S?RfljZ*SoEmvg{x>1F=>t?rxyfY86yo|D2?VPUHv1sfU;W?p3Td}qEn zLGf_K)#LMQ#a41s5MfYp>0Rfd@Jf#2#xdICc3*yMD^!vhO+RDL5tVr`gvx2AUK>)67nR0Gv8=>!6uUq&T=YWv(N#GqaN*@a z+k26{JSR-3jmtH7;o9_Y27#_R7Qs%TMdSmWyM<42SSHm3S(* zX*oW3qZ}wTH$o_3^HC%Bqkw#PT#^QB`-1?uNcV@CB}ob7W>@vNqtwKx$nqfnrBZ-E zblAR7hmV2mu0?*SICR8Udu}d|TmA&+idHN}zWAz@Ls-+DB)uKTERliKKP5t25h~$Jjs-^-3dN;_M}s( zP>C{KI43NlELR{|mDT&;ULC;|XYw#s8GMoKs?KIp;~&X0c58XC$kDEHe?!54G(=q< zWe;262v5x0@Nxb+vv4s7N^)c>m0u4zV?%d{xJK!q~zE``0_|&C?4QAsE9u7x#_#n z<$Wt0Q7?b+qjRSM5vnD>ZiEr^icPW~KA=t?q@Tr}$FAu<{()=tnqJTp?O96>P%7%` z6~eEzGI@Zn*xw6>SorsAzTVrXQ*VKeQ?zobs)5+VonUZYtr}^FlH0m2lWWUU0IrV_ z#0vQkjwO&UabXA^dI^gUPB&;ay)jbPAzqs(Fas8M(sZ^-HXgh7V5HU~sI?qii-U|ps*QumQ> z;*=};wFE?da@PQy>`)E$3{z&`?LXf@b(-0^XQGa0ku=Nq(}6Y5In~)0bw&?7ubu3Q zLycr7e8|?F@ClK&Rgvs~BES0hw0%wiuQB zw*0=n7I|?#Wn2Y!APmXw zJLe8}s*#(h{>p?MdF^P5rJYY&j9F|>Y4V)lD1pq!KZ%3#sBmM+C&At@3LaGjoWM0W zci(C_0k%xI@gs=^rk^Y~J+Rfg@d=SVjo^r0c9#e4)%al_s8GLfTk^Bu!%*%KA%bHG z_x=!l&u$E2fY@*p`DQlGF<=Ykx!0SmM&ZoZpvr^VH-R|Pv2P|%(z~NF3c7Jhd>}W% zI?*Q`k9i2&_9KPo-rU=gA=ENyY%8p#Quj7Q_`R2uO1Pj!h)rBsU!HYxiU$W(DxHwg z_budW7M0)*MBr|-OVo_V%gq_#=|p0vNV8KT(1;bk?-IsgsegcUXqYV)=HCC6J9&3b zr`BUW$*#u5wIFxm!D1C=zDBo@ipnQ2Sd)5Adgo(wy&bkqB%t0l?Gf5$IZ+AeE=r;R zMM>X#XE=Al{(!oK70_)QO0*ezXQ^9j^a<9UY3u20_6%j3xG1G7$f4|=#{{;DvrABE z4%LOHbzBwb^rMV#w>tPdSE{1txG!F1aWe5#MXVeV*zMaT__{e(xk(2J?D< z?LiQId{=Kkx(D69FeY%>g1Tidv!l}E-*)#8;I;&<8 zX2_YfvN_g2Rp~lC{v?x_6_!Knh3Rsx2I<04+C&3(ISpQ_QxHWmbQSCD7*^SsVO?B> zG3lHLQ{GFyy~_^?gFk8sbOOWqmR9<2j0qtu`Y3BF;OWEWZC6Txyct+;K0%GB!7?{8 z_aVk(?JnIYSCxl5dN?%08jHbwcpRUmlA(VMO!Or`-ZU#TK4GGQ?vQb4E|S|=DYP-n z3@8qRP?mOo{NS38Prg6+dL^`^33b@U0RaY1jVvukw#^YQI&(3^P<|k_l7bAdvs)JokAvQXpXOfdnGX-+(su#a4@AN6s~580ho1 zTS9JZ5s2VfSk{Q+oh7x|)V08wZhvnIqnU5XOl^EU9c)T+tY%`%X}~<25emPPH{8U} zai4p_bS)z9?f{=epOh2g?Sat}2I!P?WK+2t9Jg9uOtrvFJfg1h$G=ggQ#(N-HM*us zIQI3>-h9cIuIyysutd3u_3`P^dyHn2|AHZ<`RBz8E_vdKi!9$=1OU-td&Z(D^bXM!AGeh1J2+`nD z=+oSdE}zD6pSw4_mDyeVzO970GYX(Ya!Ys=u}h3)5sr%@T38MlhJzNtH@`r~M&T%%Fzvbq>w{RwO8 z3GNHP2@jT6H0q=%D^LtAy?~9jDl#E3Sa#tB7wg_;%jWCiyX!-_EcY%PsXheqy&-h< z55L~jKG+Xe*e{*Nro`!;CoKa#@-{rdn`kdNJ4N~Z&syu>`YjN$=;$~z9@lf9b34#a zK%y&Yxu@M4yWUD8u74Dbo55ybd2LlDZxq3Z7s!dQpl<(k#ahzax&%8>%Bq_%;=81Nk3uK6(Ec*7$f5m1n33bx2QYG!arQG%~8ud*-nAm5d!hps< z_kQi<}t1EdvM zN((nH*1cqYI_z9ME4hyjkhZnT=LWx}t1*Wm1`b0cU&6tHHyC^=e@Z^? zoNV3^Se6?)s2#uivtC|Gq?g?vet>x|k?@?RBg_F_j-C0a%xLC)qmXiH8#q@TU9@=F zaRta4gt7tj@uij2Iu(ih9Cd&udp6p!MAO*aR-b7IR?|1FE$_(Zz7kPxZpBVp!GA;$ zsy8324p{riv0fu2i)+R4g#4vj1~A~lYj3z-R-P%om$vWuLxS-n?AmIpOn(He%5`Rdr*?2_2%s^xfvd6a2(d-13rq zb=~%2hx(G@7|>weKCUM(xb|!rbiZHI?!Il4seCKlYCX?%#SjMPXP@9yUWOHi0=?J- zrDE#`{!ZE^+e>o-13o_#Pjntun22bmQyX$hjqFHOc`PN#|LXWd&?+1y`hK|E8tuQDc}-e7;L@<+Kq zyvF*541(vs`5r%$dx2(mNIiCNB)j0TP(edGUBFLPEWJl{E8R1HJKkM7*g)w~<72yi z$v$$|;`2SferNk}zg@A_>wd75<^2@N_VX{ZNKL&)gbH5P=bppvIIo%bC#jYwc-3mi zb)#p%RF2OHK>@+*EjM7^myUxmh(fc&;uKyc?YSK}?; z;^x!8V%7cg7uFU1?a$LT1hJZv@jVCdzUwdScGM-E^41pt6jF{%Pp$>&e#+@g|5#dz zalBx&P~BV5ag_|!Z;dF?>33e1ut^q;H$^F5p&FvSNpZIynD6FAwv_bN+8$@adEaIA zl1L{;!k%kDvIp+i9-uSM<`>-02;XJ80yJ?nFbfhYC-{(I*~@*oZSohupPn5yUSu76 zqdZeHU(7*u5`Lz3H1Oc90M~Y5qp6>R`@nEcujRUjotMu>bh>VGWb^dsg8*%^rY6K( z_t*eR20u$AW`mHv)phrgP4tQbum&7t`$vJz)mDEME3_kOLbQns`k0gynmw|`mp$2g zl=?=nB^wKZ|)O)Rkp`f2qkAN#b4Cx)djmY`wu@)wW>oPzvt_Y zNz|n>mk!i%u~{VjHl|~fIt4V6+Ct2I(#kzlF+|;s|6`N9<;VA0ukh{v ztl6Do>k+S8>Pat;I?%)zTGrmpAlrU@(`}vTuw;ghTzaoR)DKHWQ2g}fXEVa&zW7(( z?73-vp;0$ZeO4u!1mD$JjN`wt5r8!(jY|LJDH)=9k6cs2lWRN*o^Xag&(3Z zM8;;w(uK4mC$stx)s?XFNMsY(=i2a-X=FM(R8n=f>V3m_cKUc|uB{8`shfZgs}0qBGO?+Tgy=2{5(Xzq?1Q$HJdFtDFUq zPf@Y*i58@aMaJYk9%-VxSX_OG7#?P^^?duDAF8j%*IDE-ESB6geV89Sa9r)fKLXEB zyXC#ZmAJVFlaYY`5E*M8FHouI;kVT{VWi3M?{`mL@=7HSmcDfbdVSY51V-Cp&u+?( zeBv2*u7WnXM~}t;)Ns~A{@)u6?5PN!I z17lnELz(-Hn()V!9y;N}&wQqV&LF#QhZ%RNEX*!cChPdyyhjg# z&V{-~ShNM|(hW_2XNnNUMl5#Vg8N-@{Ag?MnNbiv9f!x%+MeAb^J~l5^CjyInBE4O za0HHp$nCu1fM+}w?@AOXZ^@jvfyl=JzW{pgY;nFdBL8Y6bPpHT#}plf*Uufl}F<@g{4bxz6USW;w}y z-3Er<)o$~d1Y*s4c)jg26D~w)l?_5ijdu+g(qnQs|3&}Z{!#U|e)t5?skPtZM3yCu zF-Fpey20i19)ZEWlyh6%-CLaK^ENdNtGY&(OX!rJO&S4L0{B^!YxCZbRKZ6Jt_a2r z^yH}tQYFoLHq53oAT6 zLNh~hC#vYZ&C*P-^BtAl{ML_z<^wEY>Ba83n_1^hp!qtZ$WY9yR)q9z zfPcj;Eg3_fO5{A#f>MBt&eyxKluv99`+wCHu) zgfG3{`tp0C0y}OYK=m^uGnf0^^`1RzUd_xnZwW35W2=QgW*K4L((>hz9Ak=yW1*6` zUbzS+2-&vu!1Y0=htnG~tN0rn_Hi`k5_J_3pe&2TTl`yt-}(e1ue1JG7QOz7TT^|b zXYHsH^LQu~#C_JnqWF3J%?m=iNzB@x4z@GCE`?bqTDxY7+`lehY!w6u~y*Z9o`9lzKLL0fclD_IJOC^|yN8!du+oz31I zW9~cEzO(-lEj!8w_Eud!cXhjaY@ReU=oqp+D6~h>wrw^ArNKt0JEg-zDvGZ!&$vDm z1!fU#-}Sck4IUsr>8sGOO|~8APTe}e3vV;Mhc=y}(&wxWNP@g|W|gvL#PX8wNIYuX z=g?Ohs$FJZ>#^}yF!0%d_ix2#n+7!ew5?WbCl4I8hN8!?2Tx^+N$kEmH|Sr@_igRq%5>C+&poljLXlXC$6A?u|{a zXSdUs0qMYisSIe35s<#RhLs$7Q93ZZ;>$143}i1&9mry|ox6FjSsyIqlsq^A%3m9v z{1~(TO0I)|jLpv8{LQen6!a<@=&+1T{$R(cC76GFz{jA{k5$t#2a+np5#yebQN17Q0PLsv@;yhpa6@kD$0y zSu@)`+P;PEmM~%X7JuQu>E;lVlCwxZS|d?HX|FiY22QL~+4u4KS^K{({7ySHZA&lb zw8c8>T)In(HFx(doS@VmmFXY}lJN!viO8d#a$G64$&|`^qGXw^oL=X<>ICHbr?;E~ zey?A7?4x<@03cszC=@vwWe>=^r|WKs(^!1a&&%nM%X(6Kv#_C`u(Gciron#n9_1yE ztzeHTxQ-v{YNZXHOo~vxH84=vp7~K8IgtCYz`HlM-R_wlvAMOqn`S(nNyP56Uf;>S z5Ki}W3fyp4Z&o8qu%xzqpeASFFkOTjzu%u1#Q8vfRVQm+TY zA|R_#|M|#_AG7o|498BC(}I@FM5&%^h;R~h9GD`oI?#F`S*e)uAb(0UuEqK#&_{o! z)eMs)O9wYRRw+P??i;tSzS5PV!8mUj=yW^6S~T=o<+rtw;&+Oz1tm4##J@D?Wj_u< zLym*45$IEX7N+`6y_^jOM&FET&)$wUJ=k-#Epr&SdzaHM`dm*5F;NfbxF&NVyH{iq zY8cZM1h#V>=45Dd!S4vEkwu>-jJikw|>V8uvd`OHXG3D)`^N*t4`$;N(-ZMZs zqasEnWky)niddo$N0>-~JBe_}JstUe#mRE5&GS;nL$t zQR%e07rX<_r`cY}1Xi;ICiVdK#mXmmpw2B%94!v?oR?dtUouM(jjnBd{^{AnKp;+a z$&g;&oqRZ(N2qzhP4)Mruf(&sCo+R~aPGsm1jmB6f#Unej;pCSL8S1?0sgf0&B(w} zBZKO>{#8=^=cHh2`R|D4C>0|MQlDT6c1opc+qfPxbL6TeyE4bsWuxlRG_5gbQ6OC> z>!i9Y0M>d33=`8yJLItFR0l@hy#xdDb{p9y@*Kg;le-sh0Rc9ODsL<+!v$5w=1CQT z>Z2p>zO>9J#9kstUc@^NF_hfn*>ZbUAVzCh1dPbr+Ks4{XYg#0`iuIkEs9Nlhmn~?b@}yT6+i|MurdMz3-dG*M9q;+U)=768GC*8DjMmo^R+*opfY1RIlkStU*TUk!X}nO`e(B}jxRD>g`3EdtY7 zw6ViUh2Kwk(hF{$@AB`J49oUjR|PkGH(f&=ESS4HPHh5*1tXv6q)0Lef?G8r`d=+v z6nC*CER)as>hvNkv(n`4eW3-+qy6P>{N7rkCAHQWQJRB1USBJ%GL(ZGyIOn0DkGb5 zmbA$+1+j%GTdh(Jb}wT@Vj5T#GI>=zJ2p8Xh!GmbSd3hs_q(5Dw?2j$4x0}MLVA|v zGp*ZKoG;j1I8o2LLC?_U^!?%+1e{Xd{Zvy;(O^o^IQ7Y`n<6g5KX- zM6I_|tftUfl{kK6jpV_4G7<>ZYDRyv^M zF23~K@qPIK8I`Tp&zGa+37+APBn_EjDvJ=+k+UzrGL;pku)SEBn3Ok~+$}h2Y5#NV z&DNAZ*fNVl!Ji&l8WZ>FxGF=1jV0AQgA2zV;k+)!U|aA?IWxK8qr#hv94jqUwIvQN z1q{W3r_BaucGT1IqvB!L{`?QYgqDX!n%IK9=$1>EC-NZo3ZNEJ`{hvjgKLXryqU-s z?5^N-u`;bqe?qT)`Lg{6NM7gWpVU{5oH+2Lc#=5&N z`$Z{rvO*%6g%;n$zD|cDD^E~XW@+~KDqE$wamEkazx%ANaVF}AK`zAs&KeSj;q#}) zntLZP*1$ekBoaYk`gskkxsxjCn;cICL~P-zG>mY>qPZBny2YpE$(bNDUn2ZEFvD#| z{yISe{cgXe9n&Y<|MJu8k&dw`e};V6AuVovYGXG!c)LV(z_}~jX%+4N$3&@)(x&~P zlIg?2C`RnGEny+;y%CKe2hbtws;RuwXR{BrU%ObkRil|<>ds56i|+Sy*fsgVwd%_* zoDl3wcUwzn)(|kKDfJQkP91L6-NTaO8&UdN+uc-wLyG68RlA)dtJ<1(_3ctsW3%Pu zS_eLU;J1}7liMB^TI#K@uzv!S3NvbQinj93Yx3qS21XN4iEEsg2tp=XPKi6{(EB>o z9h=>4)Bf~cJ9Ub`ce8zIY6*PX%**I~I!S)*JFEZ$44H^iezDoE9UFV`4!Q)r1v1RN zTHRl1ldpIRTpx)p&&k$gW~<%a1z1EIi!Y*jFN9h}J^l2NqB0CvVpE6DU!P3FYnEdM zQKi-9{*p{B3>e$ysf@3~Le=A({wWcyCDsLQj2pl-5*@i@w{iI(uuLd}rXA;)C>Zmo)lGLMTgJT3YU*S-4uR^4mT2iMX?2-+U!;wix42Z%EMOU zRg*Ml34ReUS;o#UQwYoXR{+1Om&|W+982q1tT z(tnIvQV@A1eR+koYb{+IsB716zF8il0Jl&@wg<rvsUTuoX#-5FJAvjZ->L8uN-k1eF4@)taJp1?H2dHOzFBmE7^4^UEJ++ zYw-q(a)x@!+C%qYI=8CmN@8LjOE3qNf?P!T3)Yl6O)i}S;z3OtQP%*eU?T3Ips#HGH>$@Yys$Z%7hzI!m**5zf{Onz&17Q z#rnCZdGPS#Yv416xBK4WL{c!pn&EE!v&8@@rHpx;`;O%IdADiD7F&ktpic?U?y(4I zNxeYE6ns>Wh=1zX$|%{R(tj=xaoY{|Anu}2pW}zNl={^sT=5dz^)(PZIvTAftlk9O zRXutH=uU;TQ}!o*Fgv6u-?-e*BII^bk5Th#7I*zb9E84aa$@R$+uupyS~Pp`lj8q{wne$lJeGu_oCv?sq+5Bf znI{Ro@DP}yhe}F6qNG4}beZl0=x%qlEgu>K`u9wLh0}u3XrvD~otD52W(yAju zQhw<|kp4svkJOyBHK#gK6-eMJ!k{WN=JIx{ll2)}3~vc@C`ty&xcmRRkK-ZxP&*D%&&FOw$$-+acY-}SR?)=(t=0FCx$;dbR*l8xLf9NfjF6aw zmj(RGeUH^UIc*{6oH1Yb6jM!i7qxvU39zv)_9gnJ6|0TWH?d&u%eLL7426rAi`?IM zc!fTdeDuJ7Tb^Bf0jORdHs zs*CIgNI6l&c>bQ!ca+rshrRcVYHDA%hZO}BDHc!x0o|zdB2__(TY)Vd=^eyC=rsf> ziC9oUK&es!NGJ3XdJ#|%kPe}QA{_#uCjmmje?|8x_q}J_vCqeMjQwqWAR+5lo;sg7 zPdxDt(Y)ig`3Z=CZ4=C=Eg|1}Vy56EHlj-wzP&=B+x~mtwPJ@yG)$6j%dP-!j$hOR zfH-R*5J3YQ0A(y?MX9YAsc$Nqm@>sj>nLPmp4T@mw(udp=e_cM0l>3ewWfx!v5)0X z3dT`EgR8L2yU$4aLJ!kEag^C>a$O=4cAq}+7jaCRdC14@%(2j$6R0Z1$XSa@RZXs$ z#U=$_bhK_dq6AO@EmdwRbQ~eH_K0_a10jqeScPQ5myB0Cmm2Mgn?A@n*;c!nJj_@~ zq$@h;!D}gmmEBN^O{+XDbS>y><}?xDIXkFww2l`g54J_XC%D8?(;A=L#BvpN8c!PY z>|J)7Q)6`s{6QfsFE?)q(yrmmmY(f-XUpy6NF_ew*@-Nl4Ec~)uNj3t0+m0@?ddcxSM*O-j`xB;IBP1T z^nq7Tw@SWsha07f!A_Hao54cbkGFOi)RKvSlYSnG-#oDiOBlNgIm>6+Ip4PEVZ5Z* zs^2|VvfX!nO3x9}Oa{t4V4#}p>R~@NeGt;JqStD$nj5U%5vh$}9AMy-X1k3fAv1w| zx&PDv6=oiuy7>};-lwUufVYG^ZqhyO(xig85fgalDx;Le_PVntZ6S{*W+MqVd_>{v zVuYm*&~aRxU5!MnNZ;|&98E(^@EL!$ye$46U}8e}t43bF3_aiPIiy?6;2kTJZ-|-T zl4At6&B%Q{pvn@i-ybv5;r*QzZ1TpoXjMDq#dFi)O(d(;eXly7R5F~!?2_VzgJb3* zy;54K=)4n&lu11X`TGEl^m0mc=MazR{^&yL;r%q*M=yJSTAi_zEnfElPP^Exn~^-{ zdbMYE^c%*-^i16l5OjotC&1S|^FFu=qo-EsF@{Vo+OBu;Q*Y57lyvZP=FqS{Fe<`NLA2YcsUD~U7)FNUH zzz8)Lz>`(bOCptY^cS_@`LVD>r|#Qj=93^U*knY1D#opLTrOn-9W=!MM%r1n3}B?} zD%O6=)OFML=|j#1POwShhLOol&4`O^DK^;vBmDY{ZI-UqnTqk5(pDnSKmTiA$Mu+ebq2KIeD!1Y$g_KE@%h%TA* znb_;_Z5x}^X9oDD80dL`%SJ`$-g#ycu1x!jlJ(=}@rhKkvZyaWzY&=y*fLe`w8wr< z%TXTI!a8y)GbIP((g3P=2514@8@8<7GUZa6B?lc6RO$6PSzl&#CIb02kL-8np*mOJ zf~E3r`y56lj&rA@Q_FxdX?&UW?W`1|nBk$04o5$0{{@KrVJ<USXocM4EF&z*YKG1woB4)1O%>H9@mU~mtX^b5FW2Slgp8H8u&%cPQ$J) zsqn3=E?Irv{u>Itl zSESMFHSW2b_slt^CW;%iuE(J_sfHs`12{5o+~Woz`7ImO*@gYP z(g}}D?vMdkSvB1c4~)3YRjT-`^E~sEK`&ZbYhJ;@A||9?ckuItBtbOc1V^-g1{xM;Nvd!hY&nS z#F`o3I()?Ob%0j86^C@UbFViTdMG#DgA#3RI@;U5m#r-@E*uzgy6e-c82p*1ZJUD{ ztI5*mKVkP;Y6pXfktINz8Qndwy%s%3#VYz5*HP!3s9kR2Cx<`N7HAilCtNVs@l|Y0 zlbj*H@^AW`K$uAYGMP9+-2$gd`DE*_*wWHG+u@Hwjd=AP%?p6bU3r^_1`uU~AY2@k zt;{%^MFa>c0ba=uF>HW2QVxBF6;d+W^|yd;kFR=b^3pk|=Rc5yIi7rw+R}6E)geqk z31D&*1ehFkFVaw^Gt0gSrQU6kLkCtmaGpH-2bHkEKc1~pD)1PQ@56?YpY7LI1cbbM zu(YEUz^vWt+>_rs&jqdqbPCm4-Nf*9wZ?2uhVPH&G(wpxrbaH|?Z01q$wo*VY6O78 zt}j9|Q_FONqmbgej(~S`tC*o90JPVKdDVL1gz=5{6}(U|(k?60wBCF3rpv@`*zmD{ zS%IY|E`ES{&iypdN*}T!nSSosI9vF!`5i*>LrmcFgTux#tJY2vSLmN;;5y}2kArn; zZS!EV+$H9IYEI=AQ_+61ev$HhtqVCH-VKCT-?pE)E?=&}0$p~qlpiyU&mvTAFJ;OHlOy8W!)<68GzVLlHHkw_OLT_KC&;kU}s!1CLB;&-yv&5M`~=R6&O-tShoUs-=> z)VnJgfnGmTHsEHFD@Hrrf8`-UyD~Qbz-0Yw)EV6KogN+#ejN zMpaoTM0UQFA08K5*PK1qnwA>{Se%RvfhKB0e(3n`0*vo~&~`|U$0Cb3vlFbiq+Zh* zI<6ELB9ITbtCU+2cd#CHaAiG(5}p-vNVvvSkODX2pdDOsU&LHNkOlnGY5LY5h#6`B zy%5fV4RDM0>=g2PhBGNh0w}&J4(^0b8yCL{q!wGEb#PA6Ihtq6eK%Si(}xA>dK9}S zwgHbQ@okrJMM7sM2M9uOI$%5KB)WYe&eeaJ3XSF@vBu7|I+pD`y?LWgyu17HIiR%k zUR4=q;?(;{y=U)(y?50zP%($%9S$}(M^9&;^N3~GCl63+u#ASxeQCGVXEvUjZxVSR z+*74(g!O2-8f1C?BLE5nq;f}rFcOLjNaX}0sKM!ymB-CfF%N(ic@$XWwJQ|{R1GA= ztpf5D?zgX0D!!(b3Nq@HN&mz##`0D*e1Dw;tXdb)#d8J5Ho|=0QJi8v;+)a4;kvo3 z7qz3A)D^_m9$&JqC>Y7`&vat=T(>UjBt_*{#FbesVFdViHnQ*Z=U(SPJfL1(>>kYE zN`vvE=Dm4frh>gc2Bt3UJKEz`O^}e!eaI_2(AgNyEQufLjx+GAyqehNGMsCy_tC&{ z=leTT!faUaSe>5xWOus2mDRNxpe6C;)7H0ZbShPl(|{Pr3* z!EYt^#8cB0;V`5hC#lcId?(fUqoC|kkNL8(>FAH#SHsXLj1~miYbk4nv5O3?8Vpie zst=pIAAV70)Ilu3rjM&1;`SJr$>?>f&q`hJ)~=y8FS8pbKua9{Nl}TY+i3gVgr&HZ z0OE{%adyE7yb&K?TlDNljf}F$*OB%Lj4P?Xfw*9@ZKJuShP5oCN0VpDfpKd$- z4QY$K<3b6$n6dJJOPq(F`2(C`{TtqUm}rr+`FClUs-}>MdEQ|xdm8|pf)l^FH}6=t zVl}RE{H-y*@s1lm^9u%P_3+Lxb(RU}YgB0GecMFBcg;b5{xDu%rG-*-{?>l-jz1gc zLibU`>xEqLCXd>Bj|Z*(5NAw9J5PkH!VM17fX7lTz8?)fJaz1KD{{$~sCZP=Hup1> z&Og=%Orwm_^BgJ#Kxy0;Dvmr4p~Wkd?hzA-$PcQq{O2EiURZcWLdQfK=`N=dS@>N**I0)^#eM)oF79N|*|v9HppYf2OeP-x!I&w2yvGNRxZZ z4}Ee#@-1?npK(qyy8osU@$sRVjw(}A?@;Ng#%1uwFaSSUWaa9vfAh1F@uA}-Xw6L- zM){LcuRM{{XAJ}SCFJv}V&ZRrHk=-veX_5xv#KWdmahnzg z-htXY3MuXLDt!jrd$rJ9>b)SN)Edk*XBn!}4}a~W<22;@xN~;C>t>RROR*Z>Lumn0 z3wMVFasO;Yoqewico7BP>ES8Ar%|oy(vwAWB|R`#ue-U|0U*ivuGFjI)Txox$Sc0Z zD6nsCKwh3d+qY$n(Uin1;M>0QSLF};((~YWgxOKrMNj#>X)Bzgu}{P3l)pos<7U3t z7&g>Q?2xG(31n^4Wt27(2LxoTEAnD(r7C&-&faEvGoZ`(Nx9s4*8g?H)`~+a1`si} zYkf`7xqP*-HrW2$L+QS2S4OjHDQ|J1ba7z#ihAuq6q<$peLh#+fc9`$cSTf}gGST2 zUGsY?_g+Fcq_jqxur9rtSGbNs7y;P|Ez^w`mEF6XkAg4LOS{-a=hTB`r^k)+>vn{3 z?i@kBN`4N$cLN^nZFJ(K4tVXl(=z4KI{R!h*0zNLYL{;8YpJJw%9y2=-rpNuJ?!}= zRerxZgWDM52@w_L5a3H&QNv&F)4IMt4YXdwPm2jS?93$o! z4FFF4S{1lQswpABU@nQnS4!gg+B3Wm2oM=r&80!=i)k#x*HOy1n1#T%}Nm@FNl5X=$V}`?X8Gh;?IBabsxqZ2lNO ztdQ>pHR8`Bx8{<5{GM_^_f=0T#t ztU6oSpai+MQtxL<`|npI3SpBUEp^xPgJJE<^3~m*BDf!_OcT%stc#&H%yM@g9N@50 zH~y+?AotmA2t|=Hf1PxV<8oTM|Gh9?W)z1sp)}qqWk#Z^MmCD_a(e$lx^i=Q&*~b@ z@3HJ=V~0|HU*g64bh}#8l!<$=YDfYtB>VuHMas`RMVbh7o$xFs z17KNy^1zPHgVZdfKNbs$j7VM19xkdK;YQaxMn7(n487zHEQybn`KPB>+bA41lpNwWY>S zX9Q~zS)P8Qb-7Xkw}kcvF8=14WZ{68VEEPR>Y%aZ)JDDwF;n`^J-WZmEo!2L|4eYj zjB1TQbv_2)V0?r1>v2TqFU4+M!%q$?CA!|ns|FPd{ZTZo81Qw&`QkhAtKvX%_dI`S zYXd_k{br7Gjn^XRp=p&N)HP`B!xk~SmnQcGC|}44u_^l<36xt_9p$ti!tKD5oW-kd zmr~#%DYeJX6ICF0*-#ohK?eHzzTdWVG}S*cWgCS%p?~A}wh0Uvjb}QfMA92pGaVgd zG;=tlpwSJFf)*124IRcQh7qn?+ogW?F`D=rt`}f#Rv!tW3S3-A>1TS%63Um_5)dsA z^_{T+h$EWAddNub$>_ISMS{}cF+q^#h{I6)ymG6>`u*DJ_YOX{$6^x3U=3T4otHKS%JBhbpFT1RAMiM$*p#XSdcV)>)U;_}cc=?D9WkfWa$X~%-zb~_-?%Dv{R60V=$PnnGrb&>0ShFveRw)5r8I(L3i5s5T!J1>NR`k zsErW}TI4`aPjU!eb{x3CTaMOxGC{^BxqN%UJEx(iJdqB57Aoh$R$y4DZFlJ|Td{5% zANFi4$fPBp;9VP1X*q?D9{8vZy9jxxYeww91&m?0B2|CS^92igS~3p!RnDil>RZ_3M$v91Z)l-u317@^tmJt zp%omP@f*b@IwHyUx_J`c0d!YtK#$-pkWAgs zd(3rG@K2(Emr9?>d9gS9bjOHo5gZo69$HES(xl{dj#BxdIFZB|xz&mzfa!h&^nP$h z9A8;xrWuw^hxTc=y`P|ZQ!p$dwM`qdf8PF!Ud|6AL&BE(jk{Cht7d~zVB60bM!IuD zvsF{2qW!r~lu(6n(08h;$XRTdDx0&9r-`=9WG9Gzw=27GugrO(Z*{&co#0>rj!t*s zu|1u`GPtc#M<_YRYpnet2ZZ&5Ee9Xhd)4S$%B&AzP~_n%_pX?fordKMYZ%6OKFE-S zzAdZD?7S<`+nc`j2XFg3Z(_fWcYNU4JK&f~j)*9E7XajSrfwy!Zq_jjRY=1XFOqU@ zLv>6ne`Dl23~~5?9nllckza9ClB;LHYt}2*o{JT$B~0d4V>nM7yaD5Q`Z?@4su!tj!6?XbKB1wzp)ZnerVbf^`e6{ z7pgZjvlp}*Bnk2A_oe6ZeJ5hI9f4`DzIETSje+)}VWcWsWN5ZkzNwuxRoi2Nbii$# z15Bg(hE|s%j}+LAwJc1gPw>#P>wx)QtO+oVKn; zxrB$vRbo#dm5?tJ4uKXGh5tkwe#8f2I@MD9wlRJh&}f&lhFP{8qirfIOW@Cc8%lGm zcXg;+$|mi)%2*s^0<%#o*5fl3wrr6SfxX5h*4UB)o3+i?&#$cgwd zKR_gK7HSRY<*MpiSCHHL$qIAH8gqI1_>>J{t&yi!=s0}qux&4GG+c|n%Zcd(J<=JJ zxgOtU91KAc_tz2?&BKaThWJ~bJX8maG)hUUS>ERd;&d}a34q;IwTw3OJiy>2lmayW{ zsC}_Ix$PIcZ6BX=wxkOy05U;Bl)EbmWb+`I1E@c2cVpP$9Wd+S>dU{MhTOb-SB*-v zWfE|*rQpR%_IJY)N^~T%H+$=Sb|z$F#)h)K@-Pqy)yRE)#&2gEnG!VNq}ZC&xHRs& z3|3RYM_<5Hgs$?L6;;-Ay46mCwwQ>8OJl(LMPQ9HcsRg`g0fHhKF|pXbj?hX>G>E_ zI*g2mV6C+(rZh~0!+4Z?>;R>We;k>sD76#oV1Y23##gDGXp{bteO(3DTss}9HnuBu zyE)!n(K1R`jo78H5C_;3+;fJ}0t3e+KVxLmG$-f+5r+W=O7^*YH^w_e!^=iV$8Q{H zI)+?CeHEI^NIh>hVqR?P-DG-b5=VN!E}Ka=SHCw=y*D-FK6Lk5T_&?x;^@!1)70aQk#oSpryIWhflQ-eAXmM}_9*b?QwW^-?hWh6nce%bQjwk!%!UY)M+ zh@Y3u8TsreVu;u^#w8XeIUG0dAIqc{lu3cYV=bK%HmrrIDVR(v5Pc^&#g@v{ygYF{ zLXk4$M|h`+FLG%gzNJ23ln^Ki`1IgyY7-}rd`FH3M13moVhfa)9v_-4j&rS_2_g7O zOaZtQN>`kS z^$lJqc^^5bBWmu7dPUX1aKkz)sgD%vN2y5*<4Rh6-45DRG^Qd>sB4tDRzeI+M+_hg zp~*b7>#>W6L!WcJ2P?Y5E;d;foD;;9j${&do<^dt^A*uj&(0)G=gUV`zFMSSv8In@ zjj^D!!9Au&h{*HC4@`%r%(CLslxwNjC5H8*?{TX5vr5v#f(n0d`)126C}qgKq~TRM zT#hbKyX-*}aq|eZ)(d_stHxf;CcMb0LJsIm8Iedt;jSnjR2s3@zg2e#^%-#0%(W zVZ%ET@Q1euz$1oXyAL1I7}>sWb_h~yf0oqDUpe36B~iJvoo0t zDwhvXh!42149m&#?zW|Q>xY!54}MbG*%&hL=NDsbIbBK`lR~QsrpX*7B_ua_jB|0X zD4uAYy{eaFiUa@XgzCx6Wa(AjrTzWl?*cgYcg#5L3XDJT4ZRM3iFPxB;}Bsny#qlB z)mg5UJ;LG#KpUnnUPPL?N;yRixyWz8H$RX7yvyerSY^zyG_xVA12a}XVml8!TkZiG zl-0nJ=bL+PA`!2eit{+Dv0V!yYn6LT>B4fBkMfb+Nr6^>2AB;r`LiTve9A4g`^SQ% zsR|;}D{fvQ&e4FocOINvH2YPi`Nam%8DxZg9KV>73Yr& zdht2TOB!`n&Yc5V|5Qt()&UL0($dsHk<2+2Xg#Ur-^YF!%1j5A`&~R&1wc`Q*BSs? zhBER#=$B9X#cJ^E^Eg1{JTngMt(ld+PyI=AieA(%%|DnC3rcC?ALxHTz_1Vd4Jyb6!ey@(i-VYkgyr)>vrQCbxNLdn%NHFB5*x z`PK0+zuC{Dpvz6Ib-k8r|8@2LMJf4zKc)Ts@BYJ{{k@p~;r#!7RQ_pm|Ls2ieN_HF zD*wTP{C!mZ!?E~JuIO*8^7m2s`=|iH^#7kO0v%T4QsephS%F_A;{Pks{g-W2{&Z^1 zv_bDvvQzWFDN6k}U!kiE#JGza_UFJKmCOnMrEE_#RpnswzZNCBN*yj)?2S|SFEx-h zfsb80{I3_#fwj|LXwZvzb`m^5+Azh(`ABh0z*M7f=c8vKtpbir*`>+qgDw(m2;p zi}(BV&$@ng|NeOz{!zXDPtGTmhT*qlakmGGEFU1#g=SEIM=bxm(AD=;P10SN`k&f2 z|1iq`_p9CkrrbaBUQOcFJx(RPI3^pc|5tv&PdjI$1vJGxv>M7SM#isGTL3;)HAere zy8nmY{XeXuQ91D5`RvK9*WS}pClsG`ivC*}{xAFp6Mbq`TYvrf$X~8%|J+(-Zs2p@ zPYBli^+I&;EX{?saQ;T|NDXR*zrCT{`6QZ~TH#L#=#Kr%b#UDxn&}`4!AXH~F*d&l zJ?ANY5^X^JmLd5r$X^yk*KMZml#T4m!F&J0kN$=A`t>JQWr2U_y<_KmvQq;%E!$DO zgPtR%4qTYWVcj@@xzut&Z4{WS9q&~-!oWymqG994@6$7?oUY)qqpkK-2J)lZ@V~al zSKX{L9hCRa#)izb(86NOmVq`zb^Mxy z#bm~w*m25xy~mXeM#!wc%~`{)`p1K0UG#s@?C-f0sz)^tCMK8Ix<;n0R|dDUQ4ov zGo|P(41|qfap%^rHQyF_pSP}?uPV(cv8j!*d4Vrf>&2{X@$nT#4X!{P#N=l;+p;U` zqcN!f<$6I+{Ip=rX*ll5_RD^wVmA>Yw)#SE3Bb*vurz60R8c6BDA|o$YK>GZm19a= ztk?1VWiymjF6bWN0ANVC&T3C15wm0+$lfHn8Xbtb1d>nvJ-6yf9o>}LvETu!JguA< zS~V>l=(?Hct$(pz`eakluJ%7d5R;m$Vv~)mmiWh;8o@UmUdJ;B&|-id|XlaB>ScL8)0^}b_WaeYt|!F zjLFe}0s$LTHQ5ifX_2t{N3&|5A&}C1nCtCz0(#zd(g~PGuj)-FO6lHLX*R-h$Uu9& z_jf*%p<|_mMs%)R5SM_Yt+q7_U(;Dv;%JaD6}JMYq4f~v$O5-aFB*R$8FWIQS(Z_u^B7O99m#i^KSU7t#?_O7(6)|#iO zXDQmXYH}QlE^;Ip7pjAhO|Jx}Hz-aG6aPF;zG#wmp=9^{cy{)vn@$2X@ zJXG#*h{^pLuhyaf;lsot^fk!$J_>}s4PvMVB)pU&ZptA)K3!4iSi30GnZv!)g9Z(rPH8@cp>gf zFN>9NN!D{wW9YR$4@j8zUFxz1ORM~7sG2H)yEU2y-f1Eek_@M6>DL2 z{DYH2OK-LdAeMBK$LYxy>xW)J&tDDj8M1-@LCjTskab8QO;g;=)iPXK*TOr`X8vd& zwj9#kBRn_O9J>^BXZxcs;o!S0S>w;a59KtPQ^2|p`=<<2hS_4qv|qRuFu2TpOEhV3968J3u251Ve= zWf+-N?77NQG9`E7q;JeTKyP0fQ#9v*6!k9&0&QYS>+hlC|%Ch^l)e*0or*aPg=D6y{J(J`Xl=vXc4bC(|ZQ zGP@0Z24G<(rE|`0C%cp1YX}qrlur0Ki=wx#=ctT9fYG}JXg9o4mI3@*`RT$%qW5X3 ziP_X73_{PB>YS!--o+P8ju9z_zJ#1)pX8)*jd07!qT2o#kz1*tmg;k&ypc*F5(QTR z_eu$KkxDfxSc4`&Mgo{!?Db%R;M2c{o8{b9$0d?#^*R!{H;O1k%>0s-aOB{RkNgyZu3)R2k{z*e9hrg;wds(TuL}>X`TXhKj9p9en05f+*Kp@KtiRiivZr_!{1X+Qp75SFa--!6hpkO;$P zvBREu1)YtJyN74Q#_}9|Iuku>@t$g94P-YI9&IUGoN!U-nBKkQmhubjCJnWyi5lR< z9GI*Ae-=liujIEB?@Difm)-ZbJvOQS)owgF4)Wdy?-YR9D`lycYm^X?arCVRke=F= z_ZN0y@ftnl&PB^>gnMbW+A%J_D#xFlE{uXRm~a^&_cr!u7FYCmwl+){W|`p@olFOg zaY&nSx<9WB7^!R2fbeWpaJ2HD>Jq|Dob%_wqsF|}Nm8LYn-%3^rFXn9jea*yDLo=J z!K)V%Yd1z^a&o?-GlYY66lErSM`7|+MG_~SOPHdRX+a8(B$9Nt}~UiT1gb5hB7k#YZoY> zHZ?8$M7df&t54VT(KqRNfdHLIFf!I3;#9l3PnC@u3+O6rX9`-&GPcqgop!C-Em>5P zDg|$rDB!=d)?vq!3h$B01?KT*aGy_L%?$LR_aXtB0whLTf7X>W^2aq?m0OHu|D~p4 zAZmmAVl0W{tr^_qJH0Ds$wyN8tThx74h8aL)pSxeY~4?fSkZhOA(!IlfPjU%HVntD zTRF*n*=Qm)a|av>1dzkOI3}`zH_fFQq^V#!sv$69049>}E`9e!7dT$1D(jt?0OCQ> zV{5(3@>N7vau|rqw8o+Q1fkd&A*MK@^;8DD+)9|(8Jr;E-+Urlo=DBMT^%N^dqnTm zaI8lt5pu!U#UNLbAZBdI8V1@)$ESYW)GU=#uh-kXzE)jd;mpE$%L`;FVj(uX00j~0T)<7jP#tZ+{DhLM!IvFRfMkzaByfY7(xPK^O?6sK$+WXiOg zMBnEyE94l~WJ=u-IqI`-xYJ9=%(4EQliaCx1@?vt^(VrJ`R+bkNQcz^9y2MWA(<&K zZ#-^c>Ru~VN6j~Bt@=LOAgiEs2AMLgM6vBs+WU4>VW)ml)~|XR)Tsvgphqsz#&H-u z#kg9~7q54?LZ_lV6a{1{&bF_8`ONa;)Sj5#fNd1Ph}0OoW+YG1-2cA5S=Ul?bC8y4 zhoQl=W$A3wdJVR(gWbhoM3Focz4n<7?=tOVIH{<3xOpMzV73d*R~x6PlHjBb4yqUq z$F^{~R)1>X0*xi_?Rpo@9VDF2n8-$wMv!om&dC_G_=rt#6f8uY18g!5cQ^pd?h>8D zE&QwaL0B7i^^qt>Dsg>tX&Huq5xxrGdhQk$N-GqUu0W?Y0D;6amzqHLUx!y_M7m%l z+MIc{95eI6f6bzuDk!8zWKPkm<24x>?04+z^TV(KyA`=snG&K-oLxiqxdpeOlT(Ak zJk|k0Mt4uVYh1-6j#8~*o?|B_d!i`IWCHTSNTF*Tt~NR^qS9u@T!tLWF5|UZoryAT z93md!8j8Koq#z`^$9-?Z7m`d* zSuet6$gI;+LLd-Yi>v|tMnNQknz}j6Jwv(^8xhJ**S+O-~L)+FRf=Yvnvp3j?cy21Fcn` z_J!rRnTk~k<5c!tdNqvQ`(It>G46`EQ(NO~omXcqLQ=q9vb;RZbTIMMeab$*|CRut z_v1vBu|}n=F$E7(h3BwQqBEXer=^l*K!HQSD4oDeU`An?L%?1WF6WdvDq>ZnS`#K` z&DKQF5p7tuSoJi#bTmLaC=i{-0k?0EyJJNGrcurDfGWWp`FBW4UWOK;VS674*dH@kw^123C1^xp+aFTOeHBE;S8WAgU#9FF#N0O5J5&wfLlKoG zXrcBdud06K9ww_NfoL}yJGvG$C@p$QTQ`BGWVcb`%)v^Sj{NFx#?~F^(yRyt+61n# zHF4Z;pnjWE5cQkT^*rxx`q$mb(j$pgPUbEFkX#ve-&`)QzT^Ev0_GT5K%QjKD)AhI zI|8cT>gdq{goIFie&aEe?}TR-m!(g$sc4$cU`Li9c2A$)#%rv|>ju;c)~CKr;^6n( zXH%F<`(`C;VawI4Fj?q}W2#b3Fc6j2lI6NMe4Lo;`wZpcSK)e|ejF^ycthT%gwrNt0WeM2CqdAM zv&!-FLCX--c=%jiAqx=talmh+7IJSK%Or@UJ!mcJ>^2 zzC+o+;Deelilj?PiKZu7SX?K*FT}gnM=Bh%wg)*opUE5-#Fj1(810byh@c$+XY)+ZGk1EMdf47`~$WGalH@L8LW6WHBIpzca_-wj> z2s^klcsd5vz@LhHx`Gv{4cV+l_F7Joqh7+Ez!69mi*qO<(^C&nQ!zXez#`}R(cB=1 zmm_-u!#WL(hl@s8Xq-_%y^?K>umlVVXK2z-dItn%buyF>rs&x>W=a5aL9$UJVv6gT zl9T*sfL)<;c4zkj3#nT|5!wHc3*z3;AUx-fWE9%b^xCJqhSxAE0aD&kG9N|n^oc*^ z=_rP1lhAjruYY5DaRODuv4pmEZ+O`~^l9?PkBo^jfHCCe+STqb$Nt=zIbNuB)Qblw zi>0KAAM+z4bL%82kMO7&iIiUefRf5HPq2Sz4wvR#y(T@rzhMCqMn4OlPuG@A-8bcW zE5BZvYJS7K9sPVvOqHEcsJ(8m()z&|Bik;@)W^j-ChvZ*udQB#240M|6Nhrw%RY0| znElA;?2KZ-#>%A|cL~d5?Q|1F<=@*ej(Rs`Kvnt=nRE4Xa(bM@z)ccc3s~-|>rbBQ z(|vhbp54av(oAQGvH-A@W~pPon39G@jh`-Y6qQT6T-_xNlTu-XS6#}uRcnUqp{r+U z6_LD;?m^_@`yRefjbXbb9JZuc)frm_2{V8{BI}Q&2bAw<%YVt|4rp0nFIRI?0p%%{ zLa;XF_z`QdYswO9SG4eBkHi;VYdEMJcUryaWAU0RLoS<+5J>qNPo1|L7m>9pR4H0+ zgl~N{?lG%utiJ*}I}#IUn{bhI6pq_3HMZw@LWs=l$?1($~*8m=n*`o}v>Q7#q zBnI6c@-K5 zPD#*(`v_6+dRaN-|aGlQ}&{J(}mHTe8McflJUJ^EKcR4TEdq7BDT_IGn< z1{Zc_H_)1rUl#_fVtNVnKKP54&d52Z8Z4{2PsWCpb+I0oR#29i_Pt}lp&~%;_q9YIX%pur+fsapH283eg0KGR54;D*Y z+(%>Rzhoqnz5Y>(u>q+egrn37vsOnLS5F>L6y_#k*`pg)=InSX+Vs%Mu_fL@`t4|- zO6AFZ0u|2D*wd7oq##2PXzQ99&>LbB%cY{A@$+GpF`!O4P$0DW55SeY!HgkcwR_Aky59>*VlzhH6wB(t!ByZ z`)1ggzw}dv_Ds;{?Pt+aZG6dI+V%N9sUl6!*B3%KDX9S~tIsG3N4YD5)Z#njU@G89 zJYK}}Ybe{gs}`r^;-_?BNwX5;@DNYmHStqM8v>sVg0mY9iYu$MQf|w+J=12E`uX(=DMw*i`Lhm5m(tSO=_p47?n={Il0G4 zD>2M95H$T72WMEEu0!AZx-3PDD{KhOJ`0mYUK(*9`pv4He%tZh9_jN)LtxzuFdH}u znk7aDB z166%!Z>4ZE84Of>73@5gySgn|%`a3(x4pN$J;YZC&>+;rBcVL#daafpo=g$OlN0gc z&vY=30c^C&NSyDsw-BZnQk<mB|1yUB5$~ zM%C)XVhzlyMfpCLK8cGP#hDMDuBCXyr7WeS+UGowq+3yRKigfhK5ov` zr(S&ECiwtUQf1*Baf4Ipdr@OiRRBVuZ}ZSwZnRs$Si7}g4IZGH0D&ED<@i~fyEkMt zNN+6oU4J`uN^}sG`PnSD-s2|x<9m6hUMg+;^Y7v_&W35%q-5QYgIUZ zM>YLd!|@*KAH;J%Hx>7{CZ6Z57d^59CR^DUM`ymLYrDG^_e)y`)$=#2GP!v#iFpw< zh~4q?>Ylg5L(%=L{Xy&X?ZrL3e>TTY(yYjxN2%9FXwj}KY%Pmd0h|vqA_na}IUBv+ z({otXan}v<+=sFRxyqK>7uk#i)88k8DF=g;7#Z|NMEcd=X$1|(^J?=~r4;v+0}emX zPna=)^%2@C>_ag#4@`}QR(u|gIJ?d-d#*RAW&CJuO}sLXeV{m(KIInxlUnc|>St%J z?(+f(ZZ!w`<9J^d)*kehzfs-=v$>vX*1a4y zfHJNAjuj6ASW~v-I+pZ7BW7DtgVuo+;)=c5YKSN9JqbMSOR4W7uduwmYZyhujdTz$ z(^(6?up8zGKcDTPO&r@Mi2$s%Xu}^_iZ9>~xcWP8tR)+W7d(G#*rGitF0Wl3w8yUV z=M{dvl(qySGlHC+^(_4K*q;!+za<8C9}o-S)DrW})lCj+jmO6I!Z!oxAH<;I+P(Jv zG$x*x!+V=^E;F;~KV&y9^-K-i;;1Kmvs1a}?5{Mr@ghD2-a;re8ph2IvzMPB#n1WA+EPqeDFuV(G+2*pVC>8|FG5N9hL zUf)YaIj^rimmrt2p2`iL>j3qv>d(HLvrU^364QJmiF*B_xCPg%n1R68)bM{axR=O) zHt5(504Qq$xtWKW@~5v-XO^2yX5>10y~*`2Ay1X?AisBdts9a|5A^%5?h4kSBQT#) z!WAqR=$93KvZ{Pe%J9>Rxn-|9=0R`_BmcziD+Sm~63A5b9|Iuw~bdF~Htl~z4&+x)T&^IrKT zqM8D!ZFkgfQwu*s`r=-tH1~Uw)Kg?YgXMyHCAgmkHK~86_*@dr7;E36Ms0)$s9E=Qjym#(N>c-O>(z?;Nhn`-9ctfNzfvl;Q;)7`I{k-a ztViFsKRbsLUgUn(zC1l({4eK@5U$R%?&0zT^~UpEJu!CaJyaH{>`3LTZ532NA6x7(f2VY}!SpJ!KT zDfKNIE;Xu}g)x*Je^0Lla95Eppua{*w(kW2wSPy%CU;I3c$pZxz7@>hg)h~!G`+EQ zmT5J2g+@S{#tJbd2Ai`NAR-nJPys<&5Rl$`M?pZk5LyUDinI_y@8#{F-pkb+uiqH&jq!dQe`UzY$v*3> zz1CcFuRXWsBnc2sOnR_En_eKD7H!Rwh;iYiAo5@WGi+y}?GlipF({duK8@B}&=_DA zUMNek;4gBgp0EsFFQbyObzFQYj_fy9>9`o%ep5mNRvP)zUq|dkkK{y0+oi)?O!3y$ zfrAbAN(GSv+gIA{$<3&}`xUgFU{-d;rbWr)V!`dFfxbkJ6gTRQjK&no@s&GqWB!*6 zT_nef`Rq~Un%VUqzqqnlu0KH()+#P=T0ro@Ukz-i?bca_f!-=uGf=8 z?3X3;@#4>lk)Ty8iNaVHM;!`i!BQ( z4K6jIg%_Y5sJyaYrO`i(nX9#>s_@HsUQ z%g$$Omouj^6lAooaapb^=BCZi(Nb7UUZE zfmhVXt$hl71$TUB%GL}opFzdulLaW(CMJTNPID)C$V5i)cUi!L>2_B6un@j|a{NSKvN|8*rU>ZN#<)%epgP9uRcKQ@nx6UFl%D3*%xk>c`! ztxkmUl4T%lPKWNgpj55|5(eVU)ham9MnfJtH(ImE-qcd!?G-aW=VrBrD?oLIxfF$P zGn+Bas$6(XL1Pf8h2rQj;O)@!H6aO#Sy0-Y%IrkVCw0T62SwXuJ^z$wZ#&S9x#!w< zklu(FRx_Xs>y3QgP<eqagxN}HD zNsK=b`8ak+z+MnJpQv%lJjRmV=qOy+&s}~kf0SLL+!~(-1O!Qh*f55S8pL)f8x4R* z-|H)6+oo>XlfY=IGtG6-DCk0&>1Mw}w#xU|zn}_)mCz+O4Hl+B^AsB9{y4v21jr%xY^niRCN-PS+Cd&FZbW;IPF7g@rPQaMMrCKGn!$nIc$XbgYP_bFE$6iaodu|V zddaKL?B$$2){-sV7=p_J_3cf~?qcb~MtP2{LhAd%dm~QU-`{CU=h%PD!p{!WIqRU# z8TUFv%YeWPiw}b!J013g3y%Us`P~Mi*-dauU=80hIR!U-vAV`1P+cdgO1Q6$thBJE zSu;9pFi}Wmr9siM+CkkM9I1DRk@OJ$Kn4%{QeL$k`0X*8kq-rdf64|P<&KPhEA_@o zSbh0!C>IW_$mI-<@&`5Idzm2~@f;3)fXSbY0;Uin?D0jn^XZ?7A!gVp$2`5;5J zJB2{y5jLkPCi#fBDcGrWO4R{(ipfBgaqHz;j{a*|x|SI~dND&q?~pJ_T@y1;s%tc< zQaXM5RnEDa4q?3ynxg}3OoGw|pwBdy!6 zuqcF0wQIR%BH-&N1JPMxI+qBY5e~3`>QKSOW1N|EMvYiU1tjI?HmHYunc@1NiXXRi z4}+UDaiaEgC4ugwP`-0cbGO2VRC9rPoCyPb`PmZL6%@wH@x&OK?+^yTnI#4q)BDv(rv_f25p zJBhby5jH!nXzIG`vHR9A0{OvW!YM#)h@&YCc1-|dJCkjpQo!#B{FM4dl3O)X-=X&w zmzxo3CFw>}Xa_*%bv6iKwQV&K{cYn8t=`;&A6`!6r_P*dJjpQH8rN`% zEeUezXV(wHW^f(8V$(DNSDFB%hog*6p_6L z_Q+e6-e9uC_|U9Rkm4}kHSz+jEY`&Ve|d30J|{w^6fw!3L>Z_*_VMBh^1C?69>>6G zrxXMg)?c*TKkLF~Gwk&flXZ{eDmov_Cn=jXWjF?+*GXtcUq9*fH85stmY!}6kA)c~ zZiG=ghOQDDh(#>r2DqE|2<(tl!c+UP=*LgDh*- z=WHn{U9{48D64hT}!A+n;rvsn4CCZ(cBa52Nf5knHuA zy7vQ_$M2N4KfTOVPLVbvV4s;jaCR}bOD~Mky=%s=vS2uP$gDkK4vSnE&fiNnrmhg< zXSK|ce3ZM(gI0~4GS2W|mB`>cIHMWVtusCyjjsikaPCRDK91^kUng)JEX)N{6WA7YH(#_es?_UZ27;&rQ0Gc@Sv z=r*-)Nf4WCsyds8&AM1Oh6{>-r`QUkExvdPBltxf>H;KR_^x`o7tg7#1 z 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 Y(nadi=nG){ZrAn8>c3`RGJX7i07&%;SO5S3 diff --git a/docs/static/img/manuals/portal/portal_instance_detail_domain.png b/docs/static/img/manuals/portal/portal_instance_detail_domain.png new file mode 100644 index 0000000000000000000000000000000000000000..93ba0607da2146346421e5cf19c3f0523c266828 GIT binary patch literal 225668 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

    9%k`@sZ1 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 1.4.0 < 2" http-parser-js@>=0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.6.tgz#2e02406ab2df8af8a7abfba62e0da01c62b95afd" - integrity sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA== + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-middleware@2.0.6, http-proxy-middleware@^2.0.3: version "2.0.6" @@ -4918,16 +5430,16 @@ ignore@^5.1.9, ignore@^5.2.0: integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== image-size@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.1.tgz#86d6cfc2b1d19eab5d2b368d4b9194d9e48541c5" - integrity sha512-VAwkvNSNGClRw9mDHhc5Efax8PLlsOGcUTh0T/LIriC8vPA3U5PdqXWqkz406MoYHMKW8Uf9gWr05T/rYB44kQ== + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== dependencies: queue "6.0.2" immer@^9.0.7: - version "9.0.14" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.14.tgz#e05b83b63999d26382bb71676c9d827831248a48" - integrity sha512-ubBeqQutOSLIFCUBN03jGeOS6a3DoYlSYwYJTa+gSKEZKU5redJIqkIdZ3JVv/4RZpfcXdAWH5zCNLWPRv2WDw== + version "9.0.15" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.15.tgz#0b9169e5b1d22137aba7d43f8a81a495dd1b62dc" + integrity sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ== import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" @@ -4940,12 +5452,12 @@ import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== indent-string@^4.0.0: version "4.0.0" @@ -4957,10 +5469,15 @@ infima@0.2.0-alpha.39: resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.39.tgz#054b13ac44f3e9a42bc083988f1a1586add2f59c" integrity sha512-UyYiwD3nwHakGhuOUfpe3baJ8gkiPpRVx4a4sE/Ag+932+Y6swtLsdPoRR8ezhwqGnduzxmFkjumV9roz6QoLw== +infima@0.2.0-alpha.42: + version "0.2.0-alpha.42" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.42.tgz#f6e86a655ad40877c6b4d11b2ede681eb5470aa5" + integrity sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" @@ -4973,7 +5490,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, i inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== ini@2.0.0: version "2.0.0" @@ -5033,7 +5550,7 @@ is-alphanumerical@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== is-binary-path@~2.1.0: version "2.1.0" @@ -5054,7 +5571,7 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.8.1: +is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== @@ -5074,12 +5591,12 @@ is-docker@^2.0.0, is-docker@^2.1.1: is-extendable@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-fullwidth-code-point@^3.0.0: version "3.0.0" @@ -5119,7 +5636,7 @@ is-number@^7.0.0: is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== is-obj@^2.0.0: version "2.0.0" @@ -5156,7 +5673,7 @@ is-plain-object@^2.0.4: is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== is-root@^2.1.0: version "2.1.0" @@ -5171,7 +5688,7 @@ is-stream@^2.0.0: is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-whitespace-character@^1.0.0: version "1.0.4" @@ -5198,24 +5715,24 @@ is-yarn-global@^0.3.0: isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-worker@^27.0.2, jest-worker@^27.4.5: +jest-worker@^27.0.2, jest-worker@^27.4.5, jest-worker@^27.5.1: version "27.5.1" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== @@ -5263,12 +5780,12 @@ jsesc@^2.5.1: jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" @@ -5339,9 +5856,9 @@ leven@^3.1.0: integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lilconfig@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.5.tgz#19e57fd06ccc3848fd1891655b5a447092225b25" - integrity sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg== + version "2.0.6" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.6.tgz#32a384558bd58af3d4c6e077dd1ad1d397bc69d4" + integrity sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg== lines-and-columns@^1.1.6: version "1.2.4" @@ -5392,57 +5909,57 @@ locate-path@^6.0.0: lodash.assignin@^4.0.9: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= + integrity sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg== lodash.bind@^4.1.4: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= + integrity sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA== lodash.curry@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" - integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== lodash.filter@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= + integrity sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ== lodash.flatten@^4.2.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== lodash.flow@^3.3.0: version "3.5.0" resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" - integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== lodash.foreach@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" - integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + integrity sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ== lodash.map@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q== lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== lodash.merge@^4.4.0: version "4.6.2" @@ -5452,32 +5969,27 @@ lodash.merge@^4.4.0: lodash.pick@^4.2.1: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + integrity sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q== lodash.reduce@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= + integrity sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw== lodash.reject@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= + integrity sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ== lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + integrity sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ== lodash.uniq@4.5.0, lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" @@ -5568,34 +6080,34 @@ mdn-data@2.0.14: mdurl@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== mdx-mermaid@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/mdx-mermaid/-/mdx-mermaid-1.2.2.tgz#3be9870c3bbf944d47dba805acf3cf877499e58f" - integrity sha512-izl9Vaus0fJHJb6IGgcGZ79LpfFACfn28ExPXKL815RTMT9bgDRIAubufZUCgoCAAv/2S1VTxJLWTwbck4TpLA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/mdx-mermaid/-/mdx-mermaid-1.2.3.tgz#8a33fd7584d4de1f9096055a6d5e87ac1507572e" + integrity sha512-x2K+4M3zQKIgbdvrACoXc2C6waP4fIJof65VKS5wcBxYEoO76H3S0keYZQY36qauI6Cw9unuWLh7mdaYEbHZiQ== media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== medium-zoom@^1.0.4, medium-zoom@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/medium-zoom/-/medium-zoom-1.0.6.tgz#9247f21ca9313d8bbe9420aca153a410df08d027" integrity sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg== -memfs@^3.1.2, memfs@^3.4.1: - version "3.4.1" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.1.tgz#b78092f466a0dce054d63d39275b24c71d3f1305" - integrity sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw== +memfs@^3.1.2, memfs@^3.4.1, memfs@^3.4.3: + version "3.4.7" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.7.tgz#e5252ad2242a724f938cb937e3c4f7ceb1f70e5a" + integrity sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw== dependencies: - fs-monkey "1.0.3" + fs-monkey "^1.0.3" merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== merge-stream@^2.0.0: version "2.0.0" @@ -5625,7 +6137,7 @@ mermaid@^8.12.1: methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" @@ -5682,13 +6194,20 @@ mini-create-react-context@^0.4.0: "@babel/runtime" "^7.12.1" tiny-warning "^1.0.3" -mini-css-extract-plugin@2.6.0, mini-css-extract-plugin@^2.6.0: +mini-css-extract-plugin@2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.0.tgz#578aebc7fc14d32c0ad304c2c34f08af44673f5e" integrity sha512-ndG8nxCEnAemsg4FSgS+yNyHKgkTB4nPKqCOgh65j3/30qqC5RaSQQXMm++Y6sb6E1zRSxPkztj9fqxhS1Eo6w== dependencies: schema-utils "^4.0.0" +mini-css-extract-plugin@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz#9a1251d15f2035c342d99a468ab9da7a0451b71e" + integrity sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg== + dependencies: + schema-utils "^4.0.0" + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -5719,14 +6238,14 @@ moment-mini@^2.24.0: integrity sha512-9ARkWHBs+6YJIvrIp0Ik5tyTTtP9PoV0Ssu2Ocq5y9v8+NOOpWiRshAp8c4rZVWTOe+157on/5G+zj5pwIQFEQ== mrmime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.0.tgz#14d387f0585a5233d291baba339b063752a2398b" - integrity sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" @@ -5746,7 +6265,7 @@ multicast-dns@7.2.4: dns-packet "^5.2.2" thunky "^1.0.2" -multicast-dns@^7.2.4: +multicast-dns@^7.2.4, multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== @@ -5754,7 +6273,7 @@ multicast-dns@^7.2.4: dns-packet "^5.2.2" thunky "^1.0.2" -nanoid@3.3.4, nanoid@^3.3.3: +nanoid@3.3.4, nanoid@^3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== @@ -5796,10 +6315,10 @@ node-forge@1.3.1, node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" - integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -5809,7 +6328,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== normalize-url@^4.1.0: version "4.5.1" @@ -5831,12 +6350,12 @@ npm-run-path@^4.0.1: nprogress@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" - integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== nth-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" - integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== dependencies: boolbase "^1.0.0" @@ -5850,13 +6369,18 @@ nth-check@~1.0.1: object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@1.12.0, object-inspect@^1.9.0: +object-inspect@1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -5892,7 +6416,7 @@ on-headers@~1.0.2: once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" @@ -6029,23 +6553,26 @@ parse-numeric-range@^1.3.0: resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== -parse5-htmlparser2-tree-adapter@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" - integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== dependencies: - parse5 "^6.0.1" + domhandler "^5.0.2" + parse5 "^7.0.0" -parse5@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parse5@^6.0.0, parse5@^6.0.1: +parse5@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parse5@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.0.0.tgz#51f74a5257f5fcc536389e8c2d0b3802e1bfa91a" + integrity sha512-y/t8IXSPWTuRZqXc0ajH/UwDj4mnqLEbSttNbThcFhGrZuOyoyvNBO85PBp2jQa55wY9d07PBNjsK8ZP3K5U6g== + dependencies: + entities "^4.3.0" + parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -6062,7 +6589,7 @@ pascal-case@^3.1.2: path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== path-exists@^4.0.0: version "4.0.0" @@ -6072,12 +6599,12 @@ path-exists@^4.0.0: path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-is-inside@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" @@ -6092,7 +6619,7 @@ path-parse@^1.0.7: path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== path-to-regexp@2.2.1: version "2.2.1" @@ -6159,18 +6686,31 @@ postcss-colormin@5.3.0, postcss-colormin@^5.3.0: colord "^2.9.1" postcss-value-parser "^4.2.0" -postcss-convert-values@5.1.0, postcss-convert-values@^5.1.0: +postcss-convert-values@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz#f8d3abe40b4ce4b1470702a0706343eac17e7c10" integrity sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g== dependencies: postcss-value-parser "^4.2.0" -postcss-discard-comments@5.1.1, postcss-discard-comments@^5.1.1: +postcss-convert-values@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz#31586df4e184c2e8890e8b34a0b9355313f503ab" + integrity sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g== + dependencies: + browserslist "^4.20.3" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz#e90019e1a0e5b99de05f63516ce640bd0df3d369" integrity sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ== +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + postcss-discard-duplicates@5.1.0, postcss-discard-duplicates@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" @@ -6193,7 +6733,7 @@ postcss-discard-unused@5.1.0, postcss-discard-unused@^5.1.0: dependencies: postcss-selector-parser "^6.0.5" -postcss-loader@6.2.1, postcss-loader@^6.2.1: +postcss-loader@6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-6.2.1.tgz#0895f7346b1702103d30fdc66e4d494a93c008ef" integrity sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q== @@ -6202,6 +6742,15 @@ postcss-loader@6.2.1, postcss-loader@^6.2.1: klona "^2.0.5" semver "^7.3.5" +postcss-loader@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.0.1.tgz#4c883cc0a1b2bfe2074377b7a74c1cd805684395" + integrity sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ== + dependencies: + cosmiconfig "^7.0.0" + klona "^2.0.5" + semver "^7.3.7" + postcss-merge-idents@5.1.1, postcss-merge-idents@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" @@ -6210,7 +6759,7 @@ postcss-merge-idents@5.1.1, postcss-merge-idents@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-merge-longhand@5.1.4, postcss-merge-longhand@^5.1.4: +postcss-merge-longhand@5.1.4: version "5.1.4" resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz#0f46f8753989a33260efc47de9a0cdc571f2ec5c" integrity sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA== @@ -6218,7 +6767,15 @@ postcss-merge-longhand@5.1.4, postcss-merge-longhand@^5.1.4: postcss-value-parser "^4.2.0" stylehacks "^5.1.0" -postcss-merge-rules@5.1.1, postcss-merge-rules@^5.1.1: +postcss-merge-longhand@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz#f378a8a7e55766b7b644f48e5d8c789ed7ed51ce" + integrity sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.0" + +postcss-merge-rules@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz#d327b221cd07540bcc8d9ff84446d8b404d00162" integrity sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww== @@ -6228,6 +6785,16 @@ postcss-merge-rules@5.1.1, postcss-merge-rules@^5.1.1: cssnano-utils "^3.1.0" postcss-selector-parser "^6.0.5" +postcss-merge-rules@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz#7049a14d4211045412116d79b751def4484473a5" + integrity sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ== + dependencies: + browserslist "^4.16.6" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + postcss-minify-font-values@5.1.0, postcss-minify-font-values@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" @@ -6244,7 +6811,7 @@ postcss-minify-gradients@5.1.1, postcss-minify-gradients@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-params@5.1.2, postcss-minify-params@^5.1.2: +postcss-minify-params@5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz#77e250780c64198289c954884ebe3ee4481c3b1c" integrity sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g== @@ -6253,13 +6820,29 @@ postcss-minify-params@5.1.2, postcss-minify-params@^5.1.2: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" -postcss-minify-selectors@5.2.0, postcss-minify-selectors@^5.2.0: +postcss-minify-params@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz#ac41a6465be2db735099bbd1798d85079a6dc1f9" + integrity sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg== + dependencies: + browserslist "^4.16.6" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz#17c2be233e12b28ffa8a421a02fc8b839825536c" integrity sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA== dependencies: postcss-selector-parser "^6.0.5" +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" @@ -6300,20 +6883,34 @@ postcss-normalize-display-values@5.1.0, postcss-normalize-display-values@^5.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-positions@5.1.0, postcss-normalize-positions@^5.1.0: +postcss-normalize-positions@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz#902a7cb97cf0b9e8b1b654d4a43d451e48966458" integrity sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ== dependencies: postcss-value-parser "^4.2.0" -postcss-normalize-repeat-style@5.1.0, postcss-normalize-repeat-style@^5.1.0: +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz#f6d6fd5a54f51a741cc84a37f7459e60ef7a6398" integrity sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw== dependencies: postcss-value-parser "^4.2.0" +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + postcss-normalize-string@5.1.0, postcss-normalize-string@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" @@ -6351,7 +6948,7 @@ postcss-normalize-whitespace@5.1.1, postcss-normalize-whitespace@^5.1.1: dependencies: postcss-value-parser "^4.2.0" -postcss-ordered-values@5.1.1, postcss-ordered-values@^5.1.1: +postcss-ordered-values@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz#0b41b610ba02906a3341e92cab01ff8ebc598adb" integrity sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw== @@ -6359,6 +6956,14 @@ postcss-ordered-values@5.1.1, postcss-ordered-values@^5.1.1: cssnano-utils "^3.1.0" postcss-value-parser "^4.2.0" +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + postcss-reduce-idents@5.2.0, postcss-reduce-idents@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" @@ -6421,19 +7026,19 @@ postcss-zindex@5.1.0, postcss-zindex@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.3.11, postcss@^8.3.5, postcss@^8.4.13, postcss@^8.4.7: - version "8.4.13" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.13.tgz#7c87bc268e79f7f86524235821dfdf9f73e5d575" - integrity sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA== +postcss@^8.3.11, postcss@^8.3.5, postcss@^8.4.13, postcss@^8.4.14, postcss@^8.4.7: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - nanoid "^3.3.3" + nanoid "^3.3.4" picocolors "^1.0.0" source-map-js "^1.0.2" prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== pretty-error@^4.0.0: version "4.0.0" @@ -6448,10 +7053,10 @@ pretty-time@^1.1.0: resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== -prism-react-renderer@^1.3.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.3.tgz#9b5a4211a6756eee3c96fee9a05733abc0b0805c" - integrity sha512-Viur/7tBTCH2HmYzwCHmt2rEFn+rdIWNIINXyg0StiISbDiIhHKhrFuEK8eMkKgvsIYSjgGqy/hNyucHp6FpoQ== +prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== prismjs@1.28.0, prismjs@^1.28.0: version "1.28.0" @@ -6513,7 +7118,7 @@ pump@^3.0.0: punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== punycode@^2.1.0: version "2.1.1" @@ -6530,7 +7135,7 @@ pupa@^2.1.1: pure-color@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" - integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== qs@6.10.3: version "6.10.3" @@ -6561,7 +7166,7 @@ randombytes@^2.1.0: range-parser@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" @@ -6586,7 +7191,7 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" -rc@^1.2.8: +rc@1.2.8, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -6599,7 +7204,7 @@ rc@^1.2.8: react-base16-styling@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" - integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== dependencies: base16 "^1.0.0" lodash.curry "^4.0.1" @@ -6700,23 +7305,23 @@ react-router-config@^5.1.1: dependencies: "@babel/runtime" "^7.1.2" -react-router-dom@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.1.tgz#0151baf2365c5fcd8493f6ec9b9b31f34d0f8ae1" - integrity sha512-f0pj/gMAbv9e8gahTmCEY20oFhxhrmHwYeIwH5EO5xu0qme+wXtsdB8YfUOAZzUz4VaXmb58m3ceiLtjMhqYmQ== +react-router-dom@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.3.tgz#8779fc28e6691d07afcaf98406d3812fe6f11199" + integrity sha512-Ov0tGPMBgqmbu5CDmN++tv2HQ9HlWDuWIIqn4b88gjlAN5IHI+4ZUZRcpz9Hl0azFIwihbLDYw1OiHGRo7ZIng== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" loose-envify "^1.3.1" prop-types "^15.6.2" - react-router "5.3.1" + react-router "5.3.3" tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@5.3.1, react-router@^5.2.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.1.tgz#b13e84a016c79b9e80dde123ca4112c4f117e3cf" - integrity sha512-v+zwjqb7bakqgF+wMVKlAPTca/cEmPOvQ9zt7gpSNyPXau1+0qvuYZ5BWzzNDP1y6s15zDwgb9rPN63+SIniRQ== +react-router@5.3.3, react-router@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.3.tgz#8e3841f4089e728cf82a429d92cdcaa5e4a3a288" + integrity sha512-mzQGUvS3bM84TnbtMYR8ZjKnuPJ71IjSzR+DE6UkUqvN4czWIqEs17yLL8xkAycv4ev0AiN+IGrWu88vJs/p2w== dependencies: "@babel/runtime" "^7.12.13" history "^4.9.0" @@ -6730,13 +7335,13 @@ react-router@5.3.1, react-router@^5.2.0: tiny-warning "^1.0.0" react-textarea-autosize@^8.3.2: - version "8.3.3" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" - integrity sha512-2XlHXK2TDxS6vbQaoPbMOfQ8GK7+irc2fVK6QFIcC8GOnH3zI/v481n+j1L0WaPVvKxwesnY93fEfH++sus2rQ== + version "8.3.4" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz#270a343de7ad350534141b02c9cb78903e553524" + integrity sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ== dependencies: "@babel/runtime" "^7.10.2" - use-composed-ref "^1.0.0" - use-latest "^1.0.0" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" react@^17.0.2: version "17.0.2" @@ -6783,7 +7388,7 @@ reading-time@^1.5.0: rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== dependencies: resolve "^1.1.6" @@ -6818,10 +7423,10 @@ regenerator-transform@0.15.0, regenerator-transform@^0.15.0: dependencies: "@babel/runtime" "^7.8.4" -regexpu-core@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.0.1.tgz#c531122a7840de743dcf9c83e923b5560323ced3" - integrity sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw== +regexpu-core@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.1.0.tgz#2f8504c3fd0ebe11215783a41541e21c79942c6d" + integrity sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA== dependencies: regenerate "^1.4.2" regenerate-unicode-properties "^10.0.1" @@ -6831,11 +7436,11 @@ regexpu-core@^5.0.1: unicode-match-property-value-ecmascript "^2.0.0" registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== dependencies: - rc "^1.2.8" + rc "1.2.8" registry-url@^5.0.0: version "5.1.0" @@ -6856,28 +7461,10 @@ regjsparser@^0.8.2: dependencies: jsesc "~0.5.0" -rehype-parse@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/rehype-parse/-/rehype-parse-6.0.2.tgz#aeb3fdd68085f9f796f1d3137ae2b85a98406964" - integrity sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug== - dependencies: - hast-util-from-parse5 "^5.0.0" - parse5 "^5.0.0" - xtend "^4.0.0" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remark-admonitions@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/remark-admonitions/-/remark-admonitions-1.2.1.tgz#87caa1a442aa7b4c0cafa04798ed58a342307870" - integrity sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow== - dependencies: - rehype-parse "^6.0.2" - unified "^8.4.2" - unist-util-visit "^2.0.1" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remark-emoji@2.2.0, remark-emoji@^2.2.0: version "2.2.0" @@ -6950,7 +7537,7 @@ renderkid@^3.0.0: repeat-string@^1.5.4: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== require-from-string@^2.0.2: version "2.0.2" @@ -6960,12 +7547,12 @@ require-from-string@^2.0.2: "require-like@>= 0.1.1": version "0.1.2" resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" - integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-from@^4.0.0: version "4.0.0" @@ -6978,18 +7565,18 @@ resolve-pathname@^3.0.0: integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== dependencies: lowercase-keys "^1.0.0" @@ -7040,15 +7627,22 @@ run-parallel@^1.1.9: rw@1: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== -rxjs@7.5.5, rxjs@^7.5.4: +rxjs@7.5.5: version "7.5.5" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.5.tgz#2ebad89af0f560f460ad5cc4213219e1f7dd4e9f" integrity sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw== dependencies: tslib "^2.1.0" +rxjs@^7.5.4: + version "7.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.6.tgz#0446577557862afd6903517ce7cae79ecb9662bc" + integrity sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw== + dependencies: + tslib "^2.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7125,7 +7719,7 @@ section-matter@^1.0.0: select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== selfsigned@2.0.1, selfsigned@^2.0.1: version "2.0.1" @@ -7206,7 +7800,7 @@ serve-handler@^6.1.3: serve-index@^1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== dependencies: accepts "~1.3.4" batch "0.6.1" @@ -7229,7 +7823,7 @@ serve-static@1.15.0: setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== setprototypeof@1.1.0: version "1.1.0" @@ -7327,7 +7921,7 @@ slash@^4.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== -sockjs@^0.3.21: +sockjs@^0.3.21, sockjs@^0.3.24: version "0.3.24" resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== @@ -7362,20 +7956,13 @@ source-map-support@~0.5.20: source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@~0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - space-separated-tokens@^1.0.0: version "1.1.5" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" @@ -7407,7 +7994,7 @@ spdy@^4.0.2: sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== stable@^0.1.8: version "0.1.8" @@ -7427,7 +8014,7 @@ statuses@2.0.1: "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.0.1: version "3.1.1" @@ -7492,7 +8079,7 @@ strip-ansi@^7.0.1: strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" - integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== strip-final-newline@^2.0.0: version "2.0.0" @@ -7507,7 +8094,7 @@ strip-json-comments@^3.1.1: strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== style-to-object@0.3.0, style-to-object@^0.3.0: version "0.3.0" @@ -7555,12 +8142,12 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.2: +svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^2.5.0, svgo@^2.7.0: +svgo@^2.5.0, svgo@^2.7.0, svgo@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== @@ -7583,7 +8170,7 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@5.3.1, terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.1: +terser-webpack-plugin@5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz#0320dcc270ad5372c1e8993fabbd927929773e54" integrity sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g== @@ -7594,20 +8181,31 @@ terser-webpack-plugin@5.3.1, terser-webpack-plugin@^5.1.3, terser-webpack-plugin source-map "^0.6.1" terser "^5.7.2" -terser@^5.10.0, terser@^5.7.2: - version "5.13.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.13.1.tgz#66332cdc5a01b04a224c9fad449fc1a18eaa1799" - integrity sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA== +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz#8033db876dd5875487213e87c627bca323e5ed90" + integrity sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ== dependencies: + "@jridgewell/trace-mapping" "^0.3.7" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + terser "^5.7.2" + +terser@^5.10.0, terser@^5.7.2: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" commander "^2.20.0" - source-map "~0.8.0-beta.0" source-map-support "~0.5.20" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thunky@^1.0.2: version "1.1.0" @@ -7627,7 +8225,7 @@ tiny-warning@^1.0.0, tiny-warning@^1.0.3: to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== to-readable-stream@^1.0.0: version "1.0.0" @@ -7651,17 +8249,10 @@ totalist@^1.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== trim-trailing-lines@^1.0.0: version "1.1.4" @@ -7671,19 +8262,19 @@ trim-trailing-lines@^1.0.0: trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== trough@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.4.0: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== -type-fest@2.12.2, type-fest@^2.5.0: +type-fest@2.12.2: version "2.12.2" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.12.2.tgz#80a53614e6b9b475eb9077472fb7498dc7aa51d0" integrity sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ== @@ -7693,6 +8284,11 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^2.5.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.17.0.tgz#c677030ce61e5be0c90c077d52571eb73c506ea9" + integrity sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -7756,13 +8352,14 @@ unified@9.2.0: trough "^1.0.0" vfile "^4.0.0" -unified@^8.4.2: - version "8.4.2" - resolved "https://registry.yarnpkg.com/unified/-/unified-8.4.2.tgz#13ad58b4a437faa2751a4a4c6a16f680c500fff1" - integrity sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA== +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== dependencies: bail "^1.0.0" extend "^3.0.0" + is-buffer "^2.0.0" is-plain-obj "^2.0.0" trough "^1.0.0" vfile "^4.0.0" @@ -7823,7 +8420,7 @@ unist-util-visit-parents@^3.0.0: "@types/unist" "^2.0.0" unist-util-is "^4.0.0" -unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.1, unist-util-visit@^2.0.3: +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -7840,7 +8437,15 @@ universalify@^2.0.0: unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" update-notifier@^5.1.0: version "5.1.0" @@ -7881,11 +8486,11 @@ url-loader@^4.1.1: url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== dependencies: prepend-http "^2.0.0" -use-composed-ref@^1.0.0: +use-composed-ref@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== @@ -7895,7 +8500,7 @@ use-isomorphic-layout-effect@^1.1.1: resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== -use-latest@^1.0.0: +use-latest@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== @@ -7905,12 +8510,12 @@ use-latest@^1.0.0: util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== utility-types@^3.10.0: version "3.10.0" @@ -7920,7 +8525,7 @@ utility-types@^3.10.0: utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid@^8.3.2: version "8.3.2" @@ -7935,7 +8540,7 @@ value-equal@^1.0.1: vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-location@^3.0.0, vfile-location@^3.2.0: version "3.2.0" @@ -7971,10 +8576,10 @@ wait-on@6.0.1, wait-on@^6.0.1: minimist "^1.2.5" rxjs "^7.5.4" -watchpack@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" - integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== dependencies: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" @@ -7986,7 +8591,7 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -web-namespaces@^1.0.0, web-namespaces@^1.1.2: +web-namespaces@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== @@ -7994,12 +8599,7 @@ web-namespaces@^1.0.0, web-namespaces@^1.1.2: webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-bundle-analyzer@4.5.0, webpack-bundle-analyzer@^4.5.0: version "4.5.0" @@ -8016,7 +8616,7 @@ webpack-bundle-analyzer@4.5.0, webpack-bundle-analyzer@^4.5.0: sirv "^1.0.7" ws "^7.3.1" -webpack-dev-middleware@5.3.1, webpack-dev-middleware@^5.3.1: +webpack-dev-middleware@5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz#aa079a8dedd7e58bfeab358a9af7dab304cee57f" integrity sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg== @@ -8027,7 +8627,18 @@ webpack-dev-middleware@5.3.1, webpack-dev-middleware@^5.3.1: range-parser "^1.2.1" schema-utils "^4.0.0" -webpack-dev-server@4.9.0, webpack-dev-server@^4.8.1: +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@4.9.0: version "4.9.0" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.0.tgz#737dbf44335bb8bde68f8f39127fc401c97a1557" integrity sha512-+Nlb39iQSOSsFv0lWUuUTim3jDQO8nhK3E68f//J2r5rIcp4lULHXz2oZ0UVdEeWXEh5lSzYUlzarZhDAeAVQw== @@ -8061,6 +8672,41 @@ webpack-dev-server@4.9.0, webpack-dev-server@^4.8.1: webpack-dev-middleware "^5.3.1" ws "^8.4.2" +webpack-dev-server@^4.9.3: + version "4.9.3" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.9.3.tgz#2360a5d6d532acb5410a668417ad549ee3b8a3c9" + integrity sha512-3qp/eoboZG5/6QgiZ3llN8TUzkSpYg1Ko9khWX1h40MIEUNS2mDoIa8aXsPfskER+GbTvs/IJZ1QTBBhhuetSw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.0.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.4.2" + webpack-merge@^5.8.0: version "5.8.0" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" @@ -8077,26 +8723,26 @@ webpack-sources@^1.4.3: source-list-map "^2.0.0" source-map "~0.6.1" -webpack-sources@^3.2.3: +webpack-sources@^3.2.2, webpack-sources@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -webpack@^5.72.0: - version "5.72.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.72.1.tgz#3500fc834b4e9ba573b9f430b2c0a61e1bb57d13" - integrity sha512-dXG5zXCLspQR4krZVR6QgajnZOjW2K/djHvdcRaDQvsjV9z9vaW6+ja5dZOYbqBBjF6kGXka/2ZyxNdc+8Jung== +webpack@^5.73.0: + version "5.74.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.74.0.tgz#02a5dac19a17e0bb47093f2be67c695102a55980" + integrity sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^0.0.51" "@webassemblyjs/ast" "1.11.1" "@webassemblyjs/wasm-edit" "1.11.1" "@webassemblyjs/wasm-parser" "1.11.1" - acorn "^8.4.1" + acorn "^8.7.1" acorn-import-assertions "^1.7.6" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.9.3" + enhanced-resolve "^5.10.0" es-module-lexer "^0.9.0" eslint-scope "5.1.1" events "^3.2.0" @@ -8109,7 +8755,7 @@ webpack@^5.72.0: schema-utils "^3.1.0" tapable "^2.1.1" terser-webpack-plugin "^5.1.3" - watchpack "^2.3.1" + watchpack "^2.4.0" webpack-sources "^3.2.3" webpackbar@^5.0.2: @@ -8139,20 +8785,11 @@ websocket-extensions@>=0.1.1: whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" @@ -8207,7 +8844,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== write-file-atomic@^3.0.0: version "3.0.3" @@ -8220,14 +8857,14 @@ write-file-atomic@^3.0.0: typedarray-to-buffer "^3.1.5" ws@^7.3.1: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== ws@^8.4.2: - version "8.6.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23" - integrity sha512-AzmM3aH3gk0aX7/rZLYvjdvZooofDu3fFOzGqcSnQ1tOcTWwhM/o+q++E8mAyVVIyUdajrkzWUGftaVSDLn1bw== + version "8.8.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0" + integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA== xdg-basedir@^4.0.0: version "4.0.0" From 8cfa81231ad26bd19bc97c1112ae485d8ddfb594 Mon Sep 17 00:00:00 2001 From: Christian Jakob <47860090+thesephirot@users.noreply.github.com> Date: Fri, 29 Jul 2022 10:48:07 +0200 Subject: [PATCH 055/116] chore: update releaserc.js and add latest tag (#4060) * added channels for semrel releases * removed unfunctional channel * chore: remove prerelease channels * fix Co-authored-by: Florian Forster Co-authored-by: Livio Spring --- .goreleaser.yaml | 2 ++ .releaserc.js | 4 +--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index cbe60f4156..e395957a79 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -36,6 +36,7 @@ dist: .artifacts/goreleaser dockers: - image_templates: + - ghcr.io/zitadel/zitadel:latest-amd64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-amd64 - europe-docker.pkg.dev/zitadel-common/zitadel-repo/zitadel:{{ .Tag }}-amd64 @@ -45,6 +46,7 @@ dockers: build_flag_templates: - "--platform=linux/amd64" - image_templates: + - ghcr.io/zitadel/zitadel:latest-arm64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-arm64 use: buildx diff --git a/.releaserc.js b/.releaserc.js index 16be63ca2c..74da457461 100644 --- a/.releaserc.js +++ b/.releaserc.js @@ -1,9 +1,7 @@ module.exports = { branches: [ {name: 'main'}, - {name: '1.x.x', range: '1.x.x', channel: '1.x.x'}, - {name: 'v2-alpha', prerelease: true}, - {name: 'v2-alpha-import', prerelease: true}, + {name: '1.87.x', range: '1.87.x', channel: '1.87.x'}, ], plugins: [ "@semantic-release/commit-analyzer" From c3046b1bb9aa2fdbdbef5137034ecb7bd565d8ab Mon Sep 17 00:00:00 2001 From: Jay <48990649+juergrinaldi@users.noreply.github.com> Date: Fri, 29 Jul 2022 10:57:52 +0200 Subject: [PATCH 056/116] chore: changed title in html file (#3955) changed title in html file Co-authored-by: Jay Co-authored-by: Livio Spring --- console/src/index.html | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/console/src/index.html b/console/src/index.html index 2fe19fbca6..048893d18e 100644 --- a/console/src/index.html +++ b/console/src/index.html @@ -1,12 +1,11 @@ - - Console - - - - + + ZITADEL • Console + + + From 9ed972f30898b6cb8dc92368c3704941e929aa8b Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Fri, 29 Jul 2022 11:08:38 +0200 Subject: [PATCH 057/116] docs: fix broken links on startpage (#4073) Co-authored-by: Florian Forster --- docs/docs/guides/overview.mdx | 112 ---------------------------------- docs/src/pages/index.js | 14 ++--- 2 files changed, 7 insertions(+), 119 deletions(-) diff --git a/docs/docs/guides/overview.mdx b/docs/docs/guides/overview.mdx index 8407cd8455..921bb3baa2 100644 --- a/docs/docs/guides/overview.mdx +++ b/docs/docs/guides/overview.mdx @@ -8,115 +8,3 @@ import Column from "../../src/components/column"; With our guides you will learn everything you need to know about specific topics. You get step-by-step instructions for certain tasks and have a knowledge check at the end. You can either use our cloud-instance [zitadel.com](https://zitadel.com) or deploy your own **ZITADEL** instance. To get started, we recommend you to try out our free tier first. Jump directly to the [get started](./start/quickstart) docs. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 9fe41f95ee..6fbc5ae755 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -33,19 +33,19 @@ const features = [ description="" /> Date: Fri, 29 Jul 2022 11:14:45 +0200 Subject: [PATCH 058/116] fix(console): horizontal toggle for users, projects, improve UI/UX (#4047) * fix(console): horizontal toggle for users, projects * improve input contrast * toggles, profile UI fix * lint * fix safari styles * fix button placement redirects * style lint Co-authored-by: Livio Spring --- .../nav-toggle/nav-toggle.component.html | 6 + .../nav-toggle/nav-toggle.component.scss | 71 ++++++++++++ .../nav-toggle/nav-toggle.component.spec.ts | 23 ++++ .../nav-toggle/nav-toggle.component.ts | 14 +++ .../modules/nav-toggle/nav-toggle.module.ts | 12 ++ .../refresh-table.component.scss | 3 +- .../redirect-uris.component.scss | 2 +- .../pages/projects/projects.component.html | 29 +++-- .../pages/projects/projects.component.scss | 37 +++---- .../app/pages/projects/projects.component.ts | 1 + .../src/app/pages/projects/projects.module.ts | 2 + .../detail-form/detail-form.component.html | 104 ++++++++++-------- .../detail-form/detail-form.component.scss | 63 ++++++----- .../profile-picture.component.html | 26 +++-- .../profile-picture.component.ts | 4 +- .../pages/users/user-list/user-list.module.ts | 2 + .../user-table/user-table.component.html | 18 +-- .../user-table/user-table.component.scss | 36 +++--- console/src/app/services/toast.service.ts | 22 ++-- console/src/component-themes.scss | 2 + console/src/styles.scss | 34 +++++- console/src/styles/input.scss | 6 +- 22 files changed, 358 insertions(+), 159 deletions(-) create mode 100644 console/src/app/modules/nav-toggle/nav-toggle.component.html create mode 100644 console/src/app/modules/nav-toggle/nav-toggle.component.scss create mode 100644 console/src/app/modules/nav-toggle/nav-toggle.component.spec.ts create mode 100644 console/src/app/modules/nav-toggle/nav-toggle.component.ts create mode 100644 console/src/app/modules/nav-toggle/nav-toggle.module.ts diff --git a/console/src/app/modules/nav-toggle/nav-toggle.component.html b/console/src/app/modules/nav-toggle/nav-toggle.component.html new file mode 100644 index 0000000000..35ca967148 --- /dev/null +++ b/console/src/app/modules/nav-toggle/nav-toggle.component.html @@ -0,0 +1,6 @@ + diff --git a/console/src/app/modules/nav-toggle/nav-toggle.component.scss b/console/src/app/modules/nav-toggle/nav-toggle.component.scss new file mode 100644 index 0000000000..0e4a1a7227 --- /dev/null +++ b/console/src/app/modules/nav-toggle/nav-toggle.component.scss @@ -0,0 +1,71 @@ +@use '@angular/material' as mat; + +@mixin nav-toggle-theme($theme) { + $primary: map-get($theme, primary); + $warn: map-get($theme, warn); + $background: map-get($theme, background); + $accent: map-get($theme, accent); + $primary-color: mat.get-color-from-palette($primary, 500); + + $warn-color: mat.get-color-from-palette($warn, 500); + $accent-color: mat.get-color-from-palette($accent, 500); + $foreground: map-get($theme, foreground); + $is-dark-theme: map-get($theme, is-dark); + $back: map-get($background, background); + + .nav-toggle { + display: flex; + align-items: center; + font-size: 14px; + line-height: 14px; + padding: 0.4rem 12px; + color: mat.get-color-from-palette($foreground, text) !important; + transition: all 0.2s ease; + text-decoration: none; + border-radius: 50vw; + border: none; + font-weight: 400; + margin: 0.25rem 2px; + white-space: nowrap; + position: relative; + background: none; + cursor: pointer; + font-family: 'Lato', -apple-system, BlinkMacSystemFont, sans-serif; + + .c_label { + display: flex; + align-items: center; + text-align: center; + + .count { + display: none; + margin-left: 6px; + } + } + + &.external-link { + padding-right: 2rem; + + i { + position: absolute; + right: 8px; + font-size: 1.2rem; + } + } + + &:hover { + background: if($is-dark-theme, #ffffff40, #00000010); + } + + &.active { + background-color: $primary-color; + color: mat.get-color-from-palette($foreground, toolbar-items) !important; + + .c_label { + .count { + display: inline-block; + } + } + } + } +} diff --git a/console/src/app/modules/nav-toggle/nav-toggle.component.spec.ts b/console/src/app/modules/nav-toggle/nav-toggle.component.spec.ts new file mode 100644 index 0000000000..63158cf042 --- /dev/null +++ b/console/src/app/modules/nav-toggle/nav-toggle.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NavToggleComponent } from './nav-toggle.component'; + +describe('NavToggleComponent', () => { + let component: NavToggleComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ NavToggleComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(NavToggleComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/console/src/app/modules/nav-toggle/nav-toggle.component.ts b/console/src/app/modules/nav-toggle/nav-toggle.component.ts new file mode 100644 index 0000000000..97cca6bfab --- /dev/null +++ b/console/src/app/modules/nav-toggle/nav-toggle.component.ts @@ -0,0 +1,14 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'cnsl-nav-toggle', + templateUrl: './nav-toggle.component.html', + styleUrls: ['./nav-toggle.component.scss'], +}) +export class NavToggleComponent { + @Input() public label: string = ''; + @Input() public count: number | null = 0; + @Input() public active: boolean = false; + @Output() public clicked: EventEmitter = new EventEmitter(); + constructor() {} +} diff --git a/console/src/app/modules/nav-toggle/nav-toggle.module.ts b/console/src/app/modules/nav-toggle/nav-toggle.module.ts new file mode 100644 index 0000000000..ca348c0d1f --- /dev/null +++ b/console/src/app/modules/nav-toggle/nav-toggle.module.ts @@ -0,0 +1,12 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { NavToggleComponent } from './nav-toggle.component'; + +@NgModule({ + declarations: [NavToggleComponent], + imports: [CommonModule, RouterModule], + exports: [NavToggleComponent], +}) +export class NavToggleModule {} diff --git a/console/src/app/modules/refresh-table/refresh-table.component.scss b/console/src/app/modules/refresh-table/refresh-table.component.scss index 5f3ab80e47..dbed9fc327 100644 --- a/console/src/app/modules/refresh-table/refresh-table.component.scss +++ b/console/src/app/modules/refresh-table/refresh-table.component.scss @@ -7,9 +7,10 @@ display: flex; align-items: center; padding-bottom: 0.5rem; + box-sizing: border-box; &.border-bottom { - padding-bottom: 0.5rem; + padding-bottom: 1rem; margin-bottom: 1rem; border-bottom: 1px solid map-get($foreground, divider); } diff --git a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss index 0768e4a319..550950334b 100644 --- a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss +++ b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.scss @@ -80,7 +80,7 @@ min-width: 320px; .formfield { - flex: 1; + width: 500px; } button { diff --git a/console/src/app/pages/projects/projects.component.html b/console/src/app/pages/projects/projects.component.html index 0c596c3c5c..9d62108cb3 100644 --- a/console/src/app/pages/projects/projects.component.html +++ b/console/src/app/pages/projects/projects.component.html @@ -9,22 +9,21 @@

    {{ 'PROJECT.PAGES.LISTDESCRIPTION' | translate }}

    -
    - - +
    + +
    + -
    +
    {{ 'USER.PROFILE.USERNAME' | translate }} - +
    - - {{ 'USER.PROFILE.FIRSTNAME' | translate }} - - - - {{ 'USER.PROFILE.LASTNAME' | translate }} - - - - {{ 'USER.PROFILE.NICKNAME' | translate }} - - - - {{ 'USER.PROFILE.DISPLAYNAME' | translate }} - - - - {{ 'USER.PROFILE.GENDER' | translate }} - - - {{ 'GENDERS.'+gender | translate }} - - - - - {{ 'USER.PROFILE.PREFERRED_LANGUAGE' | translate }} - - - {{ 'LANGUAGES.'+language | translate }} - - - +
    + + {{ 'USER.PROFILE.FIRSTNAME' | translate }} + + + + {{ 'USER.PROFILE.LASTNAME' | translate }} + + + + {{ 'USER.PROFILE.NICKNAME' | translate }} + + + + {{ 'USER.PROFILE.DISPLAYNAME' | translate }} + + + + {{ 'USER.PROFILE.GENDER' | translate }} + + + {{ 'GENDERS.' + gender | translate }} + + + + + {{ 'USER.PROFILE.PREFERRED_LANGUAGE' | translate }} + + + {{ 'LANGUAGES.' + language | translate }} + + + +
    - +
    - \ No newline at end of file + diff --git a/console/src/app/pages/users/user-detail/detail-form/detail-form.component.scss b/console/src/app/pages/users/user-detail/detail-form/detail-form.component.scss index 819ef62d9f..407ec23d8b 100644 --- a/console/src/app/pages/users/user-detail/detail-form/detail-form.component.scss +++ b/console/src/app/pages/users/user-detail/detail-form/detail-form.component.scss @@ -2,31 +2,28 @@ display: flex; flex-direction: row; flex-wrap: wrap; - margin: 0 -.5rem; + margin: 0; + width: 100%; + align-items: center; - &.inner { - margin: 0; - width: 100%; - display: flex; - align-items: center; + .usernamediv { + margin-left: 0.5rem; + margin-bottom: 0.5rem; - .usernamediv { - margin-left: .5rem; - margin-bottom: .5rem; + .formfield { + margin: 0; + flex: 1; + } - .formfield { - margin: 0; - flex: 1; - } - - .edit { - cursor: pointer !important; - } + .edit { + display: block; + margin-top: 0.5rem; + cursor: pointer !important; } } .camera-wrapper { - margin: 0 .5rem; + margin: 0 0.5rem; position: relative; border-radius: 50%; padding: 0; @@ -36,37 +33,49 @@ justify-content: center; background: none; cursor: pointer; - transition: all .3s ease; + transition: all 0.3s ease; + overflow: hidden; .i-wrapper { - border-radius: 50%; - background-color: #00000050; + display: none; + background-color: #00000080; position: absolute; - top: 0; z-index: 1; left: 0; right: 0; bottom: 0; - display: flex; align-items: center; justify-content: center; + transition: all 0.2 ease; i { - font-size: 3rem; + font-size: 1.2rem; + margin: 0.25rem; color: white; } } &:hover { .i-wrapper { - background-color: #00000080; + display: inline; } } } .formfield { flex: 1 1 33%; - margin: 0 .5rem; + margin: 0 0.5rem; + } +} + +.user-grid { + display: grid; + grid-template-columns: 1fr; + gap: 1rem; + margin: 0; + + @media only screen and (min-width: 700px) { + grid-template-columns: 1fr 1fr; } } @@ -75,6 +84,6 @@ justify-content: flex-end; .submit-button { - border-radius: .5rem; + border-radius: 0.5rem; } } diff --git a/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.html b/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.html index 669638c545..7c60010bfa 100644 --- a/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.html +++ b/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.html @@ -1,20 +1,26 @@ -{{'USER.PROFILE.AVATAR.UPLOADTITLE' | translate}} +{{ 'USER.PROFILE.AVATAR.UPLOADTITLE' | translate }}
    -

    {{'USER.PROFILE.AVATAR.CURRENT' | translate}}

    +

    {{ 'USER.PROFILE.AVATAR.CURRENT' | translate }}

    - - - +
    -
    \ No newline at end of file +
    diff --git a/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.ts b/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.ts index 6f808b20f7..293d42355a 100644 --- a/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.ts +++ b/console/src/app/pages/users/user-detail/detail-form/profile-picture/profile-picture.component.ts @@ -49,7 +49,9 @@ export class ProfilePictureComponent { this.data.profilePic = resp.user?.human?.profile?.avatarUrl ?? ''; }); }) - .catch((error) => this.toast.showError(error)); + .catch((error) => { + this.toast.showError(error.error, false); + }); } public closeDialog(): void { diff --git a/console/src/app/pages/users/user-list/user-list.module.ts b/console/src/app/pages/users/user-list/user-list.module.ts index 969f737b1f..be86f4ddfd 100644 --- a/console/src/app/pages/users/user-list/user-list.module.ts +++ b/console/src/app/pages/users/user-list/user-list.module.ts @@ -18,6 +18,7 @@ import { AvatarModule } from 'src/app/modules/avatar/avatar.module'; import { CardModule } from 'src/app/modules/card/card.module'; import { FilterUserModule } from 'src/app/modules/filter-user/filter-user.module'; import { InputModule } from 'src/app/modules/input/input.module'; +import { NavToggleModule } from 'src/app/modules/nav-toggle/nav-toggle.module'; import { PaginatorModule } from 'src/app/modules/paginator/paginator.module'; import { RefreshTableModule } from 'src/app/modules/refresh-table/refresh-table.module'; import { TableActionsModule } from 'src/app/modules/table-actions/table-actions.module'; @@ -49,6 +50,7 @@ import { UserTableComponent } from './user-table/user-table.component'; TranslateModule, FilterUserModule, RouterModule, + NavToggleModule, RefreshTableModule, TableActionsModule, ActionKeysModule, diff --git a/console/src/app/pages/users/user-list/user-table/user-table.component.html b/console/src/app/pages/users/user-list/user-table/user-table.component.html index bb83827477..a6c263f77b 100644 --- a/console/src/app/pages/users/user-list/user-table/user-table.component.html +++ b/console/src/app/pages/users/user-list/user-table/user-table.component.html @@ -8,13 +8,17 @@ [emitRefreshOnPreviousRoutes]="refreshOnPreviousRoutes" [showBorder]="true" > -
    - - +
    + +
    diff --git a/console/src/app/pages/users/user-list/user-table/user-table.component.scss b/console/src/app/pages/users/user-list/user-table/user-table.component.scss index 8a9159bf3f..99f2f2a3b1 100644 --- a/console/src/app/pages/users/user-list/user-table/user-table.component.scss +++ b/console/src/app/pages/users/user-list/user-table/user-table.component.scss @@ -4,31 +4,31 @@ $foreground: map-get($theme, foreground); $is-dark-theme: map-get($theme, is-dark); - .user-table-left-actions { + .user-toggle-group { display: flex; - align-items: center; + margin: 0; + height: 100%; - .type-button { - border: none; - background: none; - text-align: left; - padding: 0.75rem 0; - opacity: 0.6; - font-size: 15px; - cursor: pointer; - color: map-get($foreground, text); + .toggle-row { + display: flex; + align-items: center; - &:first-child { - margin-right: 1rem; + i { + margin-right: 0.5rem; } - &:hover { - opacity: 1; + .info-i { + font-size: 1.2rem; + margin-left: 0.5rem; + margin-right: 0; } - &.active { - font-weight: 600; - opacity: 1; + .current-dot { + height: 8px; + width: 8px; + border-radius: 50%; + background-color: rgb(84, 142, 230); + margin-left: 0.5rem; } } } diff --git a/console/src/app/services/toast.service.ts b/console/src/app/services/toast.service.ts index c881dcd92c..b545a050cb 100644 --- a/console/src/app/services/toast.service.ts +++ b/console/src/app/services/toast.service.ts @@ -33,15 +33,19 @@ export class ToastService { } } - public showError(grpcError: any): void { - const { message, code, metadata } = grpcError; - if (code !== 16) { - this.translate - .get('ACTIONS.CLOSE') - .pipe(take(1)) - .subscribe((value) => { - this.showMessage(decodeURI(message), value, false); - }); + public showError(error: any | string, isGrpc: boolean = true): void { + if (isGrpc) { + const { message, code, metadata } = error; + if (code !== 16) { + this.translate + .get('ACTIONS.CLOSE') + .pipe(take(1)) + .subscribe((value) => { + this.showMessage(decodeURI(message), value, false); + }); + } + } else { + this.showMessage(error as string, '', false); } } diff --git a/console/src/component-themes.scss b/console/src/component-themes.scss index 019973e2ac..b377a4b0ba 100644 --- a/console/src/component-themes.scss +++ b/console/src/component-themes.scss @@ -12,6 +12,7 @@ @import 'src/app/modules/app-card/app-card.component'; @import 'src/app/modules/contributors/contributors.component'; @import 'src/app/modules/nav/nav.component'; +@import 'src/app/modules/nav-toggle/nav-toggle.component'; @import './styles/toast.scss'; @import 'src/app/modules/table-actions/table-actions.component'; @import 'src/app/modules/org-context/org-context.component.scss'; @@ -62,6 +63,7 @@ @include main-theme($theme); @include avatar-theme($theme); @include nav-theme($theme); + @include nav-toggle-theme($theme); @include header-theme($theme); @include app-type-radio-theme($theme); @include projects-theme($theme); diff --git a/console/src/styles.scss b/console/src/styles.scss index 110aa3eb20..c25f70439f 100644 --- a/console/src/styles.scss +++ b/console/src/styles.scss @@ -446,9 +446,18 @@ $custom-typography: mat.define-typography-config( } } - .mat-button-toggle-button { + .mat-button-toggle-group-appearance-standard { + border-color: map-get($foreground, divider); + } + + .mat-button-toggle { background-color: mat.get-color-from-palette($background, cards); transition: background-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + + &.mat-button-toggle-checked { + background-color: #00000010; + } } .main-container, @@ -509,9 +518,18 @@ $custom-typography: mat.define-typography-config( } } - .mat-button-toggle-button { + .mat-button-toggle-group-appearance-standard { + border-color: map-get($foreground, divider); + } + + .mat-button-toggle { background-color: mat.get-color-from-palette($background, cards); transition: background-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + transition: border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); + + &.mat-button-toggle-checked { + background-color: mat.get-color-from-palette($background, background); + } } .main-container, @@ -601,3 +619,15 @@ i { .mat-checkbox-inner-container.mat-checkbox-inner-container-no-side-margin { margin-right: 0.5rem !important; } + +.mat-button-toggle-button { + display: flex; + height: 36px; + line-height: 36px !important; + align-items: center; + font-size: 14px !important; +} + +.mat-button-toggle-label-content { + line-height: 36px; +} diff --git a/console/src/styles/input.scss b/console/src/styles/input.scss index 53779af177..190b8be9a6 100644 --- a/console/src/styles/input.scss +++ b/console/src/styles/input.scss @@ -20,8 +20,8 @@ transform: all 0.2 linear; font-size: 1rem; border: none; - border: 1px solid if($is-dark-theme, #f9f7f725, #1a191938); - background-color: if($is-dark-theme, #00000020, #00000004); + border: 1px solid if($is-dark-theme, #f9f7f775, #1a191954); + background-color: if($is-dark-theme, #00000040, #00000004); border-radius: 4px; height: 40px; padding: 10px; @@ -34,7 +34,7 @@ margin-bottom: 2px; &:hover { - border-color: if($is-dark-theme, #aeafb1, #1a1b1b); + border-color: if($is-dark-theme, #e0e0e0, #1a1b1b); } &:active, From 6e6f5d5f171a00b3a7af19249f1dbd94b1a6d105 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Fri, 29 Jul 2022 14:12:52 +0200 Subject: [PATCH 059/116] docs: fix broken links in examples overview (#4074) --- docs/docs/examples/introduction.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs/examples/introduction.mdx b/docs/docs/examples/introduction.mdx index 00511507ae..f9ff8500b6 100644 --- a/docs/docs/examples/introduction.mdx +++ b/docs/docs/examples/introduction.mdx @@ -19,13 +19,13 @@ Get started with ZITADEL quickly by reading a quickstart or by cloning an exampl - - + + - + From 25baeb05ff56a51657135482d6684daa682e2444 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 29 Jul 2022 17:19:17 +0200 Subject: [PATCH 060/116] docs: fix kubectl command (#4078) --- docs/docs/guides/deploy/kubernetes.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/deploy/kubernetes.mdx b/docs/docs/guides/deploy/kubernetes.mdx index 147e75e892..f40f3307a7 100644 --- a/docs/docs/guides/deploy/kubernetes.mdx +++ b/docs/docs/guides/deploy/kubernetes.mdx @@ -34,7 +34,7 @@ helm install --namespace zitadel --create-namespace my-zitadel zitadel/zitadel \ ### Forward the ZITADEL service port to your local machine ```bash -kubectl port-forward svc/my-zitadel 8080:80 +kubectl -n zitadel port-forward svc/my-zitadel 8080:8080 ``` From 459779ae3a79f245fb95b3f06952ab638c9fa22b Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Fri, 29 Jul 2022 17:45:38 +0200 Subject: [PATCH 061/116] docs: update db config in example configs (#4077) * docs: update db config in example configs * fix version * more cockroach --- deploy/knative/zitadel-knative-service.yaml | 8 +++--- docs/docs/guides/deploy/docker-compose.yaml | 2 +- docs/docs/guides/deploy/knative.mdx | 2 +- docs/docs/guides/deploy/kubernetes.mdx | 2 +- .../example-zitadel-config.yaml | 27 ++++++++++--------- .../example-zitadel-secrets.yaml | 15 ++++++----- .../self-hosted/configure/_linuxunix.mdx | 6 ++--- .../configure/example-zitadel-config.yaml | 27 ++++++++++--------- .../configure/example-zitadel-secrets.yaml | 15 ++++++----- .../example-zitadel-values-secrets.yaml | 16 +++++------ 10 files changed, 61 insertions(+), 59 deletions(-) diff --git a/deploy/knative/zitadel-knative-service.yaml b/deploy/knative/zitadel-knative-service.yaml index 41f31e6870..db6ff090fc 100644 --- a/deploy/knative/zitadel-knative-service.yaml +++ b/deploy/knative/zitadel-knative-service.yaml @@ -7,7 +7,7 @@ spec: template: metadata: annotations: - client.knative.dev/user-image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.43-amd64 + client.knative.dev/user-image: ghcr.io/zitadel/zitadel:v2.0.0-amd64 creationTimestamp: null spec: containerConcurrency: 0 @@ -18,7 +18,7 @@ spec: - --masterkey - MasterkeyNeedsToHave32Characters env: - - name: ZITADEL_DATABASE_HOST + - name: ZITADEL_DATABASE_COCKROACH_HOST value: cockroachdb - name: ZITADEL_EXTERNALSECURE value: "false" @@ -28,9 +28,7 @@ spec: value: 80 - name: ZITADEL_EXTERNALDOMAIN value: zitadel.default.127.0.0.1.sslip.io - - name: ZITADEL_S3DEFAULTINSTANCE_CUSTOMDOMAIN - value: zitadel.default.127.0.0.1.sslip.io - image: ghcr.io/zitadel/zitadel:v2.0.0-v2-alpha.43-amd64 + image: ghcr.io/zitadel/zitadel:v2.0.0-amd64 name: user-container ports: - containerPort: 8080 diff --git a/docs/docs/guides/deploy/docker-compose.yaml b/docs/docs/guides/deploy/docker-compose.yaml index bc999908d7..eeb0f57539 100644 --- a/docs/docs/guides/deploy/docker-compose.yaml +++ b/docs/docs/guides/deploy/docker-compose.yaml @@ -8,7 +8,7 @@ services: image: 'ghcr.io/zitadel/zitadel:v2.0.0-amd64' command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled' environment: - - 'ZITADEL_DATABASE_HOST=db' + - 'ZITADEL_DATABASE_COCKROACH_HOST=db' - 'ZITADEL_EXTERNALSECURE=false' depends_on: db: diff --git a/docs/docs/guides/deploy/knative.mdx b/docs/docs/guides/deploy/knative.mdx index ae80e81fb0..fb5de70253 100644 --- a/docs/docs/guides/deploy/knative.mdx +++ b/docs/docs/guides/deploy/knative.mdx @@ -26,7 +26,7 @@ kubectl apply -f https://raw.githubusercontent.com/zitadel/zitadel/main/deploy/k kn service create zitadel \ --image ghcr.io/zitadel/zitadel:v2.0.0-amd64 \ --port 8080 \ ---env ZITADEL_DATABASE_HOST=cockroachdb \ +--env ZITADEL_DATABASE_COCKROACH_HOST=cockroachdb \ --env ZITADEL_EXTERNALSECURE=false \ --env ZITADEL_EXTERNALPORT=80 \ --env ZITADEL_TLS_ENABLED=false \ diff --git a/docs/docs/guides/deploy/kubernetes.mdx b/docs/docs/guides/deploy/kubernetes.mdx index f40f3307a7..7c55854d1c 100644 --- a/docs/docs/guides/deploy/kubernetes.mdx +++ b/docs/docs/guides/deploy/kubernetes.mdx @@ -25,7 +25,7 @@ helm install --namespace zitadel --create-namespace my-zitadel zitadel/zitadel \ --set zitadel.masterkey="MasterkeyNeedsToHave32Characters" \ --set zitadel.configmapConfig.ExternalDomain="localhost" \ --set zitadel.configmapConfig.ExternalSecure=false \ - --set zitadel.secretConfig.Database.User.Password="a-zitadel-db-user-password" + --set zitadel.secretConfig.Database.cockroach.User.Password="a-zitadel-db-user-password" \ --set replicaCount=1 \ --set cockroachdb.single-node=true \ --set cockroachdb.statefulset.replicas=1 diff --git a/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml index f48ce91f79..2e1afc71cd 100644 --- a/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml +++ b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml @@ -9,16 +9,17 @@ ExternalPort: 443 # If not using the docker compose example, adjust these values for connecting ZITADEL to your CockroachDB Database: - Host: 'my-cockroach-db' - User: - SSL: - Mode: 'verify-full' - RootCert: "/crdb-certs/ca.crt" - Cert: "/crdb-certs/client.zitadel_user.crt" - Key: "/crdb-certs/client.zitadel_user.key" -AdminUser: - SSL: - Mode: 'verify-full' - RootCert: "/crdb-certs/ca.crt" - Cert: "/crdb-certs/client.root.crt" - Key: "/crdb-certs/client.root.key" + cockroach: + Host: 'my-cockroach-db' + User: + SSL: + Mode: 'verify-full' + RootCert: "/crdb-certs/ca.crt" + Cert: "/crdb-certs/client.zitadel_user.crt" + Key: "/crdb-certs/client.zitadel_user.key" + Admin: + SSL: + Mode: 'verify-full' + RootCert: "/crdb-certs/ca.crt" + Cert: "/crdb-certs/client.root.crt" + Key: "/crdb-certs/client.root.key" diff --git a/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml index bc630b8140..de60e62cfb 100644 --- a/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml +++ b/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml @@ -2,10 +2,11 @@ # If not using the docker compose example, adjust these values for connecting ZITADEL to your CockroachDB Database: - User: - # If the user doesn't exist already, it is created - Username: 'zitadel_user' - Password: 'Secret_DB_User_Password' -AdminUser: - Username: 'root' - Password: '' + cockroach: + User: + # If the user doesn't exist already, it is created + Username: 'zitadel_user' + Password: 'Secret_DB_User_Password' + Admin: + Username: 'root' + Password: '' diff --git a/docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx b/docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx index 35e795837c..dae4350405 100644 --- a/docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx +++ b/docs/docs/guides/manage/self-hosted/configure/_linuxunix.mdx @@ -44,9 +44,9 @@ zitadel start-from-init \ ```bash # Set runtime environment variables -export ZITADEL_DATABASE_HOST="my.database" -export ZITADEL_DATABASE_USER_USERNAME="my_zitadel_db_user" -export ZITADEL_DATABASE_USER_PASSWORD="Secret_DB_User_Password" +export ZITADEL_DATABASE_COCKROACH_HOST="my.database" +export ZITADEL_DATABASE_COCKROACH_USER_USERNAME="my_zitadel_db_user" +export ZITADEL_DATABASE_COCKROACH_USER_PASSWORD="Secret_DB_User_Password" export ZITADEL_FIRSTINSTANCE_ORG_HUMAN_USERNAME="root" export ZITADEL_FIRSTINSTANCE_ORG_HUMAN_PASSWORD="RootPassword1!" diff --git a/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml index cf3184fc2b..fe5dd82846 100644 --- a/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml @@ -7,16 +7,17 @@ ExternalSecure: false # If not using the docker compose example, adjust these values for connecting ZITADEL to your CockroachDB Database: - Host: 'my-cockroach-db' - User: - SSL: - Mode: 'verify-full' - RootCert: "/crdb-certs/ca.crt" - Cert: "/crdb-certs/client.zitadel_user.crt" - Key: "/crdb-certs/client.zitadel_user.key" -AdminUser: - SSL: - Mode: 'verify-full' - RootCert: "/crdb-certs/ca.crt" - Cert: "/crdb-certs/client.root.crt" - Key: "/crdb-certs/client.root.key" + cockroach: + Host: 'my-cockroach-db' + User: + SSL: + Mode: 'verify-full' + RootCert: "/crdb-certs/ca.crt" + Cert: "/crdb-certs/client.zitadel_user.crt" + Key: "/crdb-certs/client.zitadel_user.key" + Admin: + SSL: + Mode: 'verify-full' + RootCert: "/crdb-certs/ca.crt" + Cert: "/crdb-certs/client.root.crt" + Key: "/crdb-certs/client.root.key" diff --git a/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml index bc630b8140..de60e62cfb 100644 --- a/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml @@ -2,10 +2,11 @@ # If not using the docker compose example, adjust these values for connecting ZITADEL to your CockroachDB Database: - User: - # If the user doesn't exist already, it is created - Username: 'zitadel_user' - Password: 'Secret_DB_User_Password' -AdminUser: - Username: 'root' - Password: '' + cockroach: + User: + # If the user doesn't exist already, it is created + Username: 'zitadel_user' + Password: 'Secret_DB_User_Password' + Admin: + Username: 'root' + Password: '' diff --git a/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml index d7d0c1988d..83734560d3 100644 --- a/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml +++ b/docs/docs/guides/manage/self-hosted/configure/example-zitadel-values-secrets.yaml @@ -6,11 +6,11 @@ zitadel: secretConfig: Database: - User: - # If the user doesn't exist already, it is created - Username: 'zitadel_user' - Password: 'Secret_DB_User_Password' - - AdminUser: - Username: 'root' - Password: '' + cockroach: + User: + # If the user doesn't exist already, it is created + Username: 'zitadel_user' + Password: 'Secret_DB_User_Password' + Admin: + Username: 'root' + Password: '' From 80eca531e923b9e5b2fca74d54c6191a27933e0b Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Fri, 29 Jul 2022 18:36:11 +0200 Subject: [PATCH 062/116] docs(installation): fix helm command (#4079) --- docs/docs/guides/deploy/kubernetes.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/guides/deploy/kubernetes.mdx b/docs/docs/guides/deploy/kubernetes.mdx index 7c55854d1c..ef23a12419 100644 --- a/docs/docs/guides/deploy/kubernetes.mdx +++ b/docs/docs/guides/deploy/kubernetes.mdx @@ -23,8 +23,8 @@ helm repo add zitadel https://charts.zitadel.com ```bash helm install --namespace zitadel --create-namespace my-zitadel zitadel/zitadel \ --set zitadel.masterkey="MasterkeyNeedsToHave32Characters" \ - --set zitadel.configmapConfig.ExternalDomain="localhost" \ --set zitadel.configmapConfig.ExternalSecure=false \ + --set zitadel.configmapConfig.TLS.Enabled=false \ --set zitadel.secretConfig.Database.cockroach.User.Password="a-zitadel-db-user-password" \ --set replicaCount=1 \ --set cockroachdb.single-node=true \ From 1984eae813743a29ee79fe9b148313e9da21680c Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 29 Jul 2022 19:05:47 +0200 Subject: [PATCH 063/116] chore(readme): update links (#4080) --- README.md | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d64f9d8f0f..ca53790867 100644 --- a/README.md +++ b/README.md @@ -46,15 +46,15 @@ With ZITADEL you rely on a battle tested, hardened and extensible turnkey soluti The easiest way to get started with ZITADEL is to use our public cloud offering. Currently ZITADEL V2 Beta is available, head over to [https://zitadel.cloud](https://zitadel.cloud) and create your first ZITADEL instance for free. -You can also discover our pay-as-you-go [pricing](https://zitadel.com/pricing/v2). +You can also discover our pay-as-you-go [pricing](https://zitadel.com/pricing). ### Install ZITADEL -- [We provide installation guides for multiple platforms here](https://docs.zitadel.com/docs/guides/installation) +- [We provide installation guides for multiple platforms here](https://docs.zitadel.com/docs/guides/deploy/overview) ### Quickstarts - Integrate your app -- [Multiple Quickstarts can be found here](https://docs.zitadel.com/docs/quickstarts/introduction) +- [Multiple Quickstarts can be found here](hhttps://docs.zitadel.com/docs/guides/start/quickstart) - [And even more examples are located under zitadel/zitadel-examples](https://github.com/zitadel/zitadel-examples) > If you miss something please feel free to engage with us [here](https://github.com/zitadel/zitadel/discussions/1717) @@ -62,9 +62,9 @@ You can also discover our pay-as-you-go [pricing](https://zitadel.com/pricing/v2 ## Why ZITADEL - [API-first](https://docs.zitadel.com/docs/apis/introduction) -- Strong audit trail thanks to [event sourcing](https://docs.zitadel.com/docs/concepts/eventstore) +- Strong audit trail thanks to [event sourcing](https://docs.zitadel.com/docs/concepts/eventstore/overview) - [Actions](https://docs.zitadel.ch/docs/concepts/features/actions) to react on events with custom code -- [Branding](https://docs.zitadel.com/docs/guides/customization/branding) for a uniform user experience +- [Branding](https://docs.zitadel.com/docs/guides/manage/customize/branding) for a uniform user experience - [CockroachDB](https://www.cockroachlabs.com/) is the only dependency ## Features @@ -73,16 +73,17 @@ You can also discover our pay-as-you-go [pricing](https://zitadel.com/pricing/v2 - Passwordless with FIDO2 support - Username / Password - Multifactor authentication with OTP, U2F -- [Identity Brokering](https://docs.zitadel.com/docs/guides/authentication/identity-brokering) -- [Machine-to-machine (JWT profile)](https://docs.zitadel.com/docs/guides/authentication/serviceusers) +- [Identity Brokering](https://docs.zitadel.com/docs/guides/integrate/identity-brokering) +- [Machine-to-machine (JWT profile)](https://docs.zitadel.com/docs/guides/integrate/serviceusers) - Personal Access Tokens (PAT) - Role Based Access Control (RBAC) -- [Delegate role management to third-parties](https://docs.zitadel.com/docs/guides/basics/projects#what-is-a-granted-project) +- [Delegate role management to third-parties](https://docs.zitadel.com/docs/guides/manage/console/projects) - Self-registration including verification - User self service -- [Service Accounts](https://docs.zitadel.com/docs/guides/authentication/serviceusers) +- [Service Accounts](https://docs.zitadel.com/docs/guides/integrate/serviceusers) - [OpenID Connect certified](https://openid.net/certification/#OPs) - 🚧 [SAML 2.0](https://github.com/zitadel/zitadel/pull/3618) +- 🚧 [Postgres](https://github.com/zitadel/zitadel/pull/3998) ## Client libraries @@ -125,7 +126,7 @@ Use our login widget to allow easy and secure access to your applications and en - works on all modern platforms, devices, and browsers - phishing resistant alternative - requires only one gesture by the user -- easy [enrollment](https://docs.zitadel.com/docs/manuals/user-factors) of the device during registration +- easy [enrollment](https://docs.zitadel.com/docs/manuals/user-profile) of the device during registration ![passwordless-windows-hello](https://user-images.githubusercontent.com/1366906/118765435-5d419780-b87b-11eb-95bf-55140119c0d8.gif) From e5b6c3748dfa4c7608e2bd4eaf6da1abe6557e88 Mon Sep 17 00:00:00 2001 From: cyb3rd0g1 Date: Mon, 1 Aug 2022 04:47:23 -0400 Subject: [PATCH 064/116] docs(development): Remove references to deprecated files, add info on DOCKER_BUILDKIT (#4084) --- guides/development.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/guides/development.md b/guides/development.md index 8a788b65c5..3efbb75020 100644 --- a/guides/development.md +++ b/guides/development.md @@ -21,15 +21,12 @@ If you get the error `Failed to fetch https://repo.goreleaser.com/apt/Packages sudo apt install ca-certificates ``` -### env variables - -You can use the default vars provided in [this .env-file](../build/local/local.env) or create your own and update the paths in the [docker compose file](../build/local/docker-compose-local.yml). - ## Local Build Simply run goreleaser to build locally. This will generate all the required files, such as angular and grpc automatically. ```sh +export DOCKER_BUILDKIT=1 goreleaser build --snapshot --rm-dist --single-target ``` From 25317c6c086b04b317e22a546edfcc81e3b64369 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 2 Aug 2022 09:08:43 +0200 Subject: [PATCH 065/116] chore: change image tags and add docker manifest (#4075) --- .goreleaser.yaml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index e395957a79..e87f16fa86 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -36,17 +36,13 @@ dist: .artifacts/goreleaser dockers: - image_templates: - - ghcr.io/zitadel/zitadel:latest-amd64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 - - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-amd64 - europe-docker.pkg.dev/zitadel-common/zitadel-repo/zitadel:{{ .Tag }}-amd64 - - europe-docker.pkg.dev/zitadel-common/zitadel-repo/zitadel:{{ .ShortCommit }}-amd64 use: buildx dockerfile: build/Dockerfile build_flag_templates: - "--platform=linux/amd64" - image_templates: - - ghcr.io/zitadel/zitadel:latest-arm64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-arm64 use: buildx @@ -54,6 +50,18 @@ dockers: build_flag_templates: - "--platform=linux/arm64" +docker_manifests: + id: zitadel-latest + name_template: ghcr.io/zitadel/zitadel:latest + image_templates: + - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 + - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 + id: zitadel-Tag + name_template: ghcr.io/zitadel/zitadel:{{ .Tag }} + image_templates: + - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 + - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 + archives: - name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' replacements: From 9326061f1ad175a46bd9f36df2a58e56765176af Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 2 Aug 2022 13:30:11 +0200 Subject: [PATCH 066/116] docs: fix broken links and typos (#4085) * docs: fix broken links * some language fixes Co-authored-by: Elio Bischof --- docs/docs/guides/deploy/compose.mdx | 6 +++--- .../loadbalancing-example.mdx | 20 +++++++++---------- docs/docs/guides/deploy/overview.mdx | 4 ++-- .../manage/self-hosted/configure/_compose.mdx | 8 ++++---- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/docs/guides/deploy/compose.mdx b/docs/docs/guides/deploy/compose.mdx index 57f0347c53..8c2fc7c1b4 100644 --- a/docs/docs/guides/deploy/compose.mdx +++ b/docs/docs/guides/deploy/compose.mdx @@ -17,13 +17,13 @@ By executing the commands below, you will download the following file: ```bash -# Download the docker compose example configuration. For example: +# Download the docker compose example configuration. wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/docker-compose.yaml -# Run the database and application containers +# Run the database and application containers. docker compose up --detach ``` - \ No newline at end of file + diff --git a/docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx b/docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx index 329fd44f1e..488454917f 100644 --- a/docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx +++ b/docs/docs/guides/deploy/loadbalancing-example/loadbalancing-example.mdx @@ -37,20 +37,20 @@ By executing the commands below, you will download the following files: ```bash -# Download the docker compose example configuration. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/docker-compose.yaml +# Download the docker compose example configuration. +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/loadbalancing-example/docker-compose.yaml -# Download the docker compose example configuration. For example: -wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-traefik.yaml +# Download the Traefik example configuration. +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/loadbalancing-example/example-traefik.yaml -# Download and adjust the example configuration file containing standard configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-zitadel-config.yaml +# Download and adjust the example configuration file containing standard configuration. +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-config.yaml -# Download and adjust the example configuration file containing secret configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-zitadel-secrets.yaml +# Download and adjust the example configuration file containing secret configuration. +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-secrets.yaml -# Download and adjust the example configuration file containing database initialization configuration -wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploye/loadbalancing-example/loadbalancing-example/example-zitadel-init-steps.yaml +# Download and adjust the example configuration file containing database initialization configuration. +wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/deploy/loadbalancing-example/example-zitadel-init-steps.yaml # A single ZITADEL instance always needs the same 32 characters long masterkey # If you haven't done so already, you can generate a new one. diff --git a/docs/docs/guides/deploy/overview.mdx b/docs/docs/guides/deploy/overview.mdx index f2e3cc5d92..bcbbeab027 100644 --- a/docs/docs/guides/deploy/overview.mdx +++ b/docs/docs/guides/deploy/overview.mdx @@ -14,6 +14,6 @@ By default, it runs a highly available ZITADEL instance along with a secure and ## Prerequisits -- ZITADEL does not need much resource 1 CPU and 512MB memory is more than enough. (With more CPU the password hashing might be faster) +- ZITADEL does not need many resources, 1 CPU and 512MB memory are more than enough. (With more CPU, the password hashing might be faster) - A cockroachDB or [🚧 Postgresql coming soon](https://github.com/zitadel/zitadel/pull/3998) as only needed storage -- If you want to front ZTIADEL with a revers proxy, web application firewall or content delivery network make sure to support [HTTP/2](../manage/self-hosted/http2) \ No newline at end of file +- If you want to front ZITADEL with a reverse proxy, web application firewall or content delivery network, make sure to support [HTTP/2](../manage/self-hosted/http2) diff --git a/docs/docs/guides/manage/self-hosted/configure/_compose.mdx b/docs/docs/guides/manage/self-hosted/configure/_compose.mdx index d6a6006513..836dc0d033 100644 --- a/docs/docs/guides/manage/self-hosted/configure/_compose.mdx +++ b/docs/docs/guides/manage/self-hosted/configure/_compose.mdx @@ -22,16 +22,16 @@ By executing the commands below, you will download the following files: ```bash -# Download the docker compose example configuration for a secure CockroachDB. For example: +# Download the docker compose example configuration for a secure CockroachDB. wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/docker-compose.yaml -# Download and adjust the example configuration file containing standard configuration +# Download and adjust the example configuration file containing standard configuration. wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-config.yaml -# Download and adjust the example configuration file containing secret configuration +# Download and adjust the example configuration file containing secret configuration. wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-secrets.yaml -# Download and adjust the example configuration file containing database initialization configuration +# Download and adjust the example configuration file containing database initialization configuration. wget https://raw.githubusercontent.com/zitadel/zitadel/main/docs/docs/guides/manage/self-hosted/configure/example-zitadel-init-steps.yaml # A single ZITADEL instance always needs the same 32 characters long masterkey From fbd04d399d8b71cdfc69d1634f6c6f31cbc6b7ab Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 2 Aug 2022 16:31:35 +0200 Subject: [PATCH 067/116] fix: hide / show username suffix correctly on registration pages (#4097) --- internal/api/ui/login/external_login_handler.go | 15 +++++++++++++++ .../api/ui/login/external_register_handler.go | 12 ++++++++++-- internal/api/ui/login/policy_handler.go | 7 +++++++ internal/api/ui/login/register_handler.go | 8 ++++++++ .../templates/external_not_found_option.html | 2 +- .../templates/external_register_overview.html | 2 +- .../api/ui/login/static/templates/register.html | 2 +- 7 files changed, 43 insertions(+), 5 deletions(-) diff --git a/internal/api/ui/login/external_login_handler.go b/internal/api/ui/login/external_login_handler.go index ca58fea33f..56f329b9cc 100644 --- a/internal/api/ui/login/external_login_handler.go +++ b/internal/api/ui/login/external_login_handler.go @@ -51,6 +51,7 @@ type externalNotFoundOptionData struct { ExternalIDPUserID string ExternalIDPUserDisplayName string ShowUsername bool + ShowUsernameSuffix bool OrgRegister bool ExternalEmail string ExternalEmailVerified bool @@ -274,6 +275,19 @@ func (l *Login) renderExternalNotFoundOption(w http.ResponseWriter, r *http.Requ human, externalIDP, _ = l.mapExternalUserToLoginUser(orgIAMPolicy, linkingUser, idpConfig) } + var resourceOwner string + if authReq != nil { + resourceOwner = authReq.RequestedOrgID + } + if resourceOwner == "" { + resourceOwner = authz.GetInstance(r.Context()).DefaultOrganisationID() + } + labelPolicy, err := l.getLabelPolicy(r, resourceOwner) + if err != nil { + l.renderError(w, r, authReq, err) + return + } + data := externalNotFoundOptionData{ baseData: l.getBaseData(r, authReq, "ExternalNotFoundOption", errID, errMessage), externalNotFoundOptionFormData: externalNotFoundOptionFormData{ @@ -292,6 +306,7 @@ func (l *Login) renderExternalNotFoundOption(w http.ResponseWriter, r *http.Requ ExternalEmail: human.EmailAddress, ExternalEmailVerified: human.IsEmailVerified, ShowUsername: orgIAMPolicy.UserLoginMustBeDomain, + ShowUsernameSuffix: !labelPolicy.HideLoginNameSuffix, OrgRegister: orgIAMPolicy.UserLoginMustBeDomain, } if human.Phone != nil { diff --git a/internal/api/ui/login/external_register_handler.go b/internal/api/ui/login/external_register_handler.go index be664f095e..db440f62ce 100644 --- a/internal/api/ui/login/external_register_handler.go +++ b/internal/api/ui/login/external_register_handler.go @@ -44,6 +44,7 @@ type externalRegisterData struct { ExternalIDPUserID string ExternalIDPUserDisplayName string ShowUsername bool + ShowUsernameSuffix bool OrgRegister bool ExternalEmail string ExternalEmailVerified bool @@ -121,13 +122,19 @@ func (l *Login) handleExternalUserRegister(w http.ResponseWriter, r *http.Reques l.renderRegisterOption(w, r, authReq, err) return } + + labelPolicy, err := l.getLabelPolicy(r, resourceOwner) + if err != nil { + l.renderRegisterOption(w, r, authReq, err) + return + } user, externalIDP := l.mapTokenToLoginHumanAndExternalIDP(orgIamPolicy, tokens, idpConfig) if err != nil { l.renderRegisterOption(w, r, authReq, err) return } if !idpConfig.AutoRegister { - l.renderExternalRegisterOverview(w, r, authReq, orgIamPolicy, user, externalIDP, nil) + l.renderExternalRegisterOverview(w, r, authReq, orgIamPolicy, user, externalIDP, labelPolicy.HideLoginNameSuffix, nil) return } l.registerExternalUser(w, r, authReq, user, externalIDP) @@ -157,7 +164,7 @@ func (l *Login) registerExternalUser(w http.ResponseWriter, r *http.Request, aut l.renderNextStep(w, r, authReq) } -func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Request, authReq *domain.AuthRequest, orgIAMPolicy *query.DomainPolicy, human *domain.Human, idp *domain.UserIDPLink, err error) { +func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Request, authReq *domain.AuthRequest, orgIAMPolicy *query.DomainPolicy, human *domain.Human, idp *domain.UserIDPLink, hideLoginNameSuffix bool, err error) { var errID, errMessage string if err != nil { errID, errMessage = l.getErrorMessage(r, err) @@ -180,6 +187,7 @@ func (l *Login) renderExternalRegisterOverview(w http.ResponseWriter, r *http.Re ExternalEmailVerified: human.IsEmailVerified, ShowUsername: orgIAMPolicy.UserLoginMustBeDomain, OrgRegister: orgIAMPolicy.UserLoginMustBeDomain, + ShowUsernameSuffix: !hideLoginNameSuffix, } if human.Phone != nil { data.Phone = human.PhoneNumber diff --git a/internal/api/ui/login/policy_handler.go b/internal/api/ui/login/policy_handler.go index 1445df9a94..f5db76a2bc 100644 --- a/internal/api/ui/login/policy_handler.go +++ b/internal/api/ui/login/policy_handler.go @@ -28,3 +28,10 @@ func (l *Login) getLoginPolicy(r *http.Request, orgID string) (*query.LoginPolic } return l.query.LoginPolicyByID(r.Context(), false, orgID) } + +func (l *Login) getLabelPolicy(r *http.Request, orgID string) (*query.LabelPolicy, error) { + if orgID == "" { + return l.query.DefaultActiveLabelPolicy(r.Context()) + } + return l.query.ActiveLabelPolicyByOrg(r.Context(), orgID) +} diff --git a/internal/api/ui/login/register_handler.go b/internal/api/ui/login/register_handler.go index f8b8ab5369..2716543500 100644 --- a/internal/api/ui/login/register_handler.go +++ b/internal/api/ui/login/register_handler.go @@ -37,6 +37,7 @@ type registerData struct { HasNumber string HasSymbol string ShowUsername bool + ShowUsernameSuffix bool OrgRegister bool } @@ -149,6 +150,13 @@ func (l *Login) renderRegister(w http.ResponseWriter, r *http.Request, authReque data.ShowUsername = orgIAMPolicy.UserLoginMustBeDomain data.OrgRegister = orgIAMPolicy.UserLoginMustBeDomain + labelPolicy, err := l.getLabelPolicy(r, resourceOwner) + if err != nil { + l.renderRegister(w, r, authRequest, formData, err) + return + } + data.ShowUsernameSuffix = !labelPolicy.HideLoginNameSuffix + funcs := map[string]interface{}{ "selectedLanguage": func(l string) bool { if formData == nil { diff --git a/internal/api/ui/login/static/templates/external_not_found_option.html b/internal/api/ui/login/static/templates/external_not_found_option.html index 7c4c16b747..3a7ef355de 100644 --- a/internal/api/ui/login/static/templates/external_not_found_option.html +++ b/internal/api/ui/login/static/templates/external_not_found_option.html @@ -39,7 +39,7 @@
    - {{if .ShowUsername}} + {{if .ShowUsernameSuffix}} @{{.PrimaryDomain}} {{end}}
    diff --git a/internal/api/ui/login/static/templates/external_register_overview.html b/internal/api/ui/login/static/templates/external_register_overview.html index 3ee0690f78..1779c5adee 100644 --- a/internal/api/ui/login/static/templates/external_register_overview.html +++ b/internal/api/ui/login/static/templates/external_register_overview.html @@ -39,7 +39,7 @@
    - {{if .ShowUsername}} + {{if .ShowUsernameSuffix}} @{{.PrimaryDomain}} {{end}}
    diff --git a/internal/api/ui/login/static/templates/register.html b/internal/api/ui/login/static/templates/register.html index 0c709aa34f..08280b2b35 100644 --- a/internal/api/ui/login/static/templates/register.html +++ b/internal/api/ui/login/static/templates/register.html @@ -42,7 +42,7 @@
    - {{if .ShowUsername}} + {{if .ShowUsernameSuffix}} @{{.PrimaryDomain}} {{end}}
    From 558820f2712113f7c96937131f7591919b59876e Mon Sep 17 00:00:00 2001 From: mffap Date: Tue, 2 Aug 2022 20:21:57 +0200 Subject: [PATCH 068/116] chore(docs): update links to status page (#4100) * remove status from footer * update status link * status to zitadel.com --- docs/docs/legal/support-services.md | 2 +- docs/docusaurus.config.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/legal/support-services.md b/docs/docs/legal/support-services.md index 25a700d2d5..ce9d37e56a 100644 --- a/docs/docs/legal/support-services.md +++ b/docs/docs/legal/support-services.md @@ -72,7 +72,7 @@ eMail Support | support@zitadel.com Chat Support | Private chat channel between CAOS and Customer that is opened when Subscription becomes active Phone Support | +41 43 215 27 34 -- ZITADEL Cloud system status, incidents and maintenance windows will be communicated via [our status page](https://status.zitadel.ch). +- ZITADEL Cloud system status, incidents and maintenance windows will be communicated via [our status page](https://status.zitadel.com). - Questions regarding pricing, billing, and invoicing of our services should be addressed to billing@zitadel.com - Security related questions and incidents can also be directly addressed to security@zitadel.com diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index de3b99ac85..ef9600cb5d 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -147,7 +147,7 @@ module.exports = { }, { label: "Status", - href: "https://status.zitadel.ch/", + href: "https://status.zitadel.com/", } ], }, From e3746624da3976c6af8082c054892f9b074f3ed3 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 3 Aug 2022 08:06:46 +0200 Subject: [PATCH 069/116] docs(architecture): extend the software and deployment architecture (#4081) * docs: eventstore wordings * docs: software and deployment architecture * docs: typos and links * fix toc * Apply suggestions from code review Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> --- docs/docs/concepts/architecture.md | 76 --------- docs/docs/concepts/architecture/software.md | 147 ++++++++++++++++++ docs/docs/concepts/architecture/solution.md | 59 +++++++ .../{zitadel.md => implementation.md} | 2 +- docs/docs/concepts/eventstore/overview.md | 13 +- docs/sidebars.js | 12 +- 6 files changed, 224 insertions(+), 85 deletions(-) delete mode 100644 docs/docs/concepts/architecture.md create mode 100644 docs/docs/concepts/architecture/software.md create mode 100644 docs/docs/concepts/architecture/solution.md rename docs/docs/concepts/eventstore/{zitadel.md => implementation.md} (99%) diff --git a/docs/docs/concepts/architecture.md b/docs/docs/concepts/architecture.md deleted file mode 100644 index de617ebbaa..0000000000 --- a/docs/docs/concepts/architecture.md +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: Architecture ---- - -## Software Architecture - -**ZITADEL** is built with two essential patterns. Eventsourcing and CQRS. Due to the nature of eventsourcing **ZITADEL** provides the unique capability to generate a strong audit trail of ALL the things that happen to its resources, without compromising on storage cost or audit trail length. - -The combination with CQRS makes **ZITADEL** eventual consistent which, from our perspective is a great benefit. It allows us to build a SOR (Source of Records) which is the one single point of truth for all computed states. The SOR needs to be transaction safe to make sure all operations are in order. - -Each **ZITADEL** contains all components of the IAM, from serving as API, rendering / serving GUI's, background processing of events and task or being a GITOPS style operator. This AiO (All in One) approach makes scaling from a single machine to a multi region (multi cluster) seamless. - -![Software Architecture](/img/zitadel_software_architecture.png) - -### Component Command Side - -The **command handler** receives all operations who alter a IAM resource. For example if a user changes his name. -This information is then passed to **command validation** for processing of the business logic, for example to make sure that the user actually can change his name. If this succeeds all generated events are inserted into the eventstore when required all within one transaction. - -- Transaction safety is a MUST -- Availability MUST be high - -> When we classify this with the CAP theorem we would choose **Consistent** and **Available** but leave **Partition Tolerance** aside. - -### Component Spooler - -The spoolers job is it to keep a query view up-to-date or at least look that it does not have a too big lag behind the eventstore. -Each query view has its own spooler who is responsible to look for the events who are relevant to generate the query view. It does this by triggering the relevant projection. -Spoolers are especially necessary where someone can query datasets instead of single ids. - -> The query side has the option to dynamically check the eventstore for newer events on a certain id, see query side for more information -> Each view can have exactly one spooler, but spoolers are dynamically leader elected, so even if a spooler crashes it will be replaced in a short amount of time. - -### Component Query Side - -The query handler receives all read relevant operations. These can either be query or simple `getById` calls. -When receiving a query it will proceed by passing this to the repository which will call the database and return the dataset. -If a request calls for a specific id the call will, most of the times, be revalidated against the eventstore. This is achieved by triggering the projection to make sure that the last sequence of a id is loaded into the query view. - -- Easy to query -- Short response times (80%of queries below 100ms on the api server) -- Availability MUST be high - -> When we classify this with the CAP theorem we would choose **Available** and **Performance** but leave **Consistent** aside -> TODO explain more here - -### Component HTTP Server - -The http server is responsible for serving the management GUI called **ZITADEL Console**, serving the static assets and as well rendering server side html (login, password-reset, verification, ...) - -## Cluster Architecture - -A **ZITADEL Cluster** is a highly available IAM system with each component critical for serving traffic laid out at least three times. -As our storage (CockroachDB) relies on Raft it is also necessary to always utilizes odd numbers to address for "split brain" scenarios. -Hence our reference design is to have three application nodes and three Storage Nodes. - -If you deploy **ZITADEL** with our GITOPS Tooling [**ORBOS**](https://github.com/caos/orbos) we create 7 seven nodes. One management, three application and three storage nodes. - -> You can horizontaly scale zitadel, but we recommend to use multiple cluster instead to reduce the blast radius from impacts to a single cluster - -![Cluster Architecture](/img/zitadel_cluster_architecture.png) - -## Multi Cluster Architecture - -To scale **ZITADEL** is recommend to create smaller clusters, see cluster architecture and then create a fabric which interconnects the database. -In our reference design we recommend to create a cluster per cloud provider or availability zone and to group them into regions. - -For example, you can run three cluster for the region switzerland. On with GCE, one with cloudscale and one with inventx. - -With this design even the outage of a whole data-center would have a minimal impact as all data is still available at the other two locations. - -> Cockroach needs to be configured with locality flags to proper distribute data over the zones -> East - West connectivity for the database can be solved at you discretion. We recommend to expose the public ips and run traffic directly without any VPN or Mesh -> Use MTLS in combination with IP Allowlist in the firewalls! - -![Multi-Cluster Architecture](/img/zitadel_multicluster_architecture.png) diff --git a/docs/docs/concepts/architecture/software.md b/docs/docs/concepts/architecture/software.md new file mode 100644 index 0000000000..0fc5d04e6c --- /dev/null +++ b/docs/docs/concepts/architecture/software.md @@ -0,0 +1,147 @@ +--- +title: Software +--- + +ZITADEL is built with two essential patterns. Event Sourcing (ES) and Command and Query Responsibility Segregation (CQRS). +Due to the nature of Event Sourcing ZITADEL provides the unique capability to generate a strong audit trail of ALL the things that happen to its resources, without compromising on storage cost or audit trail length. + +The combination of ES and CQRS makes ZITADEL eventual consistent which, from our perspective, is a great benefit in many ways. +It allows us to build a Source of Records (SOR) which is the one single point of truth for all computed states. +The SOR needs to be transaction safe to make sure all operations are in order. +You can read more about this in our [ES documentation](../eventstore/overview). + +Each ZITADEL binary contains all components necessary to serve traffic +From serving the API, rendering GUI's, background processing of events and task. +This All in One (AiO) approach makes operating ZITADEL simple. + +## Software Structure + +ZITADELs software architecture is built around multiple components at different levels. +This chapter should give you an idea of the components as well as the different layers. + +![Software Architecture](/img/zitadel_software_architecture.png) + +### Service Layer + +The service layer includes all components who are potentially exposed to consumers of ZITADEL. + +#### HTTP Server + +The http server is responsible for the following functions: + +- serving the management GUI called ZITADEL Console +- serving the static assets +- rendering server side html (login, password-reset, verification, ...) + +#### API Server + +The API layer consist of the multiple APIs provided by ZITADEL. Each serves a dedicated purpose. +All APIs of ZITADEL are always available as gRCP, gRPC-web and REST service. +The only exception is the [OpenID Connect & OAuth](/docs/apis/openidoauth/endpoints) and [Asset API](/docs/apis/introduction#assets) due their unique nature. + +- [OpenID Connect & OAuth](/docs/apis/openidoauth/endpoints) - allows to request authentication and authorization of ZITADEL +- [Authentication API](/docs/apis/introduction#authentication) - allow a user to do operation in its own context +- [Management API](/docs/apis/introduction#management) - allows an admin or machine to manage the ZITADEL resources on an organization level +- [Administration API](/docs/apis/introduction#administration) - allows an admin or machine to manage the ZITADEL resources on an instance level +- [System API](/docs/apis/introduction#system) - allows to create and change new ZITADEL instances +- [Asset API](/docs/apis/introduction#assets) - is used to upload and download static assets + +### Core Layer + +#### Commands + +The Command Side has some unique requirements, these include: + +- Transaction safety is a MUST +- Availability MUST be high + +> When we classify this with the CAP theorem we would choose Consistent and Available but leave Partition Tolerance aside. + +##### Command Handler + +The command handler receives all operations who alter a resource managed by ZITADEL. +For example if a user changes his name. The API Layer will pass the instruction received through the API call to the command handler for further processing. +The command handler is then responsible of creating the necessary commands. +After creating the commands the command hand them down to the command validation. + +##### Command Validation + +With the received commands the command validation will execute the business logic to verify if a certain action can take place. +For example if the user really can change his name is verified in the command validation. +If this succeeds the command validation will create the events that reflect the changes. +These events now are being handed down to the storage layer for storage. + +#### Events + +ZITADEL handles events in two ways. +Events that should be processed in near real time are processed by a in memory pub sub system. +Some events hand be handled in background processing for which the spooler is responsible. + +##### Pub Sub + +The pub sub system job is it to keep a query view up-to-date by feeding a constant stream of events to the projections. +Our pub sub system built into ZITADEL works by placing events into an in memory queue for its subscribers. +There is no need for specific guarantees from the pub sub system. Since the SOR is the ES everything can be retried without loss of data. +In case of an error an event can be reapplied in two ways: + +- The next event might trigger the projection to apply the whole difference +- The spooler takes care of background cleanups in a scheduled fashion + +> The decision to incorporate an internal pub sub system with no need for specific guarantees is a deliberate choice. +> We believe that the toll of operating an additional external service like a MQ system negatively affects the ease of use of ZITADEL as well as its availability guarantees. +> One of the authors of ZITADEL did his thesis to test this approach against established MQ systems. + +##### Spooler + +The spoolers job is it to keep a query view up-to-date or at least look that it does not have a too big lag behind the Event Store. +Each query view has its own spooler who is responsible to look for the events who are relevant to generate the query view. It does this by triggering the relevant projection. +Spoolers are especially necessary where someone can query datasets instead of single ids. + +> Each view can have exactly one spooler, but spoolers are dynamically leader elected, so even if a spooler crashes it will be replaced in a short amount of time. + +#### Projections + +Projections are responsible of normalizing data for the query side or for analytical purpose. +They generally work by being invoked either through a scheduled spooler or the pub sub subscription. + +When they receive events they will create their normalized object and then store this into the query view and its storage layer. + +#### Queries + +The query side is responsible for answering read requests on data. +It has some unique requirements, which include: + +- It needs to be easy to query +- Short response times are a MUST (80%of queries below 100ms on the api server) +- Availability MUST be high, even during high loads +- The query view MUST be able to be persisted for most request + +> When we classify this with the CAP theorem we would choose **Available** and **Performance** but leave **Consistent** aside + +##### Query Handler + +The query handler receives all read relevant operations. These can either be query or simple `getById` calls. +When receiving a query it will proceed by passing this to the repository which will call the database and return the dataset. +If a request calls for a specific id the call will, most of the times, be revalidated against the Event Store. +This is achieved by triggering the projection to make sure that the last sequence of a id is loaded into the query view. + +> The query side has the option to dynamically check the Event Store for newer events on a certain id to make sure for consistent responses without delay. + +##### Query View + +The query view is responsible to query the storage layer with the request from the command handler. +It is also responsible to execute authorization checks. To check if a request is valid and can be answered. + +### Storage Layer + +As ZITADEL itself is built completely stateless only the storage layer is needed for storing things. +The storage layer of ZITADEL is responsible for multiple things. For example: + +- Distributing data for high availability over multiple server, data centers or regions +- Guarantee strong consistency for the command side +- Guarantee good query performance for the query side +- Ability to store data in specific data centers or regions for data residency (This is only supported with CockroachDB Cloud or Enterprise) +- Backup and restore operation for disaster recovery purpose + +ZITADEL currently supports CockroachDB as first choice of storage due to its perfect match for ZITADELs needs. +Postgresql support is work in progress and should be available soon as well. diff --git a/docs/docs/concepts/architecture/solution.md b/docs/docs/concepts/architecture/solution.md new file mode 100644 index 0000000000..c6b0bc18c8 --- /dev/null +++ b/docs/docs/concepts/architecture/solution.md @@ -0,0 +1,59 @@ +--- +title: Deployment +--- + +## High Availability + +ZITADEL can be run as high available system with ease. +Since the storage layer takes the heavy lifting of making sure that data in synched across, server, data centers or regions. + +Depending on your projects needs our general recommendation is to run ZITADEL and ZITADELs storage layer across multiple availability zones in the same region or if you need higher guarantees run the storage layer across multiple regions. +Consult the [CockroachDB documentation](https://www.cockroachlabs.com/docs/) for more details or use the [CockroachCloud Service](https://www.cockroachlabs.com/docs/cockroachcloud/create-an-account.html) + +> Soon ZITADEL will also support Postgres as database. + +## Scalability + +ZITADEL can be scaled in a linear fashion in multiple dimensions. + +- Vertical on your compute infrastructure +- Horizontal in a region +- Horizontal in multiple regions + +Our customers can reuse the same already known binary or container and scale it across multiple server, data center and regions. +To distribute traffic an already existing proxy infrastructure can be reused. +Simply steer traffic by path, hostname, IP address or any other metadata to the ZITADEL of your choice. + +> To improve your service quality we recommend steering traffic by path to different ZITADEL deployments +> Feel free to [contact us](https://zitadel.com/contact/) for details + +## Example Deployment Architecture + +### Single Cluster / Region + +A ZITADEL Cluster is a highly available IAM system with each component critical for serving traffic laid out at least three times. +As our storage layer (CockroachDB) relies on Raft, it is recommended to operate odd numbers of storage nodes to prevent "split brain" problems. +Hence our reference design for Kubernetes is to have three application nodes and three storage nodes. + +> If you are using a serverless offering like Google Cloud Run you can scale ZITADEL from 0 to 1000 Pods without the need of deploying the node across multiple availability zones. + +:::info +CockroachDB needs to be configured with locality flags to proper distribute data over the zones +::: + +![Cluster Architecture](/img/zitadel_cluster_architecture.png) + +### Multi Cluster / Region + +To scale ZITADEL across regions it is recommend to create at least three cluster. +We recommend to run an odd number of storage clusters (storage nodes per data center) to compensate for "split brain" scenarios. +In our reference design we recommend to create one cluster per region or cloud provider with a minimum of three regions. + +With this design even the outage of a whole data-center would have a minimal impact as all data is still available at the other two locations. + +:::info +CockroachDB needs to be configured with locality flags to proper distribute data over the zones +::: + +![Multi-Cluster Architecture](/img/zitadel_multicluster_architecture.png) + diff --git a/docs/docs/concepts/eventstore/zitadel.md b/docs/docs/concepts/eventstore/implementation.md similarity index 99% rename from docs/docs/concepts/eventstore/zitadel.md rename to docs/docs/concepts/eventstore/implementation.md index c89e7a7e03..54e9c713fe 100644 --- a/docs/docs/concepts/eventstore/zitadel.md +++ b/docs/docs/concepts/eventstore/implementation.md @@ -1,5 +1,5 @@ --- -title: Implementation in ZITADEL +title: Implementation --- This documentation gives you an insight into the structure of the ZITADEL database. diff --git a/docs/docs/concepts/eventstore/overview.md b/docs/docs/concepts/eventstore/overview.md index 8a7c9a22bd..a3e1719cb0 100644 --- a/docs/docs/concepts/eventstore/overview.md +++ b/docs/docs/concepts/eventstore/overview.md @@ -2,9 +2,9 @@ title: Overview --- -ZITADEL is built on the [event sourcing pattern](../architecture), where changes are stored as events in an eventstore. +ZITADEL is built on the [Event Sourcing pattern](../architecture/software), where changes are stored as events in an Event Store. -## What is an eventstore? +## What is an Event Store? Traditionally, data is stored in relations as a state @@ -12,7 +12,7 @@ Traditionally, data is stored in relations as a state - If a relation changes, the requests need to change as well - That is valid for actual, as well as for historical data -An Eventstore on the other hand stores events, meaning every change that happens to any piece of data relates to an event. +An Event Store on the other hand stores events, meaning every change that happens to any piece of data relates to an event. The data is stored as events in an append-only log. - Think of it as a ledger that gets new entries over time, accumulative @@ -28,7 +28,7 @@ The data is stored as events in an append-only log. ## Definitions -Eventsourcing has some specific terms that are often used in our documentation. To understand how ZITADEL works it is important to understand this key definitions. +Event Sourcing has some specific terms that are often used in our documentation. To understand how ZITADEL works it is important to understand this key definitions. ### Events @@ -43,9 +43,10 @@ Possible Events: ### Aggregate -An aggregate consist of multiple events. All events together in will lead to the current state of the aggregate. -The aggregate can be compared with an object or a resources. Aggregates define transaction boundaries. +An aggregate consist of multiple events. All events together from an aggregate will lead to the current state of the aggregate. +The aggregate can be compared with an object or a resources. An aggregates should be used as transaction boundary. ### Projections Projections contain the computed objects, that will be used on the query side for all the requests. +Think of this as a normalized view of specific events of one or multiple aggregates. diff --git a/docs/sidebars.js b/docs/sidebars.js index e2c0612eec..0288ce6b69 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -222,10 +222,18 @@ module.exports = { collapsed: false, items: [ "concepts/eventstore/overview", - "concepts/eventstore/zitadel", + "concepts/eventstore/implementation", + ], + }, + { + type: "category", + label: "Architecture", + collapsed: false, + items: [ + "concepts/architecture/software", + "concepts/architecture/solution", ], }, - "concepts/architecture", { type: "category", label: "Structure", From b4d948cc757426ece550e73eee37fa7286e53a41 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+hifabienne@users.noreply.github.com> Date: Wed, 3 Aug 2022 09:11:27 +0200 Subject: [PATCH 070/116] docs: remove work in progress from token exchange (#4099) * docs: remove work in progress from token exchange * docs: broken links * docs: broken links --- README.md | 1 + docs/docs/apis/openidoauth/grant-types.md | 2 +- docs/docs/concepts/introduction.mdx | 5 ++--- docs/src/pages/index.js | 8 +------- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ca53790867..82f6b64791 100644 --- a/README.md +++ b/README.md @@ -152,3 +152,4 @@ See the policy [here](./SECURITY.md) See the exact licensing terms [here](./LICENSE) Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. + diff --git a/docs/docs/apis/openidoauth/grant-types.md b/docs/docs/apis/openidoauth/grant-types.md index ddf7921eb2..4e435455ec 100644 --- a/docs/docs/apis/openidoauth/grant-types.md +++ b/docs/docs/apis/openidoauth/grant-types.md @@ -15,7 +15,7 @@ For a list of supported or unsupported `Grant Types` please have a look at the t | Refresh Token | yes | | Resource Owner Password Credentials | no | | Security Assertion Markup Language (SAML) 2.0 Profile | no | -| Token Exchange | work in progress | +| Token Exchange | no | ## Authorization Code diff --git a/docs/docs/concepts/introduction.mdx b/docs/docs/concepts/introduction.mdx index 91b1414032..2a1ee79a64 100644 --- a/docs/docs/concepts/introduction.mdx +++ b/docs/docs/concepts/introduction.mdx @@ -13,8 +13,7 @@ Please be reminded that ZITADEL is open source — and so is the documentation. - - + @@ -40,6 +39,6 @@ Please be reminded that ZITADEL is open source — and so is the documentation. - + diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 6fbc5ae755..e8ea377810 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -171,13 +171,7 @@ const features = [ description="Design and engineering principles" /> - Date: Wed, 3 Aug 2022 09:25:25 +0200 Subject: [PATCH 071/116] fix: restrict domain names to alphanumeric characters (#4104) * fix: restrict domain names to alphanumeric characters * improve error message --- internal/command/instance_domain.go | 8 +++++ internal/command/instance_domain_test.go | 45 ++++++++++++++++++++++++ internal/static/i18n/de.yaml | 1 + internal/static/i18n/en.yaml | 1 + internal/static/i18n/fr.yaml | 1 + internal/static/i18n/it.yaml | 1 + 6 files changed, 57 insertions(+) diff --git a/internal/command/instance_domain.go b/internal/command/instance_domain.go index a0db372c1e..29360f6d8c 100644 --- a/internal/command/instance_domain.go +++ b/internal/command/instance_domain.go @@ -2,6 +2,7 @@ package command import ( "context" + "regexp" "strings" "github.com/zitadel/zitadel/internal/api/authz" @@ -14,6 +15,10 @@ import ( "github.com/zitadel/zitadel/internal/repository/project" ) +var ( + allowDomainRunes = regexp.MustCompile("^[a-zA-Z0-9\\.\\-]+$") +) + func (c *Commands) AddInstanceDomain(ctx context.Context, instanceDomain string) (*domain.ObjectDetails, error) { instanceAgg := instance.NewAggregate(authz.GetInstance(ctx).InstanceID()) validation := c.addInstanceDomain(instanceAgg, instanceDomain, false) @@ -84,6 +89,9 @@ func (c *Commands) addInstanceDomain(a *instance.Aggregate, instanceDomain strin if instanceDomain = strings.TrimSpace(instanceDomain); instanceDomain == "" { return nil, errors.ThrowInvalidArgument(nil, "INST-28nlD", "Errors.Invalid.Argument") } + if !allowDomainRunes.MatchString(instanceDomain) { + return nil, errors.ThrowInvalidArgument(nil, "INST-S3v3w", "Errors.Instance.Domain.InvalidCharacter") + } return func(ctx context.Context, filter preparation.FilterToQueryReducer) ([]eventstore.Command, error) { domainWriteModel, err := getInstanceDomainWriteModel(ctx, filter, instanceDomain) if err != nil { diff --git a/internal/command/instance_domain_test.go b/internal/command/instance_domain_test.go index e2e5ecabb7..6cd03a28ef 100644 --- a/internal/command/instance_domain_test.go +++ b/internal/command/instance_domain_test.go @@ -52,6 +52,51 @@ func TestCommandSide_AddInstanceDomain(t *testing.T) { err: caos_errs.IsErrorInvalidArgument, }, }, + { + name: "invalid domain ', error", + fields: fields{ + eventstore: eventstoreExpect( + t, + ), + }, + args: args{ + ctx: context.Background(), + domain: "hodor's-org.localhost", + }, + res: res{ + err: caos_errs.IsErrorInvalidArgument, + }, + }, + { + name: "invalid domain umlaut, error", + fields: fields{ + eventstore: eventstoreExpect( + t, + ), + }, + args: args{ + ctx: context.Background(), + domain: "bücher.ch", + }, + res: res{ + err: caos_errs.IsErrorInvalidArgument, + }, + }, + { + name: "invalid domain other unicode, error", + fields: fields{ + eventstore: eventstoreExpect( + t, + ), + }, + args: args{ + ctx: context.Background(), + domain: "🦒.ch", + }, + res: res{ + err: caos_errs.IsErrorInvalidArgument, + }, + }, { name: "domain already exists, precondition error", fields: fields{ diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index e25aed47e9..d9a8eb7749 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -172,6 +172,7 @@ Errors: IdpIsNotOIDC: IDP Konfiguration ist nicht vom Typ OIDC Domain: AlreadyExists: Domäne existiert bereits + InvalidCharacter: Nur alphanumerische Zeichen, . und - sind für eine Domäne erlaubt IDP: InvalidSearchQuery: Ungültiger Suchparameter LoginPolicy: diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index ebd1482ddb..01a0bac691 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -172,6 +172,7 @@ Errors: IdpIsNotOIDC: IDP configuration is not of type oidc Domain: AlreadyExists: Domain already exists + InvalidCharacter: Only alphanumeric characters, . and - are allowed for a domain IDP: InvalidSearchQuery: Invalid search query LoginPolicy: diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml index 68684e83d8..efab49a8f6 100644 --- a/internal/static/i18n/fr.yaml +++ b/internal/static/i18n/fr.yaml @@ -172,6 +172,7 @@ Errors: IdpIsNotOIDC: La configuration IDP n'est pas de type oidc Domain: AlreadyExists: Le domaine existe déjà + InvalidCharacter: Seuls les caractères alphanumériques, . et - sont autorisés pour un domaine IDP: InvalidSearchQuery: Paramètre de recherche non valide LoginPolicy: diff --git a/internal/static/i18n/it.yaml b/internal/static/i18n/it.yaml index fdd770d103..b8223a2494 100644 --- a/internal/static/i18n/it.yaml +++ b/internal/static/i18n/it.yaml @@ -174,6 +174,7 @@ Errors: AlreadyExists: Il dominio già esistente IDP: InvalidSearchQuery: Parametro di ricerca non valido + InvalidCharacter: Per un dominio sono ammessi solo caratteri alfanumerici, . e - LoginPolicy: NotFound: Impostazioni di accesso non trovati Invalid: Impostazioni di accesso non sono validi From dba0fdcf7b46afbea9b840ce3d1ccbb64d3dbfa0 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 3 Aug 2022 09:50:23 +0200 Subject: [PATCH 072/116] fix: handle user metadata projection correctly (#4098) --- internal/query/projection/user_metadata.go | 4 +-- .../query/projection/user_metadata_test.go | 8 +++--- internal/query/user_metadata_test.go | 28 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/internal/query/projection/user_metadata.go b/internal/query/projection/user_metadata.go index 95fcffb8a9..593006dcd3 100644 --- a/internal/query/projection/user_metadata.go +++ b/internal/query/projection/user_metadata.go @@ -11,7 +11,7 @@ import ( ) const ( - UserMetadataProjectionTable = "projections.user_metadata" + UserMetadataProjectionTable = "projections.user_metadata2" UserMetadataColumnUserID = "user_id" UserMetadataColumnCreationDate = "creation_date" @@ -42,7 +42,7 @@ func newUserMetadataProjection(ctx context.Context, config crdb.StatementHandler crdb.NewColumn(UserMetadataColumnKey, crdb.ColumnTypeText), crdb.NewColumn(UserMetadataColumnValue, crdb.ColumnTypeBytes, crdb.Nullable()), }, - crdb.NewPrimaryKey(UserMetadataColumnInstanceID, UserMetadataColumnUserID), + crdb.NewPrimaryKey(UserMetadataColumnInstanceID, UserMetadataColumnUserID, UserMetadataColumnKey), crdb.WithIndex(crdb.NewIndex("ro_idx", []string{UserGrantResourceOwner})), ), ) diff --git a/internal/query/projection/user_metadata_test.go b/internal/query/projection/user_metadata_test.go index 8871424976..eda6e37495 100644 --- a/internal/query/projection/user_metadata_test.go +++ b/internal/query/projection/user_metadata_test.go @@ -41,7 +41,7 @@ func TestUserMetadataProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "UPSERT INTO projections.user_metadata (user_id, resource_owner, instance_id, creation_date, change_date, sequence, key, value) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", + expectedStmt: "UPSERT INTO projections.user_metadata2 (user_id, resource_owner, instance_id, creation_date, change_date, sequence, key, value) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", expectedArgs: []interface{}{ "agg-id", "ro-id", @@ -77,7 +77,7 @@ func TestUserMetadataProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.user_metadata WHERE (user_id = $1) AND (key = $2)", + expectedStmt: "DELETE FROM projections.user_metadata2 WHERE (user_id = $1) AND (key = $2)", expectedArgs: []interface{}{ "agg-id", "key", @@ -105,7 +105,7 @@ func TestUserMetadataProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.user_metadata WHERE (user_id = $1)", + expectedStmt: "DELETE FROM projections.user_metadata2 WHERE (user_id = $1)", expectedArgs: []interface{}{ "agg-id", }, @@ -132,7 +132,7 @@ func TestUserMetadataProjection_reduces(t *testing.T) { executer: &testExecuter{ executions: []execution{ { - expectedStmt: "DELETE FROM projections.user_metadata WHERE (user_id = $1)", + expectedStmt: "DELETE FROM projections.user_metadata2 WHERE (user_id = $1)", expectedArgs: []interface{}{ "agg-id", }, diff --git a/internal/query/user_metadata_test.go b/internal/query/user_metadata_test.go index 0f083a335e..c56731f0c9 100644 --- a/internal/query/user_metadata_test.go +++ b/internal/query/user_metadata_test.go @@ -12,13 +12,13 @@ import ( ) var ( - userMetadataQuery = `SELECT projections.user_metadata.creation_date,` + - ` projections.user_metadata.change_date,` + - ` projections.user_metadata.resource_owner,` + - ` projections.user_metadata.sequence,` + - ` projections.user_metadata.key,` + - ` projections.user_metadata.value` + - ` FROM projections.user_metadata` + userMetadataQuery = `SELECT projections.user_metadata2.creation_date,` + + ` projections.user_metadata2.change_date,` + + ` projections.user_metadata2.resource_owner,` + + ` projections.user_metadata2.sequence,` + + ` projections.user_metadata2.key,` + + ` projections.user_metadata2.value` + + ` FROM projections.user_metadata2` userMetadataCols = []string{ "creation_date", "change_date", @@ -27,14 +27,14 @@ var ( "key", "value", } - userMetadataListQuery = `SELECT projections.user_metadata.creation_date,` + - ` projections.user_metadata.change_date,` + - ` projections.user_metadata.resource_owner,` + - ` projections.user_metadata.sequence,` + - ` projections.user_metadata.key,` + - ` projections.user_metadata.value,` + + userMetadataListQuery = `SELECT projections.user_metadata2.creation_date,` + + ` projections.user_metadata2.change_date,` + + ` projections.user_metadata2.resource_owner,` + + ` projections.user_metadata2.sequence,` + + ` projections.user_metadata2.key,` + + ` projections.user_metadata2.value,` + ` COUNT(*) OVER ()` + - ` FROM projections.user_metadata` + ` FROM projections.user_metadata2` userMetadataListCols = []string{ "creation_date", "change_date", From ef4d4cadfdfac11316fe7fc7f3e5ac8b1ca0a9d2 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Wed, 3 Aug 2022 10:18:06 +0200 Subject: [PATCH 073/116] docs(azuread): guide to use azuread as IdP for ZITADEL (#4101) --- docs/docs/guides/integrate/azuread.md | 89 ++++++++++++++++++ .../guides/integrate/identity-brokering.md | 2 +- docs/sidebars.js | 1 + docs/static/img/guides/azure_app.png | Bin 0 -> 156956 bytes .../static/img/guides/azure_app_redirects.png | Bin 0 -> 129721 bytes docs/static/img/guides/azure_app_register.png | Bin 0 -> 87391 bytes docs/static/img/guides/azure_app_secrets.png | Bin 0 -> 99738 bytes docs/static/img/guides/azure_app_token.png | Bin 0 -> 139542 bytes docs/static/img/guides/azure_login.png | Bin 0 -> 454223 bytes .../img/guides/azure_zitadel_activate.png | Bin 0 -> 22990 bytes .../img/guides/azure_zitadel_active.png | Bin 0 -> 20760 bytes .../img/guides/azure_zitadel_button.png | Bin 0 -> 54602 bytes .../img/guides/azure_zitadel_settings.png | Bin 0 -> 122101 bytes 13 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 docs/docs/guides/integrate/azuread.md create mode 100644 docs/static/img/guides/azure_app.png create mode 100644 docs/static/img/guides/azure_app_redirects.png create mode 100644 docs/static/img/guides/azure_app_register.png create mode 100644 docs/static/img/guides/azure_app_secrets.png create mode 100644 docs/static/img/guides/azure_app_token.png create mode 100644 docs/static/img/guides/azure_login.png create mode 100644 docs/static/img/guides/azure_zitadel_activate.png create mode 100644 docs/static/img/guides/azure_zitadel_active.png create mode 100644 docs/static/img/guides/azure_zitadel_button.png create mode 100644 docs/static/img/guides/azure_zitadel_settings.png diff --git a/docs/docs/guides/integrate/azuread.md b/docs/docs/guides/integrate/azuread.md new file mode 100644 index 0000000000..889bb5a3da --- /dev/null +++ b/docs/docs/guides/integrate/azuread.md @@ -0,0 +1,89 @@ +--- +title: Connect with AzureAD +--- + +## AzureAD Tenant as Identity Provider for ZITADEL + +This guides shows you how to connect an AzureAD Tenant to ZITADEL. + +:::info +In ZITADEL you can connect an Identity Provider (IdP) like an AzureAD to your instance and provide it as default to all organizations or you can register the IdP to a specific organization only. This can also be done through your customers in a self-service fashion. +::: + +### Prerequisite + +You need to have access to an AzureAD Tenant. If you do not yet have one follow [this guide from Microsoft](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant) to create one for free. + +### AzureAD Configuration + +#### Create a new Application + +Browse to the [App registration menus create dialog](https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/CreateApplicationBlade/quickStartType~/null/isMSAApp~/false) to create a new app. + +![Create an Application](/img/guides/azure_app_register.png) + +:::info +Mare sure to select `web` as application type in the `Redirect URI (optional)` section. +You can leave the second field empty since we will change this in the next step. +::: + +![Create an Application](/img/guides/azure_app.png) + +#### Configure Redirect URIS + +For this to work you need to whitelist the redirect URIs from your ZITADEL Instance. +In this example our test instance has the domain `test-qcon0h.zitadel.cloud`. In this case we need to whitelist these two entries: + +- `https://test-qcon0h.zitadel.cloud/ui/login/register/externalidp/callback` +- `https://test-qcon0h.zitadel.cloud/ui/login/login/externalidp/callback` + +:::info +To adapt this for you setup just replace the domain +::: + +![Configure Redirect URIS](/img/guides/azure_app_redirects.png) + +#### Create Client Secret + +To allow your ZITADEL to communicate with the AzureAD you need to create a Secret + +![Create Client Secret](/img/guides/azure_app_secrets.png) + +:::info +Please save this for the later configuration of ZITADEL +::: + +#### Configure ID Token Claims + +![Configure ID Token Claims](/img/guides/azure_app_token.png) + +### ZITADEL Configuration + +#### Create IdP + +Use the values displayed on the AzureAD Application page in your ZITADEL IdP Settings. + +- You can find the `issuer` for ZITADEL of your AzureAD Tenant in the `Endpoints submenu` +- The `Client ID` of ZITADEL corresponds to the `Application (client) ID` +- The `Client Secret` was generated during the `Create Client Secret` step + +![Azure Application](/img/guides/azure_app.png) + +![Create IdP](/img/guides/azure_zitadel_settings.png) + +#### Activate IdP + +Once you created the IdP you need to activate it, to make it usable for your users. + +![Activate the AzureAD](/img/guides/azure_zitadel_activate.png) + +![Active AzureAD](/img/guides/azure_zitadel_active.png) + +### Test the setup + +To test the setup use a incognito mode and browse to your login page. +If you succeeded you should see a new button which should redirect you to your AzureAD Tenant. + +![AzureAD Button](/img/guides/azure_zitadel_button.png) + +![AzureAD Login](/img/guides/azure_login.png) diff --git a/docs/docs/guides/integrate/identity-brokering.md b/docs/docs/guides/integrate/identity-brokering.md index 3b0fca5bbe..2e8748a288 100644 --- a/docs/docs/guides/integrate/identity-brokering.md +++ b/docs/docs/guides/integrate/identity-brokering.md @@ -97,7 +97,7 @@ ZITADEL will show a set of identity providers by default. This configuration can An organization's login settings will be shown -- as soon as the user has entered the loginname and ZITADEL can identitfy to which organization he belongs; or +- as soon as the user has entered the loginname and ZITADEL can identify to which organization he belongs; or - by sending a primary domain scope. To get your own configuration you will have to send the [primary domain scope](../../apis/openidoauth/scopes#reserved-scopes) in your [authorization request](../../guides/integrate/login-users#auth-request) . The primary domain scope will restrict the login to your organization, so only users of your own organization will be able to login, also your branding and policies will trigger. diff --git a/docs/sidebars.js b/docs/sidebars.js index 0288ce6b69..c7a5361aea 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -119,6 +119,7 @@ module.exports = { "guides/integrate/access-zitadel-apis", "guides/integrate/authenticated-mongodb-charts", "guides/integrate/auth0", + "guides/integrate/azuread", "guides/integrate/gitlab-self-hosted", "guides/integrate/login-users", "guides/integrate/serviceusers", diff --git a/docs/static/img/guides/azure_app.png b/docs/static/img/guides/azure_app.png new file mode 100644 index 0000000000000000000000000000000000000000..a7188e6696e43ab38723230a781080e93e7fd574 GIT binary patch literal 156956 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�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

    q@$bNNxB*d`Si5YrJ8DHSu?VSp!&7ZGZC;dYMww zz~!C4N%7H?sV!UeQhAA9uFPY^%v(SvB?e>H8NZJF+pah)^ODv&wM8cj2;>Rfl`k*E zt+=SE3)u99L9zMwG&65f$#R|+`-29&WW;5(eCmA7s$DCXe#rbo^aY8^dsyKbByvz% zk=nQtW6x4xtPa)?Xw!&q$N{!1XRWQRGY16yb@EtLqp?)Fl1pU}3;9{RqHW(B=5WFC zWJFiI2Z`Bs#JBi`Ix*o{zjrpWX|sW3|M8(k7rY>R==!PjgkZ`Ci9ib15myv_(1==} zXK5-6p~?p?eM~=3B;+RGii}@O(55B22HxwbkOmnj4)*~MUmQ{WSx?9zQE}HdD&yV} zwGg1$?OG2|lL{2`CfIG$^iBJ$&wiuSQwUqE%YH~N0zVH^Exj@;#t6jp16b)D(Ffwbsfx*%n4I))j+Rr9tUq6N1@}NjqRDl{S2bU7M%B z(YLAw1S`Q%Tf=KYmUw4;<&7sxTVmtVI!z#S?OHvHg2Fqg(k(qO*BOzj?-zU71kq=j6F-a;o&MCu`6Um7?_q~?b?%WhSt1}oHg!WK8 zJl+^u&+^XKq`)e~LmSxK0PNLWm?VhRS-kI>xyx@Fq7l062%pQytjPVfbe5GoqJV}0 zbOy`m@*En3qa-pKNB3r2u9TmLWi}D!d?Yp|cM+#grInAV_Arq2xY&@}a;KZ}7L?wN zJ@!%s2VhyH;sK{J)_7EBeKYk6OXLR28VWZg4}gtAHhCfUm3{)B&?$6H-8{|Jkvn4&`l}m_;iCK0Y?(OZhJm42`3$am!>Aq^S z$bPYsK;*Tx18P|_5OCah*!l=V)`{C`-GNqO0f?gN9!s(APyd!eDm;%K9$MLvCHBts z+7hixULLRrxF=V7!L`TB%hy+*>#+2?wtPouixs2GR^?p3d`($~s^VC2h^hE^v|qBL-d>zslc5Bs={8$PJ9n#rubz@n7tqh$7F(rkw4U~XRx>pt^^2$6l7w2?(pIs-B(`fw`qwqRpw z5NT8EUUS$p%s8FY{7_H6{xggp<1@|(*ON+!KLsyRvIy62nG&{sknIgx z%n*gsfPO66vn6la!l}AEF0(oT`<=}pGcHj{gZZF~RMjy}9a`J&yl9U5l7@}O;z}f} z_+7e_A6z}Sr(q`l4rt^10ILFA86~>J)cJ_h@?IhDQkdNhYto=X8myC|*%?BW!4sg- z^zX;WcfD~*P^*K0=|@jDZv@KdGXur`@W8(Q9#ez6ytk}bYVUFN-fTw@af}yniQGm> zvyan`A)3~*8to95muFI&94JC=4*I%~^-oB|ub6Q@MY2m;Ph_Ike&_DplQ&OZ$+-q) ze%nG_7^!&FNQi=PQ@J7qi=td<0qUM+(YwQ<(>)Ta@r~qVT7>2-$pQj7fA}KvoZaO= zVjBPl{A>9mwC4oLmEal!;q; z?IRfZhB>_h;SJ!R56+;)#~S8&#zt)Sz%zP^?D;rdaWnruk7zYYoqa<5n@>X}1dbC` zbF%bwZ)>d9D!=^b+;Qdo2X=@$+oBHsI+P_<1A0oSl{gw;N*lwDvsAR!V6+Aa&yh3oywt<*h@E{gMktk6*P`e((Z7GP)`+o? z7>T*izS{DA+80qjYxT;;zvuh20&QQh0h^d=Su4T4FgJm8uS}c`n0SGZt_JPovv6mO z@{_6$nHbq{-4o;2bU)nV65wXk1N@d%kXR@H`4xRfIwDXHvr2#RwZ)2$8yf%hJC$K32dq!A6&?Gzl$vWlv zos+{03vQ(ye6enit81v2u_22f@6jjx*qD}5V(y{~8daWb@YZ_U^&oL6RU>@OJtLc` z3^#g1zMG9I6;e+4iw9z<&$2S z%=4sR{ zmhwY9mut8?K9xn|-KcUIT;{qLAWoJ1%SN$kRF8Q>oeJKP3Kc?P@xTMQ0mUwQ>9@5oS3u(R487Qg-4xb@TP+|8cN zpF^&BGIA>=g0PuI#-lCQ0z_A`R7v8^@A;$h1vZqHDr|{+0{uF3c4+Tw+p+gkkf~0O zm>3;|PuCmca~^H_@SG2XSie4?j@6W)Qx%*6{35M8PVcl(Y$KYlA*m9cE0 zFV?{2Sj&eakx7^D-s|?9zRrySwiJd?B^0nWD;;YXEtaHVu%vK31m9pV@Fm{eu5)%L z`|C`&p^w)0X#Oedcvp2$+P9RciHL3*I=w}GF_IgBe5<434U3RcshZx_>}j!E@qX=7n222GP?Jf0PDvek%p<;ayk%iY zMmg$V<&0Thx1SdPX(_wC)!1Z`<8E5enaI_7meSa$nxbHj=da?tvfc%|hC z&GcWmqjrQDOb!Q!V=iTeObuQo6slY{S&8i8x5Pqjbl2qWD(Og2N0+CYvFM{ zM${pji{S3?t{}@Ly2sFw=KF2^8=v13yL6?w?tyE-2{j%Lj{}rTZJ@%Yasi=WlavMn zP~@0Wm9(`&@$^HPS;v$ z=ANj3P`MX`Ao3Os*7;BKZvVXAS}n{9$Sx2-2t_#iw`6<^vCUw-rhgUv1y#e{e7*Q>FRM!XaOyqFSH7PEHrGd3F;f;^3o@>! z{SdQ31IeFX9jP2;CC``+8o|)_ae15S*F{%%4COrTi4B_i2u^-WXIQDjNza?2POfWy z2FkB~&zDRJw`+hlux&|#;F>I-%%O7GT1J#h$fZm^7n}3pK7SwV+I`xM*+*r3N0RJ`EfX|1yhiZOyvysS_WsElx_!;kkkh=Yd(o53~w z+%V=Y=(1+trr=s^jsX0g^QCq_B`%KT=z zvjICA1~HWZZy>;Z(|qUOL9R!d5S8)>7#iqO>AQ*WvQ5j;jJ`qgur>Ya8b}ArQ!}Ih zXu4;M72{xia@G@9gcTFBuIl!jVMXE z7~aNjm@c+@(vtkm;Tvh59-i6U{7O*r0Y!3jU^i>$#D*+lW3@zgAPVmAn;C0t4!Pl- zAUiOX%6g#T_8rh==O-4@{KbgHV#XG$vr=_-*Yzbe{j1-lv-;mGVM?dSJ9{w=-j7=a zMUg(dZr3~##NH5{S8tBF2fAE{$ukMp?EM9RkNtUpmlrdb{Gt9t{BCb^S}ftzO^>}@ z&Bg8Qstm(aLCqA$8)s}eCFQ|FYi+tKqMTNigVC?~mIMrb7_7(!x_#+;=(Xn*$CwL{ z)eRxP-a%ffP0ZvuU&)ka#2nO05cA@{CB!@VVXj_XeTN_qp0S$9__eK@!Fj-q9cSe+ zP54E7rC+}A?x;6~yR9dDQ6P`pyfH^+rXKHjz*=nJJdZ1cz39j}!+ z7oIhc>7e!zfhVw*bX%3aIw+jzDFW`Bpj!8`NiQPJB-r_sH|OF_2ibVujV9{iHwAmq zGOv0g1Rdxh$J`z2pqCsdt#w7PJ0L@v`*@LNJKCI!2Y@YV^n1mvmg?$D=4P;#zNA}6 zci3O@1n_fdo17q@@Q)m+(HPS~oTc5s>Grs^vuJ;635~b4cG883%BJa`X;x+#5a1Xg z*qV@9)#<$}I-3zkXizf+)g>tek*S{=gt*o5KIpYvTCb~onzph2M@>MIY_ z7~R2EYrp3xv6gMO^dZ)fq=20WlU!h|Wxd)cz_Cg<1z)MO1=K9Rp%Ydp=65j4wee$E z$nO!}2rMA8@czjwo`mj>07gr-l^AFXm$H_zxbKph1B3vU(Jwu;y7K9RVb^Pz#+O1}v`v^q zRZpp^$O}4+Zl(KBK3D_BUQKfaJ}cjRPB`PC^-`TN7fm-s&_2!mS`>M?tN8_SaBFvl zkm|Y1;bh^Xt5U18cG(xdQe+CdsD)#4k)K1-Ef77jS5$O6$x9=VJZiM+r}}&u4Ul&| ze!ozE4Mj{oYRdW8mCqyS9V(+4qKdZpEuBAiR zHhwciHASYkB$^Erp5BLw=6xt32RbEpH7G+eG5Ta&GmFaF(Cy`g3&{84s@o0{NX>=Z z_!Tw8-gKsL-hhWYjf3z2=<0)wt(87czl)fGvZ;beU9^n#Z%e4dKKz~*`!%^i)av=V zXHibNR+xQs|HVlS9I2juB+e`lRgwXgY+ARLfGJv3ArYw_>kDJVk4nH@$rqBOBHGY$ z^P6RQoUayMnbMGDiEm;jJ!Oz8U1f>~U`DM7qu-DdHl-)x=;nv1>3{6F%(CH9l-Fxk zN+f6b66UNsuYHrY!xz**Ni09G_|%w=xbY8cR=9w_oTPrnPg;cDHewBuMbH?sB>Nng z0I%E#5;opyq{>DjbHB_iv&^D@hV)93KyJA538_DrgAhAZv=z92n(EtS>I}N<0C6yf zQ5Qt0%CFJO_3HH~@N~~k9&a9^h1VA@e{q2g6~FvhSuEy+yl_p2?`T;I8jezbl3G=f z7An(QJ*4=Y&3xW_@K9!Y9=RRL!v*4K&}opYJjMeWQLd+l%?_$WBfK+JEr8**Q&(ei zh*x6i>ZVhoOP8%ArN3%BFP!@{_V$2NYC0OB?GsAY+qk~Tm^g+v=u-h(fDEIjm2}A! zkD#O|)W?RAMA8n>e0Y}7)kItuYh4f&1EuA`m#Th2(^EP^U6t^g`b$>mO*_apE4mIy z8$ELL$J&jo%SYZj5cM!RK;bnx)w53fxw-Ox?GXP zk98Z_EH*PWW2QaHxa1uHyX6 z)?xIfktxVcGqL$H#C+j-H$dL|50`lNne z_CZg|h{cw2)xV)CX%6*XZMlxiPi<4G!6>6oc5&b(W*GjnwZ8bvO$&kRR)`=7%5 zIVwGRd8y}fUrIu1z8GcCbifm=ypPD5!eX7`AOlY|$GPgXQR$NDzyUm!$aDSdJ-{sP$PMc#$t~tK1ZHCp4TpXxNI07$8+^d43`X922L! zF57xRb$83NUf>x5ry-c0U}G?n?+y8L=^Y`0;W5>6g=l#TAI9?!ci5o7B_%X01R-QA)R6GTj)4_!2{> zd`>RH9}SbWkGjM@t<~;kC0F;Pdvx~Ss?=v}Nde#19n9OlL@CJ(AC4O@?NcNznr7gp zig|2@R~Hf58*wZ_Jya~q?q*{1dlIs*ll35in2pqq-~5b|A9^qvGk2RW-8frhbNRJW z9rU(pQ3=THwRh4CcV5$u(1g6^{oXXae$MLWFmiR`^HZ`?@~e)qz{pA;m@6Pj@!WtU zIVR`dOg=+MDbAet-Uwo1nL*lb8pWb&yV9u2{XQ#m@fx$C;K@FV=$k503RFV{`eLQJ zruL2njGQS;mBvh$@dB@ifGU<|#8n9+u1r&(9-W;{wCFr%XQ46SbZ_+3oZc*D+}Bru zkYuymYMqLz3GV>22?@O>>i4+=r=N;ya<0}^R^5Iqm~Rk}>H&0LuXwOCfb;w$rp@pP zty_0b50ht=pU&yevB6j?g!pRtCR_FIUgr4*##LiyU~G{&_$}}9wLtRVGowq3AXN8v z7VzQQLHc|xLI-T`RPfq;bvp_W48Hq9%RV+D>Obww9<}~1(sxiGhN&A!tIi*WN~@hc zTt;jk&bS<{`o-23JbA4}@78aOEs-VfL?i)C&|k)kJDt$#e}#VII%rh*5C3m3QQ!r< z(o6H!_#Xi3!3Q}ns%xpPbPsOmb4ow*Vm{i|+e*415AH|&TKqLZ`Ch+;_rqDo9TWVe z`oN7xhSA@0gf9WQb=`nd(((@wms`P%F35Yge@oZ+^3hV~W5EXOLd;teL4OeJ>F8H{ zM-~S&uHKehto%6@e`9xN`!+EOl^R0jseDJ6M$kgii4fh{ChC_^dDUr>MC0M}S zq0mn^FZg-$_0OG;90* zz~FahELmk`Kg0g`MWZw6!n^B$U%hQ>92wq zEV2Lgh`)b!>olN;F65jM`8kjqFt>6)c|G9ScL3g66VCSD_7Nc1ev4_ErXY)$pK7(dYZGu0*$CwZu5{O(JVT<5zUlUnHb ztJk>QT!yFA!AKT%{qJhx zd!e(viNqP$?gA08M(xk*eOPn)^~@wXQ{TC*w7kh85GQ zj99=Y&(z`rG_oC?kNx)^E8oPq^TI7E=yO1WSIl;(>Mnh=5w7WSIl#4kHF{U{ywN2F zOZGx@pZRmL{u?RgHQa8pkVnEeuiGlOoI~D7-`|l=WSyAYXWKfGEQ6bDNXe5>JXGDw zRqS`klZjL#glNcG1xdJu3VHvfI{u?Xe*7DErP>%%OZ(cy6>PP$MBob4CsBm2l`S$qir@irt$+ z?~Q@uJRrF@BW30&pR&6!(n3r>^~i9gye8m~Y+=6xw&P#Hf1>7w()ae1Y%CM!$}y(xvPGxsH(6CKHrXgC*zdY5 zhpINm8G#IsN;N^rlhs0_icTX=Qc!Fa9AwD!?x^r&LMDIR=;~s_@#x z(yIuG1VG$><6t-Q)ebuQ^Of!gR$6?Ed!PBqZdy@O;CQw3y^Aztuvji@S)Ntjw$nfr zQv>%Sgw^IMuJDpg>3cy?u|vB1rdzVKy^h4h8}+c6knW|={r-(Fvaik7TvFFdgSgePUVEk`>I_VH2%-+N{B+L^hV0jq`o~ZJh)dB~_4# z$Q2uhI_oEuex1>&j2E95+b zV#EO4jvVjpui2%y;KMG9&rN7RQ(Uplgh8~bOx4P(wBFg8C!Mf66Y<9PdfW7wd3txe zhkbaWZp{*_%BzBlyNsOu+m;gTw2C8@}|!JAkanf zS7!+LgFC)uHZf4$JV~YLT84I3WfDKa3Y60OCFJN$tdv2;(vR0cl9j{q8OMoigrY z=($%Bq@MFq4v@}jgh=mfXPjoO%4|uRUxy;udhmizv)K3*h2<7sqL|YICu2>L$h^-O zG3FTHfCOWKTWs1edFne#R_fT3gCM+&)vqq=HfHYt19vTo`|jtMo>hS;o(iME5d`s{ z25*sI_f}hec4XYIAG(^9tr019B4uoHgtx*7_IQqZznuR>7}=grEQPGAvT@As)6@19 zIzSfx&82xeio1G>fM0Sb;Q+MNy~BrUG2>AwQDkHw|HY{m+~I=zmw-o7QoWj=b8ifX zcyC5qwT5*(70!sKE0@|ohjQPyP3&65%8fssC1(XQ&1Op56IN_!jL}8;WhnN_{zuy5 zL({2JsN>c|rBe1$`s0^)^aqd+Mj@X#T`nYjo&_7|wrr?DK?Qkzoo2;Sk6ajv%tp zcetqIgIg{gpXAk2e8}{jp1lA{0O)qtVst+CyF)$nRP7FERC!8TwdH329sWo2uUZvJ z>TkLvngl)SAaOM=)6`{I((3OK8^1pw+6^FR9YxaSJ*wS<;f$MZ+O_VX*HiL!i3sD* zQ++$NOE#;g=NoC_3y+p|Tz=5bqmVC#A8S@XRUEC)I5wgPPIiODvJ(Z%4F)8(b1M zc`nbp>eBpEW{gkys^0KW!F049<#+~SjMN8gR(7$^!N{-XRLySxZ_Gh)JMTxrUG`iw zul@FM)Hq#by?!=Beo&J6nq!K=FIgM&vy!vzsot(++>jZ{zb!||RjQRnn7aTsk%x#_wA98q>@ zmz899&ZV24f!ASZdQG$w7%i7T9ltU_dQLGWE0rQ6xf&*GEez2E@ngRD>z?c#3jzAw zmk?_Pi?Wai(qnq;V`Oh^K==(~Up>q@i_{U%FMub9dFUWM?~b4?*HKQi1#msXN_O~8 z6u`{N@d{qeg81ob#3Q3NGYtg(^YwSt~mqCKa;FVyh1Bak}dy|Ftx(Cf6O0&2#pqR}EHp$d;c;Je^7rjb3TWfowk znCh4T%_qLP7r_+=*ZIUoRnyieK5B1l#YD>zWZ02?KB>{f1WIrS z<;vsKz_^UQasW!{A{l)bZ=A8ifb?Bi%YQHb1E}lNKLDDc}N?|hkVb? zybf~)^TxNhj?LScRl6%KG}lz})pE{8$Fl#4yJ&s(IGj2hBUY)>qmWERa}iEr_y%U$ zFcQ;@Yz|R2wekz4z35-zS|a9wF5@z z9rDbF$Sx`b4=PVZ)8BAoy83$a`TCrlb|;)|RO`M##5iDC$JT7dl)YBg+&C^|Q-U4t zq}-*k>7!`u#`vA=n|^_6hBc1m-ZlR9^J zaVeK(=?5cIa9mmgdPPbMsYwB=AgiFGzDpYQVH3A;&_TkvQZv+SP4r9ZWtG;tHMFNN z)Eu`ukf!8Ld@w+ADyN~U=o{S=6bVhnQ|OFF2mTTI@>CHIep7}vSGUqzt?7xAfnHm= zbpsYfpFCmDOG5~EZLKd8om3rgS`NEtN+%kYNon{^B(L;^S#K5QNtwqxGa7=HrN2z5 z=>rUsonPOL%_g~?Z5#$2N9B-MQ+%;T8QhZ&xOm&S`AeTl-O)bjt8jZIz$9fI158rx zT=`zkZ_jTZdaV}AN~6kQVWk>0z70S9X(@hcs2+efWWuJ)zt3PAMOdDYYmeb;@3yfc z>a7HRxXRTP#K7bMiN$SnE^fbF=9hn7M#^!R2%wK_q;#8*g(&V(Xnw2@9~|7d))Qcs zr>rPjQ7FSM%^KHHq!eC3fQ=Mm4ib)Yq=t)$x?0U+SDNNGtDu)0`EU0Zgrj_T%Jgs> zR;`_hwxhZhipIjN;Q)O?BQmxsOtWv#42}BbU!%eY9F|SH6*!M~M=C}SrfCU9maV*% zi$Lw<)bEUKXn#8F%aJEyV|uZ*X+Pk2Y+_3&DCg3T4u=4siDs!$o^L!QZPg4GOHf$A z#twU58;ov1=0KwQ`fF7dXR|lq>_ACN#{<0$!0f2|4 z4-JbIS}sE;@sKy#?Y_7=r(_d?^|)s&<)9Tl;uD&5tvXr|BTsKI8Xy^s0+R0eo|s`r z*Nv@xFWEG5ke&jqr3mKfd7m=S!ONamO#57a6(N7{LLiQYut<*B;7AanpaF*?^pEYG z^X+RNXzAtXKwoM)(r4pYwXWy$I=q)A+T@%9evAdsap$iB21vwz@q1esZ_z2(XI^UP z&A|P=$zOpetH-5Fc4bRYGt4Qs^iyMP$O)#3o z{u2#gotxKvFfF8@u}CF*KJT(IZHQ!>sl$A(tN3F=9S6HQ0Ho@xCw*PQ>#q&NMyuN} zd^hTQ0e*!;slAFiezV|%@Y~*W6go^$!60^$^r;l-KI=6ea1YNGTVs$J3={Y5YcE@K z$2_m2-1jkmwe-QgiMe%Yjqn(Zcb_h`v%>v>&|5 zV>X!8a*}N>f;0PCG-m^=af-SdN8X3R-SGr0pJVnTG%$I}g2%6T)h6fUv)Tdi^ZblP z2V@?RT<_VPt+Oe2k34%uV z!05eb(d-wtZ5RTa#B<Ng3$>q}?YO{@Jbrp=3np|TKowz74 zD0==JIX}Z+|6L^S1wi-`0B~N9jD=uAq#Cv+p+`?Mx18;!zt3a%*2X)=FsI(Rfl;IL zs^8x1PSRdNzUbDozc=hWcH!3en=mp}hH}3%MPm^0U)L)Y!?p z;tQf|>O84Ea$O^A)YNnoOBK0b*G+jLal3&c2(!^dnt58jXUUDjm zawJ{$X4VGPUEX-nYSd>%eZ%F>_^IRFzWcl z*7g)roQzdS+QUzp8#lG<=7o}#H$LK;_j1@ki2srf8zN$v)*jCfdXA5(&-Q*xN9$r% zFGp_T?mq3xXMxDz6%Un4xSU*6b~q`d( zk)^IG)G^f5$souBC8|nfK{|@;^v9FRy$*-6y}G^+<_hGTm$U7-<(v(76tg%n=APa= zkAurqOm6;5K1VZekc4>#O*{hhV zFSRfZlu0Ack;k#T!$|EV&!bzs8*Nb@tC5}uK=}@C&fg6jJJ93XEwn&L>gkUHSuLLR zhT*7;6a)BZ+HlaPy~vqW+`EY-JX-}*<@I6prt2MPVTU`CgE>vQ)61_Nl3EH(SSBcg zewl=>EI%4^5P2%zMb&#Do4LtuV(KOA5Do7lAlxg`DW}<|!h6sVwj*I$S0-SY@BN9b zJ6TcJnBPaKqy+U;DQfRLCRQX$n^Ic*44X(@M|>o0-tFv?*MU|O9_ffz}C1oW0+>$M%l_cDT zNn&*zx+CLQoR)xO4ZOcMoohrQl*g?iG`(#k+{|LO5WvmnytcP!3d@Dk+zvU>(K6W~ z$tejFCWEVnx(l4dEK+P$ds#)j_X8}_uUueJS!Zx0u1eejG-@DhMT~3EjfFol3yd9! zMw+cJNG>Rn8aR?szDQZ0jlrSBRC6o|R^IE5*#WkdUQbQgUQ6_U)O+07)yaP%W%8}R zvwTUNc{>_99hDorVCEVi&o7`8%T;UY4)G^vG{3t;+&41yA3*9Y&Ak%pYdMj>K~!yp zEWu#MBkVlfqbgav7iBUVT0f-pO<4W9=IQ(7zP99|Cp`%b7dkmPnv)2m09aaZpc2U` z8zfEP@t7ledbyZ1oNoefOsz6|-1_gIcwkdJzUjYk?sYV(fX9Nz4fY#~p|WnxO88Ea zdWy_+NU~mgWnWWWA`5QiLv4wq;SxckME9g3kn7sEzLHY2R0G&)4kw~j7`6IL$HuX> zU#}ui1i|?pQswne#G<$yN%1-itpKGB6aO+X`ZlCoC}v^FDJ-}q+)Qp94j(qJpK>$w zM`x8HPT^}@K%=KHIlt6S8c1lL6$Lr71`0zOe)U?n=lpJqv-AOck-_zzg=kjTgq1odIa&d(Q!za^4?IXKB#5(;bZPfn#luMKD`UU3=uhNzOGtEd1Te zH*nVI&U_O&UwQ$^&``292NDF$w1$#FNX7ye z0Qe^A5THMztqiX5viK98C)Xz)M0ryZGQpP@PgPqOKe^z^$zU00pu~@^;q}!njK-X5 zc#dvC*WVAX*7Z$KcNuWH9ZL^};rBb~>h(HMIyGUSR4?xn1X6}kJim{Ts_xNv?^@rL zR5_4ypSJTrO?Y+`+u?Ad$IL;^8{>U5Et4h7S1btI+T)$0-zP?Jr>GeLkX6?dp=6D` z($C$d21W$Ea8Vdg7~;OV+(Wuud_^4$YVZamZZx4K;6FCeXn&n20<|)YT0x{J1OciI z&k8}&-uH=|da3cXUd8Eqd9I)jvGJTu(IEwe3!wAX@1~mPxHDKv3+IhZX6VX_jUJPe zEL?IT-17-LxbPU!Skfm|I#C)C66232ca3RD7zG32!e3W6}yd(I?nw ziZ5!!*GqHtFtnWBuTj(biXd5XG41(55UKxtgSSg^CJD1xM%39EMZ)dym^BSlrOG2{zG*uraEX_KYs_EeECaF zNcalXA6AuK&?o!gl6`NQshqaJFv4$SE9%*%a`AKbja6pso<#?oFP@V@{Z-v^DbZyg zV_QSGe0CN=6?s-6y;P!=P9Dyx#>!!I9LysphSwT|yY#K43W81<=q8%^YhDrPFU`gl z@>rOx4OhB0iQG1A@Zy~wSgqEoO>bYTSsl(C7n;UqOB&iQ&$9ToV)MsGdMX(vMw&7N z6N566XKgZzL4fg7`l%c@D*0-g&)8Y^H8Tz&Z}tM-upjvWaZfS9#|d z%(N*9)M&;E1Qxy9Ph`OZaPr&j^1`*t0RM*B8-GjZ#_|uAUJY^V`jMQ%=nV<`j4B#= z%Ws9W#@0707C2DVL#YjK z32KFZS~e?8ZD{5r^{a!sm{H`Q?GWY_PuH!~pazxh6Bnn{=CRdIk&51Ch$ZwI`gE3= zH2zBu_2qKV?>nYa?+^T?>(p%a3QCoPHCiFMv9LMW@D+0`NATp~Lu)i|QzRwq7R&Mz zpm=_2y)}Avgv}>PjIh`z_uc|;d^S#EEO$Tz2(kXW|1#FW75jn!UR{r4NIkF)pXfWj z`|W%SY+wjX>4ZnC_&6kNg0BPBJl+M=@khzIj@ai)jj`hiZ^MFoRt}FiVRyQ_nQg!q zxQ0EkhpM6c2BCF%@+FrlLRaqZq`6Eq%rdr6-EaEgl*jL*x16}q{+dTXHKZQjEkSSW zlRnt9A8-e1j({uwx`Ug{LAdI|6l0rH5*B3Fd0g(3k@|a8zu&UT_cv0%DEfK5D;)h4 zu#(fu?8zw4$U*%WAA`&P^G`=D zfR|Cm!r`6t5kMQvbXqb#z5hheSHh4zkGeF`@a|O8{iTrt1$g!dosbgA25Ru+)VTZW z2*5~+lEmlMJzfjpQ?|VxkYOv0p#Y_Z)57U+4waSh-{$61#*84rC zReB_EVd=%Hoe2(!RBx*lY6_wvBlWx^Kp9kiG&`Pi`*|wQ&1$9`YB|m?DvpDpguyZs zma^uL)63T2I>f~%yRZ7dXRL}baWBgU)HSbx>Qqea-ZT9rBR_ih->slp$pHW_CLv3- zf_RZ-5F{;#3f&+qNJ+!PF8-PRzhR($`0TJG0AAzN|AmqJGp~}1X{lIVxTm2c>DhU) z$N#biKOWTHG}nvT*=P27aePwnB+PXE`nmQ@;mcotc=*3W{yE1Ad>N+VH|#yXdqn^J zCImwP_tD|t_jUf;+P{AG{~Po#^E=e z?ZpO#iXuO4>??C0P@$3aR1u~BDF(n*xDyW~be z9zO>-ov#Yx-u}x|{%83O%J zm>tCd{(U+m4bOV-; zZoB~p2t-4uNpo)fLhD7l830ntJ@@>y`42fe+12xap)Y=kYL-M)1_1pUrB>tPW+&-F z9YCcdcIlnZ-}dca#JWG|>zB5wkfeMTM@=QC0DP$|=IHv9vr+HYwuYO5ZYyHHOngWE zysP<^_|uNRHV_GCFvk1i-ET~&N^E=NkuLy!QGTMxfau=w9H=;WVhPWiKw!AYtUq(U8BQP{0Cy_zK^${NAt3;&GHwq8D&bd~?`Ft-f7D(H5?2c( z8Zr@QhFYyu*c$D6#zcj8=(-r_*d(g?g zPtpx&bt&OTb(KW|O&d<7oYe=n2kU?lpW-ncaYu|9&cC94HIbR-tW!mm}!0OuLbVn2l=v%8J zvmZ8=n|RFGo;6Ba!8`D1mh2Vl%5+IQa6LSdrvai>Ts;UN^T?JQfn7O@O!8&<=Ffx;CX}7Qmg%KaJFrB1$e$|7v3PqpABr zJc5@G#-9T%vh6q`@%kZXIZad0urrq&my5`oerX+k3E#=JF1V#ZXff&#WOjzT+K%m*IkZ!7KvXU_P-z_Tl>&xZCYrh|`GJNry!pAQ%IQyDU<01RgA0nPt;Mqf9mfFCf|Bn?Om+s{N) zEz1`8{&PoT|LsEm{j*!Dd-bPie*vzaED3NyI)Lxj5)%Ahm+8-w%nH~eg7B}YN&Ilg z0B?wdK_+^WMrL>B1`6+9aF{?HvnL{@(-^0!DEa(uMHE<(%< zb!Vj1j3=cvLEPj)P6m;sZF9+yHmdrBi4G+IqkCpv?@ga$`Kr>FLVmeBR5Yo~x zdGY4GViU76O}aTG=jwP3bLQGueR%N$gQNjHGipL6*;6NU?F=yW_5ZqZYW09`mS~c+ z`h!ds2n1`V%4q`4Ed!G5w`+GaD`cETZu(66+0T2dxy#Dwa)bCr-3{ttyGS90Q{(@5 z=0EUWUk_N#KX|yvplf-yYmoAQtatbBIfzi2@mY4@T9j8v|MOPH0OMY7+WaMmj+#@h z6tNffcr#h2StKkNvM5ojvl99QV=# zr)v>)XbaUo;Ty4-XK9r%XcL~+yfWAdm7JElUPL>z2<^YF>|{G+svpk z(AfCo!kg>8lD9ni+;4fkn|XP1>#kJ5A1WU2&6PSi$lN*?m8D1hQ(`#i#jUFL)vL`b zTilw}V|Kz0lPK>uL^^d$i?dcF%>v+|R~9l4{G&N@@QveHtZum@Vzb|hgTac&`}vwJ zQdf~fe*KdzeQ-*@KmWdrcC68@U{r9uFW-)w3d<>=v2b` z>vnKrZ7NrRq$1H7({#9N=~VVW>NGI*p8_Q#g1?`gN|L8i;KiugClf3X4IY^n9{0J z7mi!$wD;)hpY%3(agx`sHH^K&hiq(A>tZHxl|84%c}$8%;}kc3()+Y%7umteCecQ||okz}ysRezN*hU7T7l{+5{E6qZ5@te1jl|iTSU)dJd7*t@ zyg!rgNMkFcr12hnnX%*5)L2S5O4TO5rT*n!OOSC`=N&q@niR2it!j0>~4c;in6rpCNK zUKUh*1s~4me?5$yM@XBhaDK}1Opj`&B&Bh^@qy)ftd_(JIVkoH=|z8rMFq0APzH!ORs=Z!IbST zjphCo&$HnVbz(6@7iA$X(8z3Tt53pFn#+k`DfV~?3$$s?zNXVRj0y`2fhywE)dB$2POZ^=5N3?pqG;MgO!4FV6vCPno`%GOVP#|I$F(?2<~!OkeH9nM8B{ z*IrAw`ieUu?B5K?oyH&zdgHh_MG(A$J;O7iIrvg5w}bH3(m2kNZ*)Y-CxMd}t5umW zPJFbzj3&>*!tZKQqP&$%7b{&Q6D|n#6zbL5gj2+chvt)a;cKYKEktqhUQ`@1_VR{ix)tQtqp#E8NBu>xuKx`T+fImX3Gj6{2;U#)3hC<*phVgcobHh6%vz zc)s~i%*D%LtkLr!cQY=sVzGM7h#$BF!@=UYP|0037VfQKzFzJ{2|EB7iQXFZv|DeP zX5;X7%U8)gg~~w;X3*$9$&#rs@P3F8;9wVqq+hsc+1)){p)fbwAhDmj8}ZT1kF=(1 zOAgciJ$ESR?S{I4*ZN2Lb)wI>MMB}lBVQp&GW!{hg5;8+`0~(2l?P>w%J$XHqgB=F zw;D#oXPymm#75|-s9~#C1M$v>nT6y2^!Q`|Vh%fq2sD{iJT=*-36HRVHwV{NJ~J6Sq|gZxp*fiQji_;m+_4MQ@kWBzZZ2 zgzOlVbR^-A?ffON{6)TrqKj{=BCs=)%>iPykd1%I6se8g-xUtcd0Tp{eWX zYzx~I{<~dx6`aa%n>$6BvFsYAhf}y1TkKw+IRedM6awLXMl3)2DFr z+Nt_{nc-SL!*4-JRxzU;JIJY5a`RSrQ0Yb)g_w@%oIV;T+Rh)?nCABOz-u-K#z+5w zx|MDB_{%?hxG{^5;mXtP<85^=%4Fw}yQu>ddvHWlw2?dzBi9o%8q{H2B-DrOYlIag z8-nTzeY`1(tejNUO0A6Mtv0Vsb{o`|0t$)sHV#uTfXuhzS2jrDTrJ2@bu|w#GnI4@ zNAeBoNOpG$-beCC6Atc`f#JGN7-db~2dL6~ZpZYLbE3Pic@8OkGcCUdaqQwYHftkp zlwa+-Kj7CcSFfsF%sRp|;u`z13)4k_x^`-uD}@BxM=gk?hwNfTDx~(~0zRfR6T!8< zG!74X0n<#m{bT}ZY29hZQwij(g7ePz@qqR7JbXW?1ULp6;$U5{kgj&w*6Ld(Tb+vs z=P34w47_n@Gxxqy^0^{&WE-IYI$rat^-8mco&%(JIx15RWa@0x9WWtrx$)W&D~735 zogLkJ=l4(a!HHu#E}(~9k9MqC5wh#4fU0$lPVi`d@u6u)x=ZH3>3+~Y9Kd?-xgvOZ z|Gqvt?bl@KX~@Rq{rfesY%({<2eD{{ML-a0LD}b z_H>v9%@!_n2K3xTF6l*N(0Dsm|K&nWSHeh|yUsCs*!LiH+2 zP7}gJD?AJ1iqmg$RPXPSnKLQ`H=j)y*BLFp7ap>+6YBat(_XxDme4<;)Fl}*wJ3Wu z^F@bllTl17&|z+aP08qR%aUwfgW_?o9Dn$KHY~2Pg ziW+2=BUi`DsTv(w9KezR$8m}c#FK~!o!{lW{<7Ps5s?!g$Fla~i^WN?2H)w&b?>kN z=jHdDfIa#+Hz>fqM`#17i_sj<3hm6I_RLgT>P)4FhM(GPc#sZ9+Vd#n6|SG&!U-UG z1-xNE?$NWFiv;8%J71?*ma*72FssMiOqCPovK@v3$+S-)=52Z0iy3cyhSwQemeT%k z_Z#wR^*@|y-pl=d#Js|XVq+osp!VeBmuHJHrN;ARp;qcr?JrMj@+NsrG&amiQbg1i z{xk$RT-UilF4$tt!>iD_O zcf00y*M60VtmL4a#w+^yDv&zyT_*fPhaR>8H(aPxIXBZ3V!bN>YP{)!ScD`u%ghmY zDjtB=-*5Z8;8#|twS+b#Xxj~pHE2~DpIEvb4l}QDrk8o2yOK~>Nd*P0bdtf{H*S`` zTUz^__4C>3rI^$7L!GDx$pAhNl+olB+HH=KJ-=3>DjtI&xVjDk9ZN!*lkXjPdiO~X zFK7w#|CqW8sHonjz2t&OODK&XN{DoagosE>H%NEK0!t$Tf*>H$B}#X9H%Kkr-CesZ z-{n{T@0@!$hkIaS?mN%SJoCKsdIt_@Eq(}a?+x54Mo!OAc+BsdpKM3qf1K1w!&GGo z!Vg_6^Hi-pn`%1QkG=d>_2QtOr0wnfR%d_hds|FK@Yqhi$0K*jZm6yJ&8k;<4v+E8 zZCR&H1IT8X4knamFo#8G zu&6%?A79t`*@o*j>p&hija^hD#x(0tdI1(V^{~}?($ed~q3xLuvBS8}LBno>Q#-EM z5Qgvh;*1;&A;v8Bqv<7|{CA~SK`wIyBlo&7A?BJLowR3ultbG>uMpHY6Zx0q8f(Qse(mVK1fidue#oEFMo&w*_8+{E#q z-N`3mwnpP;LV{;4_h-uU_h$0V;F=BGXFbjr8U)QH;EqNJMPoBWS-D2~2EBPWIg=(x|iS)N9LLlLaLG9_%ZL{mm zx{VVv*K)(5^FoxRxwNIjeo>tlX$?224Lm|OPv#r*Ds_p^FhzZoE)DU{>A5=X{&EC; ze{Mj|ra9}j|FKvyv?t#g)-!{v(|qY>1ygDA>1yRX3A&Xs*f9Es^za|W=pzM*Zl}q8 zT&T0fFAkuwN;tP-l5w?T%v#i>pO_8d9$&P_rCa%q+OvQYZ2!gi6fd~Yl8uyTSTXXeSp$qJfKU!+VN zA1DvQ<0ewtY5u8w|M}C4uV3VO`?hElzLMmhNjDwckLubJF@y~{b;Iz#E(ld57$CMq zfFx|+dCm%S6>s=!`xJS3I}&(%!2)?ZOS+w;XYZ!+ zEcxJSWl+*T=jm_%o^~z565ds$=F(cN&@mX&itV2hJjpO7}v%%{gFq|D0~~LFVjk$uJoI!NMyF z9%erF5+r1*#OOM;(Gj11r|S;WZGF)*e(IW&={~$ zR!vv0Vi@ePQ1263|EmRPCKq_SU{LbT&f{u-u4H6ihcAH%dWIoz>c9V5LMX*wWTy9O z)$1zerB&l!3?b~oX|{FP+^r{AME_fsn~=hdyC6fFna=}|x%!Bm_Ee- z5eaDWy!~>UHcEf0K3=Y6nc!C%sxpe9 zzT* zGOFRY_u^0qyjK+qq*geb>4!s%xr+Z(Dfqrg-%wB&kT2LQ~)*W zHLR`*!+%lGsCpc!-1u(3CHq-HYwx{e<%eFWsqPk?XY;ozRsuoVBGUHK+c0 zXabNZC0e-Sf)YkZ~3e$WtoP8=>}_-b;mDc6`M&7JT_TDQe__VeQggBYQq9 zbol(rKoTOiNcA~Mfq^+NiPts;V4r^uK}m%^Qh^p6LzxBYVL8_YgrJv=@pGV~KR&Z0 z40+Bd@DM*{$*)E3 z{N%J&BmP4u2~cq&{;m}vmHB)N2N0Jsk z34>+wj(fv26i@y-k9gz=T~x18O95&XRxp}7Q(01B|3@nIaaEwpL!`lwY5UK?GMi5A z$9Lhm>%+sL_^p&~2(jA})I?6}*T4dfT__T&jQzbRrhVgj_#M7=SuQ$!i>>2kw_DN{dtj40yhO(Hw*WHT;&ub!%UbWg4YmbKUT=T-At=-pLbgL${n^LpKUVM z2G;~;r*GpnJi|gZ5uIWB+PlW;67cisLXT3Tk6QoX*Bg>P?I`N(>2Y1n=fZp~A}=P!2I zuly%7q`9tFOY7yL(qS?=FM+1Jy^oKp<*)0a;?%Xj$oO=l2L)IG%_augbkJ)TA1#~` zcQxnQ)gFb>EIrSSMprKAE*g6edw`f_JS%F8SHrQvjAB<>E%b+^dDVUlquj^+nYP*# zF1fi_C160NyDM5Fx}SBvSrv^8Y@Dau3Naw4MLXXHk zZXnK88trxo?u1-yo-WcjeoBV8h*?r+5C7XLIz~0c1_kOrU&8rzGYQie4*79-vm@IC z;3F{grpoUEv*~W$>iSY8CH+->j%5Ecr!G6&wJYk%yRu|VKOTZ)mqgMtkZ(l?b&J8A zJ6Y|1K3a~!aNeAeffqC^nd^9cg!OE1^i690#;@#Yxr%wj^=b9Rv;06{jHLceuT|}J zN%yG$FeeZkSFs;mEzBqLtdV41wZV3z-7zYseErWfo2efBs5TE91k<~9T$>^Gu)Zbr zbUXN=o9_NLYI0?PP6#a0=!Q3xU_YeGmK2y;D<9B*IKpe4qf?%qRQ&R~zx45I8=Zw} zjJR{BTVGdVPfJVU-wQQ7SM}#nJzbF$rrR<&Yiahr^!c!m#iS&RZW^BtG>;)W3$?YI z<(h7HL$RaWTQLm~*q1WHW0l&al7o{JF0koWZp(WJIe$mnOWBelSkaH+KP+-OMQbtp zKGo;=oR$EQ?#*xRn_2e3^>@qynEECAp#E2y6=;;5+DVo(xF7m(jz{^)KjTRM5+%=R zTBkbw*RSV5ZARWMuCwIg#`7)cFpwFDsHqoxKHUE$D__6s?Rj<{ERBm&C@E$jW(*bB z?3rJ~zq^bVKA(f1^zSOfJ}rjV59kps1X}l1<0S;%*x)`guN+9?W6#f4$t4y-cX`!O zj&~`%{{yym4O!^Vkq7bfIGPE~A&V!Rx|1d{wzrk`@hNo};pmMQGNOpzb7Ia~TW;un zT={rJdEKb&;6`VID~CAY;}aEuyCA)6$gElGmVvyfjt5`Dsab29c>uM(yAuNufkS~0mexhmDr_>=ari?8hX z2aH2oLXB4wCG9T5d1ntI6#9OdZcR!`A}qhvZX8|00LZwE*;)tI*S#Zt#M; z=QK6e_u>}|YczRWp|rYs0fSmYo3nq=)IbjPN1K2HBb_fU4%I^UD#P!IlWkbOoR1m3 z{okeRcp@NE5X{ZN9_%?%;ar19+;{Cd_VMNh*gwM_#Lq*jtrCUP0|;l)~^9_RMNU-Cws6~x-Dy`D4vDv)0d_8Sy#o#I={AE%-q??@E z1D#gghhxSRg*A&BSBp8XfAc-%LUaoaC;YZ&I7BIE7ZE#33zd77nxxBh%zm=Dxj3Bb zbLFS+G#qK(~0rEHncj=;E_3%DUD-EGVnSVs$ErZYc$ob zY&I&D&WphfLcnYT`4KX+Y^@_hI%`ET8-2Z@Zt)_J>e!~&QP+b*u9oK^@}o}kH*-ou zzE`TG?+NY1dW+v@hqHy4+b28}Yu}SnPe8ER0~st89WN*$e((A8V$+M!tW;X?q0a zBux_k+l8(6x5_z&zn_Y@Brxi2PRZ)C_uuse0Em^W>G*x2$)1g@nicPdM9*KxcLIt(k=9?`u`H+#uD>XQ`9Y7|9g+D(h^QzhLMMNZhkL%3?Ku4U@d|03~SA_Uu$2r>VabHM_$JKBy`1M9*nPffb zs7a_Br>}?D_C)ZmOqSRSka&6ky0ulta7Gf&xR8lfQ5IFj3 zNxJbigz`l(v`SX}gMFg`&_RpzhIY_7Axq)tk~e&1d=xCdY?U9~%NzV{0Bw}{>Raaj zFi-kH1M-4WV1F0Tq1Y~pKzgXeka-0-A=|>6I`|VN)9bvcYd+b!q=JVR*pab%TKX)flQSpaE4jnu-zg;1?cJLxN!cDa#1Sx1JKRME?bFq|t?YmE+tELvWOEmx_D#xe*cV#or zMb3B|RF%X?UMkRxo)VZNbL1(sds5UoBX13~01UMQ0=~4>-WH@gAd6?k#;${0wW!b& z3^XgW7W7H8NwRY-cjj7dWC92B#Zs7x8z@9N{V!0PHX?l1BLeF;N8#trX+1P)SD_7; zz>$Y}b!O}(ydWUAAFX-K74} zp~9rzBSWjtMj|r|Lz#eBm1xJIM|_+22H3lX9>iCe7k?e=%hZp&&_(haouVyrAGZRJ z%247GT@L<*>LV-=vtN#;c)-5VefZ_cVpdeNKjiXlG-}e{m5Ng0y^_6L{{_iE#VBob zVv9!esoXU@TxauOXR0Z3&i6K$)8VeEmbOHM{b*chC|0cL@dDaaMIfYS|0#aFX+LZ& z1mf#B$y9m`-v|!OQB6B=+J9kl0<=CXc^hh4A6>TGh&0RiOjY( zbJ7aphZ<-8pz#}F6zbLUk|E}eGbOMuac19#h8~RnCT{eXd-W04MF)&{=FOoYk642m z=BI}qR2ddtU@yENe^lq({}bcss6Dp+!jux#!!f%6lozNit+Hw1RP1=hl*0qF45u3Q zLtsBXa481WzVYdfmDbfCT~GJfu?I!(k8h z>3Br*X78|XJWuLJ+4!}?incEZUFa?OiEgMQHi+=3t1}$$xv>) z`Wx=K+cg#8TnYa0MtH~duX1T%DhjE4T#6t)j-nn1@hWES>QMLmCIK%mEviH448Paa z>b{=huqZ7>v7YmWJC znPK3Kr3jB0K>db{;+qVb952+?=MN$#Up%f3eKQ+PV2w{)m?Uqz6E0H{PcxMbE_n&s z?c|%7DkzK(aphqRykb#SC?fwFGze=@{W(acjn(Pl-xk0BNnnU-yRRN0w!=4rS^Fo1)NC~v48^vV;T}~b z`ud$HDwou*vy$mcJ70ddV=hsM-uksGY~3B{Nr=LkqLDP;{nkw zRS9|np`Yv9_P8a8R3-`4pZQGtrW1mp4+|}S=v7>_L%q_f^Gimk3NH{X7ZZiVOUg@F`7fB_XDd)ol+&3C4?ry>??xd5R6Ln=e#F%uFYZb~jRX zE)`J7^A4@#-)e+rbmdeV0c{iLKChz-oqqFS-%CP|OXM@}hB7P-YB9%_1tv;<>}YWZ zY=pNbNuSyy^g)+njY2Kul;$)c2Et8}3wh9Fp87(QKyLC9@1FC|6LeBK&0&09M77LF zO>3%GmqvK$gw=A^3lRKWH0$t-_qwr7tv+z*Ck#B^o_t`lpc)yxNV>es zww@Oh^GWT_JaVXIr?_b^z~qrXyO$M4(_9G|`|XVqB`=+Wz=5ZI3}7KYg{5V-b4`_> zZ7f2B(DhoKZUz&#Hw7|=2f}`Z9ATeIXPRZ?M3>t7*~M?@#wwv2?ANI4_D!>KG@4|e zPkp_9K6rdvM9N#o{syIn{mg^yFDr{P5T=7DWy^a@|AV4vaS-+=zV&39#mLcUfEEW%9o!0X=?Ze4bYsJlyJMYo?WrYo%-#y(wc*yQWVO>-MqkUY)T6h4`e`& z-D9NdqQGt26zmNJ1%M9D+#6Kx&!!OXjL9+;y&(`N4-@E*WqCWg5UdOH%zlS7Z0D6tsSDFu*LDEm^Wd0 z#=NODl{xGgVWHHLO9ApEyoj?7tHIacDe`I(v!i0%_|JUqaXdW=upIn|r~XWRp-_j- zU>F8&79$`Z-aVwIPBYHKKR{pFh%kCi0p)b6VtZ{hp1 zg#6Kje9+2O1Em)zDRWrjA1qo*1YsBsM`#A1zxDg~N{?-sOv&LtXoEwJ`8U5wI(DC% zue5jeAOFc^ao7k8U9M?2H(b4V&~USiIdJzeP~)L1iid?8QT)7PkOu6gzQiM8a&i)L zuHFU7K525uT={qtJS*gc{a_S)iG@P-0=2~B=JP9dG0EO749a)qtxZ7>{F^n<44$CA z;GU?oY%9iUF$NFysYNvu9So^mLp8KANA?_wOrnXrqvT5Hd55BLYEJX|%vj7SFZDpA zMjAm&A(MElGZUW=`)4!CXe_S%r9nlOHmVDau6b&ZgGJkFg|=7ck1OpBu-$ZGIIKSm zKL<@r@O)Bu+vPgU*4>?dX-VH-@YV7iI)t7I()s^Mw;*``-kzG zjX^-ro3IGb+o??nM)dAq1b+(GE5gQBqkQ|ftmfIt;ZcH&LF?|F-psl88|?=Q0&b*5jfnSa8y{C9qj;BU z-Gw0-!>NJ~@o%@e2bxS?EHwC%;yq3w*`pJ*RmA6^{8ci-=DI(1^;&@SoH;Fr82%Ay ztV;PqrEer&Gc=HEV|fd~Rab;6m?hKR)YP=c}Me`<++c76uZudu-WB649-IN&;5*s{C0r_wBKbnr>a`*Jn2iMc_I)a*8~;g+*i=zbYaY0%L|bW1%4ah*B?r>4+Or1u*4%vHQ9yI0mH_GVl4N;O zsoTVpsg<$l-@-{^UVGXFES0pXDM11@x(A?IA^!IOf*~17^r?h(RVG3>Nlx^+)-i+` z*+^x~JL%bnlEDtH@*;R5>rbNEqa8*_vZ7vFYg1>=YDd@FGnTnepJobefQt~~!NKa+ z{ExwT_@OSGW@{brNkV<;e=3RF_dsbOrU*)60uc1? z%in?FXbnob?4L_2-T-a(-E`A+nMb>_3f_D*yh7p~@&NyKS584@DE(oseye%fD{Q6| zVO-+S>?~R?4$5Qn>|vIof-Tj?jOQR|VNeG6oA|ftpVX?S#>czcvI^bL>EC;LdX7lD z+xwfFnb8XfOwaafrlQlw`(=Sk9)4&Ohu-w@QbM;qIvCx;8_9mYh|-MPa`%<|MoM4z z5hC)FQh6yx-bNbDijC^|2ZauQB0nAxtwJ%{eCJ&$nWCwDheX`G;CK0cdfqqx zQU7e%zQn=y@o4NSLA^Wfj~z9iz9CUFL8Rl@G$Dk>!4SZc49WD;Mzl*i>y8^t5{V2h za0xZ4w(pzY-6R;t{A~TM7V#k=m~mgSNY8Nx`ENgq2~j0`+`XyR;kGxJ-#KB*ayt8? zt+}NccPR`#4Skz8U)acc?H{V^%($XPZP<&ii|i6&mN{Y)^$)L_OwTBNtfA{bdVsuD z`?*^qnPYry=M|6E})S z`MYHZgpu~EJ`e${s+N<{h>ymw8>OMWt#eZr!;hczk!L% zD-EBZT`w$8$@-xq6w{jqKa1H~btt%cyg7-X2sY3|Or(i1i#&mmxrA=p+u2Pvt&$Jw zVObpCuqArLZ)~$rH`i&I5LK3pR7#pp!Ju(8{Pw3ZpUTIr?xC~eUcj0wCPFV0iPYU-wNc6xk@I{8zAk3L0_T@5uE(C;` zkfV+fZcQ>-DVNVk8^0$$oA(5n=XobL8#sOr(?+O%O#899$Z}l0U{XRN_EDt9UhTGEv`R(`JG*U?8?D2=l}?QQZ44}H$32ELsTv<^=m8lA`jE15iRS!C z+;iV0<*{#P1S1Klkh%>Nn>V1Q>sc#SwTvq&dErb9m}ei_)z2`IZu>e(*0=w{l+-;; z`J0#jXY;SJ>6Miv^78T)_VzGLaw;lZLjSc6;YO6F&O_~{AB38ms3htfRG!6f)=9&} zzxh2=|q>`j=i)u z@Kg{E?(a&AxR4^@)LsYkdOei$UCLl)tq2O$hh8xL%;4`wVWo6CTnJB2-qV+;`oOx- zynH2|V&qJf>4OCVz)9Ie4jXBfs0Ku4f(xN=BpgVl?bPA&%poCXh9p z_`U!(kR16IjaWH}JSoM2h!1~}nA0zvjv@3VK#HD+W)!B`F!mXLGB3GpHvg4~7a6Zz z^=8Y*mrF`D*3)33Pn4*2o5c}Zk)yl~%0*3KvI_?7l0xY_N6Dmkb*I;0CmZs|v&$dQ zFMy(uL3%B&WVo)n_*27Ui26kjK5H@TVd^rcSP7p|dJ1-nmjS>(N%;5#3f8EOJeBBQ zgiS0@P|54XvbR^`-0$0F>CRc&G)V;WJ1tOAV&7*y4x=C11@a!$Vd?xqjm_5c^E{GBKy)Qb7ZC;YBFO8zuue8XWSX^c2Swt+D#7 z^8heb97}U|M;I|TAu#k4+A=2RW^7hOLZR-RH4&E@^Xc4v?f^rN6rgZuQDEp1U{(7? zyH@_k_t>qQnE!p zF(J5(VYoJE@GQ#opOr?d2>>cMoO_n;-xLHOmgvv=LOypIyPMcpSiE9H?tn%|M``f^ z_hdjletyRpOaucqcriQum`oPF@LH>hY|{iGXn7e5$f+~rdf5iP`pZ620YhevZUJXZDn z@F}8UA@tczJDMhGsWY+>JF;-!V|fMp>bN3RzqjkyX1WY_wJXw9;EfjkX)#h9;$wH? zTcBI71-}hBjp~voqZA^r$N!Ru{JCoG#4{tuFS!0${Hz8LeV> z>>bSV+TWyrS@(dO4^6|$z_`CG+2Mxa({F~iQtBTm{9hnh3wwDPY z1hoI%(ZY{+?`h&ga`=W@;D^vp1qG}?rO<873iY-|1NOKwnXS##wTTb^5Po340L_89 z9;4oWEC&W9HMNPSJ0l@K@r0Glq=N@(LGBwju8)G5x?Gp|w)fv|kBc&VT4OwvJIKC((_j#y2cEX+E(K7?{@<7|A zZudU|@wzo+XFn?ay?vFzfvK}ID-9<}FprRnQd?*~Zm9j&Us-nn6QI_t5)}{e)@!#;Z zB?c@fc$A3FvwzVHix~C%{5(3eS)SJ@~2DwyXe8A&y#vty!qPH&u$3n3y=zP8R$8Ej<$8vn~GMMVP6BCW{H}7t4;BvP3u} zPcH`Ns#W?43z9tGpC7l2!$-~SF_whXCk$Kl!}$?z8+VZ^(5!6T+2xa`nBw ze(-0^V-W8K=->sY-+CKc`D)ilxkvFEX&Vdxzr(rGO@BIv>%3&zxZKYV z7g-DtuRT$89NSBuI&^PeP{x}T*41H#g@sv2vUV+;l)6nu=E~M7;|G5FeJ`?iyfnQ+c;I9yFk!P|!$1Nu$I^yyti)%*+ z;U2KWJ#?D3I%Jje)UnY>bx~smJ6J=wwbl3~l#RSTx6Zd6jZ}~ezv6rFyL6caRTXq` zirc*dBz{=HB%v6BoDY+dv8p2Q5ZW3TF@l!6^C@3JSVVZRrt`*!JAg($X1}4}@Ino`gQq z&w!I?gjxP}M}ZseevpGg}MWEd{s?g}fJUzVzWIk7ypa>U|;eAo7!5 zB0bjFtGQEqZA!O&hSR z{SC2O%KpS8B~cKWm@&O=(LfEKXj)n25h;#e`t^86Y&r#>&?k<|KEbEXiCz1fOv-nU zrOHZ~*32M7Icsk14;`Cs*3}@^B)3@SRfoepJQBAFnEu6~>&kUPO3Hk5is3E;fdqO4 z>XEE08#$3lr=SiisTQ#kcyl=pt^pQUnIF;2dw$zy$9G*1pb+s#_JfmAi_ZDy|}bDv1nE& zmv7&^2_emCiJ1N{^u=9NJ0vtUHLC0#39?hpc>q7TbW?~;%)y{d9P*d(-~|OF&38?$ z1P8T3hsA%;rpTXY2Q4=%zU_FuBTg@E$j+41`8T8oC;;Ww$k+1M|MSAJ0UQ`qUvQI^9MRvmw@5{@S?wht0KV=X#)$A7m?83Jy z2Q7s=Y)Drb;rQP&_0*$UGzEQWv%e-okXR^e)GhQNzF!0*?hTFD^~_01-wC6J?SvZS z(ElMpw~BrfqIfJe5xxJxov~XRN@myIcxXF{EQEj*$<_RVqYTInRQr%Xi5o4J#Q)rg7Jp0loP{OOhV*--wCS$n zX2`W!_$70~_rx!21>D8OQ2Py6^5l`R`kvi)H^->Qd*h00z}jJ>O!1)m)T?M$bhf(o z-R7q09j$a2{R{nrKsIISmUsnxLoRu(i6*^RqNL&!@~G`VN;Ntzo-_MI1j0M&`tqha z)FuTzKyHbQ8Qn$K9LqvkeRX03G2Y?!KCGHvJFL((Pl!f`xU@7&XwIyj$j@|oOA$p= zJuQVqzGinn(n3Aug%bS{m~Xhu8J6^&!1417AjfxYCiVHO3_bambT9RR6<}@pb#~o;VR)>tA zM_{!GX+OM%rflB2o`C=dC-Y+z<~>D8N_iX)yd;qOVDSRBY<)I#@xRLSi@2&Pv6U62 z@l4(0&b*zJngckQ4|Q%a>XB+Jd)Gk3SJCQO8nUX23UO-sD=(sHY4rFJ7i?_opY5aP z-QO{dlg{5^$f{-*UqKp*7MSV#YK9l4V@G2Szkyionw}L(?lb9g3Q}`93o2!tU~Yye ziyHP;GEx84bF@QU*@m}-JbRSSBPuHTM437J7gnp~JA?>pEw1G1I34Txw>1o8Py8oN zMjV|u5M@@85MwzSS8QcMT(9eeSEr=Loiw}>&bTkV>U>e=R;+(JQv?(0ce~SJ`5hOx zxn`~`{q(>W4kk%y@zvbRz{y<+5NMxMDE$N1c(4&)EY&DDee%ZyW<0u;+QxB6a&Mq5 zmU~$95_2a_SV1xww6Cx?UDoY>x%O9Ou1-G+b(e>&DuCkWnw_>j*jP7`B=}?z;ks;G zR^IJVVG3$P^&o5yh81O{d>d{nvOYBzIWZ(1yu!KfVgi@A-#srtpsD_^7KMR83%#$u zpN<04ECRIz@~&)~-e^lo^OE7FE>D(MTk5Tx-06bq%m8IsgeNL9Jr}ZsM#<94F?N(E z^hNGIZlBQQm=|sDM;;(I51Vo~)TZ=xO}A29$ME^}oG{5v#}WBx>57$vOt3?qmjvg* zgRMd8mD7%ca~l6fTy=zx9FDfy6ZFb%yicd!i2|iTsc~~(2EOC%|30*F{8eb*9;G4_ z{d~QyV;)K9C;g6q@M;*7&_mZqut?C6ULhqpGNR)kXuXm-n)=HrPHZVol-^60#oE}I0bj0Dn#efo>ZMc}{jM8%X?+c=0es<$Q}BC(Lj_P# zaq*#J^jY|4-nsfxZ229;m->e06RMXyFP~ILM6@Rl9GHBmtgP($dL{z&s{dZeuYuf9 z(m`d4@jqN0c}kmUDlHxSg77BfPEqWoPl_dBKzUgi_pqV%5%wpvPJ=xE zxOYb+u}cN!Eb>UE-){38gWBn(gXMfBk5Tx$NQ1=&dQ~Nqh)LtMjz@o5Xg;yE(8w$C z!iFZ}zE|L&$rHJ%_!eqlXQ!cginK_xjS;UQ(9~b}Z0=S~r;puA4+>8z3^+(Eo-q3ScppDuIU{#7t3bua@obdgFIHt9yCr6ZNkl}ie?DI)@Ezyf zBsEU_ezmboY@x>6EsozD-;+oJ%TG+c5{;#7N+EyB%F6zs{?B;Q_r`NnpJMvYc+rd_ zQ&U);-j&vca_miP=ZqdMyAoq2pHwp1jfv~|yq|KQSJ)tWusx4&aD#fgYN7uYUV+c46pf=;V^)A8||jj|Nfc69JdWQiH9)q zd|E}q!y^B7JwlzmiUqbxSxM(U+u;`R_F;;53tv+s#VPDNKGorVWPCJx*rr3UWn*Y+#w4Ub@g%=WJ3n9dUm7mY zsHm1ZjVn=@;VRzO%hq|qIQPkmcny(7X~oJkOtfo^olV>%mH`htqLNP|v$7EP-&TUi z6GFu;Dj_$E&=XzkYHO=bswv;;ahFY5c?Q962p=wBlx54qfXaW|+K&cs>kBj~_1FIp ztPHOluvn*R9%?lEh*{}8xfR^ns?p4jB>!Tu{^yA$YKhI459;cf^0po5qa8RNBk8a0 z+ILC!i`&BcHI~W?XG^?>^~ZVnOm?E_$OWELm{W3NkPQnmMC(ON)v-*7PPf0?oiqH@ z#@aUUxQ}k7!6lAH{#Mk$6AktYhWmwBPgobb<;5S4tJA0x4&kSG_N3LziR-QwwpDF; zQt57t$eHofxyP|4j*do#hivvt2ZM+Cj;HmIhQ@*1lf`*oay;rTr7h9cRcWKw>9U?? zA`KaYkW6EOr;ZuYrfSyWZ(P6|KXsJ98)`uJyTxwU(JQU1bZDqyWX>g}NVf{}O0|8MC#jlU~zoMBw zq2>4R+$Z+%N%W6?*kQe&hWp~NvQ*GUS6jvBv`z3G2(FK5m=+1vW zU;j-3-sFKM#J}@Wzf{B1%4KuPP9xxC8vJpkt@rWNtW7&jlWoU=$Y4rau^xhrJlRj? z%RrkFBl4|S^kJs-@lO_0 zyge9lkHgaa+2F4hWHIQ1qUo~yuyWgNkr1OtF|0LKht=Z}j#;5qpj~7@=qqHL<*;4w z5V6xTLZWcsWlw=bATQGANFVtH1|&uX5%?FsWA*S%z)&V4)dtEJ0h%n*sIV8j?^P2) zE7DZz&-80<*k_7EzO|lY9t%LUe&_GT9Kc+M^&9aDsUg!ZqYMfgQ>k0(KyyED_*u-@ zn{-vjr5$&AYzlnW_6Rcjihwu|L_I?G*@^ACfq{|t31v?Eq;sb|{hH0cAt`(P-rq_5 z&UvM#CNT5~A+|e0xpwqeOpJ_{0mWEbC+?V$|L9`cf-9a+6lFmdFG3gH)if=_7MM{ToaKaG3ckV-OO5^_@5+nV-u2pJ*U)c_*{tST zJ6&oG^Vs{v`cUqm4>27|jd?H%EzWPx*GU>lck<_beq7f&x<9}7dqO$Znb35~!$nUEI9QK0 zsN^=(v$Q`HKL$;rFD<_Vi9WBuFr3aN9M;FKXAz5JS~rbw(r#+*Fre}V1`O(JU5gZX zT&txWkYR%xZ;QmPUD(*mh#l5(y*up(mscdme9SK&Bs?!(%$Jzjh4F7j<&P9A+9(~D_>?%RI;(xxJS9V#y>igBkapo- z^o(cl7bW^-z26dR)u{BMjVHEbh2v!0h*+i+rXNk+;v+TO58z*0L`$j& z1TGIMDs@{5-@s!d`6Qh({J2P>g)+AZ-K^_OVVeHMYyBV1Sc<}T2ICX(3%x!AR0mJb z;0+!snqtup7XK3AA@@Z1a&~F|e?<7LOiLWdd$CtzRm0gg)755rXo7!#I?2oBq?hIn zZ&P0AHRNEY`mmd2k$sQnlLLXDj*iZs@$qaCiTRJ^8zVAlQl))|>-ijyDvH;<^fw16 z_$9-VVb2LY%*+`Y53LJoZo>t~HL97HVX2!MfUuY{HKIFeK7*b-MpGyWS^w> zv<^gRY?O*L;(TmRS@Yl(n$cRQdN2v=^dnm8k!WP1nCeUASLwP6X0!Zzw_QX_rCY<8{>|_ z$k@gtd#}0Hn)93AEQ@>e#m6T|iA^U10^Li#S2LO4Dqjx?*=5Msw(g(V)yh}u?WOW=MM^3sd96$c$RR*z!Rd z$Gu#UNQx}U#Bdh|v*y2N1RO_yb;HnV#h3VT7*OUu^K^|I0iLyzwI zehU;%-s>AVbdeL_>`C^KGY=nZV{XBHI&Mvlh2 zp6OWHdbKfAc5g!!g=4lilr_~`F8=J851KN6>XYX07hBp#LIbh(&^=)VZJ>+-{Qcc{ zHu(N(x0rM7mLj&F^jqC2d^94g?!xhcZ*M|m-H$`AHu!{3H3rEzW({m2oRo5jo6cEZ z`P^|88U0{;MbE&A{mK$X%mKS1QS&2f?^RZ#f>~!}LeZUz#iySrixiu_%SlHvz4yNn z*)3}*<8gAW4mvj=u{GA)LD*z< z5^H>!mWx^x6+l~BHt$UD`s3Wy$#>S1a>*^hEhU_v;9haPBv(AQek}LhE&lFe&s?fF7u&7*p1!I&^UrEcR~1+g1-f z($^qZTfNy33g~t$wD1>w=llp&`C*^b|a6yyzKaWd26DK zgbE;)RJ?1~u2m#gHFsL;6@03dENGDljVuu)Gp6uCD2KQ3Q}4AE@*JB`Gr4U$uX1Zz z!%0>OK>BKGA@}`0`?YkgR_jFkUQ}KHQ9ep*RUi0gkr_8p0+kjjx9A2q4x!asPhMWn zvU;<*o_Ghl_%GjkPu|hDwSoa@K22O-lCFt* z3W0E?QJI%Fe?${9FfwKY_$X`9n}LaUr8>J%cM6Uj%?#Y|}IEkk&|fvdkiUk65O zOLU74+{SkcW;w^XUxP4-_9 zunF^Kcd@&@QG6gRB6IDlqT5H1DNAPI?8>xEUk!!k5y2Qs*X7lZJ){>&8(*`D+eP=ptr%tK&x}MXTqFMr;GV zo8wxoA;SDN+4S9l%RE8M0gLgYOeHxT9WxI!MpD3}_X8>YTfYK?cO^sbtEXQ8GMD>0 zXZ~FMeg3bPv9|79$~>10vQzP#S6M8BtQ$9!{d~nNRpi2^67) zyNS33BABT%rFx+_U1ndf6-4$#6?MDcm%coAfWu6}H*kGoQh?}f{9RKvQgI9aSbA-y z&)*O{VQqu=RdwCeJU~H9;mvjcx9Rrq-h*j?G!DBe_^n{Y>sI}ztP2H$t$h4}!C z1At2&db>3ikgYs{aRD(DseMZ~Fma$z&L=UMt8D?oclGq73^QoyQWO1Pz4eTK>I4b! zc8&Y?Us|L^7J`VAiJE@w)t!tNyc@e^QhbX`%P@Zb*)Rd^-0XXMt?6|H&=9HN<7;NM z=n-%$D_DR3ssFTyiWp9mhDEglKLylGxuLSV`)Ln*{6(P1Dow_mkT)T9i6YAF0`p!; z3U7liumm4;;$HW8GNRk3KkRb=zbXGDiGV`eO(?g%DNB*iPUFQV38n1|2uT~_i)3Fl z*-E9jUuTQgIqvpphkd{{eWSxo6rl%P?@X$9!Tgy07%O)>4&tXQYvr8uF1et~wS!y* zuBpczxANejjqRtg8k(~J+c68U9+s+h4?q#2;cck(S_*VBG&wJQ4P}(&*xB99uaO$? zCy2^$&Z`CKm@xk}!?J;ZTo3cbWSSdp7)@p%)R`s8+HPN}ka#kMd=m{RvgnSKA8^=c z;M3AS!);%typZSO=9BxJ)m8-J9`O$)oERMRPfWBU6SdD_m5`9INNt+h=ZT*;AZilnX7mqI z=2=|+Mp9rE4J%1;ePwdjETvBiy_|2nj1Gs$g>v-I9`m^UhOjPDw zJJTz`GgMjNl-Ud$i+Ud$3o7`gev7F&qu<1#dsF+8+L3Rv9Ai)`{Eut5Zu~3v9_)-%T`zoSl9Ojs}BEy0wKl1^fe{dk4UyQWcVFM_FMfN3&fh{MJHbp~TKnkVLh zDD@cngi@80(Zocf#*>rd$7XWs%s0qY_7YZK2UZp_c4kyxF!T7QK0{RC{L1YzJC%)t z=OtU!on(?GSh}auZkJ4A&~a{fUDw2UL@vr-3YSwWoFiE8`!a2JUmL1*rmkXva6MV& zzHz1*DKaeb9>KEs1rdeP z0DTS+nU>fnX5clBq>KzLz_y)?QCBJbW`uA6QzXiwt#j+If0B7_io6}#jO(QxAM5w6;o&6Mq3zG)jNYi&zHQ#cyA{V3-7MAT#G^asX!>aK>bzmiFwe!L*C z;FDhJvOoZ6;I{9rv;0zgnv8GKL90YuMnG;fp*JoEM^&J(!W`BY`tY zcYJiJV$@_5R}b1EGz9MyjK^E+U1LfAXdNTE+I_4CB85#fipv3OuijD=jL7M{BKLJ`Od8~nm;y*lG~Ep=b0u|$M1A~aOa&aPM_?t#7zpd9LGFLzv} z8mK6ns;tI!o;S?+D3Hgm>U1 zu$4M`bES^uwoK~TrV`GLA35w+l)R{15%MGKimTo6zZeLK5dQE(%y#FriX#RuH z`plcjcg2}9?r21GD{mNjfIKt1&R5n8g?praA%qOfX&?QklcmEy)=vf=&_8#BIKO%H z#pvsu!j*c;ulGOQ4<%$MqFGf}&vXqS(Q|P*Gw-bvoh6K z+vl0~jR4CPL#w@-SAw1$CQEY&$!o-)4hbP{3?L<4fJ`fbVx@y`Y*MfX&K~Oo8CyXO zwP3v7_Be+6b;VjD4L||rn+BOi(fHOis{%NjX`3+cGLxhzU5~#FeJ`GIhSrAa+3l8o z#$Ga)&W{lcDQ{Ft7{-L)xq2eI*9uB-9hO4*SaQ-SLk*8EKe}}F%I8aC0+fVzeIM2( zZVktBYU>t_s*Z;tU_x$oY9`WJYZq=GfP^PKMTrAii5;h-%Yqf3e&4>J7jw_i*yWP) z)hHhu>eCe5Qu7LKfTtygpTo>&IyzZSnK^m&)jEckAF%aT6uiTfh&;@wVkf@+0lsj= z^`nG$OYyozWreJ!fdL-;X61#iWdb-)B-of5=jW*tgTP*r>^W{ic|frCC#0`BhxBWM zWwU=F{mFg6g)R(&#!8C?dh|Y{@3gjuUS3+x8MQ=A+~sxIO+zfU|WQbFeJVJvQX;#xVeGXkbF#MoOw%+2el;^<7q*(|z(z@91(i zBHnj&wxqc?Uswr56KVWa)BQ`S8$%wDpvWcUC*~uSVMYX~#Z3+t*-~vQtNgtC!31SW zjD_zR)}C;GH)tsdZv25$XpW7kRHyZ=bm&_~3C`NYr}U)V*eWvgCg!`cE3w~c{V=5 zg7wvb`p-&cYlq+a9)3WwD(WWGSshvZ8l{N1?bCT$JzJ8NR?z27=jR?C^ zO&X*=kIDJ=g9?eHYYp^UU1{=945&|c>sB21b#7R%Okk3(ZI);Zy%Pu0?yYo`!XsO5 znNsm*G(lO~dGSJxO0g9(Q`)Fttr3xQB?G~q45X|-`>|53GI0QR?f;f_Imzro@=P3aJKp}ItBNd;JykLOhi^Ojb~ zkLNuAwd#gRm0kz&bnhg7UY{srI}IT$wB?=L88JNB(*&g&yo)@_NhN>h7z*N+T~AP_ zYA8N4;9x+18NLVvaC(Dj9h8-o(?rnqOxiLA(@%l!R-vk*CeczG>+DAB9haG-YgZ>P zg9&ER)k!Kw&M8n3Ju83<6cqdJe{~ zCy>`yDTYR}x{x?&NQLOI#x03>X#L}@OA*CwnLl7<&O;;BTZw72=(yCNxy;lRyHF=p z42&`wrEL_+$#ETKedH^_f0yT?xr#!ILJV^}uEXLK!789VffRHgzf$(#QY`uRyu4e9 zBX&vRAG49DWs{0`h}uK0mJ-R=N?H;(GfsJalsvHOle=$}^y;Ar`r4Z9mxNc;SF^IS zNdp3oPU*R=&xWT5o86a93) zCLfv6)!3?(#=SfgqpC<4SzP>}HEb-q)*Zbn=P*AN;^&qD4o{oK~TlFR$=7O0_$ zkC|DQ)fMR$W_jAE1z0^n6I5IbYZr8K)Hz->dEK?p74AdBcdJiv7R~2#{OQN zlTK7nCPk_yT~HcBd~o;mz0b$(GH8ohrNf~FU<`k%WI1n3* z^4)%JxLq5ykg5VYzCxWG_lpwcW#2qmA4+{Ar3)feC7#eu+o=?TWbrG+wgjmPiliY@)Wy=I{w70Rs_EUHT+r1+#9Ixh@ zVrA6UKJC+-+ycoT8+2~%#rQmQ-;&-^qCVYv$ic~>VS3O7oAps`-Hem)4*g2i;i=K! z@6-r>j4vFccUM(M@=b=uVZS=5LJN^8rO@|Q1HwgiPHK~-h8*`HP7=T$2GZv!$+xsV zu`KRqaS$8jGc=h13;no6fS`20;n9iwS(TK|JV;tBuP$PIT%2bu*guBmy$&}IPZk$* z889YtGXIVAbn%T<+MnR#-r{+J*)jMF)9;`vkoH6Fi%%an)1qZ};2HTThCjNdhC-l- zvGjU@`p&Hed?uCf-o`Z|2H_WhIVQ?Rk#})MZxAlCQTPl*OK9!92+Hu-u!9Xrf+yaK zsuFeke%?6HF7>eI;!PS7ELovQqn)WO6BFf^qM(j-!J;A*8Dfy?*JG^(P4rk*m{XWC z>U}Y>@;yUz9Ax^hUcLHA?*Fs_z${A>DIE(l5vERc$4Bdd9`loWMUuX2Vw=1v@3WXD zy?WKs(@+|$A5#)kL9vpJl*={ebZj|CPIICRv4R65X)>-u=LGMnLNFCM-;_7B;@W_E zzT^1Uj^hbE9>hkiE;TNkIP3CSA|ZFA4Rzyg4pmfH!ElJyh>(?-4_ULFR|8yPR|4NS zt!zgY&=KU<`#!O)1$Pt+*l+xZy;*3pcIw%_m6W>`{9|;K6o~ZJ0^C_Ovfo7YC@`wx zdx&d^g#9%6gBIRDS$zuUb)}R8P0HulDL?=G>3z*4wCdKj0~$}VmRKKhm1JsD%WA@6 zqi7l!sL)N3EW6~E0r`{vx|G$F$3NzcZ9p^ zC9NU9P0|!TmtE&u$ULZi*`6ceuoEvC_C)E+>9C6=tWJ&O0uS3}^`JkK8SJk1yGgZ3 zzrpl3_eSp#U072D(PWbqOu$D97#dT%H5ScJ#0@}Ij80CjsiCJ| z7h-Vvqi;MW8ILwEa?4dvxNk4{c!H?uPLO^>@M7uWQ`xOC(t|Eg#3WEXR z`bW^Jgqk4`QXzkYH|Gf)u~)}$Gs^!Z@9wSQ!iP1d`S*yFdrZoVfitrb54li7|F|6x zb|8V-9_uFb$L#gPgS|ii%z~HQszk1C);l%+?k8 z*5G#J=!hPyh9@dlR>nM!z{HdSjLnPBZ{ds#ts=;MqUCOg5mTjxz9j<|8wc8RMvdIi=8j!oa{GHjm%D+%@&lk zy0Y3y0ziDcEaJV6BVB?SB6Rifu8^U~ask1M@W&6jl6RsH^@4LPHnx4#LBfJj+;X_S zH%h%+sh|grH6hb|t7;(l-m0JD#>1eCa6ud2a|Zg2!pE{QiifuY9?Ht%5|fZ9q0!Vc zTBoG%y&Bo&BQg)^zlfQt|AM*im4KAdmk2(2AUpb3u%J%`kC-o!aW@vj26|%7fme|{ z75M;D??%R?zxh5d{h?Aq#Nvxq$FsxtqHGeagF?PHD++UojA(>rUFAJU`E0KEq#5Z9 z#JCFgF#&zNYwQ{%ahuz0Qh<^_14AH!yx9G@yj;oljt4s^X)VpPMnKQVU+C85%LFM| zq;IY#?PG^l+&AOzSGze`gl@q<&p2Nvx5ESSkmfElf*r;7hbmnId{XnaVP`w}%r6#3 z*C%FXgoXFx&WAlg@oqz(QbU1B*tt}V6#1Cc=;)TJ_Ln*Lqf|~ZAUh0!o}05EvuCSt z_@^*;0x$;M68?X9dw`6(_fZCK`fPHCjWd!Cy<;&q2(`5>LW~3*2bdR)FV=)wE(NPi z!A&-vrunqsVKz=)SS#u}^ggK*kadst_{?Taf2Z)ff<}#x)`oTS<(-Q&y{0?l3OJ(C zJ7=2DpIgkNN+sCbSwN#bZwDF^HmP5uZ7~VIzZT5?eBJWx#dn!Z3$4uk7e;6Aeg^6| zQ+(z?KnFfz8(r8{G_&v(b7o;(#&tpukx`cO1-(n+TU#rxG#zsxo9)sH!S);`PV#y; z7|1QoYjr!h0}@vJJ*O|u^Md15Sn7bN$FE5yPsD>_;|ezSvN!yOYu>hYm~0stE~|S| z-iB3FT-g?+T>Jh_oZGe{{@VClrW+PB4FJ1+`E&|e_|(v9sEBe$NHrdVkfaI_NNdGp zB_1XvTw&zL5!DR%O0$8=C4YXWUaFHtw#qH5nuGwdl;pY9lAq|K=T>LjNQpqD9>_&{#hL-Pd)}X1Q1*vu<@9 zPEXqGS|!}g(>Vw*1Nbc$L^(L{mzKV%i{rH!U9IzHc-?(q{VH{0Ua;7*YNlW0;A3{1 z`^}}bER9?{i#r2POYR6Tu60^Z24+Thj8Y03r#RMXW*fM7-PIb&D5}9{yveZ!|?!xOixDFZLN`!fO$_esvBp%7`aa_Od z&rREK1}AP}v!JD+@o1Ue-P21o@=?*W-Cxq3eYhsanPECt!L%2A!vXBfXtTCf+QwPk zP4*P%0&)1e3&bB2{mW24xC8)J3c(l#!hf{rVUW+<5^zS_wu%|6Zr6u)8g8wbk0W}k z?k4hW9Y3B??;qt3K6qK+^-@esjCEvZveH&`Cx)$4MZSxkB9d15+VXQytk0Anqokjl zodb0B9gOwkUN)d`&bEro++6o~QS#sWLCB9YrMI?565>jFtkhZ4>HF05O6Cb@Sn0OD zN{wd#HUWBW6aL8b@5TE^fN(Q=Zg%`j+chZ5bV2Y!P&TF^1dGMKJ8*LL-}RO#Q0?!J zXntHKWjH=E5ur{pa1qEPHe98qrnb;xDxZq4BkxOHcK3p?r;bkR5n8A?(;Lz9O}C#^ zT3A1~1&Byd4&07*>xVZ%o^l_|{ssj8;(7&^&j6egq%P zUcS8NG!d8t(H#rcav2d{+c%)v<`*r?;b*X$-KlD1!|iIYF4HzvuSt{A0SK45nF9PL zpkd4npe~!RN>_L7$Tx-@8#%k}xD|cZD5z=WpWFN@5B~Ye77T>I2@{`^2K=Mtuu8@( z?zo|#_=JQdd;dav5V_lnCxWNP5V=12+ef}hFGP4+{`3XNw|cH^L4WEzOqUEbe$Vqd63EZYHiE2OipWDcW_{`xI7Z(S*X*|k*J5u6y*00b+i|cI5SiOe?XdvWr z*F2<_lQ;hYK^ts3KroPp!Ug7GJ`1W?Po?L+d}9!S^2E8Nkxh?|VM@K+Zr# zUiTk9^soE!-r{*zDGzW9)Bo!?{^u6|D!>2c z`hNuV-w5Yl|LcDQ^{>+SZ?6AGP=AEu&+m&)^CXP~I$lLGO?jdqqBH(fll!#*>dZ;@ z`k?u$If&U(Cj1PD+&Z{7Z0VkObZncaxL*tj4fPz_S_LCamk0C4cSiKVLh#dNu4Kr* zSoK~NQa1ih-Otk4b)vjKA<9TAn;T82&+?4-T@%Fc)=EiaZ1HtA7- zMBKE;EELu^91Dbpj-D;p~BiMTTDv=+t|q*h;UMh5gtJTNkm(X4=M?s@rEo8poIiEi zWdTy)I-sMV2J!ngLf#jV^vGk>qJ!TRAix@AfZDx|cdzfnI*dOjd9UX`35 zRQ;@OLD1-3kKDI}c|q*MBWfp2VOT(79=arPd<#HrSGfyTHApbMX+Ru;YB=~&1e;n- z#L4K)KX}Ys&THtAKftJB-*L}k%l9clMx(tf?*o_9Vd!uS&?_hoUo{O(4!hq+`CSFh~TE{}ag&MCrDk=oT7 z?s(GIxFfFTX;75b+djMO5Ly6TQN`ra1=B>jzkvuzdi4S8%c>X~-Yo)s%)8_Qp@baZrO$ax8vd1DJ85-OGdxmpdfk5dhU7)lg_k zXknhz-x7{nDzm{f47efFD!38pcNrT5Qfy7?NZxPU1g*TM34;u`0R?aC{_XI=nVYiF zF)@3cu6YOdjdD_K-#oe6;kY#N7zLbRX9sgW_DohwE5GcdGSzf^5k7k|8&+~EhVH75 zr;r9Hq4kA($9COX%c9<=UiPKD=f#2Ls7Qkb`LGq(Db%$R3eW+bx;sE1H+&_B5SBV@ zFe?dU2sO<77$wlMT};#Rm^^OQP_a$WApjn^?zGc7bv)`$gmpbs#x1ciPd%q)5~bf> zYcQ!YMclMLzVisQ9~e5eLD>vNl}r8f8GSc_j=-Yz3!x2vD+v|}aNB$6&1HQGc(1CY zN!SU06{-~}k!T)r>p%6UQeNHu^kF3&;t13Ear4R|{d{}4gnj!EnR*lFIdc3M>Qmmz zRg8Bp!zVxVQ@hZl>P_b=X>q-bNuqE_UaKm|u>6&C9PIO~_*%EA5-NBYGaXNSkHw>W zA7h%_pAAULeJX`;b=1|g(OFflM2nWxYpJ9hVQOxZ;y&n}=(i-8U6(8a&w301*7zf+ zjaTI2O3{`WR(UzF*83upF`k3`w<*e!2}AJWmZZL-}j;_GVQ`)F5A zkc3COmSvkPA} zCh5uY_G=ljI)Y4y)={EVrTHU}i;MlWv%mo|VfW=auf~tRMdPCbh^psOa1hy zS&4Ktp5j8-lv-`|wcEI*M z3&(3wxay%8{f8$65<~L1ui(s{To-Hg{N(O~gfXcipDqW23Sq2i1VK#VPr7u9z0*Vl z31+T?;$mZ8Kh$)%qQofm4cI=#c*ZK98VmMsf({%7X6AqSH8=o`Dr#(@Bk)&wU#H-= zo4VHU(yaBNFq>wPewJ<3;-|u#KC6~?bwUfRBeHP)y>}mhPKJBO`b1ye-;HD-0pd7r zRPTVJH8l!YrsQg`$^{v^9L-A&Ynl?839^2~0FJFlQ8{Z`uumRsAtpVi66hA!JPm^r!WU<`Uw^KXlZ+^zi8s=XYEUO4tu0C<#kbX?GqTGT#p(p{YJe>e3=JJ~0$#Dvc=<%hq&oArr-TZ3^R6 zh-}~&Km6_d8OH+7V0otYpQK;~<9k&6r)3+2EsJln8aZ!lhK7b#dVgD)0`^B2Bzt7d zX119YXHlJj#Ft_G=dMAPUXu=cas11-yz5lE`IW=q%5}9< zj;qDOqbWm{Uc7y?uj4dXwSlZQiqwVsUtV{3s?ZWm^!Vl+kt~VOOUUDL61p8jxlNKY z`17=^!$8KIt3_9FM%^~sbPo1}P~DzWF^9{Rlg>6H8rm=HtK*OC?68I#H%$^P3;3Qg zbl7A|X?aOOUUjkZzlF{$+w%gU1#~JzlPZQ$Y5jYG;42Rs#2DId*7t6WNW+ZD{=LMv zuv?+OjQb^HU?&i4&Vd*I`o&XJ4pm~G&V22#8HU1@&SXYLz(PBsU^D_c#@M{_`|4>` z|Fc&wR<23sR5wqDmNJDXHe#eR5prY}XT|7rMX|@O`uGW*&@eke5MXiEnIK?J7V+YN z2>NgB;od4U+ii*t2iLg{+z*qDpZhAHBCAi`4It5!FHt0xjTvY5 zLQoqC?x5Fy%Ao+d*H!FS*Y3C&bVaffEgI+KEddy-1aLV@Ue=n!*#4JcmJJ6C^Rpz1 z{h&XF`7a&8VvM&NuJ2j{zA!Ax^$Ri*-uCtVys+}dIulZLIr@lXIq6OKFU@j^?p&PR z&%q!6iu3mc|0ZEIag9ZLhSl`VMJUEDs3Jf9kx+dvmt0us7>=)eDi| zkR$q>QcBS#4gI%~{T<@JUKmdUWQFABLNfbbc>E8E^CzVBukQpu1BT50+C+@|k23vF zpZez;zP|E4xSLH$;E4GDwy9@TcV*inx`uC^vB?MC5 zL}hQpw*Jnu`1gY?7g3VqtL3xI8zP-?G-N+TBgfyf+O z@Ytp}nGj7v+2RtzneG^^811Cg&uLkD>!dH&QDOWZgTMbflUrp^r>@`jeZX+L&2Ccd zdM2@MPFYFlrw`j|-ycMG#~!(^PYCjvySgCYl9)E&q&Pu7ME6lj`3@2sfwy@SUc*Gi za?b~ZgNsK<{vR$JKH*X}-4HLWefVF0=AKW}5s?BY4Hds4@L&DT&s*HM&4T0g=|X|t zf4>jYgzcLYb)!gIn~DPm zd=JyF6HKf56E$n1nTW^;RZI7buBky=qgiRRzR3W5w3xfJ#8Em+Kr|Y%OQ%FO##_Zx zosHs9M?=>5f>vLL?Il#ESS=-V ze7U62d~f}r-ZjO-zCpQ1Yy%;E42u-kovki8K;)HR?o3vt_Qx|IwcFZ|i(C0xjUIc8 z8O-`;f-(#Kjq@ET^^F4V)ZVWLSG;WO8cxLH5aCRXHAK^}hBbnbLC5t+2jlMQZW~MH z(3$B#i{6?q%|g(bi!lq$Ej{8#%kmp%H^^dNZ@yb21x_$}m(ptqU*-aqkudc;(A4u@ zmtSk8Nrx!Y2-?bqiBgevA22Z|$=t)Q-Gdfj!BFpr$z%kRUmo73o&3_^LYH0TzWOmM zPng~KY#x`Z^!})60cO3?+u-G`8q6kpWTD|s;>gr)LOgczdfuxDd-0H~E(nKJKa?G{WavkZMKJt1@?U%+NTvj{A2bF2AmlswSX1zOI zf?lVBJC&0n;XHu29i)NXf)*V1Q2e!9Y*^nxkHSd|wlrHS@$_w3h4gv00&-GyVav?~ zDEM&`0kqaFbn%(8_8}QejI?C)Y$oPZf)l?5#q54KGc+6N?RAoXt?EoKbO;!|aDZ}c z^|bV~(t4MLl<${ZdX_IU=(x8$L{CXqR&1UIaoKwxiCukY(lD4>aoPo&`0O!rgyws+ z5AZJ4wflW?A{;6nv=ye595nGa^gbbH9hlkK7)8;KGnPJ z8B1%mOoTkn@}iATBsua@?zj^x1dG`H)>eT{e2h4Zvpbr+*5PHOc#tB7nWtfG%hn^@ zF$gIyi|B*9o{dJ**z3p)b?}$$T-VJ#Yoj&N?}(Kog_$U?5zpy1 zf^*cQ+?lN~!-E36lY9f>J8p)^v?s`b#tk-_%5GE7{i_+-CT<0%q9uAHXEX97OI%XJ z6}{mxkcmADkRsMk(obp!0yh=Y$h-ccR?6H!U^DW;`$!yws~z zbU1Dr168?|fJK^YZzPzTy)b?IH&PGh z9485-gNkjnKIdPJg@?v2^m2l&%5R!;0S1nt1h6by5h=01 zO`hi!LL>fJ>*bJfT}opsR%a{6#@P7er0J(6)8SfGUmoT?(}V`t8$u89_a#tA#q@S) zItySXO?RPUPoU;9}-aHqy zx*JuR7}(URtWKELVJdXu4OYbE572UE5 zXMBg1nz=3ci%UD+)|ltgajoV964aUOeN^D=<@~nIJc{))yEVNc(b$86=#LY-qT>TW zeSy29+Tt`lkc;3I?K^1E!H~u*sfy?FJ%Wwa@~7B|*GR8snR+dW8@GDOmD(W@kFA;7 zx5&%_^^Affng@H$_Ngf1in7d^q9b;SX3vU$v=2&;Sas#Co)v*hHL+=)(8+xJ_0<$A zGIV#^UCuVBQ7M_jDSf;${X8G+@eg^C*09H zfEpKl1sEe!CMnw+zbySe=R2rQPf7l&!KJUXJlh3$!UolLJWQ}Dggt~#^@&k#&UgZE zYz2+}5A#-@5hlp4U%}=^Y4Ei(q?Jkmw!X3GG$-n2gN6>)b4@WpY;m#f!dEZLMD3);&eZHRflF zM_Ve0%{H+l&bDp*nbA{8&Pm9~O8(<%&F-bQSBvnc^G1cuQOlNcuM0Uqq^vZ1UydMc zxoVd-iW(QLeyjF6+HPaNn7tlB*WliVdO9+WA6(W|IQfxSl16qmnR_>H9~+0(N%Ywh)=zo`8NRf5&a9Akwc$P0#)V zIVsmk$U*JZrCEz?lLspiv`N)_5$bE&W7iPlRp1l=dLZ` z*6$O)vHcRYvZiq_?Rr0(neEmcqtP^7hnpPNvT1^|iz)YTOO_P11VPqnN<-nxhob?RbgL_Cjvvz(AJC?f?CJHJaZFwYZcsnAoS34_BTavey zDnn2_9tebD$J_BOQ;TVJI$%B`p5DVf?7a9C{M$^M;kCrg?Z)uZeerj2J39wo%jZTg zFdz_}>SP=MHoFk5CvLijPerBT1&mwrQ2xDdsNgTJH~n>wYR+WmDY>N8#_xoJCVqB zq&-a8bfn#`r-jJNxJ#41>M&&DHO~od_g)tr{xAaG?=t)JUf1s)6xr;#0hw(h)7Hi4 z*%w;3eO8)%%FtZFxFt$nBK|E>OkF?>MP};R0^c1UX(+Ds&MLpDo9#Sk;#O2qDJu$hKE6-N76==)O(u6>>c#fA#oLmM}~ z>ptjsTk-Wu_`>(s`8`=~-@%2_dlo5El`L!4$pjl-=sM2XK1#<~{e!b{F(unGUPzDy z5eUk2sQshe#k9e?QK{FjbtsKb@=SJ1{(U7AY}vXYEsoKC#jy5d z$K|++^QQ*vB2)nJ%@%9^c5|D)6L%Xt0}dX1b=iKeZtpZtbddm9HdWM%4MVe4d!wlU zvZEjusiN;Pz}Px5F?=XKklAcn?$3HsE-{i{vIo_Dv7$IP7G93?bMuRm1KRe&Rl=S> z9yCK}Q!;*x>5{sNgx-l=14=yz0pP{yEBL_kOShdaQ{mtuNrLH-SJ#pDD0FktvF?Wa z8qMvKF=>_0YGY`92T>hnAe(CXl_tAyV@o0Q+;9s%*#|u$z-~n5&krlE2 zSHJV~mz&xF|Al^F?A?FK2mJhc5C`DLYtN<&{km6^FY$zX$3e05-V&ma*P!-pX23{^ zk@`d+#Pe$JYK5g#f>K-S9(f{G3FCZU+M0u`_Ax2j60$6`UEnn81} z!O~JxFPL}ga~P%NjP-o8&`$Q3v};q4;>c4nys)e>enpnvtY?NR_0=N7VOGdsr~aKv zGRUEMB7{K|ooyDj%XpRjQI)lNQWlJUsipu$k zFx2b1Vd)y%8l)Y{3YC07md67gUn>u~;jj!|8pLQNs-nj?4Ax#qx^fig15!zb1K4;e zvW$uH*BZWn*FwADP`5y^-nj9pA}8%AAoQ$+V=fi4KlXL4-?rsU2HVNLf@BNQIy@Vx zU#O&=Z(OsLsXlH|S1CG6nG&vj?y|I@e#LT(O!{zth(LOCfcEWoHx8Q#-inoPF&jFl z7GAjF-m+H7Ph6LW$c7N6MZyR|k?jQz>ZskSzDP;z=JHmD4E)p$TDN$se6!}mi}8a} z+rbM;*<4RO93UPfEQp*xRfp;JTdrNn|SW)b2x?*1RqASh3ec&T=s%Coyrf zNK717|4e=*ehAZ0;?jF^!iV;Pg@@D{-j%QF`xW7*>B2=<&o%uQm-SDPSx1u8Q6A`n z=TA4@rdytQ{G30jEy3Os$^D`Iy5TJrrT#z()`|#l5gj?~Y}H&EEO#kIFtzf;ds$xA zJ$d!&K%V>a&{_4_0r7>7*;e6`1S;koI$G%5mE{PTxf*opNQrmnm3_ZW;xkmpSS9$A znC*&KW1{*9uSvw6F5IH6B=E%3gNE@M&505{aD}`9wka`fs@zm6=Fu-EDmk}lumuVyAE@2t(>I8MFW96R@oe_G!mT0J zKb}4Ec<8|0xOz&N)JS!gargw+hWu2Jo3rLE90R?VT$Mc6+4>87 zT7MW}T`j$=9;YfD_X$G580jIDniP0JvzDLME{ZVbyvsbm{2{<}YF>}mDC}`Ov%SXv znb)i`vzDFWA!5vXp~80kNP`OsTi!p__D$Vdk+SQRinC}tOg(9MZJ2u203%Ck@5uva zY1*WTqq$QCY$2d#l2S-qiSJj zZ_R5jQKC3&h=Gn-Fa88B{6_b1-QWp4zwETH;Fb8}eqBW$B_8F#wN|c%N-#q99$cGZ zX@C!{Zq^|@=d8>Fn%7duTvN2CqJgc|@Hm~0<$367mD<%dQKgOP=~*m3)*qA}06UKi zN{+s?dr+5pq~>YpD6O)MOj!V1f8(2CI_l5r5}Dw1>A$+uLK1+1?+CAZYmN zvst4Sc4=>Dii?rG)djqNri)z@r4qdBL zys`Gy%KNJ_4Yt-XLmu8XFIC6&eTNUb#q6pgkW0`>DwHC+BTIVNM9coOV5C%0wHVt% zptv4p^?90J$9D?bjjK6%rusZkUsVY(=2nZ@Agd)8p z!5K74i>MSO5K#dUA%KJ)U=)am5GkRA5+F*X86lJul6)t?_|5Zv@AG`W-}jPVT<1F3 z`|NwKz1DrNwUQItCSycpq`dQ@&SJm`=A}bWS`Z`|Cw-{9{xc_FWVxT%mac`xCMOWf zMsB!7aS#(ZVPVSeaixZ{T<1X6D@ds#keTw&-S30U4jx{~Cw{WTJkNZR>W_8elqptJFQ$RDvYWxOf0oZ& z%wkns&HTQ_QK%W->=j|mnb8^vEbLfeHBSC+bDk@VQU=t(flv z-(L;47{Vr8*h6msEgSjl`qX7`PBwFh(4~i~m_B!Y;p0Q{&>`0CYDL#E-%_RpD6`U- z?PrJr2fxONr%pspzM3q6SG43x|EhCE$ha?KaFA}4mnW84#JZ9&X~&sRcb$u0oK>;h zOxnHN_4!88HlM-hWz=rYe68stk3RHG2;t8X%t8nK;?}zyQ)W;nkbBpS+#l#;MEl0K zv%wRZjrM#Z(;>m3Zd@PMXJ{fu92B#K$VuYYM=ee@i@Tng1r=4`IG8UWm~-0`Oo_(J zLs7LE{kMEqV&u6i_X8si#HPtC}MkthN6?bl`P@|XT3uV^+eIQSJM zdBWQWYs%O}XIO?2MC9mueWL{()2gk&e0)qP+P&xD7X;lLer*wj7+2GLazT!$&p{kG z61s&br=^ept}o)&>yC8j->~7jzmTRebnY3PrH_xO`*|7gFXD^xm_lMa`|U)#;B_*gQ*zX z3I8Hb5A`#PaLT4Hb&DDS^*!i$ORj(snpdCe5x!Fa8EXXzjdZu#3f}|Hyh1H$M^={>Xk3VD;1YTkFjJl;ZBv2 z>VDM)rjQjKjc}Pk1$In<@$c?3iYjd`WwVwf*jI+nXXc>&5kmWlS1w%TW0YcxNaNN3n5G*AyR(MXQaPp{w zc*)}@<++X8`!yqw7-l&G>Ta*TJV&?|rE0^BKwp$Jp(}0m%YnGoE zO0W8wBR0UW=-dZu5q0(9{}$Q*s8^S~1k}s3l|$>9<$rT?qaJ{EP@2VhQuN>5B`A3( z%on29BFld>+bTJx0`Z4%`Ov+;?{XIx4j-Ar7uv$uM++^}HD_~l>;VWq2;(Ada@mWd z;c&eFVkg0*qUPq84;C|*Z>R>kwOlC@u{pOFMMI8M?p{7=*iHRZF>9iOgmNI!tE&(E zCMYPHY+S&sPgA0Ht0ZG_;b=oiC=`g*BSh%%UQuA0a^c|dCZG%|eAeYF3K~f&bi+q2 zbcz@A_pl$-&nuDY1mX;C2#2@w<7sU5vOU4a7 z=IgafwY?kavM_7e2*KS`5@2V6%Q%Zs@QyNBo zn{8XIbR$6vIf5#86B}PL3#QCZEbqKPz=oEPhl2_}Z!C*vMI6j!!$V@Q9@W zFGnTTdtx#6*%kzXnPToB@PIrQCcmnEmzOgI@O@m5vHG55r*KzuCg)OCX_oj9f^vFs zQmRJzphRWcAb85sUy{xLro`#Q**_85j?f}yg5!Q~_}*hT4f+)+9y6M+<-ft0)S~WK z?**%^W5zq;N$iJxmmzL#Ap8T(Dw0Eow+<4f*5q%{EoXkPwstL^q&Qo}W#k#|>IlK38atw>5{!zg$1} z4658JIlUEQEi-18WotCon$Q&XQhniI-T2#!HM5u8-qNyT=3C{^->MkNnLCE@jvHy* zZBVP7jYT?nK&sk{QQ++BhC*m;K&u)1Qsv3JR;Z+ixv4tW+MQ%>$nC~$fPK3VO~46% z=ALGr_xDk1M;1x}RK0HmYn`N9$IB)aRSxS!%F&#K_55UtS739^GFtG)?xUhKXWP_j z>yOx^*01{A(TCl9XQEr$yf!6Dc<+z3fbanFU+DTob=OD zi1wu=;ewaCs(oySij&6fn%5>~AU~|TgFN6cv~OKKqo%Q@NYlCpqaRY$r)>#?kUO_g z$4{8C5fD(<&WbT+nYm_wXWzD?l++Rao%d5 zpqO??bAo$d+h6Z>mSoK<3%vTFR1k?q)}uMf)-$r`&XjmuU$Lh%XVb0cyS$sbV#bVy z)4ThPrBoOVsnTN%oj50@e|L{N_jah=Kez|=Oi&3D)=lO#s_Re@W>Q6>U(5H5y|HU}6@YtgZ?0Z?U)8T0{IR|+D z`rvq#w^Oau(jzl6QXl#nR#6EXWTscN6ZBPI&gtrM8R}R9#?SwT2$?l|+utwtiA?b!@#``2u2Zh!23g11BKdw`}~t8A==h9cW$Q#7E&WP z)K&7%WRXeR4}yJ86p@ml($& z2mIb#Ud!`iP&)>6C0gc)E_877x3HR1?ibzt(U~B{d}ExZ_xNo@B|9Tz^^W@R?wwWgzZ{)+&d*R zqRu#cb!OKU-Cu!y$-=t0=}Td5M+0pt2_oK*4FOsv5lVdv7@EYDc7wW?0 zde)n8@M2uyk+ditR8RTHMfXgRz$X#tH~f}}F1cDygeBD4a|l4JtJG_% zPJ00x+L28;t=dwO?Rm|%F4)B2CibHAYE0V=1XrVui|1AeUu@$&vAE_WEu+PrnsgRp z7uCbh#r?4}8meJRi}8U?LLWe8y-6ur2X5a~stJQ$35BORIuiv<-rn-Y#Nvb)--j{} zp1ECS)>XH#!fC4}P@PC7hWW7L{QDu1qdZP;Gw!2DRxZ#Qqrf>| z_He7--01UY-Ay0w1z&yV@bPu?UjQ-(!hMypWM8d@rzjANw{i*Z!|_;248N9P5%jMBf_r*)1qIRs&DTDh;jKUF&?}87bjx2wjQ?N(`o>WzJIXDUl_Uf6B&`_ z?^y@~-i+zrz+OKS-4geOOp=0n#QuJIzgt%hn>2&jxkTB_;UjW_!jP4Sb5PYH@9~kW zYr0_1!6^Q|3nB5Q`HeYrrJ^O=2>sf3?e$Na+M5dZi~N7eIQM{R7v{a`)GuqRTRo|3 zrnc^w*RBAN{^uJuq3;5&?B3QF{{P_G|IKK?Bgy|ep8U6o|8ICCQ?pSnhW}v-34*~E z7x@YCjaRqSea>_&#MDi9O({^8=im7~b&%Y>Z?B^GAD2FMZn?W`ZWyB07dXfKeCHB! z`zcd2=>Dxw0^Wd*1(4mm^_k{6vb9nXlOU#4D`j|xIxN=I=`foNS}ESJ|KJ~uV_WVL zkcK+W6`&1sa73@~A+fuJ8^7Kf-h7u)`^NrvU<*6W0TK^=2JE(Oa!DfflVq%4c~;V< z8Sv;b@TKvQ%4+tK`d&qP9~g>M-#eo8tsiaK)5|{~1U#K`={-VBSSvk;uPA};+f5MSZ>qr*EYil)SEb}?o*YK})eaqTI z(S^@Rd`t}o*n0%)OX2?zx3;$A#Y68ixnOW6r(~3*HV%b^blv? zTmlP}F&gkU1bu&J>otEfbHQCk%!NNjUwKS|QrKN2C~Ac!7qx@WBcpia4rz99O;rh( zsl{KKO5)F3>f&fxaE?;-SU><%hFE06!te;}fE@hTVmhxCF+jb$V2^9}AnFV*;rw+m zW#`M~9CH5%ME zE|apdM8Z?JWu)*1zM~_5u9+YFY4d1uj&U{0>3~7CGAYMuw1*mGGWuMmxiaf~{u3ep z>cc5@KDcvr0h=QceZsYO2|4XpelQ|t@m@nH=Mev@hu*L4h?o6?1WC?!9Z;0~1w?=w zYA*Qs&hq?mjSeNMU+)dz3FXrO3%i|H;JzaA(l6fKTXHdeiDcJp}MJlHfpK}h=? zTI)=6;ZBdtcOCrIbf@4In2)3?2zUq+5h>l?Z#AT~RrP#Tdf(Ba_zXb=1?nHiv8)!Lm z50i|eYQP6%HD1-3?bIVh$Rk{K;`7Iyrlmh=Pc;92a(>^6yIO{|MlsUBZBc zk;G;;JkS>LKhif$=fZi12hR`$hgjFiz@ryrgaiT-ZgNrd7RtT|DuDx=_Kj^@KY+1RhkV<@Ho@b6P#)BM{yxr=rhnn)yvJA7u4< zR=0>zR)?_DzUIHDNF)%b+hWwxrZ5JT0a*f=8T|vnit>pN+PGb^9pP0$e-?&8o3*51 z0jWxOP7ZnzD)zOv-w>-Lsr+b_sUQUocGL5xYb+_Y@q`#~+SEhz+&*tf*kapnzJWO70Yy7gl{d(`qDF$-3@)&++1x3EzxIq+R$AszJuI!VZ8U09{WmCB zM`3|q$3LwdsldKG?Z}Mz{vIpT%1_fONiBZ1ox6SW=vO&~aT=o`U+h9@)?{j%&khsK zo?NK4OtwYnj7OKH5dEb6W8}WTS95yDZK!Qn_?K`kc;ZD%A)2<20;4|V(soBmhqVwP z0!Z8{uNdRs9!`qH>GfHRRE+zKq!+OC%J_ELpjormkg1H7X$tcMsi*XY4Cj7CgP8sG z4$1!0Mjh1CLllqNahAWHR&iGP7w&;n!~DboFCp_kS5|;mwO-<1k}t^Gn2)-5j#xky z59z8hN)_rLhC}9FFHk$Z4W(+qv+8(^BBhIuRX|w~+5=r(ErkrRm^bO1!veo0UkiAJ zQq^q~n%(~}6DQc>Jb}t8Tdee(d_(|$__}|=E4`mz! zQ>EX{H{>TA#Wfd~3=fHXN5gX~W!v%N&n~$lW_8Gu8e@46a5>4$<$|!hgbq-D9pdklN$<@79SuTPb?{1kx0NaH)ca2E;ha5jn^E+Mp!THO3g(L zZgh@@Io|o_$gm`7z*>@N4J?#tSJiHIX^&K6&bNq6E?FNEAY8S}JgVas z*l{#%2iYfaJM2B;`^6_}!JdG3GbYqrmwxFbR6JEu%+lCN<7_qAjWPo})J#RtDYN2-Iv(8}`;wCi7N= z)Mbs1=G)AOx`M^ZRH5SiSIn0|4JxO6FB^ox`05STb)fR6ImU)N`|XXAwN;Ff?GNt> zyi<3i{1!S{T1t;7S>r)!Qhfpyc#*>00^gF9sUJua`BMb%yeJ-lJYh{W6aZTPBa<5UR}FyOle1R_ zzO&}k6;&!H5p885RyF~Ac|uu;Ofqy?eGU#jF&Lm;(iUM98cq2Ge5nYJW0V!te+fE( z3T9Pbac$}Gyx{Q`w|L-w!EOh`O0BGo1ge=IIQx7t;Lx>edXtBqhP;k1ttHiWad0Am zlY&F`jhl_(w3D*ZCgPkfxu=V{B!u~ir`l?` z&*qTd6rDUd>WAd{8E7gli-%5ES9A9((A3^ZUDf^zhBkg#>0AeDzF=Hza*x1Kz?y;b z{RJWzejN2&Cy1xla!wtXCGb74V@M+d@_OHhd|a$(aXa!a58^~vrk_ua_s-*k@(*Jp zhCt4=G@U%jHl2J0biACM52K+K= zY@@Om(9}5p)mv`eAS3`mpriClf^p^`vmI*gE8+1VzIPT_SP!q@ecmGAHW?dc zgxN($dA+v5<&Mw6&6hqA3&67we1ls%^`$i$lpNG$A#mAc!0A**C0DFVgIiyQ#3tq{)B+G9024(rtF$t z5xR9JR#emOvlH-ng|@Rkv^?SQxxAYdhQ~L|@p{fIFxe`KN|X$rxgbD_5ste$TLOJI zX1f5n-*llxne#d)~f8cw>!_F?_|79Dt}njB)YP-t zbcL(bh>n1`qm=eBC^8cC_Bb<136%KtedW|1ktUX% z+yyQ`>KbnXrqVW0`1oIP3W7DS=TO%EF%#Vvi@bR#@ju_y2J{zbd0_>7{J#$Hk1Jb& zY@_0bf+PR=uET=L6&n9!O$@JD+P^-NV8|nvfI`TD{I~yUKEUG(7n3 zPg?OevH3|We$t8`A@s*TKWW7eD1Oq4AF=c&t@r`OPg?OKmj0v_KcM(YEB+0w$hJ=c z-Vv~of9}+YOaCRq^Ao(kG5fzn0R=T6(4 KDn9A{$NvFq;qwsy literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_app_redirects.png b/docs/static/img/guides/azure_app_redirects.png new file mode 100644 index 0000000000000000000000000000000000000000..4368b4a2ffa6e0008c0743109584f92bc0e2268e GIT binary patch literal 129721 zcmeFZXH-*b+btZrh=7WyfD{X$R0Zi(Q9-KGdy(EkCqM|r0%Dj6Kr|sB5T)c1YT!TLhCV2PKwO}^w{GbAnXgXMCNdAdIb5%8aAaluW{0|QipuEJ zsaHpM?$15Ee_zFv_ZHb_hcA~sAWtnHzV(QbW{r5*)qPg%;#mUs4D~_Qmc8_J7PPm?ve^OBWYDeRbsOnKn0r%|I{x$MEtT!k-YB5dg_HPhT9J=3S1VoUjG6cSFS!S6;R@}7wNtO2O%4Eay6zF$sQD=8c3bA) z+jph&RRW#|RbI-vI^}J?vDUN_hl|uY09g~YvuXtafj8hOQt{N}D@mGuKz0%Q{J^E!8#l4WO zz^#|85MlBdBncJ~`tiunu+x4AbqcCc*lD(UwkgiPZhnQSWlI>n=ZF;AcK0$12luf=5!2Q6@zxJ|AJv#(hv$GcUz;;6L8bHZc<#9u|9La{mIc zDahg|UyW+leqg@Sw9>?>(|7&bTC#ca;^ybSsQQ?P>bjZ=ETs3uBvoKC2abd&>3CfD zVK3KDhcY6edF9?ug8pj2it%*kNO0?lz{kfJ$tX{r=$8vVBWQfeFF&jiwKq~b|3ycu z7}EP~AZwgS@`QKE-RI59oUlvNsW<5=)$0i8G6~rF=Q9gWFGjxe+N0%7;o{dXIx>07 zxQ|WJJwukXHH1ZrtY)5O;!#&|I%YOm^NK8WQU(3-^sC9Yar=U3_wk|avyO4;{Kbd6 z@4QRL`G%R9D_n8rSFRLCFHezou!w0m)gOzUN)qWPo#0Nbh4U{spYB@LaL#G07uO}w zhA3V0IQeseJY?iEt=HMMsQ$C+p{u94K)u*qTW?^skL!{e9EW%$ECc|T;`AqXy;Ba{VI+jNp+K2U$D%DwIN|8+oEeDCT_z}IrZfAw5+(Dy*kmk zwT7niu zQBHdtBvHeXsqmM8V^a!vF1}arq7oNNs3G*QH%-nY0KdA#2C6*cF0x^otQxA!;eSgU zJaxHt%JcbT5dnRbVBFwaZ0bF5dt+~Fx8^zSsXT|76MQ&-_jC)5OlKisPWR04Kkn{=k|F%pfcI zr1azeL{i0(qsKw^m@gt_cP?D@TeGaac`rei!7FfQHr#W>$o`3xSTWk+8#CtVY0!#~ zRU2C$*Y}WQpXQ%?ikZ3N^%b2dwPD}U60^5@ZRx=W{<1we`%_3bv;oTFtPp;TgTyZ}s2l5#kh4ZFSKNgnd3}F9~QWCfRlZP_KfrXZs%

    ^ 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 z zO20j(25wX=E+a{WB%6&_ote`ID-)Y?ccd&E^Z{p`rk9!uG*ewauU^NclZpOsw|gA{ z!9(vLWzDvPp?62$DZyL-|KR$PD8GdiymId!+$Iw?iQ7|t$zAY>A^8nk; zDM|U*cD@xnzr?Y=nB!8vIp78=)Qd=w6fxQD48)($;5ARiTx{_4jFg6K02Rk=Q zCo-v9HjU@~-##Ht(OSTz|;rTmj$GLm%=gsr(e$z)Y z^Z75o<-1+i_xhc^vVPh92HR@L!I>KKiPUNJbW!O0y(3a_El)@R@Q7nehScW zklrSbZP%Df?G!(%|1*#W)By7vn~dc$u^l`P)wjRcjyyQYwX>VEmn5>C@)!e2R%Bsa z1^kvj^gPeL;g{m}7>={*E66J?ZCXx7A?+hEo-V*!#&}3|$^X+$gf;PRHs-5mAy`Tv zDE%xM?X9GMm@??Ne8A33=9e+f>=D8CrqA&S`HwYa1ohX{vnVW3ykp&2M1%=Uh z_6u(;Q-wmm-nUlLl=%_kLs5r(G*mSoYek*5EIxnE)J(fGhyZC%u3s4=baoQ)9+3Cn(QpVG%D=zzD zL)Z+mWl&3J++r`ZMa6w0)iukSF@d&0x9DS_X*y)84 zNr(&41gJT(R|b7#A1K>nYzr)f`_mc|c|+7Dx$*Jwb~@c_K@zMd@0sZzML5y#R7z3t z#`wTzA{}fQEXdVL)3*?AyOEgzT;>NoBkppK(H$}`@dWFzJ&%Scb~6wx2v_Eko_CtlZL5t#S075Hf??(b)Jv72V4=yI-TJ zWsdXF_8)z0T}Km#d@QE81P7~g&a!o$`-KgKJK|Dv(xw znq%EY`aw@x|D1*EL@SE|jDz%TtS5jK?8Ia|HGOl&2Q=gq>;_jwI+6p^P;oe{;HHT@gr9`^`1t-^pOrROB_Ij|5YI%X3f_jG9jMDDlkhn13}7Y}>Z;{H7u$juSeqoqv@;x*2vL=Hk`E6FDizKMtJ>X}idEA&nDC z0Z}43qH1c(>2klZV`FW2dy_$L(-WbF!Q)m{sJt{aQP=Ps-ppGIyUEHIUqW^Tjur$+~S7-4_-nb590!ngtuG@_QKs)Cnzv z^o18o)|N{O55ALHTf|38@70=#Fy3p!QEy2-rCq7n_uMBoHj&y^X3B5`@gG^A-oW^( z91eZ?i~G4v;)SZ`#jKJPlVEI`Nr&)D7EEzR<|a8kS43>7ul1DGY+2(wZ`V^N(?*K9 ziy3r*AiXc@V^%klODI16Al3dMREPPWfzz_W*AK_Em08P+Yqur2De>)V>Otsg#@rgF zdSxHdH|x$9)3RS$c*W`FqM&d5^KV|}>5=v5U17-+|Awr9rI&eF+?m1~`nPtLwa?TH zRyJq-SnEA)0ckrU_4*0Sbvw7U%Q>4ddmep1oXL1FCF$8|gif}}%FZrv^ly7Qg7G1{ zs7M*yYjXu^mhB`kYp&N=&Swyhu}g;cpCi~-_t?T2fssk&(CI``f)+P1GnfIrdX0>6 z5V6~it)LDdL$>%!J!t_U$0+4cf3x19OBr-oDMWZNZ}+XGx_13tbwU>s7b`?Ue15$i z+RvHP*Th*@k=le`O1my-)*Xsn9kxHNJ`c)%m{7vvOG37pbd`~Qk=AC_Oc%#Q)IuzW zm26=@+$qXL-}cF_wm`x746p$^6Qu7UV%Re{*di&gsX1{TOuIXkoQN;3o5dSzA*tAnHHJGnMcq&7|(@#*Vkb73aUb*J$#SMMtInhjjr+Gi;*-RDhQ=4?SaU;m}D{^?b@mP>C9XwL-R z$_KLK$#N|YdIBU=TfNN5!U)fk?^Pj|x=%WPO@6gk;iM_Lh3>d?l}C}jr^84nqrCF+ z$sU{;G;kuBN&E^<2bXQg}j z`T3yBG&y@-CgEw{1J_eGXveh}Je{?qR_FbUq%*!MA|fJvbQ}1U(jSuFkhPi*z&x-L zaJl{gm59W#SJN@qV<20CdDpMS7csdu>C6b9Rjd0k?jO13ML6(c zc9^;|vgbBLI6n!_%WN9z94)yx4ph7bG5)rh2OHFP5JPoKSyYq}+I4e&Ttz{ZDLFl5 z6CE9NeRE2%uFmtRaL1aAVp{EDlY$nr?p@teF?6Gw-F-jz{As1ve&(2L-~`LxZ$vuM zH4mdeE1sPAJ5>GcFOpnWvOuZa)C!4+gLZ=uW1013bV$4sa-X{FCOX`*SX_ZcON?!w zv@0LCEr&w;KY&6pzV&%?I2*1+U70VP_pWSou1CfIH1_C+`*chw@8OlCS20c5Pe7Fv zJE%IWzr0aaiksO|ySb_(pM9sPSqJr*rtso#(CWj1Pgoz^KKKTj+4*C?Js3l-{NBRH zw$YN_XYqVVJn4cUpa5ZRmy{VY+H(hdFtyt_i~& zB)ezZ)Jw-7*uQ^&-%BO8g~J6paUE(i_%BA42EvVTRefw=uybv(5~NU=8qMXAOm0*< zpHNftTfDo%pKIr=7Jmp)A{&>N`|V=7chN>*IgStQ%EwV(BJUr#5vwCIz=VhC)=?@- zRQXxUk=m+j6P^yPS?r2@P9DGh->-Y|79YQmWn3mwz`7r*PfQtS*t4k$DIARs7`}(;* z-~Ts9^dJ6N1afU9`Hc_0!7~H#+m8UkqH$D0PwBt@6v(Ke{xr=0y3Su;+`0tZIQFV; z&z~Fq`#-%Wa2EU@s}_GIQN8rZCdY+yCOA-6KS3JC_UG%$O{`JKb0Dk@YI6%7N zuTQ@F>c9|wlRAFqXa5_*|Jx+~5XYw#vRJzGL08LBi#yn9q4_mqLIYp>^`XLfg`gIL z$shk|Y5y_zf6P!=8b89A&!C6HV=9^v8u(%zFENZ>UDv;G_WT)-wOVbXX_KLgi>XTgARH=|j-;NPU z&V{)*mUSK>@CO@oqW)oN{yJkAuug)ePP#NnMm{>;@)1eF%fN7L@ZfNv# z(}DW#A;hPPm3Ev&YDar}$~xS*09U($>FDfC&jk6-6XcV;r(K9pn)=lVT2Xn*H%m0kDX>pAl07I1bC~1_(8%w6&;C=f1KGPdz-4h&Tm({7iqa5Q+3WylQ z@zMy_Jc%0lLa%IzraNoR+|&M7up%DHf2>NpvuEbr>VI0P-+UHT zv%b_gYoBDtJ0%w_=N>p*NJ>ETfZMet;Idyo8fm;+(H7zrR?k=9(~;a>5zln2o;~O% z8Ua`7I^HVRf5v9mwy&_|mfi;=`PB0O{#Y1SRMxq?a6mrIyeN#M^pNq%RPYujvk@hl zYfIhfm^mgF;gu@m*{NmJ@e4Eu!T8!i+IKoAxy)B@+)B)U`C?lj7)Ex0KfQDKzxcOf za$Q7V7N~0xOB~KxO0UMM02r;!Y8e-dRUFq8TJ54E7ad|1wH=4qblFtp`jx7i zqdq^+)+uf~cN2}{TbVeIvGjuUcs`?rFt5&;BITPkpJG3$`J@_xE?g^bcY<-tQwx-k^h_p0-&w?d301^T(oYs1lq%v#FLdDb${XTwy9w!4bpRW5FFevgWPk((^S4 zwOr4&*>VSQgY9ju9UrrAtm(=yOh&M%iB%PbIZnmC z?#|w^tdx{QulU&ZgrwL;r~1to`d6*0(It$7H$AX-pa1s_da4T}@D+qxl$aYX@qA%< z9+^Z(^p8k^akIR&LA_NE;YEl75~>*FW>JuylJJX+T6JmZ^}gG(Hv{wD9@nR&VtlSM z&$Xnh*qO-0j45er`}TJfzg<034-;u9v#pTMA3G-KVeN5KyC-P?I%pjC@;B~+*ysVR z9f74}PmJv7fiiyyW&6xc;-1LYLXKGlfZ5#n-^}J&M}C9>pTpOw_v5D2)tto1eJ$A? zKZL$gI&I~;6~Ko28(=poV1Lz3wG}-TMJm|8{WU# z1fseFFoeonju7${xSb7F=@ofZN!p7x`iOAQ@lc9t^&_zqJFtMk@&(_7ZN;lx16-l^47P3lV%|E4K79 z>|GSdLEU8;lIi! z8xaQ@1*#zi)__&$Df|1hf(;(!q7J`qjJRUBkW{h0O_@_fYD&skSq*>s$LmXb*HZu| z!76~7@q)))IAFn=NbKBU|Mgdo2sbY8%`)iiCF&;Zm&*z?aal6p{M8}jt%-d;OyRm5 zSf_puVO3lsfb|0GoL)=rTdk!#yKbRs7cS6N%cM(djV(y8St9+Ha#mJ9hf6UVc~6qF z&3Q%H*WvWL0WG%?zJ5L#sG45dTVI6Df}}HVlAFL#_tN(3Hl|55_zaRP7_h0WTyQ-W z1F!>az3(SX!I1#c3d!brnNtdY^Q9Ne=@JdanK8x=`~wuC{ZaM3k=#)5NlQfI=a*85 zd0q=!v_)NTQ1CxRcPOWeoh~v_b?A#<%)lK53K4u=I9XHbPhaT-swoMwLH@;rUi05PX zxe~|H9~QRg8LEW4nBi@6hcn73oNb=uz-tNf^&p-8m`-Bnp%Dg#iay~-PsRrF{IJtqk51ZOz&V}Yd6E6y{7BRpNXcFfVJmipC2fC@bPw(7wmd8% z7oiZ8T21KLDRYn^V0~(nINZULB5>#RHB~(^Qm38P&6*n`DLGELne$0Jh)4sfCZxpx zaI6|?h)-gV)SR(`4pWvv$gp-oze-J;bQ=rID?ttTO&oWJkZ*H5UrP;zR&e5xYwx61 z!m1bgZ9t4ldP3n__jw@h~p!1`!y*8|8W z&Fpqp>dspn&02u{P*CF^SCJ#&>XGDOH0U3C6&tX>=t5PSt!g5l7NFuaA+%$@Ho$d? zeQuLiwn&fB6tVzG-Ky<|_95S_Ly{0uW%3ed{Fa8>G>VA_{#LO5D{A~b=!(JuaG;;m zrV6RBP20|=0*8MFUMW>+Qnfi(;pFF)=S2}HO^-^f3K%cq?!Lu!9qdG~-hxKZEeC&p zJZ6y>R>(-37e(-=FweG~w267f+byN#MF6oh=9sX0_zed=Jz(_Yb&cWNRqdk$KB*; zmR5Uk2fT`GV9 z^Pc|k%lF6O&v3#6ARiP9;{SU|;UXCrbj(}b#~b?G{=CpPkN^54z!^R+9{xR}_4o67 zuk(=6l1C)}Ymwx69^cun9O`rmC%fQ znT{R~nvigr8_GycOFOq-u`U-i*v`z;lvzk%lAUaUIL%5(Pf#KAup*6dl5=cnQ zBU#gIT-WUFFw5P#??;DT;m=lL2`NR8Yad?ean$|%u36plYoFY(hTS58`9seO_#FnA zBC~hec{@*4r#iCw?$`GC8*q#(3!UI4)6h0n9&V0c2QI!lO%6_bZZxPom}O=sLna?e zM(3o5D)>z{;qE`KGs^UDf2YH-5Kx=YC*!XbDNHXuX!R^B%9tUtmi--Rc&!l<^LVqL z2-Gm)hPn}yMRI1U-HokglcuANS5`(TSr!+CDoAnQFS(gBUm~eijC^ieJ;s}Iljq|z zH{MfPLqhI}vD?!A?(e1g+h4~3HvC;DY|^7608GXCoI<$tvGG#+(LZ0qx2KdCsG90T z3oKGAHbl$jeq>_J|0?H~VmX3YtxUYVch)=p@74CiLr5$8IQfH1Y}UT`ZZF#fPl&uLFdw5&JCCyK`Vsh5UZ0vfvciiRbWRgd!?A^s1DPlT2DAzNHoh+h;fC+=_^Tpd~U^y7ZeCUFl-W@U?{E;~?u zVzEb2WVQ&D1at{4-~)Hd+|wcEs6-pWSC)zo=D-anwZ`WZ>Rj~>s&QK4AhOUk`8t)n zW}Tus9K>W*)S&ZykJY^Wp=nvp@w? zXs!#o^M?}SJ-Ow zc==1Db*|&~N>!&5^{@_oF2OS2CYwhvfd%Pu_Uc!AAWnK>JHbL(i2OSqYeR~u@SxYA zRj^+TVp=Q~(9g8SFBg*UIwF!j8dpykO(}nn7*Rt*`7iVqXUq*wcsrPy5YZ~p&e<=; zko24T&h5%{m62RGGPm^F3JN=eJdA=& zL}$K2`L?*Kc4vG9Zib|*Czu}i6EglQx$im+#1wULxwZm(wrw8}>JMT0mrF4{jx1j% za~jT0{FIp>a@tbLrxnS_je|%&X;WnTKRE=EtB%tzT9ib$vgqNt%yVzG3f1)#IbmK# zCYNc12wB&pO1tc;;+u6f9%;O%s^_cp?J6@e6i3syj71*Xci*S;U_5RX3_hc3{V7I) zdbiE6cxmStZ1yX%X?9;^64vJw+pM-=PQ|sTS-7Nn;xTDJ@Uhv8Q!u$alIWrII$&3U z4UYLYO+rYKV^a6NvMPFTPqP_0VM9b)oGxbjG;~Aj9=6F^}DPHFdQpc|^ z;&O~$-vkzyG%TgVR3l<~YD|bjW|_5XZEkR`^MF#UbA3xo3juK@`93;1jG)Jt zJa0)0HklxagC+(xf*=>|fUyf4TSvn^c2o)B>0|pS;ZZ&^Ow@9hqU-)^OdYksPNNI? zE-lqc*G;^?dSj-0Rmd$q6nPf8QfjD~l%RiUS-o_sk<rda{1--&+!D4r&1R7^wHN_9wm-gKFn(TwT9&dfN- zB@zRBWelDBO4}5yTLJ=xE8N2Mag&+4qzQ3(fNk}Qzi4w_vx31;4RV{vAv|t6gRR@D z1(RE1#>;?JFrEG*s1h=C@Fb=OqQ1|#6*D@VI-Lq(?Vvy)%qAu$DNf}P8mOLp1Lt_Jz^NfI<%sma&^uq^u6qRmJcIOMTUvFdk?dbJ;mWSs*U6(rErcaY01$3wN(vPk6Fm9Y&IeXe!plK|n~@z4h7bo*TliW}m@!_^yWt z=_>>+i?+aI`3kCDk)Vs}4;a7MJztrdxBjwF!{xSCwq31TGa}_0m~%2hVGXfQHLYbb%bX4~TikmWKWU6$)6k`8?Rb=#9PnCX@SN`de5cq^` z*J7vkT3?@(Qlq1Blclh+k-w6Ph3UwNz?jKEJ=z`Dmn|%RvT)>kb{ya6fveu!l~O5tRez10@H>;n=7$ zUs|9zd*^Me7gyq4&6CHgiguG+9j}l8i1uTI!)>vRMb*0fz;JusZq?-r%i1w|93CvW zZQuN*i;`Ysp$NE%;KQR`Px**1U4X!+fYEX3r;~MiyIz&C5EZ!#Dr%BxQH2!}BNa#j zeaJ`CQRy@GO!~-1CY0NH(FM)fGXn@(m^^RUTHn$-kW<3XyL)kn_`{9C4?FH?dgMj^ zefbl1=Pv9wh#$#msS2J_-R?{-4@~zlZlN79BpL>7hgefFQu>u;WrI z(0$vss-Ajoa5HcC-H==E-bWXc`E6rs1Xh+lpTzgFU0ys-IKE{*t=O5?^VP7oyW{Sp zv#nu8^tp|`7@%gT1L^Ga>%UK7{C+z7GhjZ?(D(lQ4ZGw&q@C;GE)D1hDSp}f{~&0( z1Ly?Cl$vh)ZoT%eJG?#yq_Z)H@Iakngug90^R^EbQ4dtL-D>GKPL;kjGHebU{qSQs z&`>u1dzWSakwOdzvfG+);<-)RdLyJ)R=Sd@sp&XiUkov03pI79Sqct99tWX~kVLh- zUgs3SKK+3~z7G`euWV3qa;o-~5xp^g)^U8y*G<+>EjflmAE;i0;46 z?|XLiY!CnakgvxBr8EM3$3P!0gh`kA@#5UW`^kV|!CMZdk z`Mc`Wo4sv}G`-!CHeWs{o~GoJ(RLv-Vuhzl0NDMqxj{7>zk2Klx5n;}uPGNsW?G4- z)%GC(qUP*{>^xF8YuW|lQ;nZs9`N_#B8sP0OXehA+l<&(q0n1&+NfQ0W9%ys9mi8=QF2=5GL?<5VvfqWzr=(^JJ($W~NOc#ki$tO-V^Iz;c{zVv1{X=x&Y zD?=*Cu|CM$FM`pD1A@1b-8lv=R_x3j)d*TlDv(uGrjl!ys;n6~cVA@ztP;X~PsRc3 zM>fs#giO`_9T%@1#3Cfi7NSAkHZ6)W6BVGWh1xsOjbl&Rs6Bf6d8DH9_W|0x>iOXP zV&NzV31+KTAO5AH^Y&YvlDdNQN75>cScGPzohv{}v~sA9aIRCR;yf~=tBo~&*|v}f zDh}~mELKH%7TDr-c)cB7BkCLw#sN&cfXzHml&P%B3Js_o&G;CcDHv@)RkPu&PEY6e zE~P-Ir7YQ8;uEX2ftlv!iyw)VT?^)4TB21splfvdtYt~sbf*=+6&tp8T_$kX?SBcF z)UEfC8Q8S~T{$K9G_HjJ+}TX0IB7n*Kq;2ODc>vCawbzVDQ(|zA;$b|l-AP)nG^ml z_pVX`g++Q|t`Ftpd@0l==LqRnN(8nhgBx#1+3Fvat`J8{7`WR)kyzeI=W4xB2kj~$ zi|OX9Lk`v8CZ^KC_Z;!se5E`Yi_}dCZ%$9xx;eHFMBuMGTx}2EE%~PT{_*GQamw=M z&4xW=gp1cI$;1h@iHn(YEu%R#VCf3z~<`jA_GSSgBn5gC-LiU)JRRuE+lV zSJ#g94B>k2HGw^kw=YV@RJUA)Ta*y432Fw!TZ`MEYpZXno4HFFk!j`dh(O7}eT}Xk za=JlSM2qZAtDU!lhm7dEyc`sCqE?=m2u_-fwc`$fAzV!;LeK7_&PjhUT0-C%wq~C6@PJyvvg95trx_RjjE`_| zYGX~H>jz*cy(hOgUcA*V5F*4h70L<3ULQ1AIhDz4xXw;A_D};m@E_)UM$&#N6}ykE zeWBn(J^P_Rm-KAp%W0}T=>}%v_&eJ1yxgpz)&8-3nUkfCOHVGh*{SY>pUMJ8Q2$D< zFc<~N@yUkHb=kz5u1f=WjOVP#l}|6!S0}&8fKEs|n<7M>$SUJZCT_N0PoB?ANwKYv zgBqph+QU`s34!lmnvn}S^xAC_$uy2x1`d$Q$vhO^sII0qs8&Kr9VbBtsTlo>9xh-b zhrXGfMFte#D%kYQ2E%lf&GNS_y_&g$DWy1?mCUv}RYx5g?ldSaEP&j^NSZdzpzk14`M#8@j7d!EF{dD^Q|H`|W%!0UXGjC}Qp8%$mzZ)1G%VINSV zKiw3%?QmDhJ#JS!;?{98Lg{DIa`_=XhQEoBI6`P1yi5M1F*$DTPB-z9kMLWR%Hr^J z8uu%xFBFr}vsw|$sWUAh4;XxDnZk5w<$?!c@(Eg3V-^fgN!s;TxfZPVfCn%yA2v6R zDPU!^Ysx3i>&s|4KB{plOUP-{ZmWloide@gMTBI$^*f>rG7sdewoP%YG73C{U)vkb z50Dv`eBThv_%HNZ`rEgZePm*R-lX?hmZoEiUrsPibM1abO&hj6;WxDPrQ;$g5DL$v z{MJH-$E;9g4G+leS=A#NeRvt3=-gujM{vQIo)J(FdBsf5C05!3^!dIRY_BTR;e+9j z{y`M$1yg@ZHRl?8Lj&K%Z@lrIeNVRz&OST%Xtw*HIEs_d8oFG3NiB3LE;ln9kW3ySMoFa@FpHY`U`9u^QFUQtcTMK8O&jM-G8wQgrGzMeO)KKh>`TIRYHT6cP#DoTv7&(6(V zl7zPE(z=2EZ!d)#-uOLFK#wMx<2}MVWh`(EFN{u-{qD*e=)~rIfQRh)Iq7J>-*d)= zwG~UtmNhGS!J__`7DEe?GpQ{$Im(&3J_`kk!jZb2M+}3j%3shqO?gJk!XsAJK=%}+ zbIMAyxFF%A6z}EUXl+bK+KDbdlVHt4xKVhF!2(wDz@f-5FTs}Vz+_K$pJ%6AC59Z) zH&E>=>u5r}jwu-ucx4YB@_b%m%K#0!$UX-Xj|~!4T>!DQe*ap8;j?T6U_Axy6lK#P zmxra++sq?ZKfGIbOo4zoAXUPEGJ!~lgQzRZgD1RbT5%BHtI?4e+(#6S4DpHC+F~=N z6WubM)_br0gIC1|I>!xdU$!em}*a zVcYf(*DAIOX;)3!wI3U}miD0G>h@7-xysKO)5p{V-1crv<+epV15zzTnpfKI{ka!a z`Oks8pcM6EJ1iFRPh~b645&Qqm0=cs;J#_pVJ0f>Z^)SF0l-y^^n9$?CXr3&=dyr+uZJlo43)uf9pagWSvn{K)&_DIx#q`93@@bOU( zI7VE}5omP54^?<#QnRwy!pTY2J;rQYU9oKbTN#w9oxL7Kjmst}$v*1UdcOy(jdyE} zWNge%4}VnxUOq|y&|t$}oO<8h!-Mx7j(ET71rT7ZK_GHGO&+%xZC*{Zhf`k6F5IqJ zodr}RK-{XChjHU&*@z6gFmFbZELV@;X@Vfu0l*^SL}o$3Nyv0o-Hq6FAPQ*RQ0D@y zBVXf{U~@N{X2%kerHKz_KXV31p@iWSMEH?rD{|U7-*}x&E1G!xA*H$#rZlfNo%+p} z-vG+$b!AukY+T_O6cip})E+qfbYxy~8k;?_dfU#Om&=_H?H!zWP~DkUV#n4{TIdy- z7AO2GcimYBthyZ5&xh_cd=*U45|^XYTOQ>-(TS@);5~F*84Sq61h{B%T}&9mm4)$u z6cBcf0BT^~efsO@`Yppd0ob@ve7p&!0^T56}wFwASGB&!B zJOXhnu?bJ-L$fAkC2j*Xqrn<)n^{TQo5-nEwI2f6M>g5&MsGX_+ z<3|k^{+UC)*}}YL!oB^1nJ;wCIj@Ltr80RU0X+IHPvcWUEbl2KG<3Kq-HzPdn)&b$ z{B`OR2gi7Ih)avU32}8&4jjP+@)qF?=k)XwUAz#3H1?@Ya=Z#4=$VX~Qh$`Q%E{bb z#%gcBHgOwMVUCX)Xl-}N^pg;?BqiU}^;ns_52a8gBM<4gY2=}kW5&$nav)b6F^1C5 z>JeP!mfS%E;!w@*s)-`dd#!w9#|h#E4pIU_wMxy>s=K+}T019EzzI$d-YbRy5~+T0 ztc`@K50Xsm>Ht7bej2kOoCv0=akYDrJ|7a)qo0UBs>0>2^HUBNwd}>Yr9{pV!F4MEk7rP?n%=pE!D^+ z@IglwnzG{;`_!FNol=+J^OM~p!niW;DffH{%=rp&n>4((EgvrNw5)qFOTqduK^T z+qF|kU1}rj*a}c0A7RQ=bt-qk^QbP~MKAk-_#|>o`KXJe7$&!Ha}{wvRk>Q;o}{k*#Xp58oUh^^dR?Hb-3FbOh{+eGIMKb@n<=AUs? zpJaLE2z-5rgjactN7t7(%7ske$1%{*O8xOxU33d;>}AU*U36XPvUTgn#uD`w79p4^ z(h-hav&J*B50!XrJjmiXalNE+=GqbMYpvq`@TWyL9q5>!p{gL*l!S* zlfT@-H|5y8{QSsZ-I#LiL*+JE3Zby$H(oo!j=zx(DFI;jD2c-3VnYXYq3M+HJ}816 zn&X5$RO45pm!1($Eeq6nBZJG>uW5`3<*d+-aA5n7LT7>#rEE} zr*8gaR(AOOUg;wsAl0!xHJFu3lYH5xM-sXlm^}~$R<+lQn!Gm9Qw5O>oj86EEO-Tz zWwsU`qAVzF;NI%rIa}U-h`6r)T1hmLTcTAa^LiOM5AJ&z%e)y{o?rQJuuTT_AZ~ZT z+!3^?oC8_Pzk32~CyYtQy2`Rb_Bs;On|Z zI8B34otM0-crC(Jn-D*w?o{99<&E&xq17bSl#DjV&FyQglgw*Q?9YT`&ZvzJZAMVx zfObMN3T_XisFUJRGWYuO(g#<(R|(?=&8<;XSNnyBBUJ$h-BLHz&V8iXSMY#7`V#%! z+}2~8G9VTkS;P&`0We!gKP&i0QSc_}eIu&ZY3{pR989^w7S)!juQeca2I3<0Nb(bn zWjd2DSxN#Bm=;8dJ7sJ4@*b;ba7#-9#Ldd!i}%Ro1A)W!)2H)$&tmGJ03Y_5^Q}OY z>eV6x9sKej=F9>gC9|86^rOC4`0`8! zjkj@2C617Cr$ifd&ZNbiJ50yMPBc$owa6_CL!rB(r@GWc4fyaD+fi*|{VcC)rF)fc zvlnTc4xos8y)vU5IBTjQZ7171nX0(?!u*-1)D3*Hoj^wL^>A;2NSNY*J5mpphh=3i zE#odB7EkC!0MeVF@@Gy#&FiQa+d#8)UbD6@7nu!cm|2$Z1V@m%?hg+wI!|>E;1RC5 z%tFQ1PTd%dsuK|&HjlnQ;ze-0c}hi`R}x1kJV`Hbq!Y3Dmi4B>wV;(%p}D?&rTi^M z)}_D7ixwt;%3zGAhwY$&FV+vcP=lc1PMfVbj^(1s3xjP|TvE1(fm?rV!WpSlEGf2++Su9WgQSV~ubZfPIuN}X7 zfM$DO1Y-iy#nH5$n797vuSa_zsU(P&}5S1vCosF2) z%Y^YfKtKmERwxu3&$s$9mKQ%bn-jiM>E25RyTJ`&pk0oDM?1q5|5*o+qd6bsq;HskDx-h?<9)@oQEh%6y`>K1`;ZFS zLZ@dtDG5!e`yx+M@j{ZJrOWr<`mLSK!y^Q`LN{havw+2!P(vN~-J(bDcqJTCz=+;@ zDGagi>VmHa+~K~&udPlNZeIP9dsN)Lbdp|8&}#zwrUjdq-ls@T4CntVuSgJl$|pbP z===Mf4vAcqSu`Pw?RfCZ4@aNUsJ-kk0Zr*dT3MwU%T*%o_>bc$JAg+E;p+<7_-NY! zuX5lQ)COns7pLNH#H-5!Sd89`gJ1qT#P$0%MJ@fs|KtMv|G578HKSr11OYm<1C}1- zLMxC(P`Z6H=8i~f---P+Sxt8sBONTZz9lab1^O*xxg|~ zDp^bSHQO`myELF(&z#Q>cq+d_e(y4oUvI}-Ih~*3gu6Rc0!8atOHsdi&Gm@k%G}6p zYqN#p#~fDdE3>_jE#+CCE+eT3Dx0?>uv)|>P+JieHUlukPYlvU5bl0*$PJYJZ`r8+FJW7YLcIIbt#47ayw z%|4rz&RMnr)z_SG_j=!oE6WZ!zyB@y4A)qjZR|qSq)sIyilhTF9@(Z!ArwY+U>#?e zm9n-x#yT^*-Fk8PoewshE;+bK@BKIRhz-fT=n-IWkM*XW-x7BF$2;-qsO-S~#e`3N z2g{%@dNMyxC&?<^TAPI>rvc3|Dbi)J3o`B$29$yuNCQOnFMPO0qin6ObGzc#{-RM+ z5WoBT?++Z91l;NE1K%^H+{~H(`R#iM!5h_Esn?;x@ZXX>n-C^J}bS zSM!$93<1A*!A}YI8+|)ThSsC=_Y+P=IK%arGl$+*{D;!ZpR4op`XaOCU9Q*`_28n> zmu{n9mt7V~O83AK-J&USs=WSKt-TqF)6E5feKn|Dmjh(fa+JyLWqBu%pty~PdY{mt zSP=KF^bbd(H;mOc|Gjl-y>jD*2Ts-^$vxHAAOYQfxJ2|69F7n)vYuTUl+ErPlyy47 zTB%IFmIPbzS?bbhHu_4#KFN*hh2LesgxXfm+1!OTnRaBakR4QTWjf_?V^*qDY14=G zXvxE06A9NorCfd^)oa*Vwc>1C=%T3&th|5_l1B4m;E;pwOemmN2fTZ+rZM(M(dQRW z%}m058M?T|x>JszBd4{)U8?kF7YwM&&p4vkskouuvXYRdk1+;(ZL|2_HdOdZ>q*&E z1^eZ~$Wi(TWx(kXN*X*ilJwTV7>jrNjANi`ytW#uO!ssgiM+0Tb!XgUUu>hio)_$g zdA{&H<{M(4e?;CF0i6V$|1N$Y`ahk7Z&uj`!}~v}iT}Lp|EJdR{WZe}7~TIbf+vrz zd|L@dL{w83++Y4+?(1+JZmZWSkG8|;JubA&1pAOG$=8gH)6G&feN4*8eE!+CGqE2FtkGR+PrpuR{RKjHB?F`SYtMh*aa8UpCUSZwq#{DKw&vTFH z_DzVc;&)lq{<-Uv|2Pzk`&>J)7OPo_JohP^b^WH%)M~X~)ceqrSam(TS*ltwC8?V+ zqo&A)XR9M_90HdRrg|;}tf8Am&|p#g;9*C}OPPUq@&9<3S5!Vwot>e>ZbmmW2!xau ztv4I=69~t_GUG%;K0_j5mjFz$!HzW!j*s&b}=#liaw40;1 zF{Yf4xg}r~XwfWdU8`arCZz3S)%!b~*KCX8zD!1n*U1b>LM{B~qpt z5VD}R3zXP6ctu@Z^9E>xcMke-2fFGZTphA4Y-g3kD+^TUwP@WlAAM}xydH#R>)&d2 zEX9n?KaASt05=6ILz#haqr%UCXhe6l{0A0&uEVv$lhfe>Wo*IQ-8Y$eMcAy|EvhPF%$D9~)%US$kiXjL;d@$T|`OIGbs$^Hlk zfECl1mxB4TW$QPBp}$$x1|WoOzYFlwa62+!%tPh#6(4KcwA$VWE&Zlte_er8l@l)> zDDpCg=X7O8b1Q2qK|xSR?@^wM_mZ$`+P3ZoDaVZgzV~ySbnE7DDXRo}1ri;90SYov zIaGN3?s%07w#X9HgeP+*|`OVC4&-pSQeLe&VRT+_= zR`oGC7jk7^11)u(EQWisg9=G33a@w{AihEUfQF=a!anz6Z8uQI$iL6TO2Q_%g zYa<%F_tymBi6J0L&DtF6$APvwL~a2--*8fYm;R&&(EGyVx#Pi4_073PuHlW`44SiA zz6qvkeE-Q&Ul<7ihme3q+r=o_>(m3|0XAU#_(0IxmCr}WL>r}FK7A#%RX zJx`Mu2MJFvkrjsmBTu7^s{?0=BTxk}6?+&_2z0rhAk1HD)c90J z`Vc4e6je1t>+pasSw3YWtdA}aACROSc!^d~8y}N;a+aA!RJyNeht6@@HPoV}8VZ$q zy!%{zv$1{VtyROV8}FARQbV_CIXDWpKJ*|d(E*M_jt5b+0*3imAhPy_F5|%=TZcUX z=B$V&p`!fh8|(v=$wHjvwOt>9#`qWT_|1TL-2vcS)3e}ciycB2SeVHv@ST2Huj4$u zj<9@fI&A`vR(Q~#SniAmbq0j=oawg_vH$I(syDS0R&kOsJbXn(%bYCvHSxHM^ySNU zb`nlMG%YGFZu0C*g}b`M=!`r93PcNSAIw}v?G9bYpv5n=jLsXn8KoPU;VNNgVqle3 z%^1ux(pqNXZr?bWah^Nxdi9P$%sk;kr44YhIW5KOApG^boCY6Bo%ANv2`Hw;e=xgN zeK!Umg6Y7;7SR;6WQSTK$fS2^(@r3YzXP7`Mtg=QJNCT(PJSR$)^$eSt@VWX=W|B` zH`ome?vXp$3Rg)BCwu6?5o*0&b<&l)Oy68&sdev%1iEd)wR@O&vt4|^Arlq~$XS^&;#{ z%kwzk81^-zGhu#O9HBU3!<)*}Z-!c&`GrO1=}?4d^h*=_4?Qxv7+{6t4$fWU?G50s zq$|hnEhk*J(9U8=I7b$QRG+ICi$)zwv0yFxwqIX2b(I}A;x9eAmX~c& zVHGssYdE&agu*Vf=_el^B|NbUmTMcKL5B`ev_HWNj%c7LZ>vJ=@(UZe#7e!677P9y z7rB%IGVx#FYuTuDA@(#Md=6itU?3(=T)VjxAv^`xD}+m}K}JF@Qa@G-{vEml2d-~? zvk@s*5G#&dC}-P^`+#-Da%?)R9&li`@%Nv=&rhSA{-+7t&k*sul>QI((R)E> zT_E|!0f4OG%MCuUeDK2X@J`=)YqA?8*Wv;-aQlCm+XEW6vrlEt%hFD~sAtVFM;#4Y zqtK6SGz)P*6|}y(khs1mPQC)Pk)F50`Tp3a{?CNiw_iYWbD*h6iL?#tdORv$QMU`4#B zQnYIbt;}-36!rpb(`fYYEVN)m5#n-{^_{A!KlZ3X+jzLO?4_E6S7ulrw4HpIrx&jI zh~w3Vr~3v460Cea8WEEYI%_P91@-n;E|lYu^Wx-6rZ#0M8Lv@ENTa7Pv}e5wfp1G6 zww_oYha(WPErxdyAqxT`svd`QnYAyow0xIm$1gL{=b}US`pi9m2F?@ntsIy2-uoI8 z#;gn{3w~!n({H?1VrA#zm(ULfvHbN%t`7^#l(4w|$S#X$*0)?}eZmwvcTOI5^T}g6lAvYyg%m`<1y^21 zyE_o(7CqB0A^c{O>fMNFm5w=h$-bV>6frg9JY&izN=;Pn%&HS5_YDXML3D2a;g!CR zwJa+Enq-V+#?skm7RX1DF($^p0G@_Q@eSH&PoePQd)r}4CIU&Ic3RIqNY6!PoG z2QAa%s_&#tk`CqfRJ)Vr3y0$3kom#7VnU_MF*P-7ucEOs?rp*|ah`aMPS?j5XDfFK=9dIDj7|r^-$8B3Id0nsXY6^P*N8B24fjeaiFQ|} zPt)#B&#(Yi?jE=U-Qt@1x$#7dQ{+Hbm;dZthQvxrX`<(Vtt$EbG$)-ISQtXk!ZMB| ziw}G{5*2EbZFGGuR#fY0jB^sfab>ccGT9QEE8I{pH#-f*<+0{37tCmHDv(h?ASuda z4Lc;JX#BFg^-@aXt*0$s3PIL%8I8*IU(~9@x)GNddG`#S?O|=nrnJd58mnMIN`12=mT|8@x9TdSy;ag zS24wOLe31HmdM&)q*~c7G?6JBS46l*KU$iO?A(GfUNuHAma}_c%H)Y{+50Zb!KGZo zMOevi=FSai>=|9?Ft=B(sJYgw-Bh!?IW11)&38roVcR(ju(Q|ls10ixIm~V8i7bUb zLBsav`q@}n342kK@?Gw|wCr{pE}CcL`9l$|&xD$I;{4o40+Wj|~hvpg}A^xzp#xYCJ{CLBOkp*C1kEbl&!m*uOYQYReULOXsBw5c1IqqAC zJZ&$MKoR9U#k^irZg=A8ZO7Ws zt#ZM{+^Srj?rgVQD>=*3yG63Ue=*NaUyX&`3h9RQI;)~khjU|aY8{pV)tYTxsqzt? z+wSGO$DbihTyJ+!%mJyRs^vlQIa&F!@=$BllyRH83-H*SPeXL@!u%KFE)aed+P-D$ zX2LsvSOTP~!NvcqQlB`5&M#1f-3&<_CGL+>ZG*uWA!*nUkhzX{lTO&`QhgtS>DJro z{+bh_BOd$7prnY2jvN{+fvO8l!jd9u;VNj}aOy;39cC&d7~hr6oJ)swb_m(=#1-sR z(Y{`{x)7G`A_6LfM=vPKi+prt?GLQ!w+QJ*Bn~|tC^Q8#+4$HetbC7Zd2ACxG;&edr9!Z?t4=~ANViQmBj4!2-0 z;>5Hxw+q$z#EEJgt+-MF_w8UvPH6|t438}e&5sa;>D|7ohknlq#^i=6jTy0hD2|+6 z@BDG%y#|%`> zmNaJoP6WL@ylx5Bn?2fnjKw=wtvESf6~D@;MSEc0;2wX8D_%?Yu4y{Z)Fz}zk%^~{ z`fx?(K)BVaDh_k-Ily_Q!P;x0$iFyS^Bk-h~x6pLbgXjV{eTGS#)LTBugr&8NHA ze3GJdr}petSu0T0#n_&MfA@{wUMk|#7WUdlM2$zFh^<><#dNGler?R?whR;F_V*QU z-dtW^v%Z^WU25WodGy0R|3N?oz=HF^ugpdN=zM?F@rYZy_(2M!`&7kEt@rn*|MRSW zYtH{vUixwWTEEaX;TAuBTqVVPz9*LkF}XMnE3 zvVF`xk-MDYp)Ri&$v{l>i}e%A2B1&o{v3PuVA%pE#;tk)U6_IgWP6@vgQR!;1kJu{ zNAMv4#|*qUbf>m?%heryO|N2JYEi|1F@{7zAS-Ksy@;=lRKdgspmT1)p4GouAr?9| zaJjbvF4Gc<>dB>2)8ce5ekE3xb`>}pOm}l`H@00EZ_9|L5#{A3bpq`ReTJ}E#B(CI zSGn*iw$OuAmx)Ws3kMkaR1Mg2pOcASHS$p$VbkrW-%kV_hw?Ya(fAwC!1;8r&7wxw zv0Ej!2HE*I{LXdE4bJE^T&zGT8Htlk%=5^}M^zagPW{dWh_^?-Eel$gQ|5Cwe+6y3 z*L{rQPit`Ftc6X`j!KU@2K0AY8#>W@OHsy4v67o@+FA*~$KDV+oh(s+X5a9!)o#So zVxWu&FPk^P09dQ97qq_^T%IopCJZ^NTyunvR+8tMp68-r)@`|LpU{NlIiG)zi_5Jx ze>E?!lK)|@!HCcrzoVjQD{j-ZdSRpw^04EVPz;Db55R04VZ=XOP~A6QSRe(I1JJuB%gpmJLBi-VWo)STw1_UqfAh+5 zLk=Tu!=v(Q4Z^;`(2%!oc2P>|$ggGKTHp280mnBB0U+l9)Mho4f6gJ|8~!;7Bf4;h z*Qr$GT5Xf;Ff-LFk=4pY&hsN0N=2~^R=DK{{Kr`Kza&pb- zPWI9Rjxwd%J^-6u5E9SdE2i{JfqDIdTW+js^f)m(=V%x6o1!5)mF~N>0yXb>(zMShULed z5dYO;aVJmX)m$FC#N|XXwLCjdb-*(bI)OdhdDQqz5Yre|zw{h=;lM^PHN^+^_6Yz(5sZt-ZF+o_GNZ zv^Mu3swS}Z3mqF_ajf#UEr9qNsq1RDKDoVw{y1GFl&@mDA8iRo4HoT*wIzC(K`|BA zS_@F0^W3)e>?7|EABCB3c^P!b68)<9FuO4YR*~luih+T&W$5SY&@`f9d>rv$RB8hj z<*u)tBb@kt%!0tFJH?aM(KxVB5CdQF(lmUJUkW(|B1Oj`PklFs-~Hgm3n)qhu0H97 zZ6qjy&b5J38+*_#yFnD<$|%9Z>XUFR9<_s>Xa!I0RwW$bF`z=!N5zZ*q$3G?d+vqS z8E-pu!ZBM79n=OUJ<^;v10cSPg$(0rB1df&?m*x4O4+TM*49>+Igc)^W)rc({n)Ld zC2Cu{g=%S=hA7=f)Vvc%&Y7eomP&)>1#fR+_#;m31e|)S3soi}<=YHD0|wC+MDoM8 z3O#)D&Z%1`yv}D@7p1g2Wc0c7-5h_qFp7PUfO6aSw{?MGgaT-g`vN_~h4Xj4kPYBH?S`6aHbLOqhU$R_DwPxRXj;#EqF(&h~q*z#^_e+56k_tP`SgUvZ3(^L&9ZfrtFzKwF){t9%RX_)1 zH>|+xK^yOPCu4M$h9A|3kV6cn z`)}|W129zJoWldQ{<2f>4#ZtScd0SC&1S_eU;vn5p`qM(_TYowz$u2o^u#{so+5@1yZB5k5JhYSCPOMil+f1dS^y#8f#{?Uo= zLBT(J=(|<usEBcXB#>t$hTW>oxUJo zZWlDNxRT23PL-Rtsc}|hnF28UZs6ObFeU1FYtRbqFk^rZkr_Dlk~7+#IfqwkdMA%l zRUHLw>U8)enxQN#-f^6UuI!OVrts_CrUC%5#bPB2_`c~&f1h@gkROn-yZWq7kRv5< za2mqm9S=26x60f3T~B@lNfAq2fSVrrdW4Wuj0FUr&zp5^kYh;Y);jN;J)v5WPWWuD6Xkx>P*ZIGqpwTZN@r1)ou$o?ZXt+h2(6|XT{e^! zkW|7O7uTX(4IzNk z+aD}n>d^Qi&=!ogZ;9Q0Qbim z{rN237O+HAaU=1zqn+hgQd9(Zz@cJr;j;`%Hv9Tub4E5u{pNEZyKVk5oozR>y_mJk z;~CN52}s7hh<`+X(9gYGv)C> z3beq@OIJ|p`&RuyDI?x-bA@wi6>FY$pmBWwr;oe!=Ce$t8w<)46Ex;^Z+a;iL^M)IUlsmaF+Oy1to(u!i%7U)68i;wLk^^$iZVo_zq9USV9@+t6(4-IBG!M-*qabkF9GpOmLXZL~YZd6%7HSw6DFOe!DC-G9kB0aTWq>dK`R4FdYagYcRllN%E_F=qAPjhaA*Zph%< z1Z5{>z1ZWyrmm?wHU*A=9#{cm6kl(W)_1tdDmhC+!$PK0L_9M|RvH}FT=_TZ3mb+> zA?ILCoTqlF2eUU63~SQ~ADW|HZ!dyH6WLKOcY$-Psgq|!w8Y~+(eLbAewMGEHv#p? zn9%(&J(nH=%CJ6cJ|}&zH;9twPP$h9)e6qyr+b(h8^f6FDumWQm9sw0P$>0Kc20m8 z#aCaLU>$v4U3lyli87vp0A9`<=(J>A<>xwnMa%>nl9s-J{Bon$FR@n}gq-hojxMbl zk;W~s#6~!hE^5qb_aZf_O{zG3tjx6aV9Lc0qB7wTo*nK=7RF5ep6#nKlK$FiydG_9 z8LOWSOLFP(1x4~BD zy1+2(P%RrT9C)_M^g5hhIob0YUpR0UtH7cLiJ1Omio8tn!?-E)vM2yHG1R74peiUY zsEknjO0Amg9_+asDtmzMCWHAIt4SoWsn-y^U6^U&t7BsqT|s-1c;>Up`ul2~&pEM9 zh)-;5-kwOCvZf8QYH4iC+V6eY%6c*$UswTUIOwGi;Y}Z2Xjc1cPL{u+rE)H^WSrYn zbu63!#W}(k-mptTv09&)7f_iil#Dqdm%AsTf}fmZDU+6Ivbpd0UN}-w09KM=P?jy4 zSxG1a1%jin^_%VkeFs)xEOr+YN&Of0z-C0o;HJq@|KF*G!^jq(ZdedF^)f0NPVLNFsqgIClkH)Ws%z^(_ILH6zhmBw z5mB3eWnS2MzERel3bhYm(RJG4?&@jW4bIp!r|xhbum;C@Gn)9vYHHyGTWgQrqLQwX zkcF}?=5{gJSTQXt5|Sx8L=i*GJ{X)Ds7s@;*OK=VNSEch8;d$E(H-jnUqX*05lGyr zECUZPMGA*EG&h!5-P&GzjFS(o#`ngLxZ8<59L@051P^CI4*|EcOF) zQ8{}4^8v-(5y!e>5Zn>XW?}Qr_0Hnz$0kPs>WdtJm`)!rETC(p>7nj>9vmgg;(VUM z@=n?lE+;acSv!`@Z`2uf;FALo9^Kh%v&#d%gZWzYePL1`K#L#l?5YP!Fn6OBFjv}7 z2VzWfNQA+%oaf(d&7Z~z6fpp#-=fsggHHl&6MQQB$`TYfPUtPCt-tOuGJ7R%jU6Dljw*5M~=sm0%T}X9l8wK9y zt<((E2#s*dMY5{GZ6Sa9aEpZYjuTTGnY?OF!HRIje1k6}$9%L!@n4l2THUCbP>oOno+8f@f(!W+b*t{#1Bv>6Q~+ zK^tl9_kH}aqI&*ST|lLKtj1A`AjFN^^GG3y;q+2s882TMOTp)TQOpVLhm#Gwxa3%`@|f`&#cSTZn1S))s*i zj8XAhY9Ga(!JP75sdhE-+lyC)sUXH*G!`G_`HO!eS`|__jq1 zI+FLL*S1?w3F7W;Z)C1A_F#i3J)WXTQ5j%Is2MXz%PA*>k#M2_J`_W@M(cQ1nY5`^ zgW;wXV9#WOOxIRIVv|hbV;JrL-Cb8YVOyJfscQ~Z-~(*gPQ{cudbUHTRFo+d?@ECz z&R}&GNIGjpr@3x;^@TMAc7*jH#lk6){>uj+mWPFxOMHhmKd5A|Jdm4Q0v(R4<==9G zf4BMiE&fCKvoSere0?Ewms8#qTYSMFYk|idx2nK7l5I5qw4e_EdSgJ%>IXh&1s)thM4Nk;ZTo8C1u-xpkdAVQUB#@t#V9QHnUzXy3-$!0wU59)n z1zGMe2Sw(k(kmEEgDdehp;g8nW{P0{xK3{qlCCB_02x|#HEZaC90?)V*j_ z#H!9tEHn+$a+MnwKo3wDgj9P=-(Wkjuf{uD!LU>j*@S(AI*ta$Q(r@xygXa zbuY4RSBJr04Apmq(N_TARJ9PtDSiv>2!5AaPcTk7G7DeJk^8tgpQqQ#-~4@p@N&Y4 z?c;E0q(UgpG6EKivS*nZTorAGZl*Gj)4+lp&9?$*BDMYO3FvIkV1&1X z<}acc_CKojz-B@0cHs_8w4*~)+kbU=q?80mtmpOwA0RTw?=KGb!-5gFKDWw#m*5Xu z4scKRfy|CE=VtT#({}+!TR__PBiet##QYwfbA^BT)hPc)cmH=Ebn7AMGzhe}@yyBN zm)L>V{Lh-*|MnRLOHNsbt=LRY50MY01THTP-Z8_+x%CwLnH0LNYSe3~)|3S@_%H>6 z@FUm%t_6Rf?`CHpZJbiC?2? z7Cn3zz$ere^W5#^*i$+{E>XXlpwLDQ$lD;>fW0$Pe_L1>V`4tSQ=Rf9APme^r5b7R zWK(|+XlU&bKm*KKdJk^pKXm%|q!VftgMCs{4z}1DIwlilxiZ>;djI<-7U$m+xeov( zFrx-gJ*?QZRCMCH;->UB1=mH-ljEdT&E) zNC)S7K^Z-d5;rMW^)aq3!&H!1YHLLbnZjHi!p4|g@aPV8obET^69ka1b!U?-N(mgX zD@B{S?A&VyF3rZKjW13u=Z=23Ih+%0WnTK^(0q%b_~Ch4ueC>4!OO+3Y*A8}53GTKlDHD6RTm`MvL)^W@#xxI%PK7b_NWHr*0{a}x-OW(SM0?1SE1w$v=2Q4&3e>+zSE`0#4NF`lhl=Umn~r;p}5yFwR9)^Y2FO4{eg`L z!>A#(c>WAN5j?##=R8+`+p;4=^zY^tAY`%E8i+ft?r%1Ts3~1ISHG?`wZGvAb8XdL z!+p+6Tf&27wIkIUW9w%r0=DH{Ka{FF6ZV2H=h0-%x^kMqJm3LW_!eO)_|l*}9!Q|0&&8NM5;Dv5%8g0`cl+ESa+HAo|G%V|uF_Q&|jQ096C z_!F4Yi9o7;A)~|EPH5rcL`%8LTrUSD|J}wY?guhD_asyd!u3NUil*l4)xzE^j@m1b z*EGmx7&?y7m4SpdWbCo$s&KyG+5=7YC@?;%U@R*mRoIL1e7$cs z2nUi|OAFrS-_Vr9jW8S6zLM!yb6Am^Hay^K2^%O=g_rnzHW(=KJ)tOmqj@TrbfUNs zl?U5LIo9m%ro{_2W2mm?X6H1hv`sgl_Kvy99g^#sYnl}JYHn_jVon`r9i5p=SE1fDRJAZq!ytRH5b4$(ABr0VOcl?uG5Z7K`eD6@$3w-HI zk6lTxX^}&1dmj0efNk%K+(=CKR_D7u^W?eHY7Wnx>}7$Ttek^k)gB`bn2B83P?u|; zndT5LqOMfS$Iu^X z``O-Euvm7wl}>$Q@8$x%FW!b#oG)x3xhac(#ukrTjnieIG@XNm)mM;ff!+(aS-?kz zeOm01Z10_w3G?eb(l3a>2dvVnkzp>D7Ape^y4Ko06H6_Kn~7qM9c=&|DA1ZxChAAx z(B!?-ik?XE62XkDkLjNIeQ!@Dk9beyHru+0bpOisJt$kk)#A_Qf|MNcAf&hO%bE9c z{0Tq?1Kte~Tb)u6Oj2#i()R#3xw3oQ;QNZf9 zk-lC|z{jUkpX8mD&C#jY(lGUVDNI4x=u722U!so(^l4{O6f;QtOLTh8fiEbWPkxWa zOV2j}y%f8BIq5;>YSKOTyn5w1-!77P=eC9?QXcI8Ni1&xniBr(MJ;x&Vu8T^b77XG zss60DlT?ut{R{haRk#D{_TT&<-d9*GyTXf)0x}6Jhz(FOoiHGdXBbwfz!E!<<4a%} z%GGMtvhf6o6B0=e!d5YskzIHA34s^+3eTI zX>zX<#g-6;L(>D|<0#B>!fzhXByyNiA6prXF^D{T*kKKMB&YmvlCna=+AG;Gotw-I(^RYZ zQ;~j2JxJAnAU#6Ng*N9-lm@OX)d&YF{Bd2cLg4XfHS#j# z&+C9-Ws0R!=kHGT2XilA2n1p3(7cSF4clM-1Dr_x=ULxC@jvqV9_9Y$>jYv~;PQCJ zU7(BG37^r%=a?s*)Ziu{BRBX;Jj|dFxw_OaF|0v!%(<3A0~eqEMa%;+0XE1rw3U?p zitBMK#;c4Qm+m*SKdl2F;td{Pv3{ zS?mRH+UGL2C!h#!mWYvIGXs!zxox~MP;4#UcW(3dK>+r60d}(8z@Z<=zJKDh_)op1 z%#>xy7r&Z1*kUMlSkQF(((>;W>kC_t%ZpYTNozx&Bvq7A-BC1tIUCR}OnC0a;y>-SQ zkNsluZwOB?|Jvj$2ndyqasSEke{+=jsT-ATG0_sBvRzvR@WU-I1H4|ccFRTa$p?dG z`PN>j2hEsb@wkq>IPI0@vGQ~By{brB0Fqf6t?Zm4q8FbZYs@zKL@d8!TetxkGhc!d z0N}lhJZAXe1@kt!7f=Zi-uFrhp#x;`RbeB1l7{lK2FFM6+Q74Be7`U{P!~9)ZU|%} zCYw!!YMxlMz<9= zQJgi}=lM{#LO9HqqI@scrbKJYQFQ3kaAbj(sRnwUW!^Dn|kkM^}b5gBoPQJ&XCKo4xq7AyR=_A83k$||IB!xp zC8bhU!tT?+^8irN!a-hZ21wm=eV+rWxzAq=_%FX_1W;vC`p)zGmlyH> z>5Ko%>;8GzADaZI@BM*a{*f6#W&VGmXSM5`p`?ReWFF14AmH!JDU*}=CmgQ-FDYpL A>;M1& literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_app_register.png b/docs/static/img/guides/azure_app_register.png new file mode 100644 index 0000000000000000000000000000000000000000..f553c76b686ed50fd8205fc7ea6e6babcc8e0f66 GIT binary patch literal 87391 zcmeFZdpy)z`#(GslF&{i=h~zrijXs@Bq1a@voVw7wE8g-*@fb^VjcrUa#*zUSnp>nzgQVt!us4`+8rW``3;1 zcy|l$27y4l`d2QRf3sq=b`Sd_qce*Wqvw z`_KQB+hsohHHe+Gbw&j{XgyOkDuBVF0|w4 z;{!g`zPfW)xY^L7b36WNfO`*vzJcZK^F%wGOxm*dE`dpOb4_8DQ(dqkAVY|LjG|2p_YpNPO| zxJ5-HT{ZZ9_c606)2A`t%%8uvNbF9y-xS&4SFymPl7h>{Ny3lDjoveLo(hXx(sFh4 zNG$14ZB>mUj`r4DKp#hs$T{0;u+NlrH?V!1bdSuP(Tu>Za2B)ImNzruuj_h3@K*J2 zQP-G5NVBP{|MQ!#_un2ZF5JU>rDLkF;ILk_y32LE+Av`0b_%JT;i4_rYM%@IQO=O@;E);o2+-gR3G&0$pfBW{#?;))18^2 zThPa*2S^crAIJHH8SWF%BmKHxed%^DJ5Fo6d5s}$HF2k%*XPY8!TX!Ors-O&&k6DY zOJiW9g!ijoRystWQZmnrMk$T+nLb2MbT@)IiZ~h;Z*?tQNv2Y1jWTXRUzofU66keo zgreG`RYHFh2S0YDbKGrlZNq=4)jMvfs5F^h*)z#Mo$RdV&sD5?r~VvWNOC03I=|i# zyTvf^_IyJCbnLhHzkXZPA}PRIuabC4cmFjN?Iw<0;cq8fYx(}1 zhM>)zh&_kSXb-5bUdwvHRJq^(Mo)qg(4HF6&aw)N#^D*CL{{h;l`8^wWVA{L_B~>6yZsRJ)24o01aw`4^ZK~qP_7wl{m$&o zV874%(i)bptiK+{bsI6c3`R0x!Raiolnw^IOUM@?Nf{q8z>tJ3$x$t8f#fBojii`r z?JAgiwD&Ev`Itz(N38P^P`rrZGrd1!PQ(L&!=Q==*_;c1*-v>l!$IfkYz^8^UUc}- z^@z3S#Sz_TsggGeICV+0LL);zPixFV+YbJe6J`Zh7}QCZjkU$F)sX<^2F+(SPPwPF zvc>9V(u+v0SWbT{oJsEGb$`p|plWsI+S@Q@s*Lqb{Dx~{TK^-zKCl`1M5RB{!>-2p z{!%^BEA8Zy>!YW+%a7eGw;J)_b_wjLIve`=wIDO?wdyI0&CvI+?ys!l5L0r*oiA0D zC@ar1ov3f~OD02Z--b_kce;?^@1g`ZX7%|o#x&oIBck;?YsooG_t6pc!`(Ib5p#2S z$5+=E7y36w2u&KQfr(88Zo#w+mmx%<>`-o}(aOwo3zshg8Xr(jm%FJNfvNs+aWxf= z=}Y*^R&@q_UonFPEfk-0o{Z*Qq1N!bjD_0`RayjEqQg*YO9b;U%qI?4kKOisPeBbS zPyyV9Z#KTWYcELf-lGeDjq!&gKx}u|rDTh5MR@FxK_AKA)zHGEKx3oZgvV}cD$aEjH4JP~iR)>SUAoHB8a2zn-BtGJ!Riqj4)C;#=LT*s>+6~O49;z$xW=^2i>$?%xzJ}no}LVM1HPQIsj6N-dN{^a^{3p zWJSrmweAZcEBMnZ@kjcuc+#5VF;4L+1y4q}Wvt=Xsw6BTOtBK)v@S;I4Uh+&?yu|3 zd$Z6mT^ic_Ia*?ZltpWx)Dz`(il@|qSDdx3^X?9(9L<@{RPY$9YBOhF3Ta@wb3JW? za1?1X^c&}$vH5Z7z;#mI<}L(eMW==w-mXx7l`wc&$h5w zB=>JoMhh{+BZ^%^BjgWdrL04$J9qB`k&)JBug=X@71{^SJzkIRe?9><7UbXbEdZtu^jw+Q&>?S_8))Cu_u4*Pm(Cpg);F zY)AUwEfrj{(OVD2<$?^}O!&Q3S6ObBaMp~4-{G*yMy&hcB&bQ6@QoYVp5tBz@MV^g z$t`CtRc!Vv%J*y<((pmfYN<8Y7R9I6A>V`X;Va>wC*E(Ka;$I{uQVzbr$t9Za`LXo zNoa+IUgByK-s7fStdq}KLeGgPt$%&5OrL1~JNev~AwsPx>L$cECaO^QWhR_Xm>NQ9 zIKTS+7gpJvsc6Tw$-aHVs>IQIUr1m?g_cOK>9E`=B;`G`tImrsA$R~p9@}jtPspUX zvzx*{J`_@rS8$?e-`sI?^O@KL3GR)1V=w-DX^aSn>#@+msV0LP#4s=0je^W&7i@q>lpbSo`yh1D%`H= zqi(SCn^@DgExE&fR4MBc;XM0@OAQKN-wf zwc*Nq2_AIwascl_y4`k7ED@me^_iP>X3wWLE!J6CphSJol1pA>ScZ-FZH=gw=7?>$ z!TWG@dAxq7+mZ2X|G{t@WFNk|lAt&2v1r;X5p~Yoq-HY(M?{?t+tw9Q4oz&`SxaTJnT=}W z<&85Xb2MpS{FBV5_Sg|>4EaQ>FGeBi@PkGIAff^S#U0*nQ0mEReG031{<_{*dq&`85)DCRN0yxuG-RhYK3Yb^ zWvYX}eEaP07?It}C_sANd zCTI3g6M^p&>Yq~Py%!nAHk()ZY-q_2Et{aZVG%qhvHdC19!uw%-nJ{v=*~z`VEp>$ zy+~Ugz<$m~Hs)#U0asj7$3|L3jB4yXi`gsiH9P(GB}k3#_sM%QS2OAISaCs%RFu1= z=lc7i(TAbx?01-IIp>U}np$zNtJ`YhW*XkOGdIkO4|SuCX<1DwnsYl-l=^Y<3<^uh zZ<(A&HdV%sutFIirP2=4&UOJ~^|J~Q*AaN_Tl~s;zPjdEX|IIohE*L@P+h{({fG3E zK)~!b#Z&D%!Tb)Wi8{PO_nw*JETL1&K`=Ufsu2^~{Bg(PY!vo={|sfKInCaJ&Au5`pEE<#T6JdYEDK>)c`F!ndj>SvqU?kpBqsMe&MaRc#CK>4!juUs~gHG zxXQ^#m9!=ayL8tmnof^NNkAulO=x9>&3rlx;&V6~QN*_g{%$g@8a%kr*dWwKe`pC$ z5%Sm&;dknc@9*mv@dY=!GQ=5kXO2`bqg<7|5}HOc2_DpuMC(Y8&H1XMW&Kdc+aha& zbfQj;wVc_<*eUyFGI)w~aP2wq2uw+qAZu@1CU>Rh(pR8z9Q$=U$I7)x6=nsvIa~sq zMiAC}!Zu*tSTgb`Ec!WCy^7Nah49lU;6vJkJ`xRCIKskh2wn}LShUjp37%+Mg}H6g zs73dd+VV=}*%wH=QpVGo3GF^F=Ua`A{=;-vu|7vNqJK5{HVGz5s5R{E$@g-U zJX50Ki1Q|^jafffDw0g-TYId*IiY>7sCD;bL4&t*0x#@gBW=*zcVwbe5-EU=yIYYU zEU?jhIH5?hdedZi60(d{pl*-K01`t- z+dYqWWcRv~kCIb7z4cly>=(?=JAmhTu+R9=|Ma~Y-f^S>QkJ&E4t2VYuw(3AAsCOg zd}NL+#f$17?<$qT57rn3Sn9m1AUKU~?YnE2YjBI`Sc_i|-@$jBVAlpttzpLgBE1uD zBeihc-(IjZ;XS(pyrO9ZEKs}RaRVO7J|l&@UmBwVz1dcWJ~y)B-<)pw!V6S3 z-;b}{fV>^B0fYD#tWI&o2_2!S3Fn9CVLhf=3^k{!E?r*MysqRi^{aKg^3}rlj66q! z+%nsmi==dXj}~6Bs|B|7k>j=D&>NmGkrKDO7wL-_Zzks=#+QHbO*v+5@y#U?8NCh* zt+YYwld$=DqZQ0s;_%Yn6~f;(aaFDJa%?K^?9*17f6ne8&@kRBLl!Iz6H3p13%8sg zG)Vg?;;MCT$>?z{7HTnF5v0%wtm^I6G&T=prOP4|da*xTNiLRq5OAM%n`>7x`^)Bj zgP%2({R+Ia*LT)%hbwzb97i= zaMBNQhNOb(E93rrO>IpsW#amXE$im;o3>k(ioH`$&&c#i7EKhXl4v?Eiy9jSP6ho` zoY!6wXPZ7T)nM}ZWyc$^mmA%RW{eo|um($_;Tc!7LfJQm>WEhBn9zK?ahapdd$cp| ze$nUj56lt9(u1t+)2LDZdQ?I#uwGCv3blQX+{!WAcm_nsl0LD)YVmdqk21xYnZXQ}R-EDhUWu$ug;#f1yp zf?Su)%CZRaihGojdv@DOVAN@63}9RuogWSydv@mn%5o7bv|vhu-fB(58CDfVH{oik zPn$Cz5cHx>6Zvi%HhOxWdV`~=T~mS?sErQSBQ@2QrN~Oq)q0Ruk`5N5uM2;CLs_wF zUb^g&2`nI~b*orEYx(cDxwllO96MaiD$^T$h|gY} zb!02%4yO=ae^ln15PZp}rnuzK_%yO1)o4*zJrA5dl(Euv&!<|WTmWS2CE&!;+a zt%`ndrT0P29~YvN7Kio2okv+6>0YTNB_~xV!)Edl?q}2?11?i6bu(uzsCm2xpFn2g zWICHqj?6J04D$yXAHBJi@l2ZDGa4cb=QX>vECUO=Q`vQ+4KQdAVrOH9Zk@H@@6@ z?h*PX*RT7fKo#m!TW-!T4S2&TZEKT((=-V7shpJZVC{}K4JVeRLG=h-sU>mc+B!t+ z%ZaSDDVrS*fgh`Pr_U8k=0EALQ#I?dGg3_lo$oqYWMNGd?^}<%M!o#?;5oxi`198G z3`Sk|S*p&WG1xQDyi=%o!-KF7dUr{MQfub?5~7)`P-gl5CfVu2N%R?k07CD(r|vKB zs%c0l!4!$0F+S#d((TOB?Eqv^{BC|g1h0r!@qgnoMALYqw2(7EGW=rQmw82x;KWJ&z=74s ze`7t+2*(H)dyQJE298M=h6X%dQh9FY+zECayD4K{rxxp1kxVKVnZqE1VCyUtD%59< zI)oWD8Y+b-%PldlKP6$wrS5qqCC;A)CY`b9du#C}Zi`mdGIf*^=l*eCpZV48-S;E` zU{bxqVf8n1(yLQ9%Mxef)nri?&_;HL@?>mQC6j~7s(&c*<)bi&iz4B%aF%1`s}ZL>W^JtbKr_FDE(95z_Y9_@%EV5ferX31)c9cTEW6aoxgVeb}EE# zck#qg2(6KD&ow|}l{OocZyu6c3 zpj%pR=Su1-!1o;(^QLsiKTvDUfb{9W_D~8$LCuOek>BEfdg0-_qN8m*Cb%MO=p;6r zGVi)e-5<>e8h4-4Y_mJQBvw~fS2GISYQv@snz_p)!WK9> z>=w$l7q0%!!TkpkNQ-gP6CbbB7B46VF{dfB+6KA)3KwX0l()TdCc0ELLiUY%u*%E)K=mBzcs?j#$lis z8T1lf*+a?wy4WPFPUdX^Ghtz?e;gn~8^@C`2vJS#et7?H>62FZfgx85sPId@xutt_m- z5sCfad4hhP*P4BN*yNa^D^@Q-oD$LDSR60CZL3} z*0rx2)*Nm19leenQz-KHNSk{+8RFVnY2VuN+U^y29pY(RO)iAzwBB%-@C#_xG$WU5 zS_zgH)<^7!$YbB+mym+diTWgwfFP9LrGkeWF%Ox}T!c5p9Xw#=-#u2?Ck)k`+i%L{ zl@~uUYQH!>N=wuGchxM?{nirEvnAfbK*9Z-J9*s*_ZaYF3TDvS&b1X z@Tn=uTaksG;)s`Wml;x6H|j{*Cz;c)YL?I9x&t|@G_{K2sY6}Vmf`^032cJlc_frr zQ*M3Zj^Jo!RoHGa5AQizRXdz9p3OSxoL*bz(ecPy3)8Qf3Ep0~I|v#p4;-YKIK3<{ zozeyqncn|?hhC&IGb7^Qeiei*(yx_W#&aMIu64dfUZrMNKS zVC5@-@#?_eYZu;${Pm%ce0@W~3P%8SNJmo*EV%9fPZq5r%d5=#TIU!0LJ+Ofq=JxQ zdyH*;utNB#XT_t64B@<{z+;QoCoNU|mwy$s!dqE1$ZBn!W~_Sm>wI&ihHs^rtKL%3_v&WpeIG%%2L>iBvXdI1DhWz7PxDK&R|4ahu`Hdb)Vq$NSWwZt07>JgT&oD%jdH?mLF-0YSonm2kx1N?(YkTWTdN!47)i zc6p3AaLe_K@Em=^;?K7VrTS(iKR#vA!P!>8zqB%04;k&XiTfHy2A^`gXP=QXQqk$F z!Id{=3~N|vM`A`KLI;1doWU=pb|}paNxXjYSmfYIz5a^>`P7L&!VhquFA4y0-ae~7 z|KOa!laIbor4DIl6y#STgZKhkOxkaO;5DW#lW2o8O=GadjuAbayV$v{kv4P2I-FEo zxJB$pkXT;k_n@N$z zH!>Zb*E7619BxbQS;6UFZ0y)2io(g(xRCkQUkHx&PD!E-n4Rg^qv_bHfOcs@ZSlZ# zXJC7Q+oI{)!-{sFh?VwS#iT(?JNprfFm-6gQZ=J+E|7;MO~#i$Hr_McZcT3-*uIo- zS#GU-6Sr@Wf@N3SgSUUaFqjkB{85H~5)%j&YMIYm={Z%o7o;Hi{a#Gte#OyNUU_Nw zydWFz8f&xn*wrjexKAVY*JXXDbe|~v+$(#4s_Uy6X-v&!qzS#F2I>v=QA0D^vER7& zL?eLE@uRz2yPDT4SlA*>2b|+b$v!wx02!QWhsT|Ax$nT6N0Z=HP+Y5njJY|K_uh8D zRlc1vJNU_hTu2+*7^A&yv*>)9#$i{o;d-Xr|H0EqcQCibg)aM(f|<#!ZC-FpZ;Ng~ z(%S?ZNf`gsaXT*{$;Dgqp`12UjVErSn{H~d#(3_KMVtp^DS3gFd@J5gfsJI!Y(Cr^ zr8n}+cP#*R;!_Or!^rFH6x(RZNhEX4XE_ww$fOgo+CdpwXU+I+Pc%SqnLh9DAKOS) z!!cj*f3Sth&A{nX*7aV~MxbX1Wz+Ae_!KMPDmeUJo&Vd_@GG%a59I$Q0yZ;KE#kw) zoGq>%w^dQyZk1L|x3X9n7HZpoYWN*B%3v$o=Ck_PkU|+eV@}R@EWw-emnU<+v}!e# zLp}4m96Ut6>RODeLCY!Pl!&oS^TQT9E~4TJ?V$C7il=aHSD;}!Z60UcTA@w5sY?VD zGts2??EKm)i@B-n-h#R7p48+PO!Y5#mQ7y>C=D5#<{vNcp6$4V?_|C{^ftZ<;=XxM z#!3ooV46`}QA!*?#mPlu{*oKhP3VLvgmaaplz36*GL)6NNQ#C-=+2v#Xe{cqy@@1@ zmmoVCa?@a1bHry`DECy-DW~-oT-JyF)_7( zHHkvlHa-Lu?%oW)w~SfVOjC40_fH&= zj8Xi3xEyIQ<+1Y8@=*rHD;WVFGtAta=M%zL+HKJHsW@EB-J15D%nv~?u55B;eui{G zCz~!^P7s$FoxYR1XWEJ1)y*v_fHJ;*q)MDZL?ff4IT1n&qxJ~ff^CQ#d0;B6z3KEh z7zjy+e{lVty#fI{i2bnX&ObrupYKWm_YI?0uP*)Z-_e7+cKaDFxPmvw6@nrwMsWZ? zp_HcN`BdUix&vyAt;&>RWTZS-qbVyI#KJ;h}hvY!9YpbbYQ}uP1 zH)utVM*JyroeV~zqPueNyNaMA63<6QO2CO#dsL9{f@bF&QY=hs70FlU%KQqGF?|0s1cTnzon9jCDjlsB$oYb1x zb5hMq<)cSx_|3lTrg5C2ftkC5$c?Nj?NPrQnhN0*NczhAOhHBMaSP?{v+d-$W*q#m zTFH2~u~+3ICpzA;nUZHPdU6qO{$W<8Zsp4mpZs#Qn4O9FlqrtrLgzQ@Xa0f9s{o6T)h^psz8{mF__5z zE*bb1>U{PM!dc%HH@;0->3>}7_8u?L9&2e5-iVfAcr5dj8T{(r;0CUJ3X^UAbfNKc zhX@l6?a!hJy>NtaLj*wS%mf{5q9Es%C+R)K)8Nu(syp~|rx^m!6e(UDi;_C8T4i})*QkRwecstMI8s8Y;8=!h<3L@}pQrBJ6VI>!-b zxDTW^qIkRkKWLs++I!Z0vOkAX4dKLOk#UZ+YKR6`nvldQz|?0S>J+^$v^f7UU~S z_OctcMmOry4-FsR+%tWo6dmx$vUS?xpq$-lA~rw6y}63fskMIpS=hMi(17(vOMV5O zu_cZ&R3!9MDuT5*hulO(C>|Eq2sy`gM^>y|& zkgRjz^@D$nT>n)JmKYl@`)*=@NDNF9+%n42v}IBIhg+5-xVE0NHbz@}?r{rjX=$;> zoP5TP#9V>Ntx?|O#w9?-$S}@6V?!}kyY-^nH<^RWDx_*Ui63s}S?dVo8);Kz) z)UvXAsv?p9W@YNrr@|^z)=#Y&TO(D0`GR{T!oIw#=}!M#%J86FnAXI?43=Bqa~jZq zGcb@~jm2@Ef1T|=c-3W+jVCS#jt%D24Dzv9*XmYD$kb`Gvmib8LI2^^+B6VR=|{c@WQ*8IVNKo zspyWs;^dV31XkLtwJ_eyg#GMzl`y(S6A)> zh~cVg68OJ*+~2%@XWPS{{NA^pID8a1piV4adHOen-QPCMce?=)n)Am4`!>Xg6d>tT zm?!D_ja~Y$J^eX$ZBXB#e@*O1uS|ah1ZGL`c|t$w>D#mc1OBN&`q{Mq-x)AM>F9NT z>Tj-36-o^2(mKB7bH7{U-`1d3EaLgjHhX6KZbCk!{2AhQ7C1>O*e`C&zZ)FTVf553ch3wPpBvK$y$JhLJloRpSjNqmOMI+;wUsZU z0gsLO$qaZxC%m;FfwVbNp4Ty#yXWZpl!WXt{mAK909x07*&L* zcx+_aYSYVyk<$m2NiUa`uEt(@D|hNp@`VP$=MOJ1JT;fSbI2FIW7@y@;P*w-ZUjK> zw&Zs2Da4UZQQxv9#osR8g#V&QT>sdLcy?R*&MhHJ^AB2rg1>_B&(Eb8S#8^piWw=A z7q0=}$bD^k8IIr=YBKYzFf8lZ-2Kk(clieq$z+(#!=~%fKb<*WL=9IPc+ttT8RJ)z ziCO4sk*CDFwDhlSlNNE{5r+X$FKq}CN!i!Zcu&vdT{-@(osvqCm)_KuiqoMm-vSN5 zHWH(d@v>t}@)IC4

    ({5x=~Gd4F)A>-?G6JQ_Nyl=4K`Ke6?6?Igs6?xj{IN6AM~ zHeSbZZxS$6n^Q4M_ z8my6iuhL0P1%b&h3)%JFr`n9{kfNwy#*+6TrFt7;9`iN{vfM9vgOR5bD!c5h(h?f{ z^Xc!2c+SyAZ2{;Jz0l_d(q+Tp3ssXC=hWi?j9vIu;ZJEUL5A7R7wiKUoiz}oV}UE} zZTWV;H}%dz!5Wdi)JnurJ<;GB@6*~$*h;vo{3QrQO^q%KI4}XM+;>eFR2rCM`Bb00 z%-I&ux`28rxjr4WT(3bm{RfNeG|4jgIFC@ zL;siB&a#0U$~uVQ;6QDHzwvLys0vDbnMc#M&JS#$EtuV1Oj54(HiP+Gr1)HFcypU9^T^s!&!MkCr%rV zO6fBveI^IxOW-D(pFgVZIDfimI8pt0cpXvn0ElQ1kPe&h7QWG<5vxpXCTGRDB>Il+ zabT#7dkL@~;|`zgaJ&I}){CKVws~c_V6p-M=aQX1@IMUN_h9z7@PFgEHi6yY^_7}w z_aV@&UX*TyO%)<|PVU1Kr+CBW?Mh9_uRr^m)ppU*?Bp?`XU(QcQP@WX8D+0)hk^uVI4QyIfkr?cnQgIR%4cL0 z?&uKf_}j9rCzzXP5JH5lbYukb@b3=K?RWq)BDycjQK;?inGiWA&(=V&&AombK9Lw5 zmwRzoDdqxaThplbt;yKW;^=5Ochc{FTeW{Xxut$NeiiiW!;8m${Stx`lI=0eM)F<(3Ss#Q5HUj4al+!og`pGPNKMhH)|F{1B`mc5c zfUp{SyzMV>@1#tN+;~yT(Y7uNvop!K;_~C5^>x3m96SsfNKa(%IpL666@Wa?S8C?Y zA5O`yt&4LsfFV)FK}tV6`@RZLc7^vsaLM0@&mV)Mh`YN1{yru7<XL=6agS{ zna956h<{>L4j_3Xd;D0`KLhbO0ib1;hVdT>@*hRIKZdsZq&CRry3y`G3O|0@vga7k zQWKW>@Fyeu)7|&q06=>7v;EQk*fPZ!Xcr27%KV8bNL%V(*pv><2m>&A)mYP7z6~e0X&!X%f-jJOQI48$k-kE=H849$VL(O;p z*BJ3Pht~nBT6lW&9sjxI`p$7b&=%Hr0Jvyd9@mZGdmP+~y%e&xVA7H~(|uI%yzBV6 zVA{xQmaic8({CTwSLboaUb%EhfMrb~SG4L}juSRtX^PTFJZpW{R_D@>*8_0e2m6m( zfz-WPt8;k8ReVwaL0`_w>l0=@!cF7;&(s)hDtETNJXn%CX)YR31sY>*Vs6RSz;NZvMY$ZRlTc9oA{jS%7won3PTR1+gtzGMj zxUicm(SoE1V=Y=r-!qkVxr!lh?7@;aSD9m{L9!6oscNISwHdB|($OjpTx5Tw(C>v*nuH5fi8O_=lX8EjiAM1^n?NmPXvK&d>44KbZWo~{P zz&5?6QCFuCh~hp>aAx!R$Mh9aX{91c?z2QW4;Pu-?{sSMKf}Ul zFv_;C)orgJwiBM+dCA>Rni*)rfA&V9q04Z_BsrlnUQDe=hYM~6&QL6UZP((+gwhEk zTpYpV7F=s9SvGj>jb8dX>B~lka?7JdiOr^?2CT=6jO_X`f9?xPtx~@T?k(LkZ*941 z7qa-eZ!>@SWy@y#0#xl`SD& z4#5Qv0d;E8#-eV^cBF4QM|wb)vg?pDux~I5{`$a$P+M+EtjTXcRApnqNxl%!nAqMu zt#}1X-4NLq)3!dWLk^s3oR6j#Vj;C6plu2i!7Hk!L&F^f;SVF|>+@0Z#%f;@c>L?2 zh%dPk>y(EWC4G>n^1$7Wr(s~OwjG>%x|-zzxOQR#Pkf0l;QrZ8(8jat=s@%DwT?e| z4%AqP!k1ywxHcJ^hBE@UJED9Pz#;QydvtY4imfVD+4cR!ZE>@}jGWRJYd{5>3{GS7nZ)=at}?`N#=R1oT8xbD zPd;W$Ulvn$uF{$v<~v^3Y!K#CEb)9?=eg=cSf^N;P>I)}B0g2}`Nf=w%;MNITaTDX zRmruSm~F8KWJfJyvb;ZuTc{my{*`NE#V+IT+;6~F%G)(JAAW}DrH7qU$fiNmcB0{R z)R53sYe;Y6i%6ID4qhK(IobuhD7}clY5~}OvzOay>KsAdHJ;zp`9ZVzT(vo9_c z59w#)5?$CHx{GJr4dPRSE*E>E-yB+~nF8OeqZH0l z2;*Mx=hRq{9qXC)KrO9J&MGwFm0Wlln$^qvsoU*i6JRIT znQXEjJ5icAn)21N1E?bw=rOZlKHvVnE0}5>1qI4XFP|c1vj&iK^Q!wxyNtE8Z#*ml zjme%meP&Ndy4VUwRIom0cyt0zbM@hA`<97mo*){@Jk7E&1aWKc22yW({JH)63*A*4 zAFN`sTSg(G=U8ohtN}15iXs8_;HsdX#(V5=fR%BmaHuRiTq(>7yL>ZnLR!RF8D3!&dGGpt*l>aktLk&O;XjC z4@QTNo&?1ckBxaHQ1%P5U*=Wi-2oYR^2m}tW>cDDkCe5QKT@UfR)HGqJwLgzKbLRg zVRp!?{x^XJsV zm00a`JN9wg00LjcB;mnhpqi}hZCbhobK_(%a5l)pvPtvQl~<1sf)LBke1UWW3)@gUfhayy_&+Y&dnyt#Orx0cxjR-q)s7WKq z(#A=TB=zdY1c4$!8T-}R?=|cjpZcNSwE+JOIgCFD7h_R@&>Dt{)I5dMdxH!Q*x{ho z^;V0hU_zNWv$zkV)5}hLBK*PV>G?O?$GgSbbi{HTrz*pOU8Hx_BaP#CAErQ#5sb&w z)npUngio6s$;WctIST;^=JL_yI|H<&0l{=ygZ{YKK|s=$BRVW$0>8bz@8S_)7SHBT zJN*VRC7!*~Ut~uGg>XNmI<6ksdtmM6)m?v{Ds9oW8<=|(FS&{U(dWa4NcC?eD*?ZpL zvrCV{f3xWK_ac0Fq_~5UZOoPezV6S<98s>qc*Bg9*L|9G!Z!>v)d_&=5r=IGs-6H& z@S0IOST}$ssKl`sshpu^g_(ypms?vAMwNBQJ4X9J?%73*w0Sp`SnRx=62u5>Z>#3; z*7sP}xqd`uG+}z38pza=v#+11%+(;8;j+#$OMPY{xV{*$k+B=NZ6*~lM}-}9-cTjB zjfhK0m%YVZJ6wT#0%rxM!67u86YMiKGFs#yoqUZb(7Kj??RPJFloE?aP&P#;l5?Hu#mE_8X_C{YQ+P%2 zo4pUxk2V>qwffTuX|lD5oEN9xmCt@I)Y?o#7>3imox;)H>n2c3}k3?b$rGPkm_$7u4D_G>Qes zQF8rp0b;o%NClda-G2;-GU~**L5CX&`3A_1ZCNnr8C2}tmu3Kp?AV+!mHS=mD+HMb z)Ulf#lPH2s5e2Oqz*Hv+wS^>bmJ8bZnJj!c$MoW=3D7+kJ_*S>yE5U6+mOIG5i&WT z(~u6m;jvwq(Ue?V3jki6Q_#n1;jg}Wm#+Omqrcv%{_|>@VgnF=RrSM}uC6gCVLlvy zB-L48oYDww!gfGmE!AfsC#FZR@S1CNN=>xAYBGN3GjKq`fH)sd)!mop;PnGTp^N!~ z=^EC$82#j9iaZjA(8WE(Mhn}=+_b)H4r)ci8yXwPR_BU0FvS#6&CmoeDvq`q%I+{5 zG7V>J&@9lAd>ggTv|#mp&(2CJ#5O)*yK{t;?bPlSxq*A8Sb8aFQT7G=gNdFZnMV;2 zxbLlo5T1th0y_Z~+3`Dl{VTk*g!K3HRgCN%%Zw;OT{Rfi}Q7@Ia0UEPAsC>KL#hSEq)ysXN4`0v^5m(4@Pt;g!qBs*lvNq@6#h5vcczi6%?>~w=JG#f#@2cAeg$Q!yFM31Y|Xm> zmAFEW7)Y69k&0GX0aneHFDo+t$x(o=F+Rl_W?bA-WsYu4PxJKD zuNon1w@)$0N#pvU2~yL;-9M*sZe)M$A>FIlL>#y^S=M~8ukj=*WiA$4Ec96A4Wvn0Q4{l*S|~3e(d9e8vu)7jgS~(|EaOR_TMH5 zJdfq@kGuMgBTxJS=x+4&hW7kpk3c2$+3(-_F%HYS2s}CBsF?mwkAXi8!0yoTpIi9f zNBsZ!2ip9v0e|S<|7TAG`d<2ymGaXhPVFkotckyH-4&Q*byfp7!*(a=Zw(aFWc-<{NWOz*MZ#ZMe!i*4>4N% z)6VF8nAZ|?b=&Qy%vP1z40*vWB=3A11?WSCDt>(Qe>=LhcI9Sqy2&1JdA`U1z4PC?)B$brM~D^$#~or=?j#oS8o z$1hn4qAFKwLt*vR>wU7f0jf0(wzj&wJ!7Nt?w-J*qd)ucKTwKx>E7c;Aa(zeuAG<$ zp|c{}ncSg0C$?F>ZH`=R(&2T;y8uUk4clfikUKgP7zUeDD)T|aJ(X)a>@==*!M?oH z>oVR}SiKcFXNL{xuI>~^5)8(8(+%%x3`G_D@~Iey)%o!!5C|1r?O z-M4(Uhe~eTc;lgCEVEgcR>ApEC1_iyt21w40MZ_2YlaqNdMTTLbxGF zJ&-!$GxOy$OU2hv6JVJIYK^O8#jwD$*&vyZV-(Oom$iNM^-F?93!t$+sv=vJTf^qI z+aYz|k9)e6LHHWOT^_@PZS=xy0@uIe*?&jS+H4#>;vm5)nf+1!xH7e_Knhc7l6g-2 zpC&vc1qcKSrt)O|$*l(qfExwTkMTC>pYZ>cWFRN|4{7~BH%dB?qW5|`X*~N+&T-ff zNT0fr49EZS_`m;d1kbNkHim&(asQ+ljX1{*NG*$%U3vZ~A^g9_{J&((>not3i7==p;%o~h_&hLMU7(&Qst-M3>mx|5}Qq6BSil0GR-56D~&8Xn)28>l_RBtNZ_ zZoh!9OLTcnn{7^qrnbs$VEQs({;_S?6x#2lkfhc8BIt?CM|tHYqx*ja4HRbh%3_Br zfy7$|5^B~U@xyH!@qG7wbx^&#$QqKezQqx0a&+Ipsd1A1!p6a-=6g#=F=dA+k|0(f z<3PL8ZHI-W_mx@eb$xr7_$B+3Xj7V@rkqdX4u^8s*)Sa`2?6SlDdWRevQM*p%J=>F zrS~}btUKP)r>D3OOakK$$6HCOoE#2bpF_^oni+SeG%iF5I`xjOtObYI53US=yRFOy zfyX^E(;UFv4y%pzl!e@cZgpcw+@$|#M*q0msO`1~tbsukck>@HZ;iLPphgPWY;?R_ zAL)9J0zv+Q4=8W{+$oXeJqWQ4dXd16?2C6pq<9X(t?U&lo{L6ynBUrVOAC-_a*}kL zXmAlf9~KI}>^7#Bn3pgis4~#~kX*%js0K~-2%K)rt`@t2JnKZKAtjV!C=PO567!<8 z%rR-Jfv{QnDtIwQ3!TWK9y&Yi>dj25)$m@<)6`mIfN$AOGP+rI1BGJV)AlB`c+4nu zwP88Gs(P=B;F?$IYo1s;hl6LfVY`2{PT9{ndVo|bsOw&$v_ma&%n$Op@qq~dkx;q@ zzR(-%A;w8?c;tmMD5)aut9>Yn%k4V85W99qWss6Mm1#9ScPe!=Cr51J9wleVt`djd z;lyavxm*#MTJ7*cBLa1T7Odkr8nCr!jBvXN<^8baFtK)DQ?7*RSg*rKyWWyGd$Nds zNmF0m>u$$4%LM*E?7ew7)b0B}Je1O^O|rM#rBW1SHd1V9X3HC}M;$7>sPg3?>G{4C8rEpL=Qb`8|I;$L~45$M?Ut@m{X$yw2-9 z&)2zK+j12r@xRTx#qwVWaIDQ5xIX5^SZF!nw}uOSZ>Jh!Z$^rtXI4hsSrJ~GKdqLZF@B-Wutscm zu!F?LPJ9H$E=*-xO#B5^JCE9;gb!J~gwy32Xf>YrNEbk-yy@)m^euSE^@O^B0uYCJxZAlVl546m@N-OrBNg(;d@&FW=W5 zg)KdJv7v^d`|i+KIeE*@JTJ_GDUdQ&wQ%Uuuj>M4#m@s}+ZCvV%FhRLeSDt8l$m4I zxA``KwykVYF-njLcvJu4z4a)~7LNY20$}w$p}rSOpU`(a3Rc1oT{Im zUBg^5xm`R#Pu3JLFGr!NI<2r#}U! zo9JVzSC&S@@)C$#zea_YfOj4xhwT`ReZyX7a(ip7oX~z zo}Ze>cRY!-L!@2^?8wTTQ6wk90*+2!Ci#`Wp-F{{)@dCYl6Y6ymIW&YJ*b+PQ5lWl z3$L3Vi)^6?UQG0Lc5+N=EE~06vOdMU|E;fjpNYp9Q1(_6?Mzc^*n=_XYly73l8~XD zh2QpjSFK$OMHkXb=hX@u`qDfS;`-%R$kepkzKwR|O9OJ+A=y7vY1YiQg3((IIe$-{ zJ1=Poa0GORMeNmTr-#tSE$Yg$LxD0t8hLW1>o2X_xUFYefDT>CrY2&#rVG@i{PBFAcRi~=jo1TQ6YXnz5579ASxp8+D7m`0UO4)E{eqZgc4b80( zzzVk?sP%T#I7J+^B_0*KcEh`D+VBGVE{j~sxtV7=e6o2UbAdF(el*a0ihC(-)2=gj z*w~9qC7X|r6Umv2)EfQ?q?{_n?R^8kJZ#Gu0-7uD>QK~1XK&uV?$8vD3$4#I>r5{H zGIsL(`_A@OvD)!@N^8BF!LLL$NEAp8{h+ldy842X&i!94Df*Sd{TIspe^rxp@F8Q_ z-?;$)L+Z2suMiV3U&9t=DZX?G^!+u;8ksl#_@){U=#%cR*k&9vKQ5xyU%|7qrM&n_ z1?L&7h-=F$E3_|1oE8kYK4UxR*L56Fi1`{54olATOu>D*B?=F)`UegYqn`=8tbct6 z@TcKgQ89^d6pqa9Pk{(@BeT7~g@gC(!x!i~$|NB_fP6z55D)XzMVg-a3cQ|(1E6m< z{z3JRABq67$yY5kIr#M$&e#G1qA8ej=m))ZMIHdWdFkjEJHOtqTELI1SNw3Z;p68( z`D421*UM=O{N$Z8qOtc&-;-~qZ497p6}1CZU)wi^VWP>*)|1p}-IComKw1Wn|Fm2C zS{g+7uLLqN!al!R-cRr&!?x+T)SlPo5;&Ith~@(L(Q1J_fd1jkGu|6T^%Sy-R&z_aB>r>Mg5Xi?bxhgtAVTf(hb2xdj9YO4D27%(sKgWv0;4nT(Ynv-9rw}-FP<6)Egy%v&`7>a^>Ev^1n zBaQ+B@h3hf+m+{k2k9Z2e%I!(9KAMwNIKAVUVHbw)Id&sy{*3xCWWoVI~V~Ohh@9e zL$vnx?*t9Pzk1K(P|;m;`rOaUpBb4lD(?Ul0a#Sfj~VReF^26xR;Q0pKh(#2o9QgE zzV4hlTOK^+UiSH#qRTbtz}i*bqvRFg%7ISj)c;|N2>(?C!K=Q453w3&hRkJhp^> zGM3`=xy<{AKmqL|E-%`bXq6nPf_}x#Z&%olm#CiP2c%xAp0RtDovq_H>wL=dek7gH zDuL3)v1Dvki+HD~F}~U_|KYF4`&T|Z3`*1XyA|r&sZ`~Fx6$2Z0@7nNopKR2bO@>U zZOq7hsegU6@{x2U%;#P6<$vdTa$Va;YgGtX!&0YJU@$#q&^A#(+Bg?@8A6qDRo~Sr zzUJfy)i%>?Tz>h+<-6=;HEzEhE4l|gq>^|4@|DI7QCU~i>bE5A+V}S3`6#FH^c7C4 zt)6~Z82~c%zYy@}W%cIhmzE}*dw;)vRI}apP~pJC;AfEO|DE5s~p$szP?-n)5g>OGzrvFB~HMBb03Pp^pZ|bTM(f;BYpbs`^B&R7U31f zF@RLedUadRCoEL0%31Jio~0~730M>ob&kbUB=jgwU0es^Ui4k}^{0SuzI?T`bsuPK zrDLS(dgoQPG}geL*l#uJR4>T2_gN*RTF+<;+fshoad4Xh02@+!=SJ3wni_YEE@zpFUb);ruOjR*B#|86j$lT{WEW-1o$cuoy0mf-sG?r%w)o!-L4@CyWXUdellZ!IpyVZs-(kH0 zAm5*>pLzbf`rlJP$fky%t7{j(!^s2~_9?Y{_#@v>{M+}5ywv_~p}yS)popF8*MU^u z8#0$IP6B{P-&5|p7ymDjgq-xhMEYM&T4X2v?{));{EwDNgi7tt&sFuIKy*Nig5=U2 ziM^7p`(9qQT>q_L{#M_-T)*_#s&IqPvK42M{W~g%uf5ZkqXA9tZ8E%LF>WdbV*Vh( z^T3Mo;JI>Mn+LOGFEUDMH8ZJR?LyPR$f7GWZn4-`LW1cd|&0LvXyvE1fntN+N(AV9vT|#HWh~rbvf56A?T5? zRGdwvKZ@rMY7(O_p%6>n%m{r{z@x7gi`^ zEFPV$slam`O_>XMy6hA^3vFWe+#ouqdv;aD%Zr4L>K8>S@>G6R4stOY;AF&E(Vk7M zhsE5DM0>7yD@Z=I)8MvC?#>FEj<>rY$Juzv$~{45N8I+R z-Ym{qg9zd$q33R!yzJZzO0aV|9*&qC`sg+UrH*MSiJ{Nd?8!{g(FgMsux-J*9dn(2 zHC9X61LMdgJwYTtFbPfzOWy-zuW2w*zi3-yGV-ba0sk33r zVUXGU=_B4NS4S?bbTNc1i$=cg%Gg@4`gHPZ%EX+n2P0H(hhf-Mjw7_3;zxG{QR5T? zpd!8xjEhuj^?du^tvG@pByh{UKyr2m7)Sh=c4bfTt3TJ3(I;2;bm|S(y)qB;?U>GZ ztc!*~ogWGgY_*D|@euM|_Yd9t^~jtoMOUo|Prr%KDg$7rbogL;<0kj%72!K(J}h}p z$j$Jz=z`lRWpd4M074mRHq(XSuZ1vJ4w}dee>$iX7Bw+`(#|h|Y~(yBGO@m5-cUX# zKgVv3EIX5vgp89VLHr*2sTQzjWOE00! zBdXRT&jUUsW1pP;+qYx*W;-0Pb{Z4$zJZ3YiNRG?Z}zOKe?yr-l&^294j}CLY#Pyd z%8}RP)|OoR9^IVWP*)eTj#G%9|8VHgX_tYTmYeyec7_b{Mzh!Bg%)PoaASk?{lhkI zvw&8or(v<2a^U0>*#Rx3xCgxWg!K_uuDYc#-$4qF(fi;HWehW`3kKZId`Uaa;|2|2 zzU70)Lk{p)A!RoMyHs2aRPlg9hc5gbAv7~Qa85_!9A>z$L=wR%hB;(>^ zxH~4JAqp~?oLXKlV>Y{KCeQ+u^7@t5F027e9vJrZ;TfBi5f;f|tOnhjmu@S=`${L; zi?bHs%1+5l(+F6wfq|x1^Rwt0v`xys@Q3Z!N0a4V@B!+Y%GfzlOs*6jG< z1z%IH@&It#0oCLG`YXQv@86?z>RKrtP91H$@?X~A)(Y|PNQ8FM-_QLV=&}GO3Bfb+ z*qcR|1o+p1(}0iVL*2*4sbO6LxL4r1hh&cZ{9}JT9dQA;?Sezh_uidvhfs-^TnEC^ zo_sv8IC1}f&1$X2AOgHDCwsX<=nI{x7K_N@uqAR`m;8XfjP5nlRI9*lcwjMtGYH>y zze6Vakt?m$*^w$Xvsczftv=5(fHM3`f=8^`aexb&5t^Ye8a@wyi95EZw=1yAQXcGE zik}^nFhxxRDJ0oCL7#j2T}68s3_CX;we}B%d7OP7Z|v*k<)JN|cR~ya6D)m!{1gK_ z7Ypts?ubQtPE3>SgN{s1Hk+FZ_)qUTIF1r|?nb~Fioe=cjTS>%(oj934fGH<`mPXTa|a+ zDd`NR-LafU%=@5Ar{e80xHmR|494GXq~tpv&*6|4vP`7MIa5Wo$lIBbm|x0^Q`-Te zXu+t-R-EUCL&wAVDU@k>-3*#!&EASl>x|#|0bWQe2)j%70+E>=m}`AR?!q{c8x}gz zE$y0;zx@P8Hgay}ywy^(tT`ZR@O}UXsUs*>tHtU8wb|GJeWo+`#QSKb97E+lAH?=oc0H!=`6Vk$#j_C z(-d=9pY)V}T-@oTL5E~Fn=o(*>vYH9$>uGA(eqCSt%~%m_zY~QQaH{-$x$Q)jixKb z_owCj+IJRlRt)eRW`aD(X?02$ylyzh$|G_+3gC79C}&;jrj?nJuht8mRjS{#*`pVI zZ{(3H`jMxSouIsBPf2nNZ^uwHr^%{d&&yNr{;33Z+yHsQMdPmVY*q+*BKhhB?vU6O zms#jq#5?JDE*(X`W0?eHQ^hI^V@%47y?KGulr3s$$XX^Z{kleT2C3xHq58OtgJZhW zaKFGbKjn^8Q5qvH1cMKtA66DvI}a6aL>Apax<>^oo!9ymPZa zy!q{Ol=nU>L7H#vo(Fjsc1)T+@m_hU{MwVys;gzMOO*{_GMQ?6u$8jqwW@Vlc3pPU zs@L+k1O~+FYHTudxFe$^tE5bJ~D_4r-)yS-0=2*UfAI@GN%&CD?jYft7c{~2xSw>yN zRpYcxXyvb8`kaDVFZw)=r=d5b#AI`6>~BDWV3P~Cokc_MN*e1&!#z` z3OZ17v&zSl(1d$4FkPNCmT|_X^`6R z>ir&@oAIQC2-k-+SIk3>a&hJ`1BQh8WrtwNohQjtG0x2ajc&3-E!9C-drN3=8xOIK zi;DZD@o{SRfs-IPGq)*6()I(dYsAC)YzTODDf*eCN>k~0Sg zSIg;#@^~;F0@@CxLZzoQ5d+A*w3OvUD9ZY*)I-%z`jCWgHNn?{Cw*nqW&rH*y%t8% z=YdnfFT`1as$0n=-M**bygEm4*DjoLVs^+ekCX?vSQU6}UwT83yk3yEt!wUS!f=L! zRbehD#z}W7YoC(WDbh{Y9CtV~wYzO_j-XbVyz`ky2RP&bq~h;f0L^`PxhC}s>88(J zik`FPb((Ezev`QD7m3k6_!~&U)=Ha>Kh5H$rJ1A}&~)^3@N9cGnLb?J11as2KP|e` z01RgD>V>4y^cDhJXce!2WxzzZY}&FP6l17t#cR#O5CF+^+US$v=*p4pzXt=7<~B;f zP-D%Bu+WY>+6y)<1|A?eWw2@&^8GU=A!UXeGm1^s$Qp58YHJQ0e(tK+w7EVDjTG&{ z;QcaHB0t~pxeMviAVS%iH3&!eY=4*@oWG(w~oV+UVKEC{hpFYGfvJh z13o&UmS#az=D7XQHtAmKw0O{H*BtE#7EJdsn)Zj!<&aXvhl3> zF&ViOD1ngSm zb`eny5KbT)ot6Hj0{!x|^>U%bazH$3QNs)rfe;rDXFPfFb%f|AJes=%FyM5yEH(X^ z-S#i(D)j&plym0%e+e1xJB0v6an7~n8(YnKVGpoc@rZmUyJq}7fi4yk&1lVshL9h3k3sSv-p*!i%d4GZT&}|#jVE=yAQa7V;DS#iE-C#Rl&p~{ zE*oFoK|pY_cjG(}mQ$72B`h=3f|+-G2W@JyWwiRFex)ThdY+npw$<}+{o=R@RQ_>)IA*>{g5g@`xaq4?Z(t2N_9X2=X(BLM4r(A%772jZqc6PF)hpSX?eAe8+Dw>q^-y!0-iY zPYxyw%kGksTRzRd20PstQwwI+@V2c(kU35x>PR0xmaC{m_=j&M-g@!IA4bG zfzw#)z}SUqSYC!;;|p6A1t;u9Kv2Caw#E73do!uITBfZp|ulqnS!}x>Tad zjMoB-NkZ#7^Q`n%X&vpaK?(T5@cpD`D4HEMQ7)t|uO#(lZ82oq4#lD&RhC%g{Br+~ z&Kvj3+Ahl*+Lw$l`}}0DG(s$FT5pmWXkoR-RH&$gyU_s)UKzoVjaYD<$Aigc_wtAlXzm z!?A}uizuu2uzM-PHvVH1?M=0^AcQkmsAM;t0kJ(Y{dS}I`GhgjB_0Pr9T;4Q%Zc;x zj?1h}m0N3Z18WiTNSb7H{X8?}B8xfXEO5we2?KQDur+Wb{PIjYi_EPmNBSe|Q(?>y z_k~P_;1_o$CLl~#XuGMiMT`%`Ai4TkjsYykjFwWX{c*tFb6Xmhu|Hu10}kbKsOF^C z`8jk1F|%TBfYOkvnD%uZ7wzTg|wSyWU;A^3pqsAT|Dk;mm16t>b=<+&e~s+ zd&LX9>?0L$ow-yMhki5$V(US2Y7GNzU2tw>PFDh9;0E6ap+3}nnbZ5k{T*S5*TYVF zV>DKe#4@f}XtQfa7id;HHB)H;3nNJtNQ365DK#;AmnFTaZzq7xls^%sn}rU@nVnPt zVoGy?UOS4mSRnCts%m{gyaF8H)`(5YD0IkJ*~X)pp)BePRnoJVo|nUn^_%rMBkIjC za2+a8ta6XxDaY(gr;;&3Mx&-87bxP~TcLd5j&JSfG7QYe9vv{{v)AYo-fw%N`H?FG zG;UoUhvku6tt~N$uWfkK)=4loNbWfNtRZx+R>v7Lcm$!X#7s#iyxa$=(5UAFoedA2CF0 zBuhzH8Vwqw$<##M@tQU8*v&&BUSoLnRB9lUI}<89h__@Hc4y)-RsPU8`1CmZ7t$kY z2Vk`l-tB+v9M>ALq{O`9v1-Yak&P++MLwaVi)wi|_f@_Y-p!J06ONoIQ!DiRgLd?3 z2FX|(2HQi&+G$&3baGZH;!|n`l;RRE#anF|g5ud}IJ7?W%BripY2CPwE!_o3xU*u8 zD4mn$_~>eMH#c~wnT;PerJ6|NV|=0qP`Qnkj)LQBkgIE*d0PUaEvax#HmH=vV>M^u zS)TE%Fk<~(Ur88knm#OXpq8<)wk-0YGc7=$Q8Vb=5?~-5+{Gm>tR}K?(8#{ImFeey z#th=?UI+tLF$``RaoCumi<*4itn)?QHwfy<=$9*J6z3tRg_**zii$h1$IYxST5LR> zo~U=clqH#yrUC0X)YYmDTb_!GXfS$8$i<<#^97{+jl;pJM8yT#X7J=1>64i@OL}ZN z;+UQu9(zmdq4t=tQ+Du7HP;o?9f#U+aM~SL_@LcdY{m%2C$-oB>R0IHbbgs#R_CUU zsZ=iX0ZBPX}J-TWh-Lu8Qm3lv)`Rz)vT!1@+c0K*wi|R0acjK!u{Na+VU8PkF%f7`5Dgn zm;|>@?c-+d_8pq)Y-zw4Ot_VgHJ2H&Eug6W9iTK9EA5}VgE>+{Hn}Wl8+Cl4GWUvY zoxifwoZ~zN92PLGm~&iZA+6y}9U~@VWA7=ReuxV8qHN#9?A>AMN+c@H0CKQ4R<%^M zwCDAEW)se}usR>81~a|j-rZf$j5NB1=S=YMM;q{?uCxwIu6^AVqu|Z%P>|$6m9oCM zdftn>_&V3XwZ-+ z+rd76++J~<_ZG?3bf_?@^DJM+YoSi9?(qftOUI+U?-}q*_vNtXpQ>2bi`22QF!j(+ zDFBV`7xadUb7SRo@x2n#6F$rkF9l!ylIXKkebQ)W27jTEf1c)=poR@%my1>R-P;X6E9$1) zGBKNYH``I4BenZY>n!zU!CUZ@%_FVp-Tn!5*A)DzVbt5FEEc_hQ4;O|>~UJmdZSRe ze=-rj1!6f;Km;;o&{%w~fo@tkQh5RVs?&UaAUS@R7D_=n1sdSaV5 zgUE#+Yqx((hVKo7h>bw3P)ezGBz0`zu{zj0pkABz0+;-!XY`tr*4GXfr;4lwPAIt6n#(9$k;IdMI& zTDe=-S8of6kjvAw$B}&-r`2P}MS|jwlN+_Z*zyVm)^S}wk zJ*S}^`OYE5s0BC$*GFE}{SFKCIkVKoRp9U(OnDA)@T=FQJJlpI?MnB+;lrVU+~|K><|2f2j@Si14*@4Z=Wt>l~tI2 z&R?m8yWWlJf)i^7zW~2!A@Jj;7%ONU`fPWJrV$MFIH+O7k_(<|JSbm2SD^nl-jk%V zwqrgSw;XICWtkq_HQ@11am_Qo8UAyn7S6M?tA)d6cYX9yOuWX)csb{)LU_z|t$M!&be!=tma4F@ z8t3=6vAyr-vTR>u&{jLz`RLou? zoxyNT@i`W^+|s4(?6Rfn8{RStf~rtn-J#Q$>bfU&7@dAfISRmO&bOIOT?waA-Tf5H zFpG5$Uq3y6L_x;*k&AA6iuLVMz|HSgx(P;@4qAui8bp4DKsb#Qp5x}PQ-5<`{d)$95SHQPjzYrP97!?@n`?!xk-AX zrTe!0bmQ(rSDss1ncuO;N&w~pR9YH8U{yF?6?7xj)F9TI`6c#Z3dCNN_ni>2UAb`X zrCp!{`W|65KdDwV^Ky|ca@LU=kN52@6&4H(g-EwN59VpbJ@M|+Myyjmm7J~*S6)~5 zI5%fR?}~DX#b}a*sk538n4Qerbf#6z>SL=8W4CH`g*}XRh|N0677}OeBi-TPdNist zV9jxwm9FEP^t_mU$A)AK3;74KtL8YQf+aZd7*;h}Ku!fKzIv||aC3LyjT7uD#evB+ z;gJebun#2{RIslyW>XqugXx&^<*j)IY-h&L39!z3ta%C#-nR}Rv5_`4CG5`k3o{pn4%<&xn5RPF zhw51vP|zPpZAE-XOJJ@>ZKnx0v4x(I_ws?=i1@}LDc6`rQ3ocA}h%1Xi^ z8kW?n?as1`(ETm+?!@I48zx@v5tNTUN<-GEKA9K|X%0bNi_-Gq$H+ghm~bNQL%pyl z*jvx>y$thfj~BPY!MZe3H=gAZY8BK5jhG`z$)=pgBO%g%KKHda(;lFIDDPSW!=qX5 zWHr<;)6?Z5+M^V9GXRpB1%q*KYh`$L`-@c~%JCyC%tuTJWHxe5R!qj|8&-9o&7c`0 z@>Pk%P&1vxrP#!J_Nab9&g{*utH+K+nYr8kJfkw?%SP>8F*0o|jaxf`;% zIs|z=YI5YAc!owQ&aKMNmZNh^Cl2-pigCdT=svrw0ZB_ygm9x;C_$@7UES*%1rKrX zR~MT%H^Ot!G||^!+DeJhz#`N;V6oRZ0gD|IsMlOf4uzGQAJVrAd^hEwSwr)5GUCg- z#MuQU3~0_DsVw-A+8}YG*CBz>D{*v!Qd!t(ck9E=400-7TaBfk&f*w@I$d#EKTmk6 z+anBxoexnd&(&cQILiROp;Sm1%z49mVsv$?zTl^eJLy1q4Fu4CX}NPB&@M@7BAr~u zY@uBG+|0T8YpYaJa#dg<8XmL8D7$ybB_$*N^vBx`u>R6b4J|b@bo0(YRNs~seX{0S zGcq=JmElwL_?OtdKr=7kt~c|xl7i#-+^20YmFQX+f*;h+=pO*kluqCkl<$y6rmrkx z7o*u+7pb!u(Qe8irJ#-YsmwoE=^kVKug(K}u|J5V?#ORFTe6dXkEP$S!I^rA9uVEy zRbCsGK>fX|s%*qBlVkL0Mg-2;+2CPo+#MKI=kaWm)T|+qG{|WTIc7HxOvp9kR}@k{ zU<)MnX*rS@1k*A2T>(`sbMl4jU1U`nSRI5<@rLBCa`-mu?@osnP1 z+MSwYRcYKdA17f_GQ$dS+7$TwRE3T_qh;`}O7Q$|;xJ`h#boi!I-JC?YuMO5 z!NY2p8B}@UUods1;R&ga<~sKF3y88WL1I2(K&3ei7@eosVZoV(YauaM5|3W^J08xK+k#}fa_r#1h9|hjN$+_8WcBp!ZsQ$ z*qRxe?EF)c)6fYa%vZj?TMQ2&Ou;BsQjVS3o0U;s<)f`fBE~0Hzu_@W6dI%33yQ@2 zy9yI)av|+~D<&W5avW0IG8@K&bNdl1w$va@!dMdFO)6VB%9bWSms{Qi;!!f7)vzUCTl zqC2{``DL#NX?&miA+$73{M0{M*(=z@hQUbEvVD>%p zeP&v&pf@XXmw_Ncot)dC!^w3A(lH@`?0^wvV2J_GVW(MXH+3X#oDbWp3?u8s7R2S_ zM4f?s+MQ>d>XAc8DVD7nkb@9^j*B9SHv({g5CA=|{__$24YxFI0hwgZQH2ga6i$7; zPA^4(_?)cMJ^1~9kl9ZzBBHl#1$A%f%T4$>>Hk7-SAm56&&#%4f-aWTY3Sq(1Q<1| zwOBhBoq((`h$phlM(S6Q> zX6U3RTygPG)ciafn}(Qva5!|a8Y+lmSGE(KQ7W!n|jvv%8O--g4#V2Zz9?sQ2Q zncgJm4(l;w8*=R!_PdrUAQ~mVuK@g;MZPdXrLQo}fL*qrx?=9{T!4`RCV|tyvY)jp zs6N?qTmjJ^Bp&LdT{U&*C(QBH%yz7Z+5l1n3+(AgJ|;^+s6CU2&Nb8S3j$U)tOhMb zxbIjKBcBs+6$OJcpn*bV(*15zG!k9%5eT@s&$RBxW-A1Je!^_AFdsdP8J^KkiFRp;X%F zx9Dr=Zh^78M2^S)>dRMBjbasdow0OIaKtgj%Ez+TDrysYgQ5QcGaZ`6d#ay>u9;1b z@E>b))(x07(offyf==?>*%SyhE$JE-9FL%P@XA`3A?7u^z27{eo6ajT+u?JzTw)F~ z2T|eifpM5@)m&{uo`1AT^#w*>5E(EWTNi&p4$>TnCqJ`+@lz56ySK`R2y>MUBp}VP zU^rKMm!2nn_`1^E6Wb5TinI42=3}bPMSdT-Sn%eUZQpxYQgRmqbE-||v7c7W5G9g!MR4M|GS0J5MHYAI7iyz>HS*1jYcu(f7=H8N7s~tv+Ubu$~l&498 zYGyf!uF%mfee(rgbq8V!r=N_eyRGJ&zua}_v$(x#J2AxfUG98hU~=674e<4~3VK?> zXNd3kR6_m3AM816bKwNX2PpSzz$MvXYxnFRY1KInpDLOxoY}zY4lw}FGAtoPXWmXb zG&+H{1BY}2f_GXQX?wp3-VFeWd4C7*c45`Rch`BXymrp|;of&f>G*(S+W8xN7!9e- z-g`QNM#s03+(O=UVjK40Ffrgkwz0g>t15pt^yd40u$XIqeguMdR|+of{08_nC;Cri z!o)5nTWBlcQ|k7=

    A^e|AwK*J+$zMA#EBRi3irV5TQ=Aij0K-Ty1p=i?1tJA1h85V|h~6LO4BPG})x zEE|o$icR@2PL3RU$OC_@DP+JEnrwkU79%|ay0C*tw8N-g4u5_Jx7I+D#?xqdW{==? zP(85hCG@Y{yT{ zG%S;%2*PkltXx)FQe-}yTZ>_pyNy+o(SUq)OH9F5j^R=8;&%Rb`xlT#^bOW`Kw6~7 zcj795EgyKC?6w$w;`mb563y04P6Q3 zO;lj^!v`Mb=rT#0Os6J&_Exmy=_*NFyzJ&zl<8S~TKXY8E_FF<;&%F0 z%cEGwE~#|H8Ha}3f8o#emj6Ti8EN(x{)D%E!JnN!!=I3bI3WNxW2_;1QM;CuTOA7M zO70kQbGc$sVtQ33bI2ns`t3YJz-K25M2r$Fpa-nEW$g^km2U1Z)mfrsxEPi7!G;R{UnLhg?WnY8n-m}GN;1+c+L z2hu>l<1VTgd{&A-n~l@S^c`?Z zMc5@CepWvqg%M(4z#l?C=$2FHmg~#LBdn<8rbAY{i46S;wRRaItUFfxe4by& zxx=V<+b(9J-jLkHO$W%UY$?vp^Q2LSV66GQ^$Zw2-`V$MF7Jh1 z>Yt=Pa#ul8}Em6Q+PO)u+3(# zCUONWuv=pOsJ3)qeJVaqAAk=y$qpzy16SOo)SD=du0^Q#2eS*X<;Tj$paX~FnOAHt zSZR{#)B<%3R+Es1Xu&iQ+u&pAL_Zhs-3 zt*_iZh`O?c5uagNfzBJ$VYxfoBIK0AIpmxS`VtP`j0%4QPUcv?&e8|c1n-akkb3ag zPFRBT`O_N;sgE3k?1^BYm8o418L@5uxPf6b9rL@YiM0^Y&5N{^4>ME~XjU3)SKPpp z9-EKG^f9eIKXiOqOi7h}sJtrj;e#~dX2(gG4y^eOqi7J`Qmie3=7o+YMB3yd1Esad z8%QnsJK%>EjQEc_^ok6g!@!z#jaUzd!}YTns#jTI;3E3j>U#j+;$(c+Fy>{?x!TE_ zl3V3{i6yhGUGFZJ1;*Ls#Sg@fLUCoyvk~5N;hkF%#xK#>rj&thwM#0i%a*wkUH!Y3 zCy73!bW702OmiN^LK&?@^umR@eP|j7Z!VGQY80kAjF-|xssyG|x!l{kQ9~*3Q6<_o zVPtnZkxqa5FrGeL=J?#XSK?m4Sf}=Es&aJK^Kw<2^`e>pYZs@FhPAX-U%SVf%jMqw}87gulECJxvMcfZW$lm*8$4BrLhM19wl8G^1QGm(3R~W=r9o z*WC-q09P*v{mHU5kH;R}_3;i4bLop$fVI z{#A-?1KfnU*rT=UO2;^!hp9F+{o+nZ0IFwUg3AXzgD;&b`qa^fI+PT~07??UX#XFr zLjP3&7^vCYkiag>#m`sDKNx+?CkVsDiSO!EA@9Ep6T22xNd=DIv?pNjOnHi_CemAG zUy+#Qo{^}DUPSI}Yr@-im%UpU_V5GU||?N^q>!h=w{G?@}LOS_$4tg#n4Y zlm7cK-Q|HyO^@UUAE&4bO#c*%WL5mo)Pt=>c_X1$x2LGo_?$4{_(e`;9`f{aPu`f7 z@^`3s-N5SM!0Zxo=WXXEj(}(X1}fqW0UV>h)0*d>q-YvpxZvsGM2yCBL?ZdFuUs;w z&LvG32|ivs`=`(Ku30}*BXusjl(r|%_m>s4Mg`~N1vc2 z05fQeqYU=z11n-f17k3(=l*+32KO6iMs{Kceb5RzTiMvK&Wi&>zd{`au8D+2vRP@a4js$j9@Iu%A#5?sk8}P3z(frE4!j%8pzmhK^cl_~K zUE@Lbla3j!`nujxyocH(Lv)!so1%|o%2hDjt@FZt?DKj!jFQp42PFcYZ{%aOfuVh;cy6v6v9qEzdx7~wVfTkqLL@6Az3np} zD4c%Jky7n0&glSpQ2HBt69W6+-QW9~9yB;o-aS9oopX~R_BbU@l*8Lz6zc(aVfYUR z5{sp_s0HHFTxcblfJ4|Wqi?gSlN`gfyLfw8*kO3WA&&zTXu%Hg4-h8>w2AYAS+hSn zWlHC6NY&UW)x6%18(0IyX=9G8s^4|L_H%qeKZPr!fZ~x`^5D=?otgLMR>0|ym!_o5 z^$*XEOQaw!!&@J@TIxD-@$P`Hrf~Wd!f(R~J3|fq<=(}VXA>6MZXtt|c-9;+z>u+) zDewJE`;g%Qj|d-o(m_-Gq{E4}4(s*pc10Kq%$ftx{;B($bDN}oK%8?+g<)^(`;$L+ z@B9O%BXoe~2Z;ZYn*2YzAqzk#MPR9T^VgT>D4|0Of|*%LN};Z42rGE2jjN>r(a%-r zlHa+FvgUg-f9s~mjjkLL@m@-*5D2&svL63*F{>9!Y3)1Wb%Qj1hZ`d&af>}Wq)!3L zBOK;?%exOFyZ=5fnh{M8i2q2ewbotuJ zwf+_G2A88fhf~&NFIq6z(=Q1;)$P~rLP0Q6sX#LIv%7JXv3e8l#@EeMzR$@X_z@_5 z{fqSyVc_ab4VqQ%ML$egBB7^ck?>ELV|0ddEn&9!>smetrT+UUI5s;Mkt*!m{H@=G zvp3*PoH|y!;8Tx(;xA|Z@`%t9;6nZCFVPqnhCt&{&EB52wZXy&)7n!@FU@)=M7X;? z_tSa2zw<6v1yBW)?i?&8Z@*YBtGL3z?~@p%xW;I1(+O3hdu5xE)^~LnhlrBD$mS8w z{N=J=dOK1x86q|}o&sexbtZ+qMarO<22C--`j^$Lcsnn4BAd! z*w0M4P?~!5*Szu4>`O6Mkz1rn%2k9Mc7`o12YippjKgPrm?L69Gr}l>JaB&7 z4a>^2gU-hll8cnY-n!TzLef)C1+Xzpp4_NAi+1KgkvyEq_HZmG0wH&Y{1of65&=V%<_7uzo zK8!p1YSX0*-`=*OXunwp2uN<5OHrBqKyt&~GX*Lj5+75Z{pR>ubDHebv8_-l1B^_j zJlk_Aul!C&N)oSmk^@G%uL@7DE*Ohl!<&0zgr4@N%)Z?i3t29qV1IBq;2=?3b0cA_ z;hE9b9RFRlg}TsDiKT3AblGaXEFfQI=1Yt<{=M7btHH-$LzMa4F@{^5$I1n~)i%Zs z3k(qP?A4a%W<@I40{I!dL@P1PILfAd++jZ`eIl+oOV!0D=U`TH88U@8?RSFK0gR5Q zlU!hslfPHKDdq0|N-ArbuHJP!<(E}OKskz(a8n9XK@b9VRe3;t%e&ZaKXXa4h%g%@ zm2uoK-eLAmx36-q|LK(@9k1VL;XHB%ap7txRXR_z_=y{BkWdJ;tiU-ltuk7tfIPlG z#|fvI%Zlr=vJ46*{jR*DX*j?&To&+Ae4J7gj@@=}kDxMw=26l#MsSk*-aq)2oO;;KF}ruN zc3^Z^$8fXj=Rq-Cs#Hx?S;(}#L)GSwaI$x_b5kKQ*~&Yf42#|>Y$0gP@9Zupgu7H9 zM81AsK%7+%uLBk4cp=KIJeoG$JI0@2(BjQZ=ZE>6Ih)3h=r-^y5D3jxX(yI5Wge*g z;mI`ew1{y@@S#gqW{r+lpi9{T2WsT?A54>fC!`Tyc}2wg>Zj1zw7P7XMCZZwwRo~e zydVBrr#L??j5lmDB`nqOr*%#ceCvjCFu^syZ9R<@pHa~FAG+b&yBsFs5a#eu+XIvW z7`Vk*u(+!ZULE+d_t{xqoI@sddJN}#vuM;G!*W%YVMAFX}8X~LYIUh%G!N1yK%}oB2!6nv|B!l_xX}8;0jHS$ zck6FS(&!mc*;89#Pr4>o_eMW|Qu6Nt{qw@VFHA*OtqNZw@{j5E^NT2;%Yp(G^6M)1 zFOOLZ`#)T0*}J%PSXl~0y?l^yX1`WLz;=$f3A9C!I+nNn*W?y{^M42S&w~9g#r|ce z|K+iNHQ@j8u4Ji!1R)^{MZ6qGaG_4$PSq_XT)*A(m)u!$_?$(=9>9UE`NEV%i`^ZX z`$j`LgT3`1b>I~UMG?QWp@lnq9EjfM6iI@x8yXiEEFVmrO#dJD-aIVnEc_cL%c;rI znieZHYno{@wX$4Nv9hws)XLm)t6|Js5EB(QM4KrqQ)_a`To^O8QZY9WQLvh{T)-U_ z0m~E>0TlrOf#>VYG}F`eyPoTM-|Kpx_wug@kn=tFxzBw*_i{e>!U6PbvA!c(JWJh{ zB{p)3vJ>Q%%r3sGAX|3L@WOyb;~bR^TNJ-u+jr6RK@`i|)1!7&L^LzmDmV2IlMq?5 zq~AlJ3SprBu4~mnY{x;>Z|~(cV~AZT>a3TB9i?xLufDPgWk+CrH2*bgpL>zJvyj+jpS8A<}F=-sp03j-K&Y~OK*@jEr*8(gZ=p?TGAx$TyNo0MuIwq>KHz)9` z2a4^^*!?Oo5W)~oOjfteZgC|xf{e{Oj1qOwxwO!L8tU35xXPSexFRFeH-Q_Eu>@V_ ze4|DiBsanWW?2!!Od=KCNFhlV-#4ug*=@`5UV4Dwxaco^UgBZF z7nj&EPPpzxq@dAvMSD`1)6w`YzMv%BMW9cXHgsI z-h2P|AHGvJ0>Fm08xEiQ>_0OT`x2}kJC|+|F>)$oCkG#`EP<5y=8P{!W_{_2){-92^lC$ zcO)2dTVQhhSQcqQrO=SO^St?@I!}3f+O`W5`U-w+mj+|v8fI%G`ae+cuN`{-qVC!X zAmjrMdUsrKhbhk5@$+xj(6VvwCtcU-ylz)tKYc>Sj?f3*2jW6Hw}Ccx{BUKgEGvF@ zNnx(rg4sEO=Q*zCsxgyFN7-rp_rLj>;bOy8b^$KIHPN>QgagJGdwS1`9w-eQ$ki*? zM~;q;0nDlEpsw!(nxHtUU-ZLBvV=p}afW`Jm-O7GE09pk&f^ibl; zn0#uIV#e;I!qj|Wm0O5LgOv$Fv#M4CRDA5EgH5{7X(^4zEp%{RiMlChq_FpOG#3A-rogsnz42X_ z@3b=)gLW4T6(abO#yxgAFWG(eqGbbu)u&+BO|RL0IeN9E$S?M)a-G+udrGe?W?sOq z7VZEpVIW+=RKu&cRxZLR*PZs**xs!iw=y7rNrXt6`>S=Iq#rE?VN@IezS~P8 zpMosx+g{R+SLEf5@;u1Yd1HZrnipHCySnt2HyGEI)|goOldDg`WHTkctfTwQQ060z z1|p;!Q*t=rYwSF`x6KtEFImKQ+BjZM+0wJisePDcnzrEb&cbEdY)25Q(0Q;%fv%M% zbiI4RTL}K`V8^1opNKLD zxn=Xc#*x0QJ=amcQ;+yE7ri!IYiO&HxA~6Mpd!pEBj z`*mWrwv73(jJDF}dV|D~klPg`1%G-aVIC*;U64U^yffBVdidcWD~z$e+#Kp`O_XgTjh-}e6ge1IG}#m(bKP4@+v zqT1<`4ajc-wS+=jncKcL!#`HWCMegv&Rqtxuajnw#OUg&^%Xn(qh4EklvQP2R+Tog#KWSR*&z#a z9gr<kAfj1J$a_T5zT0lDult#8rv~ zls=^U2fr+&PD{DYhpz4s_J(ZM9uaig4XlI1Y}U6wCo~zNHiElw^z5?Q$3Q2`X6M_Tm<~xp^+eprmI?v+9le_jIZsKM*!8d>Q_>}zy^=i1$yJae%fO5KTy*F zjorR7(%eVbxduW%ChYqkY8sZraQ=q|LOpX0gi`ml@B44spA+RK5LWGT@4vTN0Lzy( z5M^|2Ki=^#==|&pKuF;K{^&on{@;B6?-f$(Nl?`ITlElak|LH1v;}k*Gj(x+q!tKW zU?zTdm%b*=vzs11jNt+|tgUeYU2NCtO*-q$3|+^&epQQpKzK7f$_0{Fbh@ZNa)4mk z03l_TWOZCa&_Zbb9SaPGW>d^NYMjI-M#ILPFLnsHAt<3`LdKH|_6_HBq%ZQ#gb~`f zPY_L=hf0wdh{&xr3Qp4`JTwg->m>Jc55V)K{aes%Zq*>tv?Oo$8={nJ%B$S4rI>x+ z&x5c;g}P?D|5W^=2-l4MP-Y_bMuekzgF^|dM6IrtAur2jGvcm|6;c*gLgbJ;(-G%{ zcdRTdG9+Ck)nx>6DuO#(`n=4sT&2ew_Q*W{8~co4SCRals31sj4r`M!)%#mZ*;+z4 z>b{e>yphrT*n1VSzk4J3vPWpI&Gci;WqVp?b=Ko1T|e__IWS!HuvhKJ0i;;j)~8dT zDxlllA?~23Y%JWVjULJ_roVX+M^U-ym$};boemEOdox1}C%vYgkVaeu633Fh?hR=I zHxYQ>evqCeIx5ds6^YOQl|%+WIXh5V5ABvyyF-YH&4z8|CaR}veWJS985^qoeF^r< zQeE;htquq+CgdXC>owAhiT*$3wI}t@h4HpZ&YJrBX4vBlLhvC1cnOY#33vGft)3@+ z3oHW}*V**OS|Vb5BA}wT>ZFH+*_%3{n0)IuT&cyxvzNMA_6KJtEY)=Vr#P`4QgVN| zH$rkvV{M7u^40A@K3Y!b1L2HfS2olw@R@QvZQn53I!W8pEx}Bv?8mI`@WU}eX>T1% zN4LpDIv$hdEP+YJG_){^C!mrhYYx^>@?eV_W1TkY_>E*x(h1=9tOH_|S~%0j9QlnE z(8BL`n8Y$BDSDc!UinTeYVkH=7sBYKc~0xS#-fv9UP$41?@MqRs&QfuFG=7mNBHb6 z7|wy_3yw+2t>AQqsiPex+(;UX*H7&7;0_YLjggYoEuBDiy;MEI_!KvGF&EW0xp&yC zLXiyDpm~q!+-pLKvn=kyL*2*}KfudH&RNLX`vh&l)muIpLlNznyjoFqR;yq7{f=rW*2J6nSQPsx+ezT8TU$Z=9$Fue}y+Sb0p#DeX|V@S(!BsMb{f zb~~~2?S2xya~<;7QD8-+P01li;*&D-qJC5^6Ok{>Wh_QWO@kwt0VtykJ|S>AvMpKR zIiP6$G;E_0G!94+Ka@eU}kNc`tx;S?MGarU7S(t)8u0SlO>Z_wKr_U znvrvAyDqwZ%HdC>=iYp3BeZ#WOm2u(C1>lw$9{>SV>z3)N;{o~z1So1(|}iS4c=|C zuf&AELu&7tuu)LWU_S7mej}KwL@?#fyb`!CmqrByAAC}vtI=gI+P+syMOj+&K%llh zl~-8uP+KLY0c+$PfMlgyinf;;VHIjwgZbIgYr@_g(y2~Jt3j=Z=`i*g4kcG1pC zx&~Ie)_pqKF$L9`77;k}{DmoM{7yuMV$<#eOxxl;W1cdr6_EndKU;a{AS{AOWnzm# z*+xQ^q9^>J+}vl3ch{1qAvvinK^jPkc7Iw=FaeFNTvRtyY~IA08P>P&D9-9g@f1Lj zaF;gqdN}bN1}1faL2O?c45^4rDwjh|yPO$8A=7tBl4ra&FVH- z{Y}c^p(n!~xY|+>u_!0ozCwElny1hrC?hs#FI_VwEQnsvk89ZxlGp-o1cOLYDngQ0t)8IZGstzgp-&+Lf)w5B18B`0X>s&$Lt zeK>Tb=6b3VmHU!KNv7Nh(oPaKJ#MfKCpIhSh`7WZn_ciNQ5qwbajIzCoLmDI4unka zmhCy@={cMYYalZPEI+xMH7>#~spAz%nnGH5j3uh5#qU3c=C^rsGffgXY&h83Q6MD; zh_Xi3X-Jwg4H`^X56Y}YNvv79E6-m3Y156rWhrjT%z%Zn!ae^OrtQdQ4W&|!YZ1QN zoVEe^6BXCr<7WwJQ|Gp&y@nH~?-PoNS~#9K;`E5&kDA$2d1I?z;NfneV5C#za*iK7 z!Xffj){*uIxR$^$Xl75Sm!o*dZ#5>_d|ltgvwm7Plh${$Z;oXI^{09WB=%vq$y>xO zO+IGTC#q|dL%FU@=%ut?>I2zk$(35l@C_=mv}Jp|n4>hOdUDFplqH%EsU4M?dmE7~ z&4AVscG6!{cd$4P*&1WviCT)bJ>5pclf`ZL?PF~{yxsMm8s%%s-D^Pw`U)^V-3}o( z34HupR0!iJC6YmgpX=x{RCf<+BOCa~oyeNj_F(451a)P0!HxBL+VLz z%uZdBo2IlZFgJ*#3ky%jrlaH2Qg3AM=~4Hv?IkrrZRv<9Gi%DLr(iI9a9f|cuW0P5rqB1&5Az0qM*OV4LwBLPnfq97My0JsG z`f2c+05QY@=Lk>9Pe}_$q&FnrK@k~bpEmC!Q`Q$;!MGz7kjGUUdU7RG?dMK@M$i%_&eM&O3E zU}5@-u9e8)MC3&q7X*`aSr)}F^*)?to@++dC%!?!LehuN@@YQ3w z@~rOwbc>Ee1{LVzls_cT!lnNCaEI@mU_Ua?jTnP_cP0@B z4WA${X@~_t>0C=VYInOjDDBzh4Lp^YTu6Zj4BgebXM_8N{aDH^t@4nTAx^zCF)s(s zY!&7r@v~P@WB4-4o~{(d?p!XSGws)4+jz3ekUWiIV2KLb&2rX~HWx|vcP5P(qa((P z4uG!PixnMMfKnkHswiw!K|rgC$2r%HsQ450i}P$ zxQD}A0U_aTAvZRMGc%D-!M05zAu_eAi6W!#I^fhLbpcMqP9{nUwy61(sC$B{DHKUV}I4V4O>n_NLjxIlsC_^U32xz^>}oR1?FxHbID-F5bpf)j{!K~g!Tc9 z^0>Bb4u(4iF4m~_y{`pm8abv>FkZRjVGLVPLI|A@Qv7;H7Pvg79JTYg3_o!J|KHazB{q5cY|RjjS@bn-CvmtT7g>kRL2r1yEOriNM_ig=HP;*vs}9t}X0&DT>K$IJ5BTP@ywtLwBX;k{Bo2 zHoq^%gZowh`#y?Rj0@G4jg;uG#*pL*^w;(U)vI3teQ%)gw9eF$0tFdY(&F!fcdB{o zt*$6yIwj^!vN4gCBEUuB6!C>LW+bCHziCnu`m8Oo$uKqcjA!kfA9LCI?JRtBa*(ct zsDVvVayGOdu(ttxCzH|c+M%g%(fz0m97l}3)1U5kAj66l4+Z(?ZL`hn z8Kv}=dlNF4mpk5KU!2zF>(=E41{8T)n*S8?LjyQXVvZap(CzAn&m=AvMBr!u5W$gK z6vVM7)ZhYuA8(Q}Wn2VXZtlfon+n?__0RN~oI${qGVw-fn<|bpTncBL zP?!f7Q3caki&>eb_1#n|rJ5Y2s%zeXO48Cn?xzS|(-O#w1(%JziS|jN2<~S9!{5;q ztowQ01rzSxMK_gTJE4{lvUXizxDmL`O?r5Is=qcv=0mfnXi0jniXZL2BT9bX#>6RQjXa^0 z^=yB&zWVolOJm!+QjHih!nxoK>*~>P8stJ}XX&NvkmUl0*AN?a;f3{uc-qdapqS)r zbE#Y{D)7QN#j-BL{rha#I<*f3cBLn2n6yH6dO7-JR?`!l>BT!qzXoNCPrR8@)A_#S zk|#z=$lx4Z5ZK8-@GdJNMci}Qpj+Xf4TE>9i&b5w*9!&FWBAA?cAbRM!KYx4&~n8w z?U*mcAnOd57U=>K0 zL((zP$)0U$GMZH2soSZ#3{WF~NKVxxl?+tU(+ zc$0>+92#PyTUXRD83#j+vX8p+lV!o%!?F#im%xIVR{82I%Y-k`YQ{puS36taDZ=F(sIQ%#*T_2;_)&R~AlhM7E?IQ39~XV01L z?0`Meku6Dj9*sCuV)q`_iH65pAx^tg-RXUz?9vr``|R?+`K^!KurZuX{Lac`N6@@VGsktkG7M$LW;Yy0FUl>-h;0`=>8Ba<@Sm?1Md;QTxhi z{9n+_0AT@C(Q0V%g@a_pw}4}bK|8pB7gq63l>X%%8+ft3vl5jxMo)B3!yB}CuCp*% zRQJB>_6gUA?&)1=BKk_fFpBRE&0#_XdZgb=ueW`4m9EuyG(}ncixrUdtvSNv%4B{Ib97NTszNGS-|Q&ensqO=JH>)hJU{_CJx(% z*m#n^6OGo=%7sVedMrn-OKxav#Yd7&{K?@#<2NVi<95L1>Su2;YHiwvN3?H!NnsB* z&F#5W$CobK7(J46)rP1ATV3~VsASHxb8sXC%X)Tu&+*NzkR)?#d9j8q8mtf6-q19$ zuXb|;thc``F(^8u*5o%m-2Stc%&xo=6ur_k$F~-qH+0wgK15;ybWaU$%GX&|0uBk< zW0;2tl0o2OwAUSG9d@d#*~BEl&m!`oygaUieOBZOB=sJG?{+H7pH2u~nP>oD? zujLo!_D}TwB+!1y4qmqU^LXR^G=x9{&M+qKcO+~FXR0iT5h3GOf2G49un4g}zyy43Q~!rcAVl>Q zAf9yXj@w^2C;u6_1IXTVWbQip6?FuLMCt?qdIr4Eo z6u4LknD*|S6Scr)euP+`SRs9bu0H>JG9>W3yI1F=d;V7?xJ8qp^L?Aoh^Oa3Y|7#~ z?b+T)f|H`rVkCN`frw&1J$b#(V@Z_E8r4Uam4JKQr8ji8K^c3DZ@fM{xB5>H#p2Ok z8oOHZKeK%PS#^yI2Sl^)P$P`lNJTLFkGWr4+H8Uu-bF}*mqF*0(b!oDj8=6dwWNL` zzVkdlWRc#mrbSy-n#Ju=HFlDOUCo+GWAIlOkI&1NiIhX_}KT^q3vkz zpn9L#e7>>63kM+Tq({;jnOZOaOWNI)Ty=J{tobHQ7!ChjuL>KwwIqUK6rJXFm3QdT z4(+6-L~_U?x}<{zc)*%E91ZA=M)yPW=GgWf1` zj#e6Q2;|IBu;>-5+LRl{B>Sm>XKrx+PImSE1gf!$Ol(nInhBP5b6F_4dbPGE&3aB-fO{l;;wvakaBX)!ycOLN-<=n-*7G*3|fnnE-SZczEd* z`s$??@~)Cl1QX69Ps0d;ZZ1GO!%}`(nE(p=H8S4D=DQgQmBesI1)zwdT1E){uxBdY zFz+h8#?b>UMGP8@r&lxa9Jr_Wmrjyqn@BZFj&)GxGW}dJ1r-g`8VV|j8qy&o0g3** z0i4V$wS^_bY672Zs?N6InMcotiMnyb5N}h9sVx@m$RQoiUa=@iK9Up)i|ELxo@Siw zh-C1yvr2))$qQ43Y)Bs^_JIIDZ=}w~z)Z8o>}Yx{CsMcfWvV+OggH}hv{vvCJ-v9x zYaN-XGCJJDXIBfq-CEy$mlMS_ArD;>RXg5e#tsbjrJUiQC7lJK{dPdUXNET=(4Kv! zZ6<11jN{xRKQ<*j4!(7=k@yf=JERL61-Ky)A|a6h3zFScJ*={F6CiX=d3LmTTQzC2 zna8EeGbsfLc6Hx;=Cts?Q*+c9gy%i!mUJH6~z+>35^DBWRfbI4=;H^UL^75f%nx6kHe942ax4A&XP zRkb;weQK6%x1W);;^7A|dlJ%O12H(@dS<}VBKY-;)Iv{LX={YL`r zlQ6R_u=^Xv@`noaXb3MK)dNjJUH*7~>21UbkXu~yP~_B_=ax>oER%<=23K#0$NHxu zWPSIJF7>BmnwC5a>13}Dx^IAch0BKf{C-&a*xb6Z`=a>fs7X!~UIwPo?=?>b0T&R? z!xqUoFhwr6mnk+P7-=dhx$7x2iCN!+#VMX_`CyvG(VQ~Q=4KPFWxj+Ph5yUT=Fj_x%$~2al%oHM}0SoB}z59dq zcKWmdY0Whfa8RpWd2I5TnLDS|Wdm1}mJonUt?qM1a3O1UoEb%98L+a~-^VNgM@(Oh zryZqQ0FEj00xX<867tMNKlZVb_{2by9-$_3AXZB7MDjRvezvIQG0bz9(T|-iI+@ku z0hawatZ|{urIZB|J)v=!Z)|aUY$@X{xF2oz3u_H8-YEgu=D?#91DVjg225wx;3*2+ zzt+;Utu;!L*|-8>yTa8}53<*rP_C+}vTD=QGqErvyQJDvmWAp^vJB94*}FGR!P<&n zQ605|-q8dp*IQQn6D?gL-sj`B_H!WX{HgO4rGc}jm-@npLs_is$Ko7rA{_U^#$wcW zVD&5`kb8nOyNg+>6TvQ>je3*BRMfp)dck6m@YjP&W0|x0C^}t;LD&&Fa2F8(1q$>s z0<<%;&0VkM`ecNF(o?N1#Otev3}QOiqfa_>SPQJ4d4~&pwQTcIELL4UXWIR0M#7nd z9hohZ(H6lwY7^~m zg~j#R3o?gOM6o7^{5k8=e`pwNNJ0RyuMtVj81lmSiFdNVlZCN$ht|wEii){Nw8WdP ztr+EHsh|{aQKq+|?w6a7(RO#8E*<(DW{*%7?gQCg;CX}jqufRv&#o-95Z}}1s|EbU z427Kg0Pb{r_>?hyO8h`Y|6IRbwfv_A6M3w|SN9%_p7l%O&AKwb_5by6e3Wq*5A>4I zPI5}eJ7CyE;^vuDG=Tso7k2SeU+Tpy* z&rXqbxL4DyKqPR_yDv%t#}g+^!}CJ&OM^o$OMaqxZUt?;?|lxT)o9Ccaq$d~ADt)xJcW<2R4GpY2V&1EvHqiBum z=QvDa`HTJ%0<5~-h)FhaNM!V+P`zBiTq824!7Ij5y-?CZiu^U}Dx+C_cI=eqID zWqg1W3hpm@pi2AU;2*lNAt-QVUe3ACtO|QoPX{Or*->^;iT2~)u#0=lXTkYC5YQTKuzEHdb{L@3MG-5_^rah}98MhztG9&vJkWIc+rMgxb@; z7tHkPK4!L&z7#lw#(gNuv&*vaO%-czk+VEKicjl& z0cWaEP+_R#xAGovW@dU(&lIKnWou$LEU$lR?D}VFdJf4(e|g8T z>j4OV@w`j&CkQ^K?mHzNwHTCOrUapQM@Do1@+xkW)ue!8cTEWNWj+WIY4#Tc=T|4& z!?V&hPO*b)M_p`;B$^=iF7-Z9rMlj2&2d7NJNW(PX`=P{a`Dtw+x5FCvO2 zM8Ro_c58yR{ISZ`|1&?Oc-7v`pPBXtFnizkn?L~%Pd9!BTYgY*ckqWzpv2#9eK~G0 z=PCWMa>0VYEeU77(2nLk^!^_B)(^jYmAPnvQUahJ8a~N;KZC;F{|+$Z3V?)Q%jUrk zrt`sv?;rmXQ1sY;JU98PEZ(5l;|D>S->(1K9n6C<2e$yu^RW$iC%-P!Bfz(gzxr}d z_P-pD4S?zywQv7wrS7JKo4#8CvO4^w(Aht_*?K(&RCVXrj=P`g>WA;#i2)gZxA!yN z@mPSP1tuL{p&Kl4t(p*?f;=C@VsjM9Y2^?t-p5VylVZk8RxCmU*_{8tECn- zWB9%n;KS(WyaoFt3ORo`{(b(=AC7;W((}0MAE-BvyZ$nk^SEmscg;ik_wL_+SYjS` zeGYg1C!haaV)NeOU-Fp8TJu=zgDo3to6SmhdHNo9&62G ztq-gH=94~uS&8|i&)<2a`F!GE$L4%K@t?DEKA-rPv7Ap;|C7I;4?fHXA3pH9=Mz2i ziJlL=?)gN||IZUWsH1J4)B?;Oj`N4(hs7ZCk@@+^{0A6eJ~BTang0+Y%tz+`--yiH zDF1i=4Uvs6G>w?Pw9ja8@u`6iIch>LG8>~ioTLl<-w?BcdbMlsGxHtp7YDiXz02eX zvzdWy)xbS|Zlb11I~_@>Witn^;dT#Y)^N-{)Wxf5CNzLktP#p{NXq35Po8C0N3;5c zkSH?P5IYW0@bw8KK35+>f^(Q`xtuBEIuwUO+2Qr0`k|=VRF-}>sj=D>?yT{2&ByiX z<#QCm1^SdR^nv6IhoR=Hx%#4u81h?y0kE3QXa!ov`iVkj7(qOdCFk)qtBta#Dhki5 zII~<);`)^9URdRU!te&&d!?d7DluuL=P=ey zq)3O#5?}Ks%E&4?Xy9q;`3 zws?`p`7H|qcM{}fI_@@-Ia1M!XPNDIO@drv6pCZY8Cf(*D%&JdsHjBnO0jMTWL?AQ z@qIsO&`N)P+tZ_Z`HvsXihg)>)wpHhlIxw{$LOB@?xxM^WwRmtxT9KxkkeVt4)VH` zOO`*cXWl%x=Eo~X-ke@(sZ^S?#xUfMV-NcO6deeC7uQ_rKE55hMkL2pV7pz?)Az%L z;9Z=KtRO|UMCFKkbxNF{92wEXv8_vZG9u3}THvH;dfR}JJg9kO z(KuR7zqs_NJzl$NvVJ%&dL&NWqJDA`-j6Zx5MzU?e1{%}J{+8?GlO~4gf*BEc3zrC zwLipI7ROe|_SV!+F4VpRp1hHyuew9pzoz0(B2F$TF{0M+kWJAzydc5P7t%}Y#8nj| zDg?tB7G;{abFNK>?>Kf1`Qdkn$)_~RiDGK#((XRv;OJz|O+4ylij!WUrfFQ;rq~*;xxBwi7j}b4|8O|FtoVRD}{YD zoHH&7vMpYYgh$@wZ>L9NYx3=onC6$Y<2~pZef{hB+0+oN!i1q#I94dPr+GwAdUyFT+{lx}z&%*x^frngLr^MJ zZ=O^bWmn09`rD0bqX!m`k@*fM2xTi zn_6!nqIvoR$m0j&Uj&5FdRr=C;VvEBsd{YU)bB7~d)m5uuyB2|7>h^xQCx1Rnc7dd zU@j&Ob}Xh>rjRRxrb2(~EdUE%=UMlXgCfDpbF~0|_X5#6qA;YyebMu_Ywbn~ybg$r zeykBvi9g!wPWF<@r!XY9d-;J9E7Y`B{8IzTnvxmCZEUD=&*U=%nANCunNVL;OkUDN z2)F=#m|)4W0;iq1^!pV&nC4Lbpe8D1L7)?@ArrE{10xh=!Np~c#=u5k%pf2yL(Kv;eDn_E(Ir+Q)dDlU}zX6hUc?Ps?% zxryDhdaz9}bbT|g!^^W#ymwmDlN!lvC9U#>hrL=i%rmO=t7~P$Z^3$I`{KYAELd?4 zwPz~cp)xu#oWeeU&aZYqKYC;ZhSHvd$~IFXjNZV;*?~q^jPFzS2t-7$IlPt z3euD!xz=`imi$LXO1n9ISs_z5L8;-BtI6$;*bX3x~qsdnX zSAvArK?nipUH+)!mC476HQoC)ieo} zno5*OF_uHV14Onp74H&hy57Lfj~b8V;~W*4lw5E|hzHMaE0pF3ujL>gvLgtMl{G?n zDYJ}*Szaj`-OR6KYqAN~Yy=FWcTwx7JWdg8sq$;_){_ z0{7i5OM|+83YQX&B!k~IT1;5ee6>&3M-M^M?PZo@?4|F{$iy7g4&Jq>P0p%{dqDT@ zsTb_BEU^$<9sQ02^PD|E%A4v@>mz^mEJ@&PFz*%GS~9&yBRNU2BykE^eWb(`TznA$LSOEELziX|I&jXLqz^=dex` zbFq_S8q6HQ){IifT}gLnK!7CT4mpKL>sAvSXECtkT!(r{A{WW>ph@4hiW+6n>+_&d zgvPPzt;g28^E!~!>%b1XAtDml!sv!A>9&{6pCs5tefw5W5-H2JT3QqoKqa=8H<~pm zFgFZsFBccd%umt4?|8L+Qa27Pu8;YhJ$kTmO`W@r9e?o5h_g`lYJBC>eOidN#R`mg zP~=v%EP-DQL1SA@qP21Pi4GN&p~;*k*vm|82pwyJrS?%PYnQO!_>aA6Q|q_ zb|uVy%nziwEVgoS-LqsSaZmKdRaf$23ScQmcN(bOaT0^}YWGd0S9nR|qE2Zy+|n)R z<^@HXXl)5gqU}P%$tLk@uwsLFnq&Gh7eP98&-9B%OvewyNBUC_6nENK6u4TZLGCw> zs%+;&-lmg>43gubuhZ7%3yb@*o|kiKMpTLmG~>&PHp4HB)WFzI(10X!r)$3%h-XJP zFyl5xT%x4?C?N|R>hszCZbQ}f0P}{&5zjuyZ!mjR-91;hP{S)4!%Vrgl=Z z`=k@mO&iYzFz2uL1uB-l2; zIoE4s*8u#(B*^p6y{v{YY*&J;(Dlh3SkzLORH+AZV9MdCrBhEmABGYqZS-Iq!28>~ z*cKy^G{0C*54O|saD#BOP7EL4gFQjuNqjXv((|XTN*dqBbi~~q{k6zBA&9F(b_Y8d zZHtFa-gL;BJW+VocR?Vt_*dyzA@Zp!I1a-T2R=qaH#gi4YKQaBkea;tLMSXFwDk9_ z9wh#2J6$83xzS$3eD4MId&K-OLN={;xSQpM)enE@@Y5*ETE8}Uy(6`+PyMjfy|lPG zON&2?TS#Tv5Sp`!RW-3{cc?0Y<0*Z6(DQtoy3)yTTQw7>DYcgk%>?44?72FZ0cTJ2 zm2c{BPSDD@X9;Cp1mmu)I~h{@sw4|SYc=weVg{uqNmF}xQl;n7^;;^vRk={!7AQ5r zp~M_XeQ>T9$y?>_x&3-{3a>+K(rM&bpE>BxqCP=x2r9Te)mtTw^rJ>zbRsplB{iDZ ztN6z?^D+G5VPj#_p-PgUW36L1qr;Cz72sa1C~zpIt^u)dYKg93(o}OtDy6ffgafp9 z?^?SIwdf>3i zf7o?(GKYZ_(Q&P>EkL)>eCXw-S0cbCn6kVv9qTxr#$0QJA_p!_;0F=L3W1(Tc2Ngs zSSX=)JocD*`1S+uENk{D1AvlPFK3}q^6UY_u~8bsu%$7D3gv9)K)O5^6+n?K?2#b0 z26c93^^ttFbi$R_{YCzMo*+%iU0XQDPxU2ua%a(d1(T1m;1IT6LlG>>k9CQve!AYnvzpveQ(TE17e$(|s;9@*ipP z`$7=oVYf#4Tl@WF8bP`xDW@ZOYyw75YxfSahVq;nf!-KN*OD;4Gqfj(x{8Db8%OW$ zz*r4Qoqb_uKW~ zxbLO()1ixg8`7bl!Rwoy#MzN8TdS0()D`m4qnE`zph?stmb*3qRjPQ8`Sdf|5www> z9og^<52G5+_;4St#$OBv@Lu#W=P25pZR(`Ny^Wx%ZepJh)72ba`?|VBH!p++PqeoP z673^Gag*G=MKb8j^1Cnf|MqtO-I%diE1a!CW?qzzxbKDx`tpk)s$N~-^B5?MZCPC$ zR4wCcO7MPAW0zs()&?)ze42056V^pe#3>r_^(6RsNSB)*P3`xWnbNW`ab+9~^jq{WbiENdp&Y@oaj)_|tJ?Jsgy^Q9S?Fcv??-1mb@50%~X^UOCUVY_fpw<8p3a1#mCfA#v@AQDlr|!i&sTeyT3W4ef?bEDO$GlhZnQ! zqZiX*PvlueeArGBHfZ>lY7X{fNI*AcaV3YX$@|qUw51X&+eB;5f!SwyW{fpqORO@+ zSkYs9Ql+Oe6no%mr{*>oTCwEP=6~h;_lv;2-!|)k!08i$l#h1R2a&nC9KSulAXm_N z_J8PGi`@_cUlSB(#L-v5zmq~A0dx*vHTLYgj)*Vdo0Q{cq24kiA2_=%&d zs1K?_mOLyqRot?to{sWM7nuv2$A@3T7_u-vCW+3h8Otl!Z-t2#oLDQ}pH;S8C*-{L z;w1bx{(iG+iqTaqrB-Nq2Z4CULfZNL}4m56Oz;^z`o% zZKpjQHK}gg?|%txL@%fz0>pjA;p2}>^rJ&Ya@CBiw8OFC<6BDlF5d0@w4KO58|&l` zPq855t0pT$wTSF6emcU_`1DN`wNFiE#oO*v+#?xV zpPU6KgFaZf_olJx!f!YbXf@`iBZtlcVtaaV&Xc_y-+^O91+QEp8_>1N(D6WAizr)!@561D_zcWJ&`lTu;I2P`S49}FGfb%^yJ;$k`Dzqr+ za+oOrFVxj{9oK*oIIr%;E7EY#jn%r11g@I4$2X|(6{{7B5xZ<$Rb@cUTgB^~BGRq` zKh;h%>8|=k0X{E%eH-p!5eXfqI{%c9PItKgk;Rx5ks_jcEBo=| zu#KTCUlFBB?^x$(P((76VRKnxO|h;B?lnrAf+G2k47KAb@HHFX4Wj#Y-g{dX+`eBFoiB#F3`5V~y77(Kp5zzAEN9XMOjcPu}%xs?p%{jR= z@2z8%JMI~jkl>3id+Mfj-|;7ppr0Ks)U@BMKkG>?c4=ZZEUj^ke%t?&6W-t-e}Ld< zp}PF_@2*a+O{LA2IsNdWm#q?sq^Db0rZqG<$v?%z64QYAkICso#qGhkqF;1r{SI8% zEU!UWq?8zFRJ?TK0lT0MS+fYcrqiC1P^0e^LpLg^Ue-7K>b4ko6&6eDlQ z-V1TcR$g^3U`WXEOKzC!yI_$S*Y;gWT@u5mbqv$K|0Tfnj?uo^9U>jt{(ZL-x~@aB zEq6(tmqz)ra0D9?Wnm!^o5pc|Nid`P79N8rau)nTBaZg;bQ`Hj`u6_reEIs#Tf#8ynbpiO@I7ozEE(*zz(Ws#;@q6S>Uc3>@Xfb zw<9gl$5q)lR5=j*Cq(H_qM`7rulr`7^?^8>T0Kh8%U`BO%SOh$7tMH`Vyf3H*DAme zmoF#MhL0Ch@;r4%ij;4;r(Kz?s`y^mvMnGa+hSGN@$=3ZaS%xc&(#z&dq9X6^d5t&cHL?8^HG} z_>XOj{o$z)RK;=0DE-~Y12}L(SjUfS|2?~5gJ}wd?ymyt%WhfUkk6u~(mD)c1`P{K z%vK&NkWC%y!oDPqra$+|^LIT?S3h=C3pv!8@0a1-@_izHO5nXKyG3)emwfzf4ROlk z#SpO)i%YO?`D-ukeN`mDheknf)mId{wQLAc!`B8==Zuy(1jDz~ z&0%-~(7VQ~GV2QpI-Wn*+c-1VjkEsH@tQs*YOvd)ZI?4T5Xf=)%MwX|ZU%MDg2ulx zOFPwWcYwvhS;HqQuSZYv&;jNFBiK$x>4Lzs_o;W%R?!#{{5HnZnx=Bf_saa!@;T#g z07~S9n?R+Zm9?DpjXs*!?qd@!?A)Tv6@x1$DXbIWQM$Xw{ooz}F1B)jlrmamF52Jn zW}g+|a5qMtit9_f9RHNWG25O%drqwifm5BAeH#POn{LVNb57Gb>E+?ycYahI<>?C*dMKbL#!I=yf&9K)#wdpU?1`-aI3=CVAFnd~MH}>+rmYL+^VDo#$RjsHyws0UggG%ufG`=i9F7?=E56X1=yMqE(@aoddLKr81xUKEO7nS`zagPiX(25e10gfq?r z1Fbw?cu@<#vK}!3hJLkTSm40?g%-KbG=bL#Jl~Na3X2i!>fM0n>bp<2#9;``ZG$

    C->U7Z3yW`5tF#%#J0Z}w}96`WziUX{dE)B*H%Z^@k#}n`g_duz>-#`B~%K>Yfidp#1Hca3Jsx@7Zx5@)(?2@a_ z_>46N9&fnY&~NQppld%o$h5+fKpIUs=6qrNP+oJHd)9utlEBaR?$>VE`LfUby2GA* zN~{N7Zw@uWr#)8W#!QAE|FZY3wfwGn{(kbGx#qH&|IRzdN1v?CVECh*Utd}LV$$YW z!RvOWFa5R5CW66c>9S3*REI53z1erbkM%%(-J6xqKHdNI$?0$Xzen3mp3kkzD!$iS zzk6aJ@W|7aNL6fF;YnbP!iLR^1x6xtrri*{GxL5#>YsPl=kJX8J6nE!(~EUhkH24Rvv}92J}=fgAeZ$6m+}3D_$=dF zaNr!}NlQ8iw;8vG~f?4Nahc z`f1#7|MzZwGxNJ2Uo3j9`Qhy0YaHqJ|HAvt>x6>*RyE0qzZT^3sU;mj~e0xD(_?j!d z54P2~GE^V$e9m@!n~lsnt_J0RbNP&O*>|Ke+zC%_+4oZH!b`I&uV*MRJt$qFh3|mR z1Mj%rq%g?b`N?%#hpUwB1mh3aK;IGLp zy;t&kaj)os-Bno`=J-(%+3f8G24`1{8< z547u9t~O=pyT3gAC(r$m_+PbhYRfkT&kbXEfA8diqj()3n~=`*Ky#t}zu^0KYTmQz zN3k6Vp0@YoCL898$+uqNOA5e+3X_!>`VM>t<(MRsORMgd-k(<~?5xjluVs@J-rUxA zz*CUne*M|)rqB01`FT3flH*~1i5tTnYxP;vu$*)bZxh^T0cp%`X6yz>oOJ%-}E2TO#2C2rll{d<>JzMC@nRDt%~+JBsn)9pUYT6<+} z5I##-o@p9XGSpm_?Kcbmf3NxM=JRJaA7)<|D)_JN!(07)zP%6EG+&Udh5G;-BSES0 zB=dvLTT2NHa|=iSD_=Rzv~s)-;y4outnaT+yr_p?Sr4#{*Uz#UefbGmI6cz>*7vVZ zWQgNQp+G4&U>nc9=_an;2(*kW2E|Be$`+h`PDtn|1M4#7gKzLvOu!3rc7mFfRz|l7 zG%F_pYp{t4W%$o1J`e-6vRGE~Exz>b&~U&5*v9iP*o}YIB4HiS%AI{ZWdxd)OMq=W zl^J(&3?o5ndxLPGl`-yayHOG>Mm=m01dMZ`Gw<+ab>OW1YM_gTe~DWM4fb4f$S literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_app_secrets.png b/docs/static/img/guides/azure_app_secrets.png new file mode 100644 index 0000000000000000000000000000000000000000..3057a41c640ed9730b42ff9758020039ac1b7e73 GIT binary patch literal 99738 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_app_token.png b/docs/static/img/guides/azure_app_token.png new file mode 100644 index 0000000000000000000000000000000000000000..b6588b55511410d4e12c5c1eb199caedebe900f7 GIT binary patch literal 139542 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.#*!H7xnkT~cs!c$oRsFxoDP4%Xy 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_login.png b/docs/static/img/guides/azure_login.png new file mode 100644 index 0000000000000000000000000000000000000000..ff12a9b9953f19912c36a4913201ed9e23b22b64 GIT binary patch literal 454223 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

    LFL358EzRBk@@!}L#gPN@%`Ke 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¨UdD!RcrkJ05+%>CXva$!V$ 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�&WRKusw#CrjLAb%PK*Rp>8DJP25<{2zKDY>sg9xV zy#Y*x1a;nL?~cxRVDkWZdGHnD-MCl^lg66ArQR7gFGjnh;g7kI>V{dsus46FwSL~K zbpUMb?)@{+jl-g%IxCV3OP6TwQw)+g*B}gYToW31Z6_Dh%fAfTmcQbgxW?+ zoX1GIq_A~F@t{*l)t*?Kyk*oC29_r94Dd1TOvpyoUp7tqmHCygoE^3&kXw)Ihw&Re z2;;#=%^AY%DRqy?)oVe*=jDZcO9o^v zG-w)pv*1VJQkQU6K*((<%?j0o*hf-#h1_)^_jj`&-ZDYo8E0v zc5cHoJUGe{SZOSC+3or?KecmkfuXNgtnINiRDb;?Q{d2 z`KW0R&9@JR@M5ksjd}!+5CV_j z;TU6H1I@nzTA{uQm68PN%w>tILRR;w825UUCu#?83w*86GDUPZn5`PREYM=sW?FE$ z52xhWKy&JGY>oIQx_-!*LisQo8p92()*Ja|BgQ8@3iVOt7k5}BC|H-7;#Y*($%GVJ z5RHc*Cc$qvnLY)jQayQa7>fn7-#Y5d{sq+Q5;AgAJ7L8aZQQN6%>DbCzdJ#h@HugF zxs#|NNsZ?p`Ft=3r!|7Z##5oxm{@%v0yZBW7-ouF(Bn`6C%BE%Cvq#WJ;xJA{Yp4> zOw+Z0$0NA7Dh~|-`;An)NDyAlJOx}U(x~_OU%~BJVL>4V$7To;JaD~0~fWe=pzfJ?#T2adtkaP#DEeGrRu45!tdaN`%$5t-#cpq+R zmX?2fnmD`q-{0lGn8oD=?cAc>QStL-Tf>-O1=SCBJE%X4ZG&S zm?0i`kIXrEZhXB0Ng%(Yv4TL+GE*dFqxM`_5W^yYZ?eX*dztndJA_#(J}zzJ(vV{zm6Z`TfpD`^`HN7+f#i(dxZye7C?4st~Shvj~15?=Bb6B z>|N?wym)z)dOB-=EmX~qVEGn@!9Y;FLb+XAKPs1W!X=6h}cOVPM0&(8SfZ)w*WJL0v( zOXR#AtI3mVT4Y@ALGJ40yd~Q@%EYg~oF~z(aG|l%8nhGCC@#ypQ7w7@*f$#Qok!f` z&*R9|9dm&S6$3GV>)lv)c9ZT2Tv+2F<3*t$rK*VouAErWOhb)!807WCttyIX+{hu! zP+dsa1otrdxkGpzKGmi?f=6)gBY1%IeC5=T1~8>C;;>8wCcc&kRQ%+qrA{3TwV<^> zm&nBl^4N?Nl(0SR&Mv*r^Aw7H8yL!kFi?JAC?5fMFcD~scp?Nt5Hjjfc#kTt=)=6J z;9X|Um?F$p>U6RHZA|xg%*N_ZO+t5~i^Vd|4JY9|9XF4Gt-=fmE!OahUmwTMHGj1= zqFuX~DW~&TL)-pkv997NnxU1DYOas}F)Jp{CTuRx=xI&3Om+8m4*{-uX%J1$vXvV5-`J;fhdZ}*!r!lBAT7l>_@hzWo=gn=; zav4H+9Z+MH=85OYk{T)iH0m5dlWURQ#r$F@&*;(pS?EpmULk9gZj(sM} zv~fe2p~D4ZlX{^>7o0@6L;nZtd1z)(6hkYCQxtKd;r$g2SE*Tjb| zQX`iqmj>v|l~L|v37umLbVoy+^eFdAvfQ2_<)g;z@{b!LQ`H_|abZ{r$`^gW*WgM@k<_an4$u!dgj_!x9Yj*gLa*jLB3 zy#b6yWzA-!1+<@HHAq)Vl>Ra8W3wryTZ!zep3ljV2zhp&qI+iZS z5>>7)MIRB8bC{;^kvSG&&8}AB^^r#x*PZy7kDCm3zo)h)j25_!lopIr6 z0K4k%bKzC4wPl?3jX1qBJ zgukkjZE`s-*9c|xLTPoM6FHvB7;Z00rGV<{mkeC3WTbsa| zjTUyfv0*$#fcai!tZ?Lu5_joFdTBTa$@{irsx7Q!1>jN#RhGws?cb-{hQP9ekW%D$ zgV2r#vC=+hOoYoR%N0p)1`?{koXblkUgFBIkB$mF59RSqcp$u)nk z7%Bgyii3qgF=V-Ia?2BT3Gzj`SPq+GvjtLmVI4^J9;ATK?i-PND|gJdMeswT*SU!` z5W1V;&cgk6C|#>D)n<{??E3JX_?cX|AlzY3Blig>-==eo1 zRfTxWk7#K9uLPGW%RChltEPC722+tiBg{8Ow6sX8HZF(64Nbnxdy|w1cS~N4kZ+N3 z7}>JCQ(P7+KqZiz(FVw15=iOoAyn(e6hEzFE=xo?1LH+;{_jYJ3Wy*2bUCPIXo} zegim9@@2ePZgn?+*-OFGPBu2rlAgSUJ)V^Z7m8~40Z;c^zzEsDh#!~R2Zm(d2qvzp zu-nqE3`ck=owJ;yfXH~g2&)r@3|gwpgcLg>8bnSvRaO8lZ_uD-fxACO2daaH*$IX? zv5P&?x+g-`jt@HUB@Q^KEkO^N#21u3plVMjUKiQ&^=t!JB7NMmoP;jkoAXY`=J|*5 zYG$5IGbDFmUl7A_aa2JMEs#+Xmcnk8Ro8TkCE96Vlz@A_h=y1XV5tiMG+sYIGM5ip z8cVcwQocgqwb54ocN-s24Iw!Jb-DyxN=l&tfUMP8VSS%i1Jz*f_a*HNssVh}F{kRG zb0HES(gr&+zmbb&z5c$0nl~J$p>foDEZ0Lc%KNVrxp9^a#SQokPK3sBi^e4&IMFe8 zgrYOz#~r@Cd7&7RDwB9b-HGJ-!(-mN6ptg2C5+2Q{88;a>>WjmMN8lT*aJi$_Itv@)~ixStI|aRSC@)_1EJ9Xa6SV;epP)Mm0sl(7D-aTFD__mKd0B z1xkQwc9zAg)0%!7bwKK);{FT8Mciui$4wxHDcpt$bqjjxH&<_;_G?8ehvK}d(`MlZ z*@9V(uu<^9q-y49ojq^_+ys{PIh&>9egJI?9>z6+xjiO?l@KAHCa`%yaz`?6EhP9c zwke1d&$ZgXIsbItvC=xc`+Wf7s@Cb6zx7XOu)iBj9QGf3#TCiPoEVX|?(W$M0eb!OLK}iZ z$Sf}Nl;~;PbbQMfDUi%+pP4Wx4140PnqNA!$AaN5t2&~yT5VIvc@y*$7b#VKBV=hX zK=m=hN^Ve|h;Ch3<(5X3tT28&qwb$pfLB$are|#bOZjsR^*Nbu z0RKpoo8>wiK0kX?5PQ$zVLQ*!xW*$9A31_IVlEvk)N5+mj|Ys{Xpfr_Z9Gr0Qn{dv z)q;54(%?koA!BNva&dJ?vZP`}w{6UU&63L99%LulCE90{tc=aJ@q3OoH-NcHEdYCf z2p0#&Nfc#VoQ9YbBIMHqt`dsT=hbjeJ*4{SDx9yVprYpSThMBBcOl6OoisiB`*FYrXM)2Vu6*|t>zZ6< z&2zxUL&1UFF~#o+UD-GXLJ_5__nW59^eZ3YL{+N}P%Voa0AMMGT)g<|(m2?Kr2gB# z{9al8Zt!awz|;W+@QZ^@IIi=J`3XaA0GHS6t13~4@w28>>qELGoa56lvp6?SgDnZB zA~hCBsX>)YEm0=aku`>hONT?oxrmOixZnh3a66bLU!bM<6JO|-xKrZ*AT`uCQaTaJ zE&yiekg`$h7hE&<%l?hx{r@8`<&_3-dQAoG&Ea#jH%Rh2@e@SMl!V$N(LN*87(keG zXK*-XZ~AhqaQ12Oi^Yt#XT`7^BSoWnjh2i8zPmX+e9ZG>r2VPKR>pg5cYggE`~7pf zF8d6LQkOK*OiUs+%Fd@SBkdax=%paN1cuD-{^pN*Q{-yvFmr+gO=&)b2IIIe(Z(Pi zJCsO`Bv4rw({Prm#*Yj&2 zL0a0TT{&sG8>Jk`MQ3c@q_nUa+9XI3e2&rfROH%1vsBXo`G0f}WeCDkt5-926lXKv zcm0EdC|CNBpD13CrSU+j(Hdwr_KrQVJiF6x@i+`EDM{b{EzimAK7T%Q`(<&g;=FMq zZI;?bkE63mz|rNA=n|6R7r#S779MUxj7Mz@*Q3X=qT2aps;5riwMxFEFzgq_Gz;sv zIjphkv(GqrGfy;6Fj(Z1jm8~2?#tzQAwP70&6bM!!qoHruWkso4!gDm^*=Of9GPeEx^nCTD^*tpr)0%%R-K09q%hQ!|<3X z1V$!+Fr3eWigB;Q4#$)++I597Tx67uK3)BodFpIG0Ff8J*u0CW$kz?vjk!2LZqSA~ z8L_xlo{K4U-=`YDCk*cAsz*@vZFFYcj43hAX5+lyOq1N|&*y*Sh9_OWJQ^4#F5tnt zNkW~Pf6yZ~x5DUb12y-!3Mdo;Uj_0KG{C6tW1Q)@o>c>P2fz@!{=&4^#8!KmgK*Tk zDAuJ=0JKLF<=6?yg!)TPB>o5JA}GsWur0 zRQY3n1LZk??YF*-psx*?nTMR^ohr*|>|3-6*~6Y57I1)yu3Z9X3>5*}7sO`-cnmXE zko6T0dP?Ih=`^!%4!|(7ntlV{0>*sph$_L&({wsu?pU^0K>v>hE>)=Or^51%Y9#dH z3txsAty(XpNw0#Yq%X6<;dFWmkb$p+FjnG+K`sTgw=0~IZCrbodThk9{oT{^4~Hzd zJTtEaz!g(Cj1X!zHbN;S!w+P9i@x#1xYB8ha~kFmpYRwyGQtLf4-#fBG|CS^<;5*J zXFIn5$a32t9!uhZd)$)rs7X%cBJA|tq1LHYb%DX!UQe}(vWi; z-vD+1eESr&9KXp^^T-=)T^4#|rPnZkFcu4#)7WW|%Iq>Gt~J3smkJ?f7iEPYOid53 zmZUPdAOK@sIb^Qk_-WFE&>#w=IOZli$mfg(Fn4ahf5PDixV{wWS-(CMw#^v64|tI0 z-u3N{E=3bpwB3Inj#ty_@C>FAwr~5UMsaQ{o4;2cF6zJGc$tvJ;eG4WZTG8vhR2)Q z9Qh;sI7Y;WS(>!GpKbo(_U^peMiZVer53w3c?KYlDk-&qGCrp=X4-$o*)<|@4o4Fq zK(`e^_z{{3(e&pa{BLRqS@}lB57`&QF@m!kgJH&sGX5CH)kZQ}QY#Au!>IB@_I~(T z7=NnPB?G2l723NJj(x~*ZL*SWtFObB zvL4FPnmN+*4KiOW@b;u9#bawx=1Rw3iC&k1BaX~-am5}wap|`$9z8u19?fS`j-Zv4 z;lmWe2jg!aq+o{pAl%%jD%AnO9BATrJc$Fn+_;MlP1VqI=@#6{DYxOIo5bb|o*^e$ zC(a?>`pIp%Ro?Mj&nT$GqBt%>enbCcUf8qZ&Bubfsd3_$g``ScUC6PP#R8UMx6{Pk z91xJG@Su)4o-2n}tv4zybFMCZ8tca4b>KXLLV7tLLw*GFa02o$r``sz|FyfBLA?Qd zjokMu$2ZkFM?cIp6nNbrDa!9>P+a-|1kLIZ9zH#svX^R<4N@tqf6yQZ`Xy$ZCNcYb$ky4$@NxzXaQxFEBLl+>hT*1K$TQld}ePI%{s1W~N4poKVCi>yB_8$P_Z4TK59_nwO~=iy%CptkFW?-9+$MGE zzi(;bT;V{Kkr{W7uxtP)A)9}$biLmL2{qe3mrYes9~gM>V{&$X+Gm8h_!3lOpb?$5 zsh~XO-jay7c!L3nKEL>8m2f}_?JyumijvtyNjv}{0wh;MxE&R(zZguQTp9Y4li(&7-#b(j+djD>i(H-cd3yo(fj~ZZv3LTG7*y~4v|hH=|rA?Ain)uMVopEq0~*l@8nmF@5=85?liHP?c%}-{K;w3=`J01 z>k}`;@ssvw=`%kM3ENT#b*4es3IRegPH9)q?d=5z=*z5&W26;>jsw-t8PzLkE@6~LEe-45A4TAqPoY8&Bey<1f1ucCKd$$# zPor;E%MF)n$E1t1xi=hgKMywsr3;2yoL%^|rh**`8t7BUv7fizv_@>F8ZA>qCa@ zn&#iBUbux%!>^TPXi-M+pkt;Ysdp;>+wQ$mEjC$m)q~_BN1uG_+%3eTs9J)x2#Y29 zKzh#xurzu{ZZC*-iCQp=T3_4*zBZR?t)BSQ{xnOfT4b>5aSwjL%kU6TfcxM(jeXBG=h5HffU)GSZ%AWpD(pL zUYQs>L+XYm$GEDKLSwo(Kue6NrcDwqh?Qc%S13-h!4VZuZoJ?YxQV(-cvXi3*$by2 z2e_sbhxmPysoJf`Q0VG))j@^0;-<3IS9*-PAs*z9^J><=I;N04B9D=dty8@$3x5ih z=J&KRD1M&;EYKL$08YoC^DwVBaQdsao*L_q0s(?CQV;Buou&fxEpN*ZXecimJJ0J6E+DtVp?9b7B3EIo&}>;3hK3* zZb3VO#dkd*Mo9VBVz3cz_if*EK379le~_j__v>1oWZ(}eDtA-<#s4!Udy7|Bf;TWi6MvJrkw)7rLSBb}SR3hma39`DZ}vKmadGC6v>IRg zfdCKYs5w9bSW_iuF>65U2QdxL{O6ZVmFdTST>q~zxz9)K(C}Mq0%s>GfxADZVzrC{ znsM}^@}4a>gppe@hwrCOv1SGAll2+0UAoQK*rh#yc3`T_;&L<}jcUQ`SK60G%WaQU zD8|r`s-ek49^xnSm=X_Y3Y%`)1OTgWx@*rP=!F- zL&fboEUy!b9z%S?L7MBg)jzX#)!JB_@G%KB^4bAXB=R3Hsb}f&V1{*0;L&*{+UEJ< z%Cimgnz)L|hb>prYH`*M*uDWweF@l)0`mm5Mz~eV{ynM@Jlj}|66dISO<*ymPPFRQ zZ{*fe^Ee5cHf<_)_`N(VJ=_g}ZH=7L})e zqH?7X=hJ*lZva!l&v7)bpfY*|NG8{kI)gm@pW?S+u_agHT3dv}jQm!cz~%0KI^Q6c_Ma@<+jHvg!pl*bWik$ggTSPbn(DJ)>5ac*D_!dZ-Q7U4)6vrX5;Dxusz04 zqNs`6qnB1k82Q~O;#%N}6Fd$fj-3d@r%7c`R)(8?9;vxYLh9&h5*}_oaHKd-qA{u| zeP1eG`m#eH=KIPH-U#4gO!GUJdbD|7oZ39;8@>_0|EuZmpJyie4?k9CLas7K!?Sb5 zQy#E0gwMci!bag*M@Q;+QwL(IZqw#+w(4PnvLs0&YLQX0g!uNdL-MQAiNco4qo46ip)N+c-hJ z$4v)LQ#eg1PEAPX3_e|U{m##(#TT7%7;pkx|}_Wwm`?oHRFs z=m)2J{gt!XtPPmQ)foJU{c%c%V@dpGNE}XYob>Z}OoxAj7W6bIhs zulLoMalXDKL2=$uzSl<$nn`Y%VKXkX%%a=BSGQ7(!AsA<* zNaE|N=_Dcc1Lt}9Dr~wHa}K97IeV)6L9+xFS`6>h1=ueC+t>Xo<^{&mdA!HtVbnlMZv zF_-x!tF;MGixB2)1%}@5w z%(Ad2R>8h`r-j!pO7cK}F3};x{>khiMoJA?U7H2IL^VNkbwc;P#;Er)SG4$Dh0b(u zGKzxP-lcGBX8;cJK2MW}@~Mv-U|a$@AhyTc3wv($HdsRK)V+0&h*LbYHXeFSiG`_p zEbqT-J3$vjol|sX(bBGyj&0j^zSy>H+qT)UopkJuZQHh!j%}UnamL>N&AMD;jajQ^ z&8k`Ty!zQNWfg1o1#C&>8e==!Jf=SlG13z9sLjWiJwDnTuWh!9_ZGePVu?UXabeo*^s`pj%-w>fdT9r0Ly`uU#SHKJsQ$i^nLBYTR`#WA_TVgw zxNZ0$3aZ}46?uWTiNgym& zJPYv*Y&wxUc0oYxHyRHH=M>jaPB^x=gd$es4~bGhO%al<+Q>30PPKj|PTVPiX)-VK zBHglJ?hg#80Rr{sfVS7Xnp?4N(w0HD3*vQrRFOdFihqd9$~E>Ff*q}?-SJ1C#TiCV-`82J+4NHpP-D{$JMTfG$d|2gv{(nt@s+OGi zP*2>IH>O+opnlh0jYF>zi*~j^9b3=C z7Id7=M+)^eJ_B9-`wHH{V_Q;84i2hNHLM~tz^Uu9X=VfoS=LKiUHv^_SeC1bDIlfG zo`c+@gfr3~6Hf}@+EtLltlF0oRn;%-XRp#*CyZy zJp>Kl&Me+Dr*avhlqN7!Es*pS!+Zo>YtHXN?@UqhUrE!ni=sYwX)DErt;aif#*qBY zOf6mZO`FL44LzUMGd7Tw*4J}oDMnEl>2p{RSNb6nkT#w8w|AL}m%^7>XokG1;?EG# za0D%w@tGB9qnRD&`Sw|VW?)5-g~kg4t+xxM++6r`%o4%5G?@I0>)8nO%&;zd&f*z7 z*&jaG)7!wa9)LxtK)c|$<>kUtefK>dS71h(J|e;7Zm7MZS9GG;NO!We;9 z{SH24$*@h4UlMZ#y1D`*xwh|ttWo!mkwgh(G?)BoZr>8dD0BhQa4uI{wYsO9S<j?=uf2XXe!7A=|n z#a>`eu_AD?VJttpzCOlj4YuKDePFij=7e6;>GFdzAR)JhLULTWGH5On5U-i~$3u;3 zFY|EuRcF~4^OPUGz(j6o(>(L!l^VV4vkotGRsreo8fFhI+o&K7i0Ut(&Pp*Cokyee zn2Xae7?s^cBy6@|DWeVNyJE>oS+PKUj>hg?H<0E>`jahO#Z0wM-NWU{3v=k~hNn`9 zS(hRTL@|y1oM(sNt<>6Rqu_~wzBJOP3@iN{`z?eD@LyDy_z@cby0$uEw9D#!EG_T6 zdT0g8FVhg;#MAYoGj7ff6dGA()96CVwZUo9>x*m6hk-Ts>Z;~ovmt$_BBo_1QKW>? zfA@kuxVMgm)`Ai=Vx0Cewb(Sgn@~(Pl;W&Qj>0>~4J9tEka7*!LQ67FhTE;G7+2Oh zpj>VZ|Ls!eZNh#?b29;r<HfE?|Pdb%4<{t-UpWl0tBKPGas z{tW{L>#Nag9mc5L6a{cx#Iooim7Jrw+e-YE^IGcNkGMYt>6PMXm(K;cP6S!nh*!&((L>@vn3REdv ztsY?g8J)D3!G1Qe%-j`Z|7)NlG(L!blke;WDsQmwnke5-IKFJX6u%T~3qCs?ogZr# z8tM>{7mwfMI{S3)1LZH^RB9*=ZP+=|yWLY_;(p?TDNe&?Yf_e9kCY&Ko zz4vHBDEcc{GISSr5c!4}7_kSTcvmpQsh75+&4a{5Aj6py)Y0d89p_n0%Do~3WxCMd zpRrJUb_O|0-*Gm){%|sQALwvSl%+RD&8k>@X@EaBp0Ob|q$h9BnR%B%JtKCbaO#7U zrPKiab=kW{NLs+Xe(OD#***sL(#6LqzbzA`A|N}eN`^R4Aa^s0KT*~IheB<&2D2t( zlv6ot1ha*h&CO!ZYj>jBVTvM2ap|q73`Igd8uGRP5U_FDfVuscJ}obD&)y&n2%})~ z|6L6K#&h~PHT;>D@iBd5Amg?6CRe8rL6edEA~=#FQEdOHv40!eb+E(Z3;_SEbDSo< z4~gFx_0<+G=Rdi;(Jr&@5^wAlY+2KHuD1zZ0LhwIJH5sa{LH+S9OH?ZYJMryygjjcU|tl*f3k=#A_qy|)i||3oXgUJ!RQ zr~*1aA4&`hR?}!Rqw1)u+(Lq4P}`%jbk?~z9LB8=wm5DSU+6%m;zW}NQ~w-pL=)sX&;R`KVd1Z!^Xc%HGvZ~p}}>mrX=qvg;~bH z?iLvPJ;fC|i*d1b+J{hAgU%HB zOtlIQ$8NXX?`e?w`6|w`X!eTjx5Mf?PZL8 znX&krwg8Ewu-viz1S$1&v&4!b{hG$c>L)?nN+8&U8l!)f3v;FOEfdiZ$PL5#M*CI?>ET?%i&f{+ za0w8%fQhZn6yoL%j!jWOF*Kn-#lyk|PT~!>%Z9WCZ}*_dYmg|6gE%y;Qj>{JfT$QY zHxL5m(r)L`rZB}$iE%x}hLpT5f_(I#+hw@Ehg8vKV(vKSBil`Dfj=swB&N*0yZm#C zYUylZNpcg~?@9F7&})NMLP}EA+O>C5xT&x4a+5aM9M^HJyEBRmpYU6 zbrpAqHqPq7ZNeU9))<3x!AHP6Y=%ifnwJ)+)_VfW&wT}~j85lEFg!l9A;d(cmb13CD|Z3UDi%QG^N8IpDm{^&(yE}nHTUnj=TYj!$dm{? z??x%w$B|bzi00#zX%Dm8XY%C=h)~R*Bx0bDryAh21h-v8w!s*CGvyjk(k*GWC^`wo zC8|p}=c5YZBmpeAIAtP{MV!TxZW0#ZffN0f=1?LQN<{5<(oWNGotM!|)gOA-9dh>hI1r&@Yh+#vI#&;zt@mBaDk9OoRIAt&L(&6p*alQLO}TT>MQ^$`oXd-fnv7!nk9FZ= z8KrzxF7#6VH17}ruwBaE$kESLv=w@|DN?eXSijYOYv2wQFJfvTDoU}VLp6+aFA@SA zcT{-$@?2=e=6o{u>LJn6M<#8W6KGu6z0OQt-C&`pt8%aqWVSrtqg%*^(A~?FzadUV@W-caW%W#^wi)Z} zzvY~T(kS9d`}EJYII2%XV*y3Y0?x)%57QXq5W7WkDRjj^D(W`r3UX1R-bf~Oy;CLJCUjh>h()L$sH05Z#T(a=QrpZ@ zU08D*(#-wlsZxS(<5mN1H*(1+rYnq$1&1RD+-}>&WXiOvgl?OZ4@>o7&N>`jE{Qet zvU;w;{(;Wrb;d7Ri`qz@k-d2! zApSi@yliLoc9&UYY!op*il^A)IW|T4b^~WWu|T{{yk(DWgzyog!00>o%`B}b2$mWC zu3NE5`bA@gWYMf#9Bw+jx@s{!JnLijj+KsBoli^`8HA6MM8*+@H_TP??@QFCAQ*%20G>ulXj-{PsPbrqak}mp(s`u@_Ko7J6R=#uWzVHu5 zO?%V%8O$2dcAp`rGvF4;yYwXHLu9!sdaZ-h-r0c+IDT)Auk2%QbCx}Ko-t=yf|F-6 zt|sv;EE}Rtb4QHt7|)NGfoLj5HWPkkW7Y!e9OofBAaVr;zhXBYeTg_n+Mrpyvq+|N z>i0ZRgHz2q$yReZ?6!$xOb>)gz@k^;6~xG%H9om6g)hWYb~%wp%3OqZE)!CQ_;)Oi)proYAvnN3 z_<=}dhE9V|2>DKUrZrr}Wh3NHHG@j#r8_mR+>9!((%AMyD-JVlU;%g>EZcMe^G_Jg^lN5;0X{!Per3%^n!Lyu7Sx z=J4zJ?f_ZIhB2~}22zou+tEnrl?0P-#K;6aAS(T< zE&Xb(uEqyuK&~)n!Nf#4ggj*cw_tRz5o^FSSEWOD~XBt5*CED?vR# zKnE+8@AFdO2c2`7ZquMzP4Hb0Etx5q<2s)5D3qX!%#fI-I4T08-tW$=FSJp1MWTUU zMegMX+P7{;Jzw*q!X^@|I`>(ERB=z=h)dVJ68-Z~S=Tsv13p{JIro?Z(NV4j@wv*A z>8$kcF_KL+Rau{G(dGcrR^0;WqjhYG@_F}^>n14LSNs_27$VVZF+afHer9`9 zl7Cs(aNeqQGlc-@Bdj>r)uduDYKU<{O0Zb$vc5=Q4VX8typClk0w7dOR!xK{12I2u zc+I{R=Y-o+mf^3?A{_3-`y)60pdu5XRpyQ(d|r_fhg>tnXU;M6#RM|6uzQ$ln&?R| zx~eXKabk1j)R!6S&uOZ3M?530jMJ+CYZb%}+f zrIv~=GHf^_lg+-`)Pj}M*a+f8ZMwNcLIcL(xMNweJpRdBN)By2j@Kn#%#JCMpve}1 zf@`Ad%$n^yfgr5gj&?RWf}Cm{^a~seh*p0a)LaLMtBDA)U@F^fN=x_eeM;snkEZ!V&sDCGqHt{BTHc zB?%M`jLjnWoTzu@F^X^{*@~!hc&L6HHSo0Ye=e0wE!|%L=|T;@dtcbe31W;~D(XKA z`3gYI*Rm(b}~MzCo}sw5Vv73x!hZI!;;Fb68R=*t^6ER>hHm_`n^*w zA8^Eh7}8++p^Eftz|dY`HX-cUQ>7X0eASJJXPOr);j9x?=xmfTN3s}H%cMPrppPL^ zj}dLG=0-G+#R0U?Cj76HkR!g35#eIvA9NaMH|dLAHoTnD<({k%G(*h`xPx}~2%Vq> z1Y;ZN2O$w^E-At$)QE{FJ?p!q?m-JKvth#2eNzUaI{I={2UL-0`jhUM2CC@7Vp(Z_ z^PpK5JH>hsECRAJ&NT*Cc;&AxUy?U4^{h#n!JHictp47w@Q-=j`g8NKu4HQ$p`J)XyG15QQq2cfcseDs!& z^Vaj1A7vUGUIksVI^#7B{5A(s;sTlz(cyfVu>gox7ZpmG`SK>ZvL=>F4m>);gswbL z_Yb7EW4p1bSEA&r(nI;qoC>GgT0t`kwP+xdnegRJfow^DSyRv8S^Q-Gaw%}!bN@$$ zDG`N0@B_Dy#AI9fALBf{6FUtJLkuFvqv20|8M2DpvatR!tA&3rW*M~iLzGv}-EcL} zH$#CjG?2D#l!sVK1ZQCiK4nS<**Ghpv8$At*@$M2cNQS&8xIGmgeTo~5`DkX2xW`Dbk1?A?bWoYeBb}A3c?r5wdZoeH9VAgz(+RBvR=VoRLHMT4 z26qoTJ~^ZzpU?RInP>}se0u))Cj~krOYOx8TkwKBP^2P-g@}1SzohEfqdO39H}YhD z*+yvo_i1Rh+HrB3kT!zaztLGR@u8ywg*4n^$cFyEy#P}|YuGVmvO-R+n~vkZjH@@Z z+R3Qc0=&Pi)sjy37FrU_j~M2F#13w?vOlPgmJOf68-D}xx(+y1B!BO0CpT}*507#z zwhdggA1Zj4)WWtQ;3w+X_#fgZz)jofW6;{(D-6SwTuM8E<*&KJ*4O)^M9azm9zPHS z(d^4^e*{xb7_6jY^L6Z^$#^-&kR)MFzdb%rrOD}k_NXgquR{FTd!gv!w_RP#kO?f3 zWy`CQP*EgxBS$hcLBsdr(huNmxke%aO__Aw<~M;m8&knM+qz&5 zlpQK0z3g<6>H;?R+POi!9cs_-S+)NltW&RlV2)9>i&TgEXMAfRHGgMH5EL}>^zsHK zcSJLgx$oZi;T7#C_@_+1zDst!)C$vWDm^Q^-I!|j z@hqG4^N|vdZqN6IRtr=#4?`$>K=6tYvwqA_DydI{hzJRlg&eX-@j4Pd!(;Uc(ccLc zVq?SxrTTQC>v=F(ms z*LMuTm5S~40GHuKJ+CUgsV?&1MAb%yf#Ue0MmbE1ywljhB zHIZS-n4}N^0=&W%Kp}R76Zr^7J9%P+n}0t4MQeC+>i+h>{F+rzIjZ@lu(tGho|c&; zYF+QD;eGzcG~h7X1nL_q4%O->VB+Z^7<+&@y)QIH93WspNqIXakXGFrGKHm)S<6g* zzNMHCXVz~$?VZ2$#c zJcX9s#j+qZ%F6m!G-7~b1hv852p7=<(U_Lf9&b20n`7gIk@A>hu78`&tZW8dmZGKU z$ded@wun;$pk2aqjolk+n}K@>)V&n&UYuUpnq#y|l+0~hKJqPy(E=EXHP*}NL!#u2 zZ3PxYC<@+`ae4NcL$OJ7LhS)9#tBA0bi@)moqPU8233o}Jq?5DnA!L$vyq-jTOYnE zfoQ{#;L~pTdi1emN?p1wel^cO(&PXBL=yNq87`FMH6vf$^7xY8bEpDGa`h+VJ}V4J z6j}!-s(Fr@djRC^WrDy(071)>fe*L1%l{8p_ABNVzpVueG#w_keUm#yzwYltbLwE{ z42m%(zk$d7^a;^rfT%5sd13`ludS-vN%8zOhHdF)=af#iCI-|x(DKFhgWA*%Z04Oa zG{>)hj|(`_NK$L5D$q~&aaR;dj|y*w)AD1QIV1k~6sEf6%KX`%(7+Tn++Maxk)WLN z%MT5@(l%`+y_u1}SGp|MBl(UjC%W`t?pvEAzA9u5#)s?D>pf=r8F|%gwY+u}-pSR0 z0?DHtp{b!TOYS7WqdT8H4S2`WBwK24dDemC9!F`idMz>v51v8MpNUY}_u^i5&ae>F7AC%#qN{9?b!d5S(I?TCJOEzZS56uUpxww z1)6#}lf&5oJBNUU z2LL_)*L}j;ejVDm#=bQH=BA8U2Fx}ZtpN4Q2kb2YlRRh52~X#1Cy~BdF19!XD36{@ zo=yjEO|I|*ZXUyWW?-ItO{R2vK+#7l^>;3QS);kvMCoCSWcF~nrHS=&U^1I9Vvdh3mI)2hpvh`#2e~f z?NFpkqi-IPhGL^8q3R!P zs8L2@qZ0+R%ETtSQfcRB6AEswU1gF!blBd7O;eOoXNg(X4N3~7nGCiP!2^I)+CncD zRF{Nr*BK}ewR`C{**#z@SpWq)x1DihMY~D0){zVLEggoDML;k%WRRtQ<@tTLWZ3gi z(DxRy1>e9re)y>TR2vH)1@ax6^@FVp(`8$Q$%8CqhR=I@=5;!ReKAXmDNb!rI*=;Z zuQ%3rkkR_ZNS$2h1;*#>MD~qxtCB&;iEI+QuHblqh&5IkU|1l^NG6Y%J$iw3 zLi(C0L1l={y?Jb|6zMp@IhDA>R)27bXQ-??(^a!5UixNoH32YkrnY+3Qo&hMUx;tr z;EYc8KzJoMY06HOVb^}Q89kr%pF1B`OF4V4O<<}4P{2!iB~GUI?x!ul|`K~B({VsEwZ1>#LDf%OQTx15}vSOK!82-#1BZju#@y(oF&9`JFpMo z#CKy`X{vj)^GHCNo~0g^Ix?g6hh*DdQsCsQmGaKC-N}6t^LV`pT4R&%=lWai@0PG) zvIVo^CSV&XL+(S!Mc-&Qbz+5mXmc}OR2p241!@TM@-Op?1U+Ad%~n@WD#i8_Mk6J! z4%n1Dsm^t9@x2*7k>xk4JeA-{`$zpC$jD3{gV%?efhljaONk!=dIuoP0yk7mG*A&4 zg)=apLL;3*Q1ibobjl<%s@;f0hh8>cl-c5KL13TgH+(zmpng&2f1E2OyR~ z(F3%IhfLeBQ>#73cwkhB5KF6Nv#BjiAoJqMeP^{f?wyoa1Kf>^QKqv|!*pyk_qE-z z*njbE=ag#y zs0;Td(rh2o9bxfv98f(yuiZx?jzRS(&Ft|$(`WJ+7dSP*30nzX&>z7R&y;aIVj zx}~~J*D^j0di&U6=&@n2pZd-nzilVNJ=oBO?gAk9&P{Y)lYNjxO;2R)HIF)q&qoMIBnb8|R+VU%1Ry4?n1yrMDd41=0B&B9i<{CCmzL=vn)kr zAm*!`A>n$AWs4vdg6$gvXsDO$jYpz51>97Aa(%XVRdV&?$q;!cY<6UA5J=HG&%enX z_Qkc*NUQ<2Sqq7QN00Z$aj6=0;%@Fo{dHS82odFcOYDuJk1zLw-N#ULywJ)rUB(P= zkO0({ElU8uhvGgG#-_=&14$l*tRr$7VWQL;IRv2C1*axjYWv6+?I4RUr#Fv&MT241 zUR-u?xB>%nEg;GwV*I)5Y%{Dj6tjhxWRExtkKN0j*o%A$;s|q%C^2HTb&jL^7CnOG zoRnws{jI=0^`5fidMYI3jiJ|)KOZLx{nI*et?kUb{4~UlHYee^==;093&-|3|GuZA zzS#2X3U2rN$p3xk)9!upgYm|2cc3>s5CMe2bocxH#Q(+69%x0@0IKSnzM_hoR-K3r zyNS<^LMMJE;}S1cb2ne0Bj-#5wXB0s#kk11;#WJJUGhs3cJJo-F#`M*!cYozA{Of4 zCGg4ngZo%jEPv^N+#llx93jq|uOlTY0spUm(TX1nS1KhDfm0KZpCo!3~K~vq{Ti>&P8iTc+ zfoNd@UsR0-hRnU?K@^JNJpW^jOz>JWI~nK&dQeVO$BBf6KWVExPndSB2(8OqcFT0l zOanVW%N5oIe*j#VTpiJsfx7!K)*5~022()ueayqCa!kY;TnhJ@$7aZ&?9)N(?`%It zc&nQ}sul1Od@#lEW*c7}1yTDsDp3n~QGdF$@t!BqN89226= zi7Q)?=4g3vO>I$pwwuzHr~rF~1z%^X2u?%^8~LBfKeze&Sx&vy8+$Jhf`mZ*_hP0xGcc zI+nzZ-$Y0@6bJ+-U4pAM+^c+>xBsfLZMe(v&Kl?#*HVP;d4wFaiNl5+^^B$>UnOfW z9dDT+5BWuHZZ~*(3uhow=^I_jX}&T)X>bq4@LD-IOya}b*cHlxKrsx?sP46w&$Ujv za0ZPVnf%+7PQMunHj(|TFjsTn$!)VS^J`8I?$UZ-4{`ss-}ReZ%qrZHT91dqH$ukP zL5LYbFCTK8KMc$m0bM<7AH!~xjr^&-4?~21nF%OU{?r6}Jnm=Zxm;oJ3Y3pUdmmso ziL^sWfZqS@pES03T~#QRNofN5~M1PUplb(Cfcvo?Wa?9G(NkbHOnHD&r>_$Gnj8My3B^+X7hz8)}tHuZ-b?e*r!-Qy&3p)9rD6qC1_et&Z z{G=P6cEEA^OS~o+2YP~v?pfF(4{?O%$C8Uwhz_dUA8C*#my6D6B4ha=`4 z096>h`xKplUmmC2-{zf29tNMc72N9{qBRj%*ZAc-kK0Xc))tOVC#%FFZQ!B4i(=Uf z3M*Sv5D)v0tMB)PyswXeo_7TQy@xIH_5b_-Js3c~j|jf*5%@npl&yZ9h~0Gi?|8Q^ z{yl$Is0b(C(pON2S$73_=dM5gwaycGvD?4%3w<2j+F3rDGN#w4ei5iU7a%uP=g8CI zJSwX4)=|mN7?yvCZ2u3_#mSwZAmT0mWXit;ympWm%Le>C)ZnOiaJ0o_`#rdde|w>* z0d!E>!F|Cf-q~jIRhDD5R1`d07wtnQGb^$uMv6y2S+a%QhTO~?v$gcqM$_N&V8C;} zo{<-B&&7L=Z*JkH(YkKNBavT?9fd#E9>`p1nAoXttkv)JDI9^5wGn<1(?9!4LQl+B z#5noFu9;2q1@DA3=*l}MesS5$>Gu> zCmiJp$K6LXhO;pCr!SMPe{-gGKBx0#&|<{LSNOj@z2P46z8^{nzFI%8cfN=8+kKuh z9{w8<2*9@|d;Q<8zh@BmzpqXR{Ju_q9v`PKbi40>S&qAk1P{A8D_^0AmDtGBHno%e z+L?+!83t6+)8$qu8n$0%uoH5!x}U46I#VtFmRf?HqPHpEO%IP`qA)z;86JJGhxD}<6kIr$Vzc!=4x&-fM82y#Rh*I(2!5kTAN_GawJPm6zK!$W z><0e$vD<+D7htz%CjP(iEcarD-wddaRu50y?`lI)#;j{wm0I){# zkLfBRX@V=-OO6;f{vB~{?!}$5-vM?U zF3vcVbJ@(i)=OhkioQA<_J`F8e=&!#q>|mC;{E;R0JCJ_KN%1#g#+mbB5=P}l`ou! zQkO#Qach-=Dz|-*C7hP==hk95`0gGn4KpC9>u4M>Ci$8YAj~OyK9R9=U zb;mjIbK?rHt_HF>LKKq=gOT9=RE6$0GX&mi=PeeMt_?}AvHrr`kWpIgBd5Zn=w9pA zEUPJZT$EoZp-o5=@?Mb?(uwmPG_$-KH6vIe>j80SZX_N{13@% z#MgXAP#!Y>K7^rjd2)!$W0fH~GbrhdAGRcfilb}V^jI@1r|-F(11>nl%( zV70xvMKtr-DbASN&hqXHcSNRIp)oQ1AR71Ip84iB)1*RZR)xnDm#__X7`e~N`ET6j zALml}ATP1Fs*zxXQ#%!gZf&xQZDK(B1Ncx$JvP5I#npe1+g%$pUK=fViXVGny}ba7 zW}6ccS~Xzu6B)g3gdhnU_H&qH{mK$7VHwz z?M+{N=aUKeZudQRuW7iu{{A`e@_*bS@P8cXf76BSv7G&1)b}9*|N83r*h2U|cK

    )v(U@R>|D(`+%f?xac9x@}h^+4{v(w5w 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

    Lt3#jKDy{~kV4ibycfXydEfgS!#6U(9sc=Hw^ zrH*kaUsZU|5PKBJYw~H{dsbe&$-xpql$l?x)Tg%xkNoA<}}kZjv1j13pJ&#GtP6(V2mJo03gX~FJg(c z%l9f1+`TZQl6Si8nS(P)VHuQR8r-c9O)R}}gU0Mk<($Dq*lYB@YQRRKkW9F#Lc$SN!)Sl7|_iL!e;50fwY7(qKpp)#iuS@f&`L4p5wD4N5Q)!EfM-8 z`7QBUQM4xYZ|Qq85_~I6S0lkbujj?`1dbae>=Y`j8-d##F%X?a%C_63XV5u6G#|SyCFcTk-X>wa!29p8+ddM)3UWMWJyEvo z4Jl6vlu3c+@l_8wX^r1qAq*p~!p?|=&@j1On7Fpkyj7nK_X1K2QsAfjH})B%NN!ViIb`P4G}it_0&f|+>c&ZoV1*g)2hzv4TU@S2E( zfr=Y8b4C;5Q~H}Szy+Ju6hO9CFl%J=X1cPkvpD|~XX)j5#=-&~_e}7o`us%RZDJry z=B(pEdw;81>ZbrTM%UMBWpZk$ci!mF@fvi-otzNU71j}BI!m3sLUWWPaUEY+Jyow4 zV?xC!?$h4OlV_O8Ug0;Rd0wKCX#|76b>;0G5~>bYbFM$PK%-q2(cLR{du@arOEW^5 z%czR5$CVsMF8vtqt9z1=CKjZ(mJmiD=^~qX&F#YW?wX3-f$TW zr!eCviqtM+QHDAzz1w4*H0?>EyTUo)_P+=~OhuZYNzLUSorXZe3w5dt+o| zc6JbBB&OAwRJX!62M|k>p9x_^bP#z!?-^wsr678bP*Y%LN`RB#RRe2GCb#c-@1JQ( z5`37}EStaD;HxTq7oYl5;k@(or^>65naq~e=UFWwmzS*MKnc!jf-a&DPgC;pA^E~* zqMNm=?uY0Hf7jQ@8N&~Kcx+wssSnU<8mxb@n^`4M7{JSa^c_i8UBNGK0IKBZ8@h<7 zjjyoZVMyo^E``{swKIHbtqj9C)7MIIujKzk{_Qlez(C(vIG#42O=2#IZ}o%8+{!nv zMVT=kAsTj==f|C!`Sr%vt4HXwO|lBb`e>hr{lB^e4^iL*kx&}o9T!H=HhtCGi7DsO z!B2UL5Q7O;`<1Y%pZV$9{O59+K`Tp(6QQN-Luu{@g4#fwADu% z#qGl9eV7^>Sl!HHi0=BCp?hS}oZFbSHblFtiBU?bvFwf#Uw!^UEW??Pc}oL*;ADUj z_LXUs6d;9j;Rbsm5U?vZ88LDDwb#HRAqQ zA*pM6Jw6`S)SOgK8Pk@lr7bA44r~?jY~F?aMSN;WIz;E(&HM93o=tMyZ{>zRv{3j{ z%hQS-uJC=26?Y*!e^-?no)bR%t;o_v8sdhH%i+yD5UCaYAO6BwbETGu7UeA7e}pP! z4B#F`z+bs2dm@I8o0X}jYqP`WziJrs@)%!>4ey(Oq9n)+9Tb071vE6dBQ+y!m~T6r zZyZ(@ewbZqnzpM50vIZ!SHXSjrcR795&HD4WnQb&h7&)yLU-{S(>mkxRyG(pmGzdf zYo}<@XE6LjS(9BdHvQ-MN4iTan̹Gnu!-tG4Znn#hD)Gi7fNKOVxFspCbhQx=F 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

    u^r(;R8?*U^AR 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

    &`3)CRQrn(Ffpt`H|FHjB@@^`}AAbP8Um zV%5GBQTq&q{CtjQ^dzJIzPmT4giKkQHK395aga-`nn#+SB7AqbXl=R5iRm(HWS_Zg zfkL;<&eZznr&HyjJAK<`F+&d8RKD0?wu$!}9=`sGcb-ti>{zdL$nfFl{mo0*wFgGI z4gr4e2m}d23WsD`0YEYClUYhN3K8mIG!dRgB=dvICNHv+I29anXph`vgjBMd!3- z!F`X=Aw+X`Us{K4`vvwfXTS0|yz$E@Y=%zh7nYTv%NAyNQJLh1*9LW;@7&wVznCoR zODYlhUd^SPM^rm#Hw1pP^R$3_D!U()`H9$caN!dgfD(j$7ToOaW@|}C)-`yX23clx z77Y%bNdE}zK+FJ>Y;D_bA2q+ZOu}{IBe_V0)jN?{0t;5?d`s*9ew31#-z>1vLxM3u zNN+fKZ{ly4Es47XHO-4NhAeg>-i+6gUka!1^H>WhM;ZCInmiQ)A%6NOodg2<50DAn zPtjt4*lHGi67d>a@5rVlU(0`D|1hll8y)PqCJq}T^Y8~dn;W^-SrAdYQZmf&PfIu< zRpd;V2aKZc!S{{)R-b;4TQ-`mIzQ1aCceIgI*=F5bRRIO?JV;DfCcfues5Zu+BDOp zR*&}|WI~}3iS+O*Q<$%1C{<(_AYkGL?>&OhRbM5DTDjfh+A8^pbsx^t=q&Kvd^>eQ zHA}N=(sv&tbwGd=GUkWy0WBT!G>lPSR8mwnU-{gPxntZbKD!Z2*{aPQYCS?fvL0ZW z>WHUWBCi)^Y_QZwNQGjk<)1SNnm?)iL<58|zo>+1!p=VKM5eXF6sC5!cx?qCww}&6 zx#0XxZJl4D-m)YljN>0 zhWKvMs*~nr_^;}~C6qAriR1K?v3lyQ9&!fJzB-0iMjdonb)`?lSPUp z`C2n7%vT92BSeyKXoKf#oWm4ApA76~8_|~;6y(ls?_kI!7agC;%xD!TL@kWwJ~fX# zc1-&*yPDFaWY?mWH;0IDf7$0!L4@<{r>jsM{HpoGAc4M5Ta8nOn~Zmu&&b*$=wPYC zOAQ+iVP`yh5Af%mYeT$L6cCwl6@2Jfwz6^I$LUmf4?x&4x&O|bvO;Qz(_ zg!>2j?I0KqBV61_;avE~B{g^^7sk*pwj)lge!UB4S+wsmU&r2_SR*9Sh;6&!&3&R! zG^b(Tc*4dwKQY@Mx+dGY2e%5}L~<$q6g`4D935VDs3O%X6Bpgm<&Zf4j$ns+hEpG( zgWa7Pn6{5Ui zRL+6u+&#lk%lDR1y-LX;>``@nop>+vb^dzIwzOb?O>P-oJ>{r#pb!(7zg=y*u#yE@ zTI)IYQGo^2cX)e1(DLm^me3VtV)1kEb!{C-^0``5xOKt0-_2yKWRZ37&Sy<~85lcT zB^Qe@IS61LyXlpzk5EB*i=1-mFpHKrowH5Oh@ojMxO}2&>a8eUbU$kTC{fwE4?5mY zisZPDjzhCTWwaxfXQ-Liutk?wJ>`S5oAff<>FR-L3^HMXi*aenzu-E8`v}p=RoOo# zur56K$x>-6(B-Z*c(|XUYhC*h6AO#E>hnI~?yx7cSILC&Tk$46(lJwy=da;bom+jT zRgU%_`r%N0A29EyaqpYgPpE4wrbD#0NTRv`ad669y+@f(;ixBhc30>|l@87xD6b6J z7UAW4O8XgL*hT+XAUUr7!4Oz%-W^-$H4i(sP1{8}+Zs(M7ZqtsC)-8J^v&dza#enI zrh75OZ(HysoP2((khCu=b8~g*fF$Voo;J`nA%J}=d0 z)Q&ML#yGpg+OEDpBN=lgva!5>Qg>+b?yu2j=%xfr>B{c@8Ud38+{P_Dsqt1yKL^M-sMbhiZwh@jNQE)wrecpz z)n7z?j&fJP7X0+p)8sF#jJ!7}doVsdVRu3Yxu`jcrezYe+H~4bwpumb6w))>XE%Sl zA>ZUo^3P<1odsRlaHk`1xk$pA6&jDhY<@Vh&u#!x`)Br_Mdqn(9C|8frid+?DKq)Z zcdmitu))-R-OoMAqk_mACIRcd62dtbzY#owD-3Mi4O=d|U8Z1&oP$}l_U@CYO5fvC zWx1U4)0gl$$}X@$|4Z=2gv;d2Us@j_GNUb8RIFf6(5Z1@ygDvy0)KpcBx-J)LlruSraCKE>`}PdQV~zlC(cJNeb8K)?&_8+h>otjFdk4JL3hX*X87L zGEA23)^IrRX>y3uhu9VZb)HcxO7m`&;XpD!epP@E7hP%m-YQPCKOs%_hmS!f%0&J7 zv#^1vZhhi<0aV5NCEdxzMmr{*5&2*9mRh%}PRDVx+Wa%8$qTH6v`Hv?*=q;fU6-8~ zq#=4C)^0kw!`>zYgW57geE{~cI-?z}49?dCg2A}(X739~hp&Epb=E=Gr}6% z{%n8xv+lJ{ogutF4WSWl!g5e0)CRKjKsGH(a6BJxcR_du@A@?~6cE8lL+qb&Vz%9@ zcMFGUr0Rx><4P*K!4~QSVQmOC!U@a;Fr(%i+b}v^p9svsIJ>7|Yt>PIkFgB8xwvJF zQ&3qxwfY7W_&}e6Ln956Do& zC=Lf^+qXykLYsuWdc$(nf8o~SBfss@4E>S4REA!(Bd>EjvNKtURf;uJA91<#8170@ z6ZuH%544cqh_AP1u*8M8w2Ld-gNfjAxzxYAa%n~HQE6l3ZXnAh^#XW`$6B4$(<=pfc11uL(#O$0(k8%lS>Az|7r>`Z z8tXhgs)RRTIY54RMS5yyNrLQ(HEyOiuv{EPKzN5~eyv*=I*sTZ|7k>Kn>5yQc6V9E z<6K!9Vt(q^B}592cXxzlrlsmsQMbIv9?p&_68BVqA_-i+fV1uR@PCMhaB0>^0~HXu z15VH1YCmD%VB3Q*F_9jnRrZYEm`Dnfai;YmT|#W>>?dRBourCCa(6$g>1aeUU#*GO zIvNQevu9L3l-tL-U}iVn_U4Mp{iDP`)ejHiu z$e(Se^g;p2qAfOXOYxDpzIcbU=>94T{ZNV&!CuSs6)!4E3#VVf6mU#)$6&27V4v}g zn0gb}p8eRJ&Pg`AJrDT5pW<=p**67YSMC|j1nGe$!zTCwxDYVgq##W>d--u}N@Qe~ zKC8dpK9i0EVEYeH*FR5JA7IB+<$JwAwt2xZ70{ED0r-;|V$;32YdGB)s>r*`<<^9Lr-#>d%;Y0Mmz!$BsZT2{92F>gG1`HLaS{OW`4EB7#0 z$n|)0<5};Y-t-&S?1*6_o6_&~Y)~q+9f@>yzkOz~4iFd#}EgAkHO&;8V+&cub|k z5~B~tGZW)Wp8PF_+@F%f_w)gsUy3;B;KktWhtW zpRw0^!Zh5UPoOz2Z+#~p@CqI%TF%v##9B&;(o!3*s=4W{sW<^L@gz%%_H;wyE`9ulW^sXYXp3=Z>qbH^Ai_iSM>=0*&Y&r_apC-*Ir z7DLzHy?v3mc354$2C+_L*Nm&9keHQx1et-UJx2w6s%@pL8df4Vy@ zSpGnEyZVo(e%JRRoj;`|hRLaBx%tSpmaOzb6N}9-j7y!tp#}+6D(OJyLV>6a;`TWi zC2~X(^XHV=Uz?m`s}~wGTA*#9!=Dx>7%prS>q4fyv9hzrXYRSOvDNZ8PX(JJ)&K>R z`08I#_Cq)cyHuV%2XsOI#O1Hn%Xm-;I;MuIxm5x5v3eDF3ZgmLZ8cWD;(SovZ{RFm z^t@7S0&Mx~zyACG{iCU^UjbdS+V|zGJK-P)GxwlIMqxEw^=DEK&TJ}sexzNAX7@IC z#0j!$T=@BkxGvEw$q9FqOMrV9Z4IB7djvoA#DlKPGRm{V)5FKjIs<2Ixoy=k^7eWR zuK7HV3klykAL?x2i89~Ruk-R#%x&xW@bF`En6xj1%|D(uh9_=Yi1E}nMR~b|=?C;l z&4Mbt?J`<_oSzAeNE%ka9B+u_k;ifF&1Xee9seL0aF|C6^f{k@vRG!T&`OYMER*Aq znb07qW$L#zO)BVno=Ts$h7=**)^DB@sVo$rcFaMB8a6xhBfvCAoO5$>W}agx(BMI} z(KxmoE>MsPF3YE58_+ccf^N(F$OSM<5}N{*3HK7<`_O|m0pmpEV?aG`jaz>COM#rQ zd0)>dWf#x;`POG{neO>EqGbRlDG~a&OP9Ai)y7Laq#MPNJ*9qECFpZ%7yV08lAbBx zUZm(8T57E@@ig+EbAIOKe`7}6CMFzEEsV^aEl@BxtgVB!I|Ko48FIQy%~lTUx|qq@ zXRSjhOMVM~UTks~z{OTNLzdD%aIKNw!EXO^jZH`o^O{)M_7~2Rygt@7JR$+))G{(zd6KKPJ0ek>G6xSPz=moGB%-ZKx|Eu+q$GTcx<26$52V!mgJ-^J0 zUIO<>>V1y4hmaBZAy;1zh4)py8ghh;%kdUqZl&hVh?KK&HKoZA>NJfTM&w{7~2 zXSSD9ewvzGanLkoC*NI4B&ouKDmd~hICrHV!pJgGo4DU+AmGt)3V&Sg*-miM+?Xs8 z#pHP~ID}~zFa!d1AZ!ljJc94o zU9^7Ad&=$a)(xDr=W`Rqpas4Uj@7-=L#+0{=~^w+?t_7n7cEN!Jv3z9u8; zCdwS>v3eNp=Ya4Br^M_){Gl1KBo&=hm$3X*ue}-#Ry_)OiLpQCoglDkTISwr9!-t} zYq^klhBiqUILDD1-{Z7IOc-){)P-3hyzZl~vl@3Hr!hn)d@J9?`ZWD!&6z44W$>6M zMk#n{I;XiPk2FDc2XWa%*fCrH*T!v^!P148cNkR%sogKPlB|WN{_MB_xi1DRS|SOv zp(^vTE`a3(y8k-jJu zIa(j$S>u)uyC-Xah)@3t-KdKxhmvV2U%}6_Kp6l4AOJ~3K~#xeNJ!Rg@4ETShcAFh zhBp5;U&13AaZOd7C44)fZN`y2CyfV&U-8lfj@b7@=LqP=T(ehW7ciz9VwLW>Jn4y; z@SU|@ICae4$60($;N{&w%;*iqaL)OXfamQ(dLSo!7oX+G9v)L`y-mMnIiO- zIu|@JL2ex}OTNP0Y?2LP2_H@KrU%y)S1Gu}W_Ow7^@3wboaKkfB}t@5`#!|}z!d`A zYGJj-Ea)h-9L2oEgW}IIcpYz_A#;s-im*;`s^R3Hn!nTC%j|~-5tm@ltq@aI+1pm7r=YVBY03c?9lpOZ@<|; z-_>vC>iH$;%LQ;xucvFqb1N@`bzEF>#4m(qm_g=_cDxnquf6~#J6mp%;bIkuntF^L zFS1?^JB#LB<8yLpt^Xj#l*KEC?70Yt;X4^QPB5u|m%e@>?txHGPa_}@OJzC7OldW@ znjnf6bFidYZNU&T!G5d;_1iCi$>oK2?(UbO1&P;FMfs7FMVG&|U$ZZOC6bu%lu0JI zcU&?}E^&4YrWl`YrXS$By3Jrl_oOk)#H-uqD;KV0v zuAx+yztx}1Sz6;i2^w4`$=vJNa+juRfQA$FfIF$S)j9U)n3cqh0wF3fVeX0X%?49qwl>en&0QcZmZik+^5atpi z=OQRK&JSsLT&>W~%Jg3YT}iZD)=Q_=hn}3`_@rVLDPZy(VFfsCv>Ko+FUfLLZgA2lfXMIv zE>cb5L1&0(Xmjb{(W~?br=c%Tr9>ttf0G6CX0Ds}al#z!HJqD4JmT3@` zfG2FO@qYAeUuYE0qndEi4t?OmAi^$$@*&_(`Dk69aoLb(t!+#Cx86TeBC>^4vcq!| zs{`WM%RxxU1A{zr9)Mt|XhVX-8g(n$Ev{pRSW6`k8cj$I>g9PPaxQ@=V??gnH$gy` z4Kf;RQs>R3!)o*K>GX*2KXahVKecmVf|n#?7#`#K`WXq2pW(H81%Nwo)-Z8ClUFkU zT>ongH{2nAhrgq#{*vy?d76GJmW|H{d%_pM-kM_V@%*5@2^r(+n2lZn&jh_S_umU( zhFLkl*IrgJ_}a0*`YGVbRCznt^Co5McM9gem%v<1$Mfp}{~C*wbT)z^vQ`%D#D(M3 zTleOq5wrKET=^He{6%+?mM8R8f1G7?2>S}Zb!Kq;NHBK|)%iPy#I_PLlHd09uVf{b zqXAD1g3*m{HSxS5$$0&<`g=&-;b-PSMyXy1$987<-FLu4?vyK&0Rw;`XLc5~NKMiz z_j*1sdprugBTT^#t9%lmti8Q0rmvvux%ODpe>~jBMo{L%Fh}@U`o-V60IsD;KS94i z8Qx;B8!O;wgmud^LXfxY!_3(nF;I5+J$q~07 zok~cW{)5{{(xzUiTcREL@gTHaf60}1{CO!^$+xx>sGS3!27ey+(>Zv=9|}E1U04Vi z$6-C(L^&jUtUrTuj|;`lzD3f+NYhslhl_+wFP^X7gV=xli-})_cBDgSp*eJiKVRGzId_sJi z7yZzFwB`F)<>cCM`Nit=oaLfNHYG-F@n68-*~w%pADbB&@$V&YjKz_+hy4dGNWFC! zN+i+XjD`sgEX%NLxf^T$s&YfU`q_hoaLcY@%#l;R-wIl>+EssaV-MZDZ!Mg5^4?M5 z>h#?8#m~K^kh0AjY#gRs_ICodr+>H42%kw*T9>+gjm^9OwzdIRPuu~PDO{INQ0O^9 zfW-*9$+v7Rn%47y+2jSMXR}~Ot=OAxI8PJf$D~x}*Yj=1p;iEFT(}RREHDOv{M74| zF=bf21!wkk>fZebf~9rsx)+pe3KQ9BB3qa6f;T1{o)J zkH6RddpAaLzoqc{MOQEKvf`VxH8BzPyTfQSGj8P<`GuASpmKlMcep#6>{hqe;sF$5Lv~WE zor=YYv48+|vAO`3vCdx7$%{V5%ROq8GK-5v(2s|&2&Wf#E+M|n3)7{4AFG~t{{b#f zubA-ivko54owH#o{)Trgv@OWUamg2r`KV?ufH$=MqBBkN>jXgGRc2zGu@G2zEOEIh zvd;V3*-|QgMVP9?c=|WCg_&!pyCC zgZP97bul4^NGGVg{&`yu0{dR%GWT1*|Epz)Oy!zWEKMokmP&D#59}D{QuO#Ve&8iR83*h}U ztU_r)^9b_77bXqh=Ob%_gGQeRJ?tmgCT-whfxauVj$tvLc!;ay>PX7v8y!MggFdJt zZSoo&(P?X5^7$XJL}i&9#=rmamyBPM z5jc$uxq1z|vCEJ8kYHasT<{T-4^P^)Hk_s`LH1#_f;>~6EZ!(ZVu!a+rq0&)+>i0MeLM8FY9p6`srxc^CZV-_)Nf5-YXI}AbUN8QuEv39s$w2G9NW$mnO zo+q3VmPKxDMS>T5W0L1!3W9UjJOjQnx;-Vdljcld@(^f&6qbthLF5 zZYG8s|1$$_TP2L8hdMr!2##@OBVHlX)>t25QDIa_gCKW<)aFnr)1HpMhd`V!Ks&!8Z@eONXMtN;$o=sb65f z-j;bbq7r_PZ7+n1?!y@G9B24_bXz?*Dm~U!pwjW&|5PyTuv9hk{J<~)zxXXk96lsK&3-0JYYGk6%(|`IJRIQTJkHA^B2Hu4A?ojK>mj=@KjWqP*6e4Q2HPSC4Plcof)_!K)`P_TI)?{~jYEeV zt;b*Q&!m2B1;!OJbvF77I4YEo#&cKQ+2qaZ9pX~5pf+OxboWbVtf>1Y*9IjJclyrB z9xqI??IHzGj0}pSaj^L8Ob_WnJi0lE^KdexKA!FEB}6(^x%hEQSC0IRHcj$1NeR0j zv(X-4bVyn;^NO6Nb+%Awl^Y}V?qGrO&5*mv#4mlNRoboy{yhrAA6I>Pk4bj=_`KX; z@O!fG&jD|{!rZ)@RN_y6jyu=ZrlWGH!v_o`Xf|6N@bQ_vuREZKYx{dHfUPz|Cgj_f zhfrZC&V}O`9;gP`w|QYsb-$0bq{c|+?|%*Sc!Ypgt?!Ox&Zi1ef3f+lO}_T|+TiI} z%@J#Xhi8=M&F~nQ|6H|EKFyOA8a+UN&$}=Ez~!%A>1qg8lQGYYB*8x%@S-Nk=am{y zqs>Iiq3oLx^SHe%e|ho};$a^%L`w&7&X=3+AO0Qf($aDJJDN||+Vao^FcayotBsDY znNZN9)MMz*sWp+_O2ur_4o%9Q$dlsPeD3}bgM}Qcwd30vX(WIX!5A8&t!px-EB_;n zW*DD8v5wy1bPGD2|s46j7C25S?~KJZbodhyymx0{yw?0 z@%<39Q)_=meQ-FzCBD-k6}lSU*q}KkJDhoCeVWiVhQ!+Kxz)_?bF#;aXXk)H0OiS; z=IRh&zBI9h^$?zTpTiMig}zYr%`ZhsA=T351s#X|eWQQ7eF4TrO2iGFAY8uK;84ix z2`)q1E#eaHk!G$Bvp9;Xjyc$#SSpeh{+kQ`J_X^;uRfy3KGQV&d|YS@Aox*P z*togKIoCw*Y;jVFKYcB4SX|FN2d>4O?nTXJy$c?HyLyy9RNVJm03YpF`%i3HuOZ*Q zJcJ9w?lW(9QCmJ2@ZaX8w9-h4dIGD}x7S;wA^JY2DSmM}t@I8;^4yEiI*j@EDd2+= z*qRg)dpuP6^A92yn!(oEFD;W+b6)ietUof? zL1fI~ibRcqssd7bb-<_hV1r=2xs)&sstkX78=k&P6)uU;O~oqaWm*$+g#nKEc&lNIOmi%9;P4C=m`zqevGzcq4HyWy zIr_})*ECez=pqnrS{&4ZG>$*j_I%R!9=#nnp8u730c@6MjGKY`BJ=ZqFQ}cKdJcTZ zHQ0R-Qq!b*YI~A`*gYw75KazFy{GFoNm(HRQHJ0Nh!v+W7r;l?up`RC80ADoSCStw0a z#~gca8^wCa#(Ku8=^adtcYFF%&KN2zR}p_>lF(66kJR$r^NdL){`57xxpti-`1nw7 zFaoXBx&5sDi8+}oF*DwM0c?}{#O0xdfGZ1L0N3vE#=e`E108O|6Mii0j;Q#yU&QN~ zt9Qj@<%kW}Ilh6X7r7WzYF6ZY?kC!*li~#)Md#UsVRNFIv-mG9qhD`wHMZ;+vMYiH zuC!_Bj=TbaG%-k%x> z!(O(rU8$A^puhe;yR%4xzT-wX883h9u0WvS@NFQ1N=!VlS3NL}_RCNIHY-ukGHV** zhg`L1= z5pLkY8tk>8=SCK5ud1ca=3$17`})8?%;r>cIbrNx%?k}{*U-=9kb0WS=luEAq1t3Si8xA1cd$#@ZbU||s1c5`@m4#yc$>{Nb5m7r}^xN{%*VC+iR zg|`4;o~#{T*{Aknv{m_lFxY}z0Phpw;xHSocyc_4Nw*2V1jg-}W$+EWFx%`W@alUT zzV%n}W^~oF&Nt@&#;1S}b7kTsd*Rx<&=2cGKUZTA8&-3TSv!k@N$QG~YT6({gXHzG zLa3vS48|4W)wN@IoU{Ht?NJo-cv^n^*FSq2tiwF1`CIFs8R>(iR)1S7+QwN2g+pEd zo9K_c_LAaksJAC)geQQDdQtKNuYYEE*CQ$^R}e5>Sa&kW;ni&K7_tu}X&ZzX6dMz_ zOTvjP5b_$NqPIfgqizm=t@Xj!8;rGMI!1q# z9!7*#{j7|!F%L7N_4{Lgsojs6r7J?uI%Z-((vEIZXY|T*;YH1b697I?CesMi~a+Fn%|QB=OYA=GrrzZe^Jq!tGj4w|403l zPQL&i1cTf4kFNUyxZaYr7r;ZqETqHRo&eUvDmiDQ(g4JCKkb^b!3)fnE0pHB2RIm) zfnX60Vr4kARA40vuq|i@AlV;s2UYv3=Nr>er*G2!`R708I|LYdeSF&pj3206mO-b; zdJWPmqoBWf8v3xI8zTv;@>l#44YenA0(1A6JjS1id1a_moz1Jx9}YFQ74GHlU#m8D zSX{=~9A~xk61uyX*YOB4wK(2{KnYiC12E?okH%d7B!loClD}a4b#W_Ew#D=0Kg4xQ zxthd3PM_n13A?#AYz}8SZI285!S=rb`UoO?85Q(BwC4-Te#k7A8Sl81dd-#i5lbborBvuWED>@H?^fJKUI zFY=qelGGXsd;#2~3DO7-nk}a_kf_LBwFyH({CO9^s2}$diqhD8>!?J7wKvlQBk0C4 z{8r%SJ_RhSX>%Pv>|<^q9y^}gKlc*2XC}_+)cWN)DEPT-O$JhrCqqXyb&!$_4QXaP zOM=udndW27AW(s>DEBexRH**37PwAaS(&Wgs=uc!vVk9po=`^RWtBVfmV6t%2kmRwBHzL6n^A=~9rh~-G zDz%m}R+dT=YJ+j&5_7>>BMw8_S3Mt?#&1!dSi3zg5_K_%C^yw^>SKI?sDS)Y)@ZrE%o_3mDh~VlYht8e&v5&ZtR!Hz*G4P=)FYh7|EPqKzhVDvhe9% z0+!FM2Ps+m*nuiKBhNXwCTE0-Mmq z;a06Q3n+N4NH2(A0Q?6)yjjA)etS>#+ZG6 z)3o4Nr&R%+>vY~>>8+a5wihiolcJZM)0ntsK?|3_cg*s!vv(TkE1)$m;Tt<1AQI%b zeneVqj9!e^*o>lF!_69-nAbp0=aESuZr`tZ3K$KlN5|p5Kw$meOJJO*wYh_MA!kf~ zSawU*xIipNjt~s|N{@_tr;=?H$AI!%zIBAv7r^^7q{A0BPORqz@H1;8!jE4Q z8uu#>tj8Q$w?g>&YyTAM{-G8e6&AIQws`q{sHD3^&t~s79=*&QFRwpe47%nYv3gUM zI(p_4hcnQ%%AiWa8LIe>ILMa;Gp{8C@A7bOv7JHgRHn- z5+X8m+C1q@*+Cl@O{ZlEgmYxO#*Vez@AR+RpZIMN2396P4YAMYwp`If;)&I`rhlJ@ybx%}mJ1~NSPRk}GG?LKo(u!{9J zx{vNMr@jQ%UTa+cDB4M*yXI|-)2~VPHc5Avi?X-bjy{zvtqsSQ1=^nsNc$4ahOG)2 z&-zTga-=@=v!<%0@^=^w{8*c&mhyCT*yh4Xrjja;$f!q&l3p4YzLh|7FZNBjzGMB}3kH=%yUwq;y zkeS}LR+F)v$*koNL645{kF`-rWgLGf#cKH8_|~s@EPoF%uUR{%x&Mwvx5tmRQMn?? z1g}cB)LzYaD;jNB=rgQSjmHG1v@SOmogAE-}u?TTL+mgIxtcYo~z z;j!TWp0E*m4(`LCZ(BN<>;>>PT~opMZ{=8fm5f#e0Ws_!-`YG;-pN-LD;KP!+M$>k zw++BmU))6$8Np18>!@v?U-V-jdqjQFYrU4Z)q4{1X^g!UKZ>{1oVND_e2pw!##6tt zhV!reylZ1H&MI$B_~$>L&(0w6*1uSvEiaVE1^W3k?#T(lUWsQ7Ymc!VS7SK>{eHSU z8VOxrSN*5I#vm5Y;gUir=0_Vx{;saq*ZZ#jylWEro&loK@CRK;1%+p-Nf*HGm;R(B z53;Ew*PZ9gGEuOkUsG@ddvr<%}5ZCzrF#N_~p~1MPaCYiEE_Q!-A<_e2$9MC! z)#`YS;yeFQxX{6MFDvd^d@k4v;9epM)kl&yLc=t+{uB9=Xt*Rw-liZNX*NAvM^315 znh@W7r0>Px9E&Kka;BP(h-$pi)wJV3zgv&`-$lZHo4fojupDbNFMaK<4pP!DfZ9evnzq@s-}n zAg~FTrx+1&R$0{RjK(RYu3R4VjH{^3j>K7qb+?1#CP<|z5Pz_bvg^P&&!95So zP?#*^r{hni<5=PHg-(im>ii?$a9`piHNFC?r)OqIF9aDKlVfo%>*o5drm%^)qChsi zpt{3EC=Mg|870_jpd`AS8zO3-t|i?zYBIvx>Ge<2+@BB))MwK46Tru&$fN$*p!V^k z`eA6x{`o)0YpU*l&)Q#W&f&tx&+IQ6e4s0G>_C+Hw)RrKeE~evwz;W`Q1wtj6my_*Zc>%mHV=GuULsV}^pSmCv+sPCj{8rmbyh2^H>3PndzO7Oi z4ESPV;3C)$MERGoht(!eoF^^H!*lVKOqnX~;4;d`Qz&D4WUJ)pnUARhW2MttcPoRM zVFrxt8*F?031gmWSh84(`SUj2KkS%@Xu`0Zjax>8EG7+EEIDOQIJR{c-{9EkrU&wZE<} zDkv3bAA7}POdsJYGtX!IDCUL=Y^9x2@jL$}yLQW z919c*f3D>1Bvtq%zV@><@Dvn|v!G+RY1e{W zSr}XK!Y*_-fR1F&U=pUzg{2nuF^R?-o^lP>Dap75UVH&uZ$qCA-t3Kw=V0&a(N_^_ zPu_g7#0cyBrxsK_A4=KHn@T9HK}zkIB!*ep>3Vf}$x4bMa6^Dj$yj#ng@Z7Y2n z5gq!NcX5H+g7e}<5w7$3k-C+wRf#t4q7=PXvW}l$2plNaYmfIczqW$U_Fs&D5*cIE znqx;yc$8m)3By894M}HX80ao&D;Y@;R8`H88?y&d1F7R2s{*sYKc+RTdGL8{(O%2rU5mo*3{f9 z8;0n9;qocWvHGK32>UI@$m^fQr#g*Ad(^@6lzM>CIQ{T~xSk+%R!*Glp~nmK{*794 z#BB2p{OvkZ|95ozeb~hN>#EH{T=+2;*N5hm)nm^3vBpqxMGvJ_wo1kC{F@N}7;k64 z)sZ(^z}Zw{x8bdn_`P>BjtFEqQFM(4o zfcNAQE%Y6g$nhX5a|46nw6-@@NTMq;rnDK=_w<^GeLE}o4F4U*QSy>puM2%j7D?Nz z-j-P0W?TYW7r=pV5T?ksJ)bM6H6z}i5of4rm$q4qxKhJ+^VvbB- z?70UY=YakHv`-Vv_FW7UZ}N7*J(cy0L8tqqC!E};e;JaOj+GBHmZ}7V_bV+G(_R4s zd|c}*t;5XIzko`Bm32creD?-e_|+Wgwj6DX68l;7Oy0A#D%^W*9sk=4usJ{B_^t(} zQ&_DHJ=9D1=L5+M=>*bUiw^Zyp6G@67$?wkt0)1H$FcYXB~?&rz%4GT_qAwaG0k28 zH?<4d#&{uIjBDtq))GF5?{*2;tDzU@|NP@$03%=CnkiH01+e&3=vIN0SnXq?%^}@^ zGqzl*ZTJ`24{EkbsN1KS`w@9{qLp0a3abjb&?vU%(g2PJI6xtpsDck zx2ETk(FsFkXrWryDM40$sV$vfMa^s1e6JWj`}skOY?(*-vq-ho{&^H~ZudAO_OKj` zScLd0TRWmNVvBb{7Llnoi-53iT+{%tzB(j3mMmkAr)Pi8KYLH2tazwZ?FOk=i#Vj`gqvaAVtV9U`vFEX~x`kXzQNF!NJeJ7r->-#)Rt-O&;^A zr+~KxRE@|nXwcM4%XNijWMgW(6t#p8jEoE5z1?01@iafjN^pygM`hLuTN7v)oxpP^+D$+UK z(!&YQ0nSd1rO)4`9s(9#?V>LG?>Z(_7fA9Yp%ZYZFgQZWtA;=<=9R#{JhQwx^QG&B z+8ilnyw7D*SH&3QT4j)qDWUYv00ZZKn^R4{7d4=H%CLxUSf(O6=Bzr`wpG`C00G|m zm|@>=ntF6fFd0tC@hN8?6C)Xy!2ezVON@^`TODh5U1Or+>9Kr#Kf$HUf}|P4 zkBwTv{fN22VgUQ=ufMJ8wgN1(f<3C=Qr1$aH8K5ZnFC)5^56aR@5bc!vb*<)`qtKZ zpaj`Ee3V+TOVJ%W|NKY#ElZo5@6{MS6`Awd>+toObdt`TtML%c8EB;PK9TCjx}1pN zle+Z}#x0ITs9G@tol;ZM|L?MI=nN?uH9zTgTWh@UhrEsYs0(@eSGuU&z2$zR<@N=C z0erJ8UjFXQDd=l$Sm(&Ye_PB=%B`lG{PwTV-7i{i<&h_Ul`Ps3Ma;UtXmFD~W0T1& z@S5q`=Cxb=g_+iPoI%ox}Ft%gbZdzEIP1ZaYi-R%?^TV7DboOuQH^0rP)l;;uOP@g+ zt+8k{ylLE$CxC}~_9rpA#=A4|97Xg~p9YqqO{^S!FK;bGi4NdIJ(D}?msq30ld=r^ zw)gc*c+c6f48y;NNpQ82yz!K6l`Kk~6)uU(8k4uz=+;NPzo7DiFSf|mK zN#N8=&iDO3;~fs4r%4N5#RgQlL%}ZQl!dT$t3~;C>hh;ZTu((#Z`gGUkf(p^TJoRm zl5(Slz?6FVTQA&*W4uXD8)7RVw(vS}r1{)ldKSCi6BK z&LA&;qy3xrL-IH?dKq$(m(4#X6JOpsb(CyPY!_Q_*}bEc=^g< zl{N_hg03l=?b36IHDqi(Xc)4OowKZxiXw zw?7wbbIe_V2Te+`FaJ!=cnWxqM{afwhwI`}`zD>1hRi}WbwUHuoWn1uOdQ7f295t2 zMBCi&^I}^N=Yiv!N0B2xM@lpbWOnyMAK`U+J=V8f{?;sfm)FrB7@p1_O$TK)LAO5X z@>h!v3{y8-@4KQwD0b8ZTe%8uvBs-HB1l!#z-u{0)eaGRNm2_2U(VRv+`OL6@)Lvv zb@W&*G35Yu?>ms4hvt(Y)|qLcJRB6R%?So${LoRbfmLicqK=DNQwaq*4f~O0l*G3l zvHh!M=Qi!SuaT#JHw&&OfVcmB_JIs0?gF@~=29JF65T5T6*aS$zokF6cxf&L%^DrM z{M~(3*{nq)T7M3_`fI(5&9yuxE*c!p?;KkhgxYgsi`BnAj(uDA!v*DE41;g0)O4MH zL)N-efp+#tYQyFWNIVYcn}yIsw`euLe+{ACXlB;v%N68?yp(`t~o{`~F!b3~}` zeR;%_y7~ywf9to5WR~qH1M~B~!=Zo70j=?HZyNH07Uh23#f^0OXrqc^k==Lbnn}nb5Hq%ys5j=v=^R=y z*4wx)9=!|Tje$tg$C=}8jmD{jaV9=*dAtpAzVw-yyfFB3IAkl3N)cpH(mGA{HC4b%E93OCgXRJZ-6$I$`5rbd@D$Fr| z7jw!&n7Y+UJ$7$t{olg6nYvN8(W@6)-B+}?!;z@J^nOua!%PYa*@$DTz}@7WGO{jz z_pkx{XFVxgK$(~GiVkZ}g{DSL8FB$!#!o%1?mYd=b~}>Wk;`A(FSk@?oVdnMomf~w zEoJEyyG zs2o}{R4B9hdSjo{+14Uu|KY)X&F9bYhMN56UHpE@2Mg3{y_BU2=_}CK`RU^pxJ17= zQa3hg8!7V@I~?LIXH%-WH>WiJT1(Ex|!q{M02GT>yfRlcs&o2hVEOGPR;nxtuLHvCCh@s!RRa zsCbrBEChW_fNw5U%Hhl3zLpv-Hvq6ePrrI=dd}JOM2sVARI74r{LG@guzEasJB~Un zp+=wQ#e+D@#WVA7yP?b9cP+b42QY4MMoxLZGk!s0q((62Dl36#i%!M+g{IZ?SBLfP zM!q@N*GBg?6+hLnh}g||VjHWYm+UVa>wTwp^0Om76D5KWzW_d@Lzlm{X)sCS?|=(a zA797pr+>A>kJ>lA*CT$L`&u>Zf@9#7i(|aj@z*>-O{hRFe-9Y;)6Rs-)2zduk^dDn z*w|TH!OD;jb{1E-n;5SkH=Z{*V0C0pKKyK8Ibqx{9 zMw~VN8GRCk<8KpY+O<;FGn}Co{G@#iYLh>1u@4rDm+Uht_1OdQEB4;A`DFf@5gE36 zPx`WCWnf};M#hUvr}oODh=R#E9FKgi)bRYvMBNx`Yv9`84q!+mIDpQE7~PX&KRlpR zaK5sdx%;y};sSVYsi$u_nIN-+B8p|-3@W10AQBhknaPv!ADte13OK4QHqUz!nAn%b z01UH;7*5HV7C=szaW*6or;0&y*|S|bB3+GLm;Ww~H=K_kDoQ+O?SS+_n;8G{*YNJu zSs_5?qT~@?35fZ41P(t@3DG3qrcsH2ssAh2zu&QawjG}IOJw)X6&L$DKfaz>(Gg{ z^FuF6%HJWD4YPL(&^P|f=4La$*r$-=xyso$?H{X6G!e|y1$wP}4@Sg}_?SsMC#T18>oW_azq^9TK(#x{6{z1Uli{sck$w4FvlGGdB)by6 zVeS925uAFaBOIB|+<#HHsli%=1Z;OVT2Dq}_5IIKZ)#!Hs^tCm@CER=eKiXHm!AOM zkf9efx)nsA0Yf8rq%BUtJDW?>_v6pz%&zUvc?uZVy+Zs0f!WE4#Hj@(9;ZBZh?1m1 zC{LRG?7{Io?056o+qVR*abBeI>m1Ph{ny{~uDK+{vjqjQgjZB~H_pSdzomzwq#9fw z%FT;i@lF_dYJf?Q$kFhy1}604g%K7-vLn6baU`}6nV=?b{H=eU8fKF1=VNw)R3 zTmV~raZ3{CbAsS&sD21MN^8d+*tY8(Kh{2D{XvI9DR-m`;7VRCT4YQvtDUm`RzO~C zGY=m|U)z1NbkW$OE;3QNYYhFR<*jdAAl$MQ=~b)}>|HeVj*k#PCy@N~uNNbhmwDKw znyjxC|EKxg-_eRIO8Vdco1phz{@zczqx&X1l%y5lWDjf_?HD`dpTQ(!#(pc>e)`vl zx!%NjC>rFoj4QaDIQP=PSuFO@6&GkvFkL*HW;{!tEJt7WZ#z*ptwm}{f66CvFT{oP z_pmI`8gYCUz5rIv7UZ808JsP4gmDIenK>H` zBH)~%Ie5k+4}c1Bh!=!Wxhv=Wq^E$j{TqI+L&RP(>9JUq@!G$U^gSE1C_}lD)<490 zeBDH(Wm&ym&a^d_0EpDjAP2;D`McH8oZbQgHAQ@V=Hj?WzkSU2ee)zk{e>jjiu_qD`5s~USaA`|V(_iXA8{=+RwMpJLpaq~_0(AO z`yicv7$-as^>x5zc+-Vqm>;LzzwOpd;nny#dfH_dzvqFm%tvt^|pElkk1*u*t*8O1P(#_ z{xP)IkqK}@mII}pr$b5IJWs9FyEGV7n$r-f(v&HJyaRxmS97g$jG_Ir9qdV%-#}W2 ztA+G@9H}wl`NRsY+Kft0zgh8K5jv{i_<5nb!IYHkyz}5=nYsG_)hr(7@o)9TH#E-Y ztVzrron(*O2cQ?f1-N2vbJ5fRssFQ?UK3oFL(eJ7S~hdgfcZo_Hk1kRYKLp40IKwV znyrUU%o^*>wxEQ2*hlB}+rQFejXGLUWI}rZJR2t{y$8}d`_|TpL*4f3=l0*8msjp8 zNd|1xN8T)_=GxlSj|OX7p~rjeOdMO&b|P{3@?)%$wYlw-SLXe*`LVdlx&S^ee@mn_ zv3dQ6z=1~#66C6k?gO>>3%Lv~VDbg9W0cbKMJme5{S-p|O8qfD`dMCp^~_Y7>BUDWLyNZIvIObjNLmEuNnWMQJiYNnifu74jl4b zobG_AcL|$4KSv=X%rVOD+NIqM^tC?YPyO#2hj{F>+B9rpT+@UNc# z6EAlW9<}oZH4>~4fdjA~SP4D!%Ms26vYoq4 z<^Ox?0(hc%uOrg-ho(gHcV4U)Tu5ZqW8wHpxB$K`e-))tx}Ht!5q1?_emxzTm_1~` zVqaUgw+lx83)QfHDsbKfFm*A|13&^yS-0rR->Xhw%+HNF4C8D0c;>+QtPsj%@SLU6 z1+e>#0APdumdoFoo&A!u>!jK*^hE<&^1&%vE|}3E;FuL?FjY9jCB}zKANnYo1QQm=kQ&) z6HIqRyftRlTRv#m`!zgL{$)<~k;hBMZ{U8Ri%JW~=F4}MRFB9sM6DoBEuJrXdr#z- zXP$(!*;8_ccvnapW(vQ?&8KJmumAp^uuG^Tm2R-mD?(&N=k2W+ zuz~794E-x}#BappE?2=b>Ku!K?oxx z0hhmk&odfAGXcZHR0(G6o_DkX7-m}R*C+f|yJEyw2SyH~-5<;p+V=3-v!9AHwH-N8NP3xB&spvd!@2en4aD6pxz)m%vjOz(UKq^Px5b zm4VtZjYlXtPYc4xhU4DCknM|+gBQNQC9uVT7eg+;vjRK?3qF6v1#k%sg}?Pr0h6)0 zzz=&pAe=EDYW^a($jq=)jgz7r^U{3e&sh-JgwJa9 z=S$qRJx@DAyZkM_X}(dXIi_9QZ;<6Iv4{PU!=B6emgkH(Ok`urI!PpO^{KkdjsP1R6{3du?I#jXqDqmYL>thaR=c%x@t3zz))l3p;PnUv71Hi=sVk$Fc zvje)XKz^&yTlaRq2QGjGigs0y4~-||7^2{@+U_XkXUIetTckb`5|?z{4r+M=HrBWzRnJD#w6M4KIZj&_l_)2P1W5 z6uk})X9kC(?s+vmUb|7x``O%aO#7obU-`cvx})eD=*_?<@4TT8K(V zI88t4u&wcVH8w~To`ZK;+umZ=NwzY^@I$VQ^y-@hJJDE)1SCRBMDFT2*|=+tB^So_ zXZNf%J|tsvkyDsW{X7rvusK2{!jsO=&$T=nAT*DF*KUVhzLX}VLkHWzi$dZ)~Of3P4tfk*=(Rol(RBA7V+tpay%AR zIB~PV|GCP#h;=A>_*X*lWOW|D1t|0({HLTVOuUw<_1`&vBR0bD=r8A-l8GAIVCm)! z7r^_Izgqx)IPo^jxRLZo>i3WV>7LK(zTqBQS9(Cn#E>D+wu|8O%ij&4wu|L*z%$kA z(B%H@(2wkYJl%GYl4sLB#J)_9JAzd+9yRK6t` z_1BHT>fU(T@7p!cj8O}K0M;__VSy_A^(ajUl9;&&=I6bWL>M++ku$_bzpG@p#Da z;NSHgLxuABKwK&mR_Z@j^HQGvZRF_;0OdP_K2Szo4KaUXaRsXHYBMuS_B$Y_go_``@KQ+jS+o4w05sp4xo0~{jS_B zMD~aUPt!+SATgWh{$Z%Ql^!eDiqGJ6vox#*>!!YQk!;&QMHt4Fie#uQR(k;I(uR2n zP5K{=>3SRtL9T8Qm5Fme{yU9Qjq<{8j_Wv@$)X%36aT z3^!C&-?Yye|3GC%4YSAn#0y|(nZL}oSFq`P47gzrt)%$s)&KR^-zuU-Dgz7<_NQ*9 z+gP|RfM-gT)#DDIRez|rxfj4*2Dm0J8&GfXN1m9i#N4)GnSl!h-`v^$ zjl|zV*h@sC5$@%x3eHf#Hb(YAShbi8V4n9R%IgxR0z%mfV91`jk!l_d1^@v=APj(< z$dKa*o2j%KS|b*%CItZ9UjX-0JpR~xlp!IxcCg9f11R|7kkg)zX*PZ-Ll?j(WU0m1a=66BY3ijyq0QpF-Z$ki zH!Ec`0^bB+@x)?6ou&kS`7w#d;ED<&BDqV;{IM@EpqSbedm+L*Q z6(1=_p}~Q)sXhA`zuzpj)%c#`TXX)QUwo~y@OO#Xwhxfy`SSpu4fV6)&J46_oIrOu zpKM)gtg{6wl8>%?-2px^6%Kn{CUi~JA3~3B-8BNC+ZVS6o3B?Z>i5jrKCL~2N_e$= z@SJ^BY|`T5uv#s;uH^IlO$P z>0n|*JJ&GET=S810X)oY4oMJZ&WIO=_O@Byh-GcVa?!>=^9@~0|Lmv{zls@gRqc>! zd|mvr{O~7U0*}StKdO-<1aanUY`teb+k7xJ^F3DTNQN^Q2ecU-VCY1fAy9m0!Sf!A z;e0MysLS6EefAgRq|>Tx(i(dfi3PyQM>yi|KJLZ z%Ntw$8*vQ3*Jf;d`U~J)nzK=&d-@^oD$Ex7H4eEY6Z_Sj6SOs9*4buklK-Way2GUR zokk9Y7WO2Y2K@86o>AN8P{`a!;j4t|oO*Ni8ow4gD@;ZeBr#6a% zgp6L-apD2{90r6D9Cyx0G$xNeBS&YZ6daQ7XOx2|ZV6*S!=7=Y7=FbiaCf+=pHQK! z>{a+0>|Ox(Vv**d%n>&`T_jk0L_DzD&0j53lOfpwT>{_KoeLU6d^@(r#$32wi4#|S z&NQ}gtFm$$a~)lyFowrwb|0)2HP*hwj8Wsmyi4Hc7Vn7bdVjQ(m^*1h-Mej$@Py8p zNlT`lqIljkZuS6rJ2dagJ7pdomEZLQj*~J!Ww3tv+iuC4-((vM5>LS^d~5jsF0W%J zb>Lw-AZ2_)!%;48we@-6PJlgs0nBiLuT&|4zf{O=OM3yVC~chanQQId5Ztr#g>H3> zcJ0Wf0F=78HFZFu=0R# z6C29wpN*ZnP%Whz$f6&|+Zd!z<;&mQ3(B|nu*>4lZzvo8LWi3*{J{shvg7*{r%!v= zo-!p<|Dk^`xWnL<7p#X;ppKb3vY>XBn3!VDf|*vLp7WQ&m8`9_v1YQY&O=_hY}d|+^`yK?GafgvFDV1 zDnu@TC4SIXcGsMRFD|EI)7ZkT$jB+IBGaP8N4fk^7)iujjO$zW8P~-xfwcy*z5kOO^}2#4E{AMA`CAUv%H>9>Db4Sh zLe0v$40s!_2Og_4>j_)H&30H=HAK(_umEHJ^0(*0@>UDr?kmfc!2+I^W>+b6_3NJv zg%>rSd2{C_hZ1l1N7&w+%YWwG|84CgY5?pmfdF?7m0tB+p8hS;tosF7qwI)ASGi#5 zj&S$dS#LlEfAqXUrF7$eo0#Zdo^5LemZ$6MHikpB1aXdHgnIeADJvJStNf=OdR(bG z$qUqfl|iGfqnF6T;N{GrsjpLt{{0&wl~YTj|M{C8uNvuEFA&Q(J%B}R10pJPX z9@X9NwVMC=C;#&I`clqLS?3>v{Qmn4O|MgGvoL?%uF-4m~OeofBR`INM``28t+bM!oWDUABaUg0pyQC*TWFJmzTw!HcK(t}4?1O>mL=PEIv@HMEKRR4S+oU5c|VWh?VYZ=`_WUzs$syyM>7AnIINbfhl=5FY0$#9{9Q3b zeaN={U_p)!_ndt_NP7CW@4spuZ?j|{Jb3}k#^v#ffYGUTyn1zT@0{FFLk1{2Z=>TK z^|o(u;WKgNk#hvp%UtIs6SOx#DHePd4VlHX|KT3+R=ho6zBdCY97!@M%C);!EZ$|Mc_ zjT`ULh$W`eTpbh2)4$eP^l^;#L5*DgipH(0IB(+ec0nJ99m=6$O5&%I>s|g1ya^C? z8IKaIckamL@7_-zk@|vvcXzG6uD23u&0u+y~j=c}d%iDmg2{MuT_qWuZusakE-J7{^$@}FEaZt1-qtID95aw?S_6Hn;S zD%Nw+O2ym>Yw!~4w&%>cT7tVzsFk;XfAb~q=wEjyl6uUa>X46&#j6xyeDcsYVbq!%3FC1l zryRJMMy;);Z{o9r%5mW&o+7re``g%diXOPQ>P8;#|6cxD$(+Y?MioMP)C^s`jCXN`A4%0~ z$qnK`K|j!9d)9_fr&TG9#8y_L*4mEmaA!G_=SP^BLBhnIitTC8rom%eSZ^2oZI{5d zKWFolj5IAStkf0eATb&Z!C!j;+_mqN=fq3k%W0+SE}KX~G+MJiD&}7a9KZ*f^1TZu zjKGo%VqdV^xD))$zve)-Qw#JYPr-bKj6=)6m%tfpx6y6CVmm|M^D>ZyuSRvBdmLFK z&c{j!Y3!+wob|2YODG5$WBHiIsZLm1MQNNtuGnePR-irQtR<2h^}_4v=V!wciu;o? zqZMW9-`n+Sw>YeQ`ghZec<(k&GrL>nA*rlCXU2c!>E9W^z+A+0&oz4XQ)e?z|F#zs zpI9vU1xA_o`sZd1-IQHhoI36grO@Fr<`}@k%n+`AJp+-$G+5ggmBRt{ze**2+~LV) z-J$Jo8a;CyNffm(Tlpo5pR5ZqZHC=H?gH3aN9X)2bqivT@EJ(`EJ!c-6BzgYVfzqD zr0Zw2VIQAL>ZgCV9!L7UU`giHQwg;0GOmQkJLCBG^4BYT*)i_v(>{OeQ@<1Yj3^Z; z^YZ*^Ev)Li4%e37)Q zPqUElP!vZ#sUAING%-C1SY%8(?ZH6(rc2--aRKb@&~pf?(37KVaUP8sFLMrzhKJ72 zZC?iGs&V*cl%@DheAd|2EogPY)7lDF1kWke=fh!T_lR%1yq+)Rtc%!o zC`&ZJobNX6jQ4J|(lJKA%rlZX-1z7k=Wn|J_W1?l8K=`7X@8kT#)GWc!>dX6-{JKc zD1f6Ez(+5A>-zWd*A0Pgz+?=vMWsGCP@o?EH2&dXg^|%yFvy?d$lgA+vTxN=1;@CtDlE2${FWA`&fb2mXkc* z@%BpsCA3)H;fzRHo;^i;ET1HB`Pd?H46V%(!KriJ!If@O9zG_%va~WfYYsU5+FrV6 zRgo(ES?!zEy=M1;XgIDvHN*#DBe)S6=K&pWECM9{k$uTp-qwFbk3Cy(z2pv9&Dhut zqmW*834DS^vG=V0mP_FD_!PqLixv}60OVi#%1L{Vry#ya2N5B*T@$)pRHZd7+$^HWXS*b5;%iJSw=bP zd-jVxMth2%CcvbG(~_Ae)_^-J8Bwrdiw3?0E85&xN40}3?nV$Owgm5Q;ZlMu@13oS zBWsm8rD-RgLOawSR31;~97rWi+ta`MzwLbUTolk4AzW4s-B2(dv{&JN>%~Zp;kRcs zk^cFQy7y4AHIo#3A2f{0{eh0>yQbOKKbQIA1xGwWyq`qq`(W*Y;Ydw`(+A_i@A~@@ zZ6rMdRpZKv>JE2ZR6Nj~I=%h_vE=FUL;y?4Eh3($ea#(VNj)0Dzh`IobKd5dOL#q& zNj!#3{f8{6o=x`&Lm-{F4TH_g-|fSHTsqsXq$PVpQ(;WBbgeE;R|J9v_KK30Qye0*)>SHKw^R*Z4hOQYp(18vDe_1oRV zoH#k-W>e9bKY~72wPd|qq`dV4xR8?V!ce^J%}2GYYaYu6n-CdhJO0<-2^tbbbYP=& z{)kIptG}eqruem_%y``e@Y&^~Ylj$l%{f*uHp5Q=2lZ(NXEZ0=K__p(^A}A10#_Ff zy*<&(%k_yTh^H&G1$mz1kYUiIp7l3;+YAE!qCu-)_THVeVcDS*2kvfk$;plW#E|6o|PweXycT>fqt z&hz!*sTS=Ae)lP#|JQ+>dYxmOI%B5ZD@c56k+%ezBJ{%b`5!y_&;RG1o9wc-ovt7h z3#2p?t*U23@wbiIW$O%h?gChO-TBG?^#;31&c${7BeQ;jxZYz}PZp~O&6618oJ(0I zF51nyt*r>TW@riI$L7F?2don*+jk7|MB#%%rBVP8;Nw(%E;TNY)@FZJJRXsmyuFam z2GzVC3q6k^SHJf3?;g_=Uo5>IsFgPShSB&1aAEaWeEX+=Rs2NTde``Bffwj!);x?- z#mCmhV!AP!iz_~krL364fK&-&%x%j%@Qj$>imP3QB4?~Qada@Ibu35>WQ@VR>*b&6Q`cwQ2C?KK6MZJqIzkA5frvlxp0|XR-yMFBe6Kj?3a^rdPOr8pks~ z3oJ?wFm9+ZFTeP$x+cIndB|%nfvtG3dQ5D$=2cyjzvcpXFG7#r#wgYc7}%WR*MSzx z!Glonu3--p!;gwcb256|t61S2I~J~`F%!q`dC22d+7kwHQX!YOYc0=nF~H20a(QV8 zG2mV>cJ<}%3rq|{2p!(CsWt@Y`G-qRyDMSE^Tw||v|Nw>ws@)mKgEc6VI$a1LTN5} zCw^^)PYtlKM=yXsR*K&!R<^erwv3oqM{eCk$UJFh6h80kP#4KNh7*W!2j5-H?2YHs zZRDU2<+XlI@gYRdaq)`@32v}rxV|_&*7oB`eEn6XC{d8DWhr330=TLn; zyz=z#R|8z@?rYzVyFmHq?cl{S$J*tUn&V+JR~p2xXt+iMyu31BHk)mlBCZ zf{#j_)e#+^9dcV!*7i|;8HwBK%dSVn^k_O_;gE@8l$G(8kn4>kjrhLTuUOeW`jFvX z{_abVwo@6;OT@LqDpU=mvQ~Gv1^R0}-dO^60W7Swz21Hij|J0d@mx$zslGU$!@%XS zKDxE#9hm$zFw6Rw9L@jUIbhM26F)KRD`(-+1MCy6Jkk10BeG!W z-VQWI+wCRpdB9BIn}jQ(yi1rq(+3SUcqeM`+L@UN!LP*+kR)+4W5k~ zWhT=6N&7;mQGs2}`(z!@FzA$ln%|a%Q3~oAA@6@t(~NcBo;zd`pIXAb!Fl2%E>lMY zN7Q_qt6u+;HiVn+6SRsIHUeESbT7fGUf^g9YZd2BuW`;+PCTVctUV`$(?hL?`5QlJ zJn|DWXp(uYx07RMgCu?O2vpC~^K9jMqEs8-G|bvbji*fcJm5EpJNd9gx+GQn)Wuq~ zm)hbR{T<5w^7n|9y{T{hwK+3iqc-97Q}n~Do~1<60(non0k9JFPsNCrqw)?=+ZS57 z+Iz##Yi$PMS5Ju{s!Sby4*JH^t%=bviF@YKJrSIQ;P-KouMdP3$`{@h`SyJuLs>v_ zZQH-^qHXe}p64^x5SHi#Fy4}NHt~fLPo2p# zFg}JQXu0u67=I0w?f5>f(U$jN(qcf{o8-hy#LI7;!|ZZ|dMB9Wo(H@yj2?APuK8m` z&s_kQ9_~>}CRc(Rs~da0S^aVctkKUhqiZ{Cy#eRORlrIT05jb8t6$j}eX#ZJ{%DjG zxd7hx{vfE~0(hVN*e#6Vh}S#?>@c}E{eD1!{t$=F`(rJ>^)X}PM}uASf&9BX$LLFT ze~vKY&}J_0oB4Q113x85^V?(PX9~SG8T03C%r1fcgN5RU7M+o(BX+lrgE4Qvo7ksp z@EbFqr>5tw{sXfCb+(QJ)8pIm%!tEYyopp!@cP5ha~OINW*x9VF|lmz?Y&?r;$!C( zu~Hof+lSW`7uo_GF{sc+&ead=uD6U|^>~c$)>rx=N5H4mLR0r)*6W|^ud{A;*%!b( zCabS)4*jpEB1vcLHKfATEVh$)gYhB1I8hUJW7O_PBu2{4PN|AU372pXJbCUhMBVmv zIUt}F+46L&!KQq0$s_EqL}~uA*U$b-A(|(jS%nWRy#2f@cpV-C5e$WGPd4`FE%9ss z03ZNKL_t(}9i@5p>6gD-u{)~t@bB{{m5-rEYC2WS)OwT?`1cdgt>~-Q65u1RfWAt* z>qMEK1`QuP3QwHhd++7I;4ttG_h-m@yL{Cl{R>{WgY$X_RY&-^JPB%fNHdS9E4 z|3)gK^){M6h3(qT+-$l%;O)QVFGxuq$f>fZZ?pLD>~HWWO0%$_wlm}Ui(f3J!kaP- zT97bgn(xoP`si_s=)(*?M_B@m^uf>XZZs(N*Ioc;JOxZSXIPq!*`dp}1+_4Q<04=I zAc5RDjFz`-{AjRi8q#sobaNBZ@$!k1Hbe8>&%OjM^k9CSjo&n9{4hZcyBO8n3JDxu zdTM*$dgH(0f*w<}{gW;PuS^Kv(BF*g8+(C3jMMonlQyoH?r(T??_SQX20^K9?yFPJ zYKZnUN$S(Tk0y^7^<4ZQj4zLh?hskU)C9I-Cu`88?<{qP=vzU%L8|`l)Euji(rQ^B z-{wUDft+qv88v{{&AEb?kHF_J z9I?mF(Q)*-lw;#~`CG+|cKN%-qN)D;P;633+(6K47r;#o8`hZd%@y@{v%EJ>73@I^ zD-v|g7>>K1x|~?#FwiCf6LdSik4=XEJT7T}*2K2}G`C&>j{MO>m?R&^GM$lsk)t$o zKbl_~e0E0t1^y1~y^KhmFxMStyJwaYD9#FKL)k2jY+l-R{clx#i~Av8PLO48H^Q4} zd3BwD>9@4f2=Qz)-oYUFzkC6_v0$_|39o|Y6RX9e9ujFgYE5C>kGsVAOTS3~0Fm<; zEhRR7B-kzKYq1y29~&eyq|QiMbgH?};02tXG(_{?@3;uI>s(LaY%C|a9Bod{1Up${m~$c}*0nb2w&75s zJ^hQ+9Pa{n&kErXeI`Bk6#UZV?@1W_FyejzEY@)SkgpHHfwQ_K(}a4p$~y{f6>4j^ zRssE;2&ez@i^T&_eva}k57ZD1wjjA)d`I_F#X!KAb11WFA7i!RgX^Tj(Vf8SM%-|# z<>kAO_u9(+%fC!n*SEEnbsKQurWd;W9q2L}F1;UfrnPULzpxpN0$AF9P6@Q|B2CsehiXjZaKs_ zMtTX|&LB+NC1Af4dGfbc?BN$LfbV2SLTh%6LH^^nKQb1vc}8->WuN2DYvOHb2w)D6 zGS2t8noQf;x7x}zdj(Vz3%&@%W;lYM#|zdl|Ee8h7jxLlO|%*mL; z`;OVF#TFIlo~1Dnjeh5(rlT$9v3eGYYu;ZBR`IFNGiO81HltkFlIYgw@<+m)cM2t8 zTu|oQ+#}vypDK#_SLQauPPoz*^D_IZgmba;Rj7q9WAD@8Yf4OI=l*xD#=(zR0yp7`@h(EhS#S`Pq@2r@7Q$NQ}r|3+D`orHo#lizs=&k!blC~Ppq5?3+`zTk!F%3 z2G-j8^|1%*=dG3|Qsm=#?dyf>8X?O2nTlT2V2@`Yg2j_@8SV>1tIw@cYxsO!NaV%F z@Va3N1Fx1wZNM>%+*;tz`cA{S%vcK$v_(Sor zWj+@`9SDwBZxui-Y{zjJVmkC$7=7QxD5GDG$>PTDMb=}>j)NR|-?v+8`^426ypU9R z`M#++E}N=|7=-JR>Ducl^D0hTdY3H#m;vV~#N|`_AwM!qh(5Fp5D zkHCz$rgrpQfn|%nq6A^;%AAzRxcDu~J?t;I0N$X=uS`JqYTz&bR$rzB*|^Fb&J zk~@ph3s@Oeo?XzTY7G)mJ)F8IlcWyG$z%v`)R)0|@o6@hv#}M&l|M5U=LilYAQ3s= z9|K!rt@E%D#3M{Yaq|a55GfCy6ivDh#cch)Ce?7)W}?bZ8?oVte>u`Hy`0RIqhl>@ zJ4@Z0gJhH%eqDNXZn2g?`jMo8%%Thgd(G!!hn2p>=T6zUFg7Lau(P~o{oaTW_KPPv zIToV4BIie5F9AK_PMdXHSVs@>8FlQdsWsU<=OXd9qs0dUq-kbyQ`QO6wcNI2*GiM^ zv!Qi|U=sP_1vMc`d$e1#QB*yH$D7-5=Nl&RFVWwsl|1I_g4`M!#OuasJ^F|XA?n~esVT<({Katx2(L#%3 z>fEuBuG^pPQ$=7Ldu&BkFMykNbNLf^2Jy>v_rzgIus77$P$ET*pc@1W($HcZ5#iIt0bS!?RA%bY2VFio;y}?=iN8S5qzpLx&mZ&0#X}iHz8!86b z<0G$sc5S5xoaA&IA$Vz3NfUO?MdI!Ek_1ZmBw|UUpSN1PY3bv~ps({X)DuRC($+aD zpJwoQa|iFz#)O#Cie5(0gj#6I5JQ zhM1SX{fCzbE9(#sSYvpfTWj6lf45%K$0~X)IDvrJ_Ckz>0TqA)7zBVgVhCo>_weba zti^=!(yoGU+*cE!01jQtI|w3mSo8LsB3Uz23XI=JiO6q;nd;Mqed8~+RUcINc`TE` zbK!*WVxC>awh|3!FI*9fb1aOrb(?SBJdSHZp%RjZ;h{~n9-|X5p(S(rEY%1Wvqk%_ z|NFm`ZFs^n;cF1T@N!E=$Q3HCU1c~C#(q3CuaC1YvK85%KA=qPHX-5Vj?=0^48=ID znx0@X8o~_vh$;}EOnaEm%}RSyOmKv7oceq`f%z#Nw6*kvj{W+wS2EIm1VE%k-j~Qg z-?&kgj<5>)aI<3hsXmKC0_`)t-=oOWxJ*M-moaqMF~XC_%2>4)TG|1X-*Q&?WXLGK z>ui*@)=#8HNzo*u^6VI5Oh+|NjVpi- zxW3sPTKnlqb!eaJo0v92tFd2xd6-Z+`Ush;`&tU69ua85!qD-FqH1J)7W<<}xZzke z>HeDL6v7B>Y7TEBx0dko5%?&E_6tLZWMoX=2!b|B4XdlpUm&5Ue|y3}$S%BL056!i z{Jqo-=S+%T4UW9|Im8>mRrW!sm1vwk!85O8oPpVcvXg-bm9Y*J#z~KJ9UhdC{Bgh0 zrn0Auv8BCvhWZ9cO!ez#MWe%g-E7&Qh(`t0&JhL>%V?Hx1WvQhlP1(q5rN9CL|gU( zB3T-aC71Zt{!^GTauxWwiVQf*1n9`Gtq}jtyij#+j3YD&TCFbw=!;jUKHmCR)5Ylq% z+YE^Ou|wL0d|PY)Qy|JtLEdF=qpqyb0ETnOedGv%I?qE8BXJBXMiy(rmm}!mGB|D@ z=2E@q?p#DQUb~XMfDL(VTVr{>eSqNHJQ`HWlTSs z*Uiz%%lGU-_4hRZo#*Lqe;_>HK09C9p3?u`=W2XadlozcQ(yhOnc6-5TexZG7&b~D zO#}jS0lca4+7Un2m_}x;uYKCq>W^`?29wW)hjtAvPwU#xf38jW{j|>X&eG4NYC41% z)7{J8f@Uwa(q{altx|~Vp3iWUC=Zj%fwPxJaa?OFJ7HqHop=7J(1dCyL6=CzHvgh( zJRZGxVl8vyj}@ql*Kk9xfbL~_2Po}$i`*KP5s<;=H_jas5ZNK&qvrVEPw%wZ7voz z+;#O6-PX+-L&nD?Rz;KcnuQow4c1PQJj*fk+RNWMH;huYf7B3q4<0Um5nhooB=gqr z_VRa+R#^ITuYdM29WIE~AlTsGz$-k;|M={~#<;nKyZIT!;ZNI8<#BkK+bOo~^L^cj zlZ25XT6q0r%?e}bWHE&u9yb(Kd3-S^FDCpLltyrNqP88HIN2zE1jD+^-(uHOe$y97 z|MEBBgNRwXLq0fz?yjrA^_Gk?7{m+UT~$#gD7A1P!J`CX{T3w8)Y_&Al}1YR&5VZ# z%`SPIZ^K&sJo+_wd>&AwYw)4k*Npo)Higd#))067Uiu>OuM~?!%jG9z@MWdHh~eU9 zGrsiwwhM;N_&Uot=X-#Clie8bRJa0y173Ftyow0qo8KmfSS)74f9e8Q>sBAQ0Nzw% zzh%DqVbqr z+=6VVTSQMDpA(+M=RVKjer-NH!3J$XLUVT5rFcLDM5An|8)wgWzm_&5NA_-!9^TXy z|45V#ow@FYf^HWB(T|=~#W>T#!^0y!aY@6=;?S4P~0vOG$z&c|2RjOq> zb=%K$2~PmmU;6W)w7=B}_)G(f9k7#eYs6jp}s&RR=&qh>iX0C^W@28g-cQH*AQ+^3G37oLq@&5yTD_2sW; zsq{v``$;MzX6nP({$RF0vFluj?z>!GYvbI(wJrPBkZhZe;odAi%NC4~_BKV0<(ujN zbdQ;x&n{xVV6ePtzk%HUtL?%ysP}ILYp*%aFw)Dk5DO z#HErzigAq!6w1{#RgVl3gQWxoI*gO*n2bxc1Hm<&9wb+%oiVjBU11kA6FJ?yeVly6 zCJ)1!-~8>70e1E47-F25FT%u+Z0zz^SRYXwaM=gAaCDkWe&=xW)z1QyvNks>ZyDzW z(}lZzcT%K-M`_2#)dtM-uj$0-S*IW4q8_yd3&sP3b`4Gj!J4tZ)vlJU@L7XLx@5^} zZz3+zaD8NP@zKVbA@+etj}S5D%8dQ9l_PsT8h-ZKNDi-=wmpx?U^3iP_>7Eas|OC> zes2UC89v4`qSkmH@*r3%9a5hKAAF5iFL5dz;ufcByQPT;ccbSdztQJjxI2iELwg6l z1oL>svlnSD5Uu!hf8YO;RAvq*_kr?Cr)kh*#0qhjs}%#h{OUiy47hDP4!;#gl0M5Y zvE96mS$04gyKmK-=NDJ6x>kLW)!!(i7RfQwv-;*IfDf!6J5C~-r+;f2PNU4FbE9Kf z>>xE9^P61hkGVE{5`&kg7+he~h|9D?tKU*%0BDzokX*UkYe0BCVUvc5yly@{cpa8~ zp8i)o`FoW7iGTQ-t}B@W0AQb&uP*mOKHp!A63z`2DDxM<;~vPe+KW+uRA5M1tmgUG zlwo$P(+`l)4avuXalj(Y$H^jCH~u%r8#T z6fwnERc3O=TCCRjQrMj`!PakG(reTNnB=KmGjX=nqSn>^L&7-Fz6BUmPcH(pGN!b6 zMxGGnmbGPfB@&t}6q$HhJ`r%2-t&JHQ8yl|=+<0yJC#vT=U};jYx^CTpNudXWVpr% zT5sN#UI5pcgCv>Lq`e`^}cOS+1VcSUDPsp(|Y@= znA#t0n8yg)t1r9SRzDRS#d^<^2*kmQBC;s}}(DRYM{OMl^=UICJN-S}83o!Vr`a^w2Al?c5N2nv`z~Nj3Ubq01 zKx@CM-m@~os^}1PDT5}7H!%2lvracp%^Vh~1@-OcQBHmvB%<&ObLM>U1;DDxyf0c3 zRtfYqf713#go>XswAh{Y1hCgTp2T1gELDhprsXWZ!t6`bzJ3|24F)#k@>(=vZAeKs z$YO@1`+@`fO=}^jHBy6`d(q2vOw2YCt!R<(z~+oTA71}l1XYGT6CzfQ%`H6E zVT^6t3-Vrc?1)RW!)xekTBn@M^W>?!B_99l=%;u+SYCLeVtPFrN3AhE8hT5=w&&$B zTigNmAnTgv9w#n1n*hu%9%;ZwZi=mk?2-+GZPg#l3*gSo<|h=y$Lda{rtSKA?X)W) zM!89={EF-k*6HRr=zBtLwiLcxZlU_##21P=GVW*EiTCdjPKY@Qed1fFekRof8FzP- zb^%Oi$LK{CK&{WiD$TyfGKYRX#K02P<3qDlb2-TDQgK_;t|_Ws_5^T2ZUo}vPxSeLP*B4cgn)zaAu_(VU3htTz@v(amVO5AC!E`MB<$ZB z8U>3QOqt>Ff5-4G)+><|fT_WGyr4Wx!TnK_bGXe|yW&Vr?J12xw)5;_;M<(RY?agH zoBPT-sx^#0&Sc)|;-e_XF;yHk?(iy{_jzlxhv)ef%ks&M#((-(+iW>L_Xr_ECQ%fj z)yusaRr_0Zgp!=08bOK)?H8c?8g*?CPHdn5Ug&`N*D>n{$~C#)xd1+hL$=o8wlODy z#@@OO?@`P7xmK$8LzZ-GQm5K8?B%TtO2XP_!Zi>6HX+XGv20L9~@=~GQpg+hKaVFe`GFy zo3&KC{IwT5(MD^T;r#*!gfMW0PY*S|9qV*+jKp#HHgZVh(Q$kk+P@>?_u9-|P$jW{ z()lM{080_{_w^QsidSh9vLO60k=*$UT50!sT-HA`q&|Z%phzCfRS{QYp7HN5t; zuLWMi_z2a#5`#h?k5IApKbwukF6rZ zkgLUo?CGf4DTaZ;HxBD;+%{HqpLT7uz#LJ0sM#o8{vI22luf*A+}3B%7n zsrUNq2$pkBpPP`V50VTPRL%ckr{X+$ zDr8CZE1+>*45Rkgm`=}DS!Ya_Buig54nEgj0E2cAtw@wF-VY#lD!^hg3wCL?W!Lb# z&PdJw*rPucF2_qtfnJyTPk5hDWOsvO+KJ8= z$aXs1D$WJDF#AMOgLYCu8_I-_ZieS~vR)~QEOTu;^45<$SB{v>pFHao6TZhW<2+e> z`&Aj&gJZWwmiUb6<#QyaN3%d`yUNdM980?pOF6{t(#?NbZ$VMu5B|0fZVr5`5?@l^ zx%YRTpRNHPFMm`w`zZs8bphNfZTHrCERpSlXBqi?FA|dC5_YPh`CO$5n@4!r6 z=5h(ywIqB zL5O(C9OHAuaiS|LZ1@`OpIG$ptlVy1o0Dk9p7fYD$UEv|CPLoj0%|ZFNvI#tY^4EA zPsr!T<76803j}=msv?zvwDn)B2ZlbMcy7 z44jC*{XPzSl;1}EVe@zatTSr_*wz8^c@5^=w>iQV?k`tW$89!;wIj}GWk{F&Xw3J% zj8fuq=Y8Lyl+bGaql&j100Wy3*vO0nv(`h^zZu56*qQ4{pd9*4{)dUH^af-fc~GTxSk+_xnGh z_gsv9G4@03p45R74>&}Cpp;d;)@Sd(s}ckP0T2Yql*;v~SyxZ300ir7%YLfmR^ImM zWxq zH#`OWB^SVb6xmJxxox4V78cw{j$M~Y>r8AZ1VPKV*kU3=PlhgTE4Q5>Wo{pu!Rctk zIyr?xO$m8ESTUz#Od;!qu{@tLQ4RKZ$+DBJ$B)UgJl_7*$nr1@O~HVv_-JVoV>avF9~rjcEC+woQrw z#S8dWp)Rh54?^IuSZ483^u)TIcd!}>|8c{|RK?a8Ziyz68?8sz8wr{aXodX{Vqs@z zi>|NWYZ2bA-2^UKAvd#hnX8iKbKp^siwFOo4>c3}JxZ+#w!l)!t@rX9Xu^44Ou z*5sd!#bZspsPBPFN}!nHJZU&B4fhz_&U_5=Y`L+yz~Pi)==hC3;Y^`>09@nqlJphB^AI76NGw+R zx@smMe(AdwV7v6tCGb?+(`5k0iIg^arC$<1K&j*lFbtRzwXd~CY_*GG82pJU0z4EW zobd$kzHOkY1x9MbryqkOjRId0$BE8*$xYuPP)G$cR0>6sV;h5j2Xu!xg(kNF&^jHl z{4x${JU^`S9mpMkOJ5`@XuhFA!s92PGBo5lu0!zpmLo%nsYCpRUtORw2un#j9Z0Rd zZUkm>F5c|jbf>t@WPoR|q44-YYXogo8A*XVR?aZ{5uUrag_vYNcWyk^0#h%ZA08Pe z5ZV=ejF}i4Goxj|mE;X7U(=+nA3+t}Qn{>U@ZMQrm33Ip)>TyR@I+I6Yhrf5nhA#VP82;h0ap zUXOwH^O!y@hNe%=hm~CqLN!j?pNMO{aHylcLV9aVA2|eCS1>lt_63cyFhuDiLob zv~7R!lEbl$ievG(r?G^fV1sBZigOvrxScP9_BaPqb}9sq<(;M*^l0)PQ1tr)|I(N@5LEr z^*FX0mq9)47+YuUV&c^bgKr&NM%!!!2#PovZfJwRZAwz@~ zqRUB+qo$m>y0=v2^v`jhZ;P4^iN4A?f6uG7ZXK*~ST&|e4vqCqwt(x8`Gf1naxJFM zYMHV5-r4nF7;)Iv2lVORqk0Sd)2AtI=e`FBV|O-37%P50t@MdO%H!~TW9%o@h76Ob zI`Dk~9|0MtS01&vW!X=qPf$kfAy$K_^;ZOzRr6apo#C+YDbc}1RbtdJq?AHKRGzGYKq4?fZ>jUjWTY&(y>^8&b?>QhhuYE;sR)+@5+ zZ7d%OBx&@6M<0RY!~9i!Pz!_r#gkQyU>N%qsM!M=x~J2LW*zqjQH|rzv#aNOU87oi zI8M*&JU>QDxbC<=xDAhq<8xl0gq`YUsxN+B7@2igYP=-?%0Z5F0bK8gGWN+j_dMT7 z9Q}M+V;8|TGf&2yLCm5(>YKQk@o)6QTQ-X|Zwu__mt09u`!imz982vbW`PJ>T~(#h zEIxX64fs3D-{5A_R83N2GO*TnWJUr33W#{z&H6n;dUzLPIJou_xc5_PbaGd+-5<-0 z7wka()I%P)0M2hAyk?hgAlFT19*YoB7oIC{Y&8O_QzZXtG?DQK*2&C%V)!<9mjcD& zn(6ASKhK5jd2TX!j?PC7LyY&I%i$8_VWl|xZgWP~6IUORv|;xN8&jeuKxwmlW5;7L zg+&=`afl$3#Us%y=`x3ivkra{GimcTA> z4^HiS11!;bf&V=8|BR{K(_`o;{0*;y9(?HA z?}rNZkGue`TL&#Ixr?lI6Pd$dOi~o$o=C=I4XjG(6C9{T0hoZ+#UcXjYW!dm zl8Mv>GK3S+FkM=@L*NE$aocjBqNb@uh|>tIik|z|h!T#or=-93>EAACL$80XO2bSo z*JGg-fLK1n=Wfj2x*U`74AaP)pXSLDi=N}?Sc}U4oVL_O;P~8ghegcGb3WGkaqMv$ zy+0SngQNGnI%IB}I8Kkf-VdgUuyk|$#QfoGcuYhuzk;pQ4QIvWZ<(_vxU!Gc_B{1I zxA?RE0ysNh{eD0;Bw_FLq29I+PbSX0IxsgeU#}|k=NzGu5^;LuWjhDb4XIZ|toan29 zhX+apP|4b-fH$P^U7=R8ni`8927`P++$ut;7r?vo>TJnvDGE1gLrhoRTzoa(*Jf%a zpbWfyFV_yZOw+vR>+nqCA!CD35!LHtx;UAadQHE>1UMf)o0_r9%6EOtXKlSkiD&D= zW<8?sumEQgEQtE$&6L(4y4GLTouapC@i#a#1Z?g#CVQ1sltmVk0`L!t0;cHVvM1#rbV{q*liy*X#+C-hn4wGBES zsa_KX@f-52&M_TN;}7DTrV1H5&>!H*tv|Pb4N2>0_#DwkU@_3fc%1jzH_nF7N=%=G9q)4PHUGkA!C;7Lroy3g|MFtrlXvz?uCZTq^!Z&G zJF`Wp498;3`4*7|*Ncd1Xw0|rVuROvPkrafOd*ImMJRRIo&nO2Jr6+IK1)KYtkgs%(FR(sp;Kq_)1=TO0G67wzb5p1GnKoxcdDb-d9U>*okoH_ATNexkY$ z+Q}p0oY%M!s^sW_2E@T=6#cwW`_iwd-eos(e);3`QK~JU zsxBfnb-C_`ee~ZmyZz8kskiC@<~KeaFn#enD)sb6bTD_=#c_HFw7Qt-pRX(KkFVQf z;Qlw>nX}nS>6dq%^2CT6e28=8(CBp!;V8 zqY(%zBxE~~pkmnt@VHi|J_EG6Ry7XwuiGheuggT48>NBl>09V)! zka+=|1KtngDe>2T{@?$v>e%3MuwZ+5nL9xWa7`AIYEEV5$1Oc|QVh;Zk0*p{UM43mw6tEn3c`)r=;wf0I#b!70tb6jmP#PthsfPa zFXxj^px)`xsqeo4{`laeU4wE`lD()#u=%Rn;d;Ii7nUkAx>jGHs-~2+uIOcPO z^Df!-^f)m-Ky@+HX8E3KeB5reo5ERP~m z3fB=;;W6LHOY4lC{v&>?!i8!24FfYSfK?upU%7V0p3*AST9?dCdAnQjMN3(~h!SWS;A0Ywx(5Lz{ z4;)RKU9PbBgN`Paa@D0{8A2;AI?9>H{kpm z(&GwgX%Ho)=}#ObO?^q8c&_84K*Z&gxfa0sO+zBQMet)>BbwjOH3VfXqh0_f6xLh! z&5Or1d?773+MLgJg^q1{SRN61ZRtzP8rOh!fYTpN9&+2Uw~y_qSt>K^;bSj=*XGGF zsjAsIYNiK;w>hXl+FE2y-qZqKxS(o_L6cWVi(a!-_^@}FQG>T{pCr*%%Lrgv{ z22~)$Ov)%bzRT77^YUL`f&BvULFG+>O;(XneMxiD1IL9g1}hf>hq$k~{iHj7-oIp^ z%|~{h^w=2*%9DMLKxeD(H=lF9&ahkESJDsW4tqRK4TZ*C zreD6Um_K#H;@j}!5Z58%hf=+=X*DJ_c!sR4)EM&3ianGinGdh0_4Z_kE81F|90N7z zaXWq$$=2(;(L9_iBXak;q}kQtX#;Ssk)1>6>#${dtT#$cPd44 z6(e39Wh1TPT;RZr%51-z)r840mf)a#laVtAlCFKfN`~TQ42s4wgro7F-9U}xHAlLY zI@70l;BFL)fPDcRZ3vs?^!7$>+Wdrqy%7YlMiIc!iPYPI%d8W)r3>E$!UuZ6B%cDF ziNoyJ*Dry?4jl3L=b!)j8rmxE%P*FQ)SudeJFXAK~x!8Qj$G{=h=Hl^tCd6}g>(SrF3CqLx;m?arvL^5Xc>8+sva@kBTzwa4 z`R~mZG%svDs1`O-UOi>>i5M3EpH-RVGw-jLD-7F&?ChZ=WUBPmx{u+w83QA+4C82c z&}sx0W9xe)-|!SLegRB(3^GC5McDbmswIudczGzLh7(ZXV`~rGY#A$atDgdvwr=}b zK!v~Y{?8@wSoW~F4VBBf)%G_nw#q(hHJG(rhAWXms{5LOh@k$9L?b+U@Mm*M*Z)m% zx|!RbMVy4@_et8?^;xARZPUxBmjDlcp5T6qSXHRamd^lX;q|etn1OOS8tAV}wed>@ zqX*vnjx@$-$~0)2%Xs+Yu{Bl4&1#;E!>R1GZ3I~VhB+YUS(V57ISNKc3PIVMxhlr& z>~X1orzUF(O%c(8=v6hnx68#U0U5=2zW(`xbtctM3e}KK#k$1Ds;GQYO73DXd0Y7z zCKb;U*XhLmf0%8qMQ`tbI>A70G+aV)KT4WkuWpEN5lje69|z2TEYIoyuJUQjqrx|i z(W6mY=rOK5?Z@Z7u9!c*UJRdC!!Rw=J}_xS7_&sxr+>FL-uPC()z^AG@%|p5bED?V zuH-%^?ifN#im9LT)@%*gb1IIPNb$xxRhU}oHz5uSl(WNP73R`SBD@76FgNiipBDiDt%#&#R2e zn$0H02-^(sm$ufTKkxH5GVgh{6!V~5$b*0EhRMf=<(9`o|2bQK|L&5p%v*J196Tgr z{m|rZxHW(K>D@8JC;pJrnjyuoHv>_#91m7Uhvbi+4QaS*MK!kw%eXYrQK^3T^3_r=%Ec|WI*_oK6?O&O#>Dvny1`b!=0JA|iRNzcVRZ1x(c_e=A-BO2c2gP%iB*5e4DKWmJBcBAJ-IAg*C?W!iP=uu<3 zt*AyXBiQpZOW%cY71*ujdk$5fXZp6UH??j7$D5bH;@jc~u5v_^^VbM=B(_ZM=zM4! zWNbBQbEq4$>YN1(?qC1&a{+9+(KG1yT*MDCSy*etq+k^d-bD2Lb^At7f#Qy|g{oEQ zTdYH><^oG6ALwBdzXXmp#y*lY5-G7npk)Q*vh|5c0(f*v<`h4KC|f4M<#`ZaqT$V$ zycGxO0ya7ikS2h?@a>a>IVs^2E4{4n5U3H$@m>bH+2LIJ>K#V!o;K^|tb-MSAVD05OD;YRSdy;A=ok|BPn` ztJ+ubXEgU?vwXw!;GApqJj-_suV#(+BWRB>q_+t|k5PU_=x-uIY+(C6V0gbd75X6m zQ#SP+4$_{6hP%p1G<&utyvDcV$0ME_k?F6TZSuY~X15s?QvuM``?1Q<$XB){{>;Gd zh&KXvoY`Qz$av~`-+<7AB5zy*n{UVfap#H2bKQ%XYTpz6tQ>WHpV1em{f#@A=3I#(JE!t;=r{SBAO5yYT z8$sh2zFBeK+Yv_zvjMNN1&iT7BdLVywLo@GLPXWYoKb5 z^7mvm|Bt3%RWy**2aiH}Il)cSl8<8DPOYsAUtuA|@YQ*dznMepZuIh3TAL$HFckdC znJeqNqAgwk?~@R+kRtS;DW|T~NUYP%>)T%6vRJ7Yt2bkV=-0vPAKX7MTh@yPLh zO!xpAv&6(RMXN;us9^Ss^#w39uE4l@?C_z*1pfdRzDU>S`2!Y8yvGHY%7X9jVO|&r zMYXWGR@c}$bj$XxC#>*vh1@z;$hH6OjLoog)WPU1zzg5Kq#VmYdEgW-lzt4WeUfy0Sjl17w2dvY zo$!f8GiB!Tx1jJ|744%X*DGaLqw-!puqY3M6jLBU8=^w0D|Xk_YsI@T1kWkcLx9WQ zA$a7Zyz|gX;Qjd7I7&Q;I{04Zg>v5U){V;9g zMmet~2Y^vAazVcEy zP?){^z51i6!-@(1;|X>2cIx;yFuh@u=u^LntI5EJhd&pi=p|0nHE{}u_fAn1k#QNj z#=2$#MSXxNHS@MFQza9i$;;HI^Q%DKajD=U-1}sF&js*;Rj1z1%)io+=(IH6t)hX( zSCK2f_LAFA30h*m06uaTvu?X;ZOumgb+Pa`@ILQ77x%81i!_O4?l(4poG5V6r+{@} zqp|X|fmxS2h3{Xg0;E-#-^VLQq)s#T%%#@Yr0eGg^v%f>qkZ%lOt+zVGQ1$XnRQ;Qp^@HH77)G zY^o2;I$My4o9NGn>N}=^Y0-OWk}g-C<#pAKL@XEZl#l6mVY>o9>FM9i8Jj1ZZ;hDD zI7p`gxPHzTTrX1JnJIf%7V6PNf5`W}CyL-9gZh>mcm5QCN&aCwqu}?fVefFj%@d30 zckoYyeq!i*zCL|nH+cG<>t?)wj?Rg9>)6dRIzv2SbUnecOXaVH?&+Mms=i4X$~#4a z_@$`lSD`hlj`+%Cj-E!^%V=M9?Wfewc^cN_fM?bEoW20|o590LpX|?-voF+`W6ry@ zy=!ttTOI2&J@tK*KAknc%c|eh0a){C>;Frd+HQ-5@ zXndZ;^y_RXQ(K?$+9yi1*dPuUz^np4LWc+1F|_3oE^i%1Iun#% zuOI0*A|7_sZi<}L%Qg;;c`xFB(5c>(AM07B3J09!_b(`9zsFbQ%QdK!K=w~Pc>z#v*1La(76Wm@O~wq>5AOQw*nP zv3#ECkFRUa7hgZ>wKi9^@zSb{`;vs)FzC1K2Zly2*sR6gd~?{3o@L=&OA$=spG&Th z?}us$26H_pb20m_IAWY;O0AF2UJnwU39^(uTBk*5c{8 zSuAaKYy3Fo1##C;fJ-wn7#+A@o*;c++5TMkTL(ky=Jd$17r&8yv1XyBI7d&%^n=;@2{brIZU`l2Gj1YcVs;A3O_`Sh*1H8eJlarVm%X$Q)t+of10M#WFfv_L#)Y6|mmoa*9yufX+w208wB zI*lnln8D0OcR9}}@aASj*>b)F7TxlquEyoYH9A5`mEmzHTiaM|cE!U?^KAwNx!-pb zkgBgJ37#oYk2i?jaZFKe47Q_sOt1D}T-pz;LdWS76Crr+`6d-J8sL$A1yz&F>86v z_Q%&3PcvUPHb-kIUgxX$jfTtrGgR#w$8*(=h+F{w^Ur?=vrtbyb%?~rc$S-E-dg|O z!89UTgCjmiB+k}g%!u(?9nbj<&B2Av!k)r{3&9GiZ&==GNVA#0G|Bv{2Qfl*v53)U z<5XEiD1P(Ocf%*pVyDo2T!08Xgprpe7>$@mc&RNYW!9h_|g6pRwp&VWHrc^E; zyqFT<@6UEKjcn?_PVZW$sHPZoO0JZHd`g_a@DmAVM3@uqpcAsa> zpAdl__md9^G!{%BJp#~0bkKtiY*Bk~&`9UX$-aCC)_T{XaBi*DO7ATWQ61KHPSWpV zd9lS)E0N!_e)u`3`>y)NwoR)1$F{hk25U(|vah|UwAi1|IX|}89uU(bOUY~I%D?>^ z=S}x>)$!^Itn)GDrp=@e;`}}$;XnO**yixgWb-&yy8Jz`JE*1(k0v<}Q_$MIJp}7< z*e)|LpPStL%E!mB^RDc(zPod9F&QCmLxa{iBF}hbZ{gLv1|~AAJTi10Q{`2mvpK$_ zd`*mxL5bg~^Eje&$cr40#2R7bLBLS-E>1Hw&qeJYexh@~u`NJC;t=QpxVM*cAuK1x z>I)yErxiNL`x-7%5|J?@w^i3%J%uba(|5W>Eaha;>UhndT(Quoc+L>;1!aug{&&-MPuqT-nS$?{uGy8(cG#{2@Z+fU| zW(6Ag+;-EaPUi(+_e^vw zNMpT*#yyi`B}dwDthAl2+t(LMHD50jMpY=TpYtbfM_z-E8t-5J-itwlmjgdVv3B{p zw-(;MB7AT($#>A>zNdJQW)N{cFL^%ZV*^QfQ0(XV=+4ne_NEz`Rxs&6H5`S)aVj=` zHt2p!scrt1eFDpf*|&Q&o;8NZ8-ehQ7r{i^9pEB*?x$j?a95t*XK%Ngc~r}aD%{1g40d3;m~xU8viV!I=~Y)5xb5+PI!$~A_uWp5L_VBMcHxz=h0>tqMT^f4Nw+Jm6GE}W|A~uwaq4oS;=Frti^1-9UVU{!@kT|}z(<{Xfv6((~2;dOB7GrMj9=sf#ijv`!?Qg8Iaq+x8o8_M4DCcA@ z^WrzRrmC9p{kZ04=<{Cw*`y#7Y4##)s`kV@kN|Wg2qkMwt8cqIx!H zCzBl|SUL$j8YdtLthddKmo*6ngDS%G1?}y_NTc@Jn*T~et?9;|yu??t84AN=D>A1p ze*b;Hng9uOS9vRm0)<2KWK&&xvdp z$RL~s=`g4RN}czrThy?|kiMSJaf*(fi@(kPoNm;EA}5#efBOaSQ!%*nSgSu=U6P_d z;fvZ2>REPMJAKm{+j+;FRFC=HtO@ivOUx!aXKVRyswJZzxqQ&;mP%|cu9^6)AN#$& z#`i7jS*tCm41O=Q7kmU_dK_G%@=Uge)%`9P|Lf0lal>+?4X6BFAP*rLOE+XZ6k$Ys zwOV=c3(a-de_>a-liT|K%})V8Z~?5H9*qgI{!+(E%5hpqJt3#z$RuryIuSnuBrbYA z_xQYa3C{gfaDB|`?JI|l#iqprX7?0~6j%fuH%h~dzw%UYEWY2!^LJv>>fHJ- z_R*EPB2drS$fe_(k-=x*B+7sxd;Pr+**0YT(PktL(I&fR2JeC(l)kEys#x1mBi(V*fW)06pK7FGpyJTN+zWtuztb zX!Z%k8cDc+bTOg=_SRoJGe@=0%K_XfIiS`wB*|Ui)r?`kjVtIbka};u^(4g=*Vl8C zD2Bp{kLJ~Fkj5_!C>QU|Q@_QAfR8q+5%d*1TqJt#IyMRb^Db<894KeX%FExQ1Izp8 z>x!kFuQ$hsyEjE@eypVm`eG2L?uagcRnILoIZVL~6V3bW<%)mi!rKhHcPTuH?# zn<~EI&BPN9+Y~dtPXmtg7c;&wkaKvb{A|w7sxu+wHPCy9tZbihu-R;co&Y}DdIp}K z2sKQ<@nS;U%jRI|4=BBDxP8bV`@?a(>EL{uVX+^(HfFUo-bWT2li4DNJj6TyS>$j{5jWh0ArmAvm=g5`h_@38(rrAx6f zd7=>w&=4p8G^Wm&Pd93@CqLTyseXx0%+BT*6t05b{a$a)e)_le&BA$oi}~CgSYXc4TzuZ`hKKGLp086B!B&bO&#APVlC=11HUjq4y#1d9VzfP)t$Lm# z#8X>FWVjo0)SX^3M4L2duR}m@6f&rJ-+Gg(nhHuh2XxGFofPy+ST5t47r;`EWcumr z;&a5;8Rh#JS2(%t^l{)ZWAlZ=t$;B5?cKH3ud4vn18a)&oUPo8#nAQ*(TT`VQBZ}y zdyUHDAtycZ@Z>}*gnCpOeLRtA~C;z#161)|@8Xw+E-?J-gu{zV-iM z0Ls1OE5hCm9I=r#N1ovZT)6}=S$=w)&ht?Ds9XSV7?7uc$I~PaeeCm^Tlxv$qpf9W zvw)Non}ahEs~;XTUrUoUgHTI_q9&g+y7bk?}sUJdWEok{K7GE1()= zeIb!A7LWUl0{aGj*y@P-_ABMOl+ZIo`y`8P>(l}{ge}n-57o-(_1T}3Aqr-FyV)(^c7NuOxiH7)Bl zKDwXxE0;PMD_PKNWCJ2jXD&vpNz@fyj>Emz9o|S_1dj_fvg6NiBH^iDZ7=5SChinm z#}mq@e68D0lGPW$7TOhSK+AhZI^lfRlJWTKnBzKQK3Hph)&;QC;b!}paeUe{n2pia z-!G@Rc^&k{0HJm|SGbS=xa6d@yM~qP@W*n{=k1G*N`sG{AN0e~aqJwnDGU0~f)M3% zZO^AhE}j&Mrj-0Pe~dlb6PxX+Sloj{$J|M_X*Eyr3Z!bcQdF*p8$Qa_M=yb;R)=US zqFv02a{(Z1R2)WOzp88VX@$R%GxHpDJ_erx?wOj$C5Nu(HFN>Ispc+${X`h%&?A)= z!=*KM%~>coRhUCUonzKA<|pWaDi&*kS!}TdgT+>?L?+_qk@&W>hB?;nx(SJ(nvHH` zeB8%~wR#L2?^%1+_@5H3l^hJZmDJEPMm>&5f*sM{AL$sIoFtS_s6l5f(hG}tNdv=S zOOOQg0@&O)#g?Bb8iMY&!%oikwMkI8z53ZYzia+3%dX_qg2pn%310~hhpo=C1u3^I z%^J>i8y_9bk_%uy5N%>Mp&uwR2{#tc$ z26;WU?ld!VWOYoU$Gs8W0=^g%%bar`Q+vhv2wieoQ4DVqJPrhZ5nBnDzxxtb5wz;8 z!LECOczcw>pXb@msqJ}qU<%R&*Z2S}e7gH6bh*Qm%!=?J0We0GWCx@-kAX~A&sDi zwa;Hqen5c?sEllfEwgjxFzIVCn@;VJD@OD5Jqc{K;(N&aosz?`{?g+*PZI-h8~}dP zzZe`pCvG2Q3;SVU)gvMr2TkXRV$26G3f7iW>0-}chwkDSC+az+78Zojg9FC2#~Svz zRupi|wVn0&wUdk(-ku}r%QIIU!3c%wG_0!132WUNcS<84ydMloO;*aU78}#eWFWe9 zRIh-|(JSZR`Z-~7AM>omoHMr~NM!Dwz>{gi))mW-Ong>kd^<7xy-nZFfYRH8Np4+5 zu(M|^gEK4zBc$({zcqT~Rv_4ihebdupSzMd;~Pu;OKc@wt9* zdJk&6*G?W-3_{Wzms?0n%Nm=Pk6pZdhcB6zz_mwzUI|_2)pN0q<>LGt$j~sqC}p5{ zR)@C1(HApj%VGJV9($w^z-oVPhP3XXIK%kZhPjgObD*EwWj`r4l;RVv_Y8ab@^@oB z%psGJ%_3wEtha~FtZFvufvSY<-59SL**P9-f2@X0wsPkj&daVzIsBOOMWay0*1XpH z`Z{OJfs3c7%p0JcMyaPnB(LEtLI$FVTzYdH`(yRsIs)ngMPOB?$&uFwkMToC0tXVZ z6Ox2SO}P#|8g&rPq!`AJHw~viWM2MW+gPneO(6{q#yHlLkKE7c3p%k6Yq6}rA)P~H z+No#Xs5h49nfR>eRQ=^CRN@#OzyEy|Bm4gR1moA9mNB83eULL=kEl)voS zV)%RKSmuFzX=0EOsZ-Jld9AP=hvW6jVXi9;3>>{g2a zsz6o0qhiy}Abn*Yf;FL(Sjwia} zarg){$VlI%pgqNB_X=JXLNE~Sqq$*>(?8Oa4fPvwsmP>pq#8vg4Pz73N%NiFMyABi2WyxkeON4Xt9W|iNZU33`KK0P-JwDP@_>c>~T4_>=H%fNgtWna{-l|DMbVKl!mLr7y(~u5qmM^< zczedw_Lr0e$w6n$Lz|hs7wNjFa>*sW{KzAF$pIGE4m_EB8%JVicKnfB9?FsgYGHUG z#6ipcmCN6||2yQ^*8n0pTv*QY=|U~ipnWZ(7MA*#{dZbQ1m?H;Q0fi@%e#EeB+A%? z_OTb-3rkJs2ztPx%p4`|*RPd^cX)}wb&+VTI98(JGnt?qJVN-fw_RM?Y2NiQ;BnHM{Zp9sf@yNu027BX-XDt9Z`-W*$r zr@XPZqvk>*+qLPr6(X^m@eB&njDdZuH*vhrrvaD>A{?}F>F{3@zx%!7W@ep0^W~)r zU~S=)nPD3#K25aKEM?M0GDT9w-5zYDW zU6;T};m2YzBlT<^a!9kv31{^ir0e5vqdi!D`D^9qGtrrw@p-Xae)#R3_gAj$O$771MwqxR%&xx8&Uhf}eB&Y?Z6_ zwa#c^lb`-Y`aJ6l!nXcI&iXkVNimdFU-ugv_^4V59Ah3YEXH;6b+s;5)ZNFsMMNe6 z58pi=3FN6aqJB17P+gie;*EzKKZqR9uC*@rFxr1XTY>_a_k8dYdIw`DF+k`a;ZHfE z@GZGioXm_?YV7`YauL47nfZ%(R051xd>K@{1;4?NM=t=!5=YH-xJ8kYT{F!Ay4Bo zG-R$CG&jR%t^4EC@hO)GJ(6qVLIT(?=Y&qYJ`DYay(j6GAE;>wxgs5LAgh(S>z@YM zD9Gbb^Zj`Bv(N!Hzmoa`WaB;Ld@enwHu1&<@=Kbk`|qrj2&9X?amMp5FBh~RFg)&E zqZ`fjm^}zSMsdQS^ZO$=~Nks z&2Q}T_vi)BDm9s0c|O(IVjqcHvF~&4!e=KEo~o+D`w@|vlahfo-1U|aF3Xsoau^7% zb0r*BSo$D*R5v-(&{<+!^Hm$sYf@9LjKFglWXJ89{L-e5Qlpd^l7m&S8CC2an2iEv zX-F#oVD5tzZN!|bAB3@IMf)YVl{i-E?rUvpN8c+PEXnz^3ahl<-oNXs8XiYWGS?Ta zb*Z2J9neJUK@I_@7M+J|c+%zXo@-9u=bbU=ICEo+(Vk;7hx;5XnBTKf`Wii}`Cm1D zau0=b1@`i63JN{2i0LEu^m)Bor*QIOk`9+F)dj@k7r@TeB=RJ%*&_d?okhgL@LX3B zZPasCk0?8A9**;>!jC=$d>UnKTRwX8eeYfV^S}O2noaz&DHdR_k%|VqZPj@#>v0K~ z6bheSR2a6_Ujj2|cv98LI)*Z0Lj*2;_TWOkt8Dqp)1Q)n>|uXnUk=R3z!61jp`-M* z8P)Jd4q)K1OJM^Gn~qKkTbko1jvSGTpyD~}CJ?<=#4!-DfB2_Yorq4zFQ>O5c9o|x*qJ#U5ZKIbhmBO>`S_19@Z9{>O#07*naR1|P$Fk)Zw56PLAE`SSMF3{^Q zS~)ycQZ2`7Kz(9SVJ1{9>+_NqgD6Heu2~b-{(G0t@Z!g31*?qCKRi6vtTAC>WUUZZ zlj%M{)&``_JO({2%Vey307_fO2QVx%KGlr~b%4Sc85X^2@aI4Gr^VkSw+jQ~8XiH# z2sBNUll7Ly(}1E-JPec%aKk=T1A7kn@G1v5>Njp7B2CvUHXg|dZ&#|Etfye>b&E>t zC}Mo4V9Q9zOUF0jmSzWrb9c*|#?oXwhmC!$SSUWy<@ZIIfKMBm5$jY_FxuVLaQ923eQdn++QCY1R#K8p(|0;8{pp7hvj-{?r(;aZ{W?1~!Y7{oUF}<4 z2af#cEgBVK;TJ`b+z{ptGK`YR<==bySDd5L1@JftD6f2B%UrOP3gZxWJafW=mZ7$oMJ|3k zh?#f>TZVGRuKDC;XOz+FadUlcDYc40$bWv0zI2-FloK%L>$=eF3a7niH3dDxt*|DH>yu>qePw zKF7f$`8ySi-^&G(M^n`Opuu~T)o+0Q45qY9bdf93qy_F&G}=rzK|=;(bn5;4Bz(SqZ|#Sc8yn1i6rher4ggpH_l-hFnD@~_0 z4y*N9N{xI7^L+QUM8`O9i?1R%Hs^WI!NL2_jQGYLfx-W@tiTuiL@%CE^O=LKCKr42 z28Tdos$?#Kw2a8a!(0m?c6I+AuB;YVZQpB5K~vo?eHC>3)}E*9lWY&k!FpuqHPFF4 z@b)bXgXtH*M^8x82V-V8Ww7E#5MOvK{VLX4Jxf(@P=QMBU1Kx_N6EY(r0{Vm^ztJO z=T2q+{C5l<9!>{QD&Sb4o|$U}+ZQ+t(nRxOG`zGf5aVwV+q2@ATmZAZ;E}F|a%lDbB?edzvfBwgRWza-A?F!Cy zMLH``xfg6$J;cn@zusF*r1Wop#}eY@0{VG<0lWgk3Z1oYx_-2?;QAGmS43{ao?k}- z{2TR~e){(s@WIhT$#=FR-S<5of^QSaj7G-nRTtPZ0nXdY;d~wk9f#0>180uUApl=G z2#=q;?^ivFtdhNE zo6{`NSpJ86pjX;iE8DfN?9Y-Ik#MalpvR{+Qu#(c0laC6a1fdAOD=#*)~lPvAsDg5 z<~Oxy7R2y~lUZx_JQGX?XloOr1EnTO&c6gsG8CLl#kv}%^8@h`7&$OQ+DI=)@+h*m z2=w9l46rY8T5#dX>9nr4&BW%xu~iz#jlz@BSm*b*WV`jm3xhGzgwXpvwH}?P%H69( z%LVY2G24F>(RHB}H8Wg33{A#+0Y>Lr?IAiQ?&+0p^cpo{`*Znw#-Zw8BKi7{HMg4G z(`j#?kNpRD?nE%gGp-+rEa$%E+&;D%hmKW!2S)6DBNxC`Jm@8&LmxtfqS?^i$lyJub= zTv3y)Uz?j_X;_UDtFigDB;c1)QjyEwdd=EB)}H>&ceEoI^E)2~W|x{2YOh+?+}4v= z4fjyZ`~ zVz4#T_e+oM1f&H7jVd>Mktdv~1OtTAc{*+0=ecr>R@ntyZbY>0rX8PJMdcrP2`q6S zogFmR@Xhu$Y|#bq&^GP{?F-@gR${(Mn#V9~3#@}l+T7X6TiMaK&EGPcgxU8~E`hzm zF_(8v63{u~p^bk&=O=6TiyYr;*Z2H;HV(;tBVjFMTNeq*u%1?j(C`E%>!6dx=r`r0 zM-qTNH@ew)$@M2)Ld&#wZ|{DCo8^^cElvEU_2&DePqATd$fLlHKbtUC;3nTDFM!{= z{FOW9C{ye>VO6W944bFh#c%nij;(6@xhXh@d_LF*dE1=PM;0f`k}Z#S20hN6id(RDorA<>XluP{ub@ph_u?J`WMKh&hZ?+=W$HM0~~z#`ZKVC zE+vbt<0g8pz#+1-`P9@j?43Mk%;Y{%)ov%sUk!2!)5KtF=#O~{I5N}J{x+xTB9JD+ zCaNDFx9?j z28$?rab)dV^6$pS@uWW}cEY(d+FKBp8fdwA(3G1_-eEFQVv0+J z)IYKC0sVFy-nI{MU#7^WR3tqVeLJbOX<`)!76D~A3QuEv%mQ`Mve_Lm5 zrGF+Dq(Z0oRUH^J*r>~2VOMbds(!^JkT+VLVz2{d6cH{r-owh_ykqhCFJx%#*hl{Q zkqW}`^y1LFNF}AxTk1nSE^;V7)U?oR<>Q$ozfZNUQ97B$_sk36&6DdMzWiNb>GjV@ zeh6#%QD(-$s+W~0(r;i-|5lgV|J<*(?)7{9v~qj?>jf*y_&+|d{;U@j>sDC`5Z%KWcL1dqk607FJi_nWs}2IDl&L1%BL_+ z47P^;xdirR!QAH)VH*q&7r^_}k>^jQ-8ly2F3+7;y90f(sJ)7>pz--IGV%BY@CJeZ z8^K%%=NhJXU@Vl6T>>j0npYLCaghrWC|!DH=?D{4(aghr@+_<__MY1_3~YC1)l3gia4$`}s1(9E`Oo#bZf7_@N=_1IUn(;<{aJUZfe2O)pkY2gYh#_QQ)x zqgP6_17{kPHlRNIZ;0%Wc|gxz>|0`i;<(Pd(g-CL?XTq>(b^ZlRWK49&u|VZhZQ|BXt|Sk5))Dx_e$Ve(rk*S<~{c7dS{xj+mdw8K)LD-Sy)#{%Oen7NUhGKmc~?LXbjdt`N=*O$QP(1Dfe7rVQj&(=&c zHdec8ZV8clI`! zT5Dz~AIWyt>~@tCjZ65YzQMcvJu<5L;*5|RgI+WKm4a%G5Qls|hq*Wv*cZTukaPij zk*MnN<}*5JW^zT$`uz#|9{=v=`OCRnUhP+0|FNBYv&WOM1LcoMf&f3t;%K#1N4Yy} zwYB_U`TAG>GuKI(kIU8*Jm3Bk!Er_Pb5m{Wt@z zDMOgUx_n;XwViZWL)z!C?~$`dY!pb^=VwiE-N#DwN+h2QhDJ34+QCw*;PXZ2KLJ{c zJX_%}dlj@CyKQqfCO|fo!E{$w0yPiSdeCGs1qbDVog0Z4z}!&`e%ws)boZwz8~41z zy|)w$CdxD>OxcgozHC(F5|{?VbOsLPeyEil6gty4=e)36y1M;b!0~FybT~ z<8M`+yVu)K4({yvO*~?Tkhx>V)IV#DKrYSA*Os2>ughO!K8sIeE3bLp z_y5w=7uXvAc9Bx^zU99A6sY-TaP{cOY#f^SziWiTlsTs z&bRq~WzIf8H7p`c4{>h;Yy39|u8$wv_hhh+d!@{PVLjD~?{hO~HIFW5t^gmoeHnnh z6yEb6t-w6SeMF+~w$JnVgm{?f&Tg*lyZ7ISFtY6;zDhD04l@^#J(>vMw)E>m19^n@M`QP$F3Ctn>Ym@L7zBm%q@$S_w59duT8;&-!&fhx;BMJF9Q# zIe2<1=K0&}C#vR@ReixrOnbq!m2v36r}ZE0dy4M;0_m(F($lf*3Q=^RIBNaJSd@4_ zkB|#s#J~Ll_=F{01bT5A_WHtJSPC_J`MY-r{d%xdY9yhuFE5y_i_bCV`Pd=+TQb9+ zO&44hQBmg+EBzXE_p`vB7038BwbYA_%u6no0Qbt06ngr1e{Exj!E2#B+NjTU|8sfv z_7@arCnp0jJf2$Jbr=X48FvUC_6+hn9qUXgtFU44`Uve49q`(rx|;7s z<51U<+N?fztS+SFNAEx&ZtLd)}Lt>WuN*3GH-4-7r+!vA7Qa)rId&)3r94^ z<}+oU=H-ZlXSPS4KFq9pPLHojw(&(c>l!Yq6y5uLK9xn*Kcu&)_4co{FZ?5VBo~H$ z1FV_%I6nWiYPE-|}?q2I-Uk0FyUu8lM7r@f2Z;G7EcYOh@ z^+zr5eB8Y0<$XSs&#riwQyI+5>3ZTh;r4W6-M%aE_dWfax6WKy=Q4;2s7FK}LeGOh zVV&F>>MFOj-g)E&yz|qn{Q3*vy-2|u9WNL&h39O+rm&EQlEaD2 z?Oz@z9%tj{_1v(ICe_bQ1zAOj_dpooq=p%G&k<`EKcA8*?rTai@~qDnZvS}@wW9bFcAd?lHbVek{zXjT_|Rx1U$0kJ?QK?1wjl%Z)+O zMt|t|V4%~2Os-5Ds}(4Q|BCc1h7)yuo0k(v4EBS|L$Ed(n?swP=|nX{vi2x|)vh0` zN}s6xSa&`Q<)oS9-dwjWXzfzYyvogyxvinvbyayh$E6#~lk9=p5`?QPTTN_b<&@v* zLTnD}7oJ+JDHp(fU+MJ-(wA5y%!r`g!!PKF653{H?Jb zYl60@Rg42q05|bb)|{tz8B=FJ)SCYM>!16&qu1^w$G2|TI|TIg6I1|*akaowcyTC@ zd8EVGM;+g$>@a9cAm9xzqWhn-p4W)-xISu+wLbGq^tBDw5ceye<8^#Px!)J^=4Z9T z#i@QxG9KgCAa{nN{oXA8dFIrDT0xuNm9RLU;?u;%f<}WGZhppCE$JYFet+u)u-@%p z0UP`p_*t=9V%QL=Yj4QpUE`y4He+`Q1y@g1!xV!@aP+n^wCNwQj9~Q}F#H;K* z&7!E{Kl5ghe}B~S3|t3`+kBQ5DCu{|q6f?gDIdM28Oh=8&{4XSve@zL^329Y0JI&o zw^Q$q1JD0u)JAdK4IkE1T1YerWAwVCiVs)A>5fPe7|1&h1EVdW5)A8tB57H0wc`H?F zN6S>5?rQKyS9<~H#1#!tX#xdThNnNfUO~FZyjSZ(;WbZ<4HEn%mTj#B_1x}o`5!-8 z@G|PgVO;=wTI$aaJ)?gmOvvT$_QnAuRrZT%@9AIRZxI)~TMsApWheY&svJKYDapl+ z;ccj82mzJ>GbfLMx5!GreBHLI{`eW5?Xip3$t$yRJh*u53H`WnXK_Ebw#nA{Y1H2w zq)o*TRnDgWs5Cc^QuZPpNM!FR^B?yupJzX|nK>lmXEqp_Xfk!hW15L#R@b+jd(5*b z6xGrgxFlh-%)@xMx|lu}79n6_^MDg}E>YwRP}SS=v-f!`y0?Je)_l;_JrnPMJNlP+ zMP+!kj-<@=7&hk`ALn*yMb*F%i>V`_y#Q{z{z<;Lr2IEs0>>MGNPWsVn=ma-BKX zY$!kQE~3u?EhlnulKE>Ts=`mf+gJ2)zI*i?2!OL}co)Eix7E{N}zvcpXFYck+PO1D)1`Wkhn=z9K$ae#Bj2FNr zAX2-fLDXyLG2%`9s*6sFOkV=`-O7AQ0@2D9$%>nl9~>RGblKYm*6mz!{%C6tBe;Od z?3JJfb=CQb99C{?bL1)GH$v}G;%%Eb%uLnqPkZGc>iEf-JeeaL55BY)7heM+F>*xN z1%%a&K+m@pF5?h#Y?Hq40$7UzKwUQ!CCH1rmgru$HR`3OjOlb|zbwd}JHY2W*MQQa z14RYzr%RO)Ru3G7e0)sN`YqE`3utpm5GtkG4<9oynH}u6wS4!){swG_G{T@+`!`gMh+6PXTAHWK%P? z9URHOCjR|SIcc?x;5to@7r^^k8OU0fXTK1A=TpEwZr61|0BY(G)7$&7(0_&~ga@@l z%1MiDuR_nrv%OoAv!o-EIM_Xi{`J4~`c)zo5TLYT|(Bp(x3xkWaGKw7*Z;jb z2#S7^1`?&Wsv7DDVE*5KDc$JFxwVdVpUEw?d;uH_XJFzJQ6OkMwQ@5~hN3YM%Lk-? zYjCJeclMKOIL|c_$OEKyQHW@$WqOP>w}U|^122WD2u65C|>~YYi1VZ*Ot2TLko14U75Dng_B>9-5?195SEbXbC5)(p%20n zaTFL+L*@7PXPcLnvjAX5BoxEbz=xQ|EsGqFxEUObzl5xob0r^q$o*e%tBw1kHK@|a zwUvn=?O!6=#Ng@N&Iq=Ve(}uA4?dFX+A5CCHjPY$1(F=$OlyaAyppl{v@WEijeOQI zjq70A2`<^)FS*Dk#F~wabPj{gGbdGAHTMN@odI1oU;!Zg1(jZ6e0*bGV7T;PcsQH& zdK0FmydsP@0g!v150H{ZsJ&#I?VksH+kC5PRt!Hn!FcbF8hic|zTnh`ufox6SPguA zsw0~O+KpRj&98QWj9)AtK>SPNnx(v0vAJ@*!g%e!{sOqH4VK-$e(yPlG%TVkA8lH* z(93)M=AeJP0M=gfEM5Sgj@nO*C&fql0^CN8;`4M}Q(CZ@r_Db1qH3hWm;^7-A7CKWDQP2YANzDS#n zUe7c5FcQ8A3x+r<^%E|Di*Kn>ft2|((Npv5E`cX5y7U|!dG>gv^PN=a&5QUhokp&8 z(X=A-9B9xc=RQdzjS(8a=3oO_+kE(Q-NeRXs+2u=0SwVgA24ECTPc1+GZ`QSB#a|u zo*x9`iI5JALC$x);`g=>s+)W`x}-fXf@k#rad=uJD`rw|l;;Z~i-$*bMCa4o{xo|g z=UzZGXSF~HhappZf%rhNDJaa~EE;sbrk!@{eGF$vfEGXk1~>c!F)&1xTmS$d07*naRFHg-NN%hcik`UqEfoCo&wqy}v(XZ8r3A8e44j{% zk+B{iQTG_X`q}1s-DEC+k9n4x8~Znk1s_$nL$&87Y3AwQaeY7Z{<#2#ii*<%l?r_1 z*ByV2b)%soTYL+BSuYY*I!y-7rH@;a;ODUQWh1oL7|w<#=Q7U}?>BGb$ldn*u(vB! zw`Z_%{(K`Q&I451yXZpoJSmqN9Y|SSi^m*Rw^`z1&UA%yteUPtehc;|F1mDYZhl)> z$y_-;Gjl;#m5e!Y)!hAq<1YIF51&h2dvqiR8{paoBpADESZut00ld+W)+}(~*h9uh zywL{g*3J2VVuEpm%!dZ;&|zGtqg{hmhV=;BCQerF6~GnP2{)YrGNI{o{3{CKgd5V( z?3mr>hj`N@;bLacZ;VTFm_>Ce#|-&<(Ru={)R=O1S+_XtymZzPqwd!h7{cqmM>2^xgi*pd4>0_VSnTO+`mhc>G&PRD-x(onc0whNSxs@)0He; zYvZL8?(vuqsw|3rtsa$Q`XKHBie?icTE-u6EovfxlGe1n-!Wk}ShTe&9dML6ecT#| za<#KIAngk4RLlCT9oeX@ak3#5tNf9Z&77D&Kmh>MTLq2QGhCy=i?I<8j*?|puYcGnu}yM-f-?zPfB%2C2QuxQYm#CQ0tbKCl}oM3LOUe2Ydj1YS4 zSi&QvfxJJt_GM@MBev}=0yQ1okN4Do;C4de22zGe*EIR{&v2u%pWwE0yq#l^vsnH- zZ~?64a>fPl?c{Mn#OFCilP;z7P_t^A@po ztHxt?e#g_lbL*PdP05^FO~f1?F25quv0RB*`YB_)Uh_>q)M$ArSU`uvEo44b94XJf{p$g{%ik3dyp<&PiOz1S; zPFwEebqYmV{-V(&nV`5k^KQpAh9bblzb2`wTdCm$q8fwj#q+_R)Dw33NxFDMu zO{9DCWmzsfg!IS>0nxW(D2wE^u8xeYk6e_{YjcME@96&6xTrB{K9F`c8^r)`r%1nl zi{`0+0lcr_QT2V^01j3|RzC%NxW@R#;Ya5chr!bN!FM*$qf{>TS~Mtvsf|v zL8*zb?5Vr`{|OyI)XRoF8!Ml<{5)Mo-LF&ZM<>bU#|#~K`-6ms%}4d1pLIb{pM+v4F14AMH$Fh8}!!bH1sV zv=2P>b)UNav^Ufu-G95X1$gK9?fmw)O{IU*Q@;BgLY|PXG86BM+P_WQzfu<0(|Uv9 zJ)6;O8v-O^^VBmSe~BQWRhw-N2axn;A|MmZT zo&a_S`VtVKhY;pu5se;L5P*K)C9vi^K|R9XY;4@TLqIe#Mk}70!!$5|Kp-}aOWX;G zkLL>{@casp_wg@3|Gt2g7`;CFOz3~Ai=|g^PP2O} zn8&XlqghYusONV3(?i{-)gt6J%rg#gCvRdDc=Kyl2x%L@V`LMK_sPVxeOOc$LC?hS zCB@Icy?^lrvcAUW(wOE4HtF(re`Tf8UrKYrdc9-s;YF#SUwfk0x?9G3sso8Tr!~Oa zSR-8TU;b|3&X`&_tIzW0W`9_noA(mVdVA1+u{zH$Z+;4X_Qua8MtM-xGk|sVbJ@wA?SI zcb&pe;%nac`e$PSSDQiwm0A3iDX@A4s` zPo9~&CFkcH21{uGUtq|dH`BrLTl+zb@c9h>`;c{1>^-gH9l{ii*FN^MuBwglj1ykbR&+~z9-`9Zv?i+RFAp$BMuwDX}?n_Z7v6!E!;WRf*?Q(g=b#>9OIYo(PMVh)#{u;`kE};8|GEr*epK}<2dlvU^}O^-aa_lmk#52 zVW9Z)p3(NOY~TXyVT6#m<d+3R;?NncOBekS)>&FctIs4B)E|YC61@wpq-f$z<}Wqn*VHhH*~J4P7fR_!O@P zbGV(+Qk-2^E1h_uvVr91+fv$owQ?r@sYGNLt`iB=2a2V-nyu_HA5=rw3{Jr*ohu|0 zT5x8S?V&+bpVF0i)DF99w;^sJA%RRRyz1Un=d)+nV;luCpAb>1e9QAbsMyX#;it%F zgm~C9k5%FW;kJI7R(?8O+prxLvoC;q%<@6*%~zS?-WeLw|3(iZb|OyT;zQojQ_Ow> zw-QJ&A)RBc^>u@;caYsZTVTnEpyWrJy{-K;N=>kx&yvwfB!(%0SIuyHK)@cG%FIAc zehhod6r3dbdJn5$Vtg(P-sNwva{r=#BiFsHp<^O);wjO5e*Ag< zly8gdcn$3$vl(iaOfdo2{1bs>7I{-oA#ccja5`A~5l{sYPMHhUjKDX?>DQpOE-L zAR30f0j0SQV6289b-u{>n>L>SpkDe)E(zUto=3uLmM9duLrC?;bKK*|OF`+&6789j zwo$t+XJ7tGb8LK#V=OdSNXhh|+P^aCl*b%H;V@kVWHBa9Up*zfm|F=iUb{7kF8Y*zZKy(fDCY+p_##5gde z+Ew7jkjLHpdW~bzE`J3Kkrv6FLt_BG`RU)X9^+>gxj9G2to z>vN4^OeZfA>#%$SH~2h{q5axX-+mb^q}}RF^lE~>;(K$*$pUnEC-+ZDUV@m^OE@UG z}0((AsjM083vA{+up)? zz!)I&bJjx>vykHha+XWsH-#rK8;K~I{1gHmil$7)mwf@OE=|{KAY&P^??J0qNsgDw zalK{aUSBJkq*o4G>xqhhN;1cfJ-qExhF<1nn!nL`R_Eg()$Bv-Gqz1%6;k7W3Ovat zvB?>AhjRiMxSKQlL39l1ljwt(n$5&-jz`cp6db8(#W5+y^wg5=hQgrQ&hgF1wD9R) ztw}WaK6>)Q_bc?L6TUA@AanTDYihxgXNU2wk^Set!_cxn$UHCA@#SzZ#=qCA?MTDS zB@WEtz|Xft$Uj9Dypdn*kQ3s(4AA}X_WknvG$dq9wf&60ZgW4_h-tVFBZ%?+%Z{;f zdSGEzH*GRD&nLzs9TpQ$#$qcwROIXLkHvM~Bkhx%3=5tP^a8jbHB-C!u=cI~K#!YG zEf@3V0@x$s`kXwNOuZ--{Hq%puRTC~R09ZJ0&nBFFpQ`?4C4r^0tL`iLl91j%rng; z62)3ZXd~$yW^E?R10jU=&48X{zHt|Ba!G+AV2>I%`q?$S{7GND+7UjmTm*OL#TDcKf-@Uy{ocuhih0VPjen6q1`K-qyhj9tycBY8e(Ta;p$!YT^a-SPx(q3JH?480F!o>AC$hh==`-`T^`ppn9G@m#IA z@a^3z7r-|<8>j25D?k#w_jjMm|MQj+WicDZff}_=`q+sJyPr9Qq0xe`9kBStZx1Mm z*HS=~IE8Wo8Faxn{E&*985da>0tX9sr+?-U#M;R2eka8jbL^CQm_G_zD~!jq_#}09 zUDJn7G0C_Su2PHlide~By?PHb#7#VBt};;B)j5va3ArT<`pa2Y)}PUF9B3(n=W!u{ zvzx{Ds3!*p@BccF-qMU*l;yBJ>7fGRDQq53`1@|qtowLYUjT3Pd7H(ul1c^Dpx^gx zGIru{nFqD?uxL|~!1IgoO3yPio{TlQ;)(vGOaLVobCBK9NPM(5S9QDjK$|eKzxCOr zq<{NLJ4<)y0{G~`X;UuYkbsiU)+KPS*P9ZiXVoRJ_Y6U?>)F%%mV<0@uW$837^*=% z7OT(aa|4R}q)?0aJ25&g0zq`AWy)r1G8E2mE$>;YhaP}5OYxrzVV3qZ`N_!fI36_k zped6F4aeiFyGaO$#u7XA!)B5Lq`lI)n2}yZizYDAs2;jN9tFeNo=v5x|G;V>JXnEP z1csbmdtlJ0_;OtP@9Ue5vDPPRjL;kp1CqEFdYU?4``q2;3ys~FKbaS+KCaqXj=$Ke zB+2@3SlX=tkLF0Ry+ryQt0MCvDysw9~H&Ge|w-foR z2SPX8m~*(RKXwTebZxx5;}DLz-eNNq)$3jUo^Xo#XZG=O9HK7zjLzk+jY|uTVAE2> zGzEq`_0zw57FDvt1#lrQM0}jnp?@#~7`Nl+1t!5C14qttEi5<(p-_sZahn*6Q7OAt zASm-ViTd!yxX%^kUw?y!#~Oz43M!9_$xCcpA34%H2f#V%ccxNCp4y_9z=Us}UtRY> zXtqSV=wbiHPL**lg4_x80_dztDT4s_2Q!DB$jDCBp9^6&gdzEaNbzE8{E&TZD^s?Dj? zf#dPc!pO}^8K3DVomd2-t$zdcgJOj7S`?34&_LJmK4Y)NYS^sE&3p3Ko})1ybsymT zKm{994tMm%NEon91r(c0UZsDgm-@mB;F_ZPmG)`Wsoe5&*2lE)_0Qgckl?5I`sckT zu7ss!&&|hmwN~etj~C?zAiVPO7yFVb$AO=(fYb0-xe#4Z8LZFownI_tKY!fFjD8_J z76dNq7P8d=c^a2@S&HG2imx$Kt@^AO#Bk_;e^uKW=0;ZbnSKh`YUT18uy-$k1wZz4 z7&Opk;FLJz2K(4ACB;K@d-!GVR}pA`uS1&WC4K?C@3q+I<}CN!&h|=!j7wlRr#`+P z`yBkpCeR=6+T~>8S_wI|T5rv08g6Q7e544QBX9&J1hG8)PVAN2fEzCTNMcMdoi$X; zB7lMc!l5fNQugNS^CT+>59-N_4gdg$KzP6UL1V0`A2L1jX46HGwsWvfhPqgvqCV&9 zDhni!En;2nT2CT+HRbJ#-{Q5;ElDAw@MyfKf2#O3!M>wUA>HaYkbGE^+bT}WTr()Z zcZqu)|5{Bw->Y3y|AcOw;{awNOMP6=#g~A6ifWUx#eDCV6fS)dcxYwBzwGk&?sC`W ztsM|O&gjLjU+!1=XX}Mh6%mp*_&Tjxjdd5fRwV)ro^1U_b4IzgX{~gY|MdDK7{4KS zn{EH1`HYJgEFMuy5M@W`3$pJ~;aRGk)^Hjsh^Qgtgj(MIPEI<1B9J7zi zA?!=4y#4t(#M_K;tB;ZGqf=qt|6Fh0)8?$T*VDnW-0|BlV)Fy&iOgg#tZ+>Ax&ZJh z?8Eku2nKNs+=U#Y7t3?mZ}R!O!<5zrCtWxiCZ3xYr!PHg?i~aa3?&xOSX_vmPnPB; z5)Q{Ar3LM|uom3iTWX$%vVSM}2+Hz@EG(xIB`}4anTRWOjKV zH^1&frU`TXsc`>_A*-9N&7MT-d=G8v1n6-n+DNKBfw8vBy4gM~$KAAiPE*9pyLULV zn4hCT+Cb#{C~aBP*EJSruR)V|wBZ#f?MapRtDlP#lh~apXUAT$U8-)`SFOco!`G^R zIhxZpx~JA?;!}%`&rcKvS518!oIb1OJ!4D9E8EZId6kcoI}OB1)r8?wJ?({_XN-lQ z>+`F$vq#{wg<5H^Wxa8Q#nD!+mPaJKti4vA&+EB0q_Q44tdho9X}rtd z0&8CX%yZaJDXFW1=Ga{D>CxKLzuO$q_9N(7h5z(#jOV#I6thVas}A7SHY|_w(7mq- zZO*tjieE+;oSn<84DRTw5z;7n#?Y(9*(Nybl^X3nZlAjVZdVhMOjTUwVD>5CXzVPn zCcD*X!qj=m1e}e-H0rLeOlykI&c^j!n<)41TS(ZPbj_Y_zi9Ikfb1?MJi^_ zk8MmZKg#8tSNZElq(?7ZVJrmxav#(C_NaM!k-~#ljJh258}IGaQsbOtbbpRo=nGmo zLgqRw*w8l)IR30$nU49i0^F0<)bm`SNarY#4qWnm-7sESPrw&$&0G;EIX&a($3~e4 z*F5~_vkp1uUj4l0Xra#uof7SIMf!byys_NXb8p-ibr`SQD7#Y3;+2F{F1>wB@=Sbg zN}jQ&M@+U)h0NXngUNCpJ5Y2?1saG)M8oVvQ^6WlTa{GR%?G6iVxMQ-Jd z8$^#3*@v~1$rya>5eYp0NU9wO9)A6^vuwIg|Muf?M=Qc{9;GPNy^d{u&Q2sl>M@a5 zKkxK{w^a6*Dq_Be!g)CzvpLIinMal$wG102ItN#_7KY>AYj3P}5@P#+UH-N+BbyaQ zA2_`jm5prVBGHRX3x=4b*7{$4R{pcuM=A`k{&Bt`w9Ed}7r^`6C%8nQ2{IEMYtZ67 ztXU&!Z7D%f;xLVRRKVt(1Yvg>@>{Eet-mZL$n=(z|M}nl7nRkio~Ux0ae87H^GIrF z<{h+Lm$Y}mJBQbWPfeOgLN^fF*A&U>4t!QQGC2#@F|^r?P%t;fY3(QSdk$A%G_b3O z;@~A~0Gc&q|N2^^6Ctty*?M8>Jp7`T$e_vfD0)DKv5+Sfp(ZCMfGyG8@24&y474klgNdx2xvZ-n|USQQLJt@R{Bf$ zfg0|rRpxAgt?jF<9*o_KwdLvdGmX04N2!>(339RHVYx%`!(RWaQ9~sT&ZDPR=Q+=Y zhe7*1qrXMwlPnYS-^<%q`&!kw?`zzzX!IlFd_N*uv&OLdXy2RnqT+3NeC#@_EKjAR z;;j(ETeaA0eYxSJ<$u(_tUNsQ2wk-ay0Tu$MSNlXSlw~Ec(nV6nIv~QofOrTV>5AT zut31Hy>a_{787K8%j}d3;JvD#CJWQIgZ*DtK}wEwV)Di%@K{iNFC+<;#Vc>SfwCUy zw_T!D;UV8J?be1PO~M{J`pq3MfX$BAI@|!Xh{zAU2rdmu#AR%ZKQA#ooYarYAI`mW z>69p?C?Q<~55C@jMtVYtuk#07FB|~JN>;`j^?+N97w{9Xx}jQXVuZIaW*EG+{H_Bx0=5xd& zY;DX&{A=yW-qw@$37%K^XzNvT#Y-Xxt|4@k*72WaSJ`iy?Sz-c!{@?$rgc~YT8En@ zqw_EG^0)35`>)k|VaDBu62er6W04vu!M>VH1`KJ8mBzdLEpWXUMC%9YV8GJa21soDI}3Ob)Xh^9w@|lfrPvbgvl|-A}hwMZ)${ zbc7IOMP(gVg+Hq(cQVovQ$!4h#g+y*!q0oLN4$v$H&u!ur_m1J5+@8HCA{z8;K z=Mcm*g!y+0Es4YurDvfJ=nf3|5y8&)%bES4!TaJ@+RWTLlYjoJb?kie#RSZE!`e~p zO_yU%JI3mPf}+2He~9r05ye`96mEv|99p){RMf?+(4H{J9Ch0&hhX5slr(bppc zmuom80MvbcP5iJSlyyq6iu%;|^^6y~?3gc9JkR0u+inBk^}Nr`dFplSDJ99qpJ9T| zxw4(T;@buc%Mrclu^;>xljHuPA{Oh<1@Qm*xPS?JxmX%(PTMWb2GF|Odip8gotrb- ztF{Ur{|AOH0ii)oW3L5<3v^?I-HdT=OaKE6t;G%iU`2pS;3Iv38R+kbSags)fXvae zHYX4#Abt@=zeMJ-i1h0#YdCf~IYfyy`%}W4@0WEbRjm0H!N2@HbcmO~rJ)0BXEat) z>t}aFTC=Dj==s`y_PIm-QKwckDNtyD{#FE4jC#IC4sZ)F%=x-)dg!&O16qER@E^LR zc?-DJDGZeQy@r<2#@iO@k=dPg@3zH6(fJgegF8Zx7%;MlqlMz!zAl~$tC{2 z{PjeWmi>k&&*seM_GJJt*Jg|#D=DO*&y+fUxm?EVL7+q-S-(10*`;}~8T7|09#35W z7hm{7288G4Wkx-+#x-k9#a;ab@C*juSuO|Wu~@x!hn6`9GTb;?>PkSX=aY5b=Ngl+ zIp*SpS;VCx7r@>ZB_!+p+$nE)*&}J38)>@@K5yURd9-V-q`Y5vtZ~V=xWW-eB_n$P zosD;*g&eao{6sjZ_0MNZ$78P$=!+x_Gk(qc)JH(h74|KuzvTkh{Gy$fywgEhw-VF2 zX61Ojsz}S3$x@vJ50Co@+{_*0sd?@P~E`UE`k=M+!6!wQBekWut#*+0uLb=tr zMTYRnZN7l>i3v5PaqlPS$tq+-(zzh$0 zE6%3L;H@Xzm^fN&X8p>a1*5<01@OVzY`*#PO!qy{wichkc4{DUSL0BQX_0&Cwu^CY)Yiol%J#R51E} zn(Skddd$$%)&JRu&(nAokV{c))&A?Rzjw#4gOOnqBCp)n1@LM1YS8B$g99OKErhW( ze(xyaV50qpw1hC^=1*QUmQdcJa2)*@m$;v|WYHW2?%PDElQr?UvMzwHFHE=>z%}v_ z@AWkDhltSTtRqINBxNSyeDmD;(H=7k9rOI9gpEwwnwAS-6|Zzqgi`GWuR54J^U~V} zS?5-0Y_jGiV$Z5|^&cfV)-;q@#IhyhAGdlum&oZyt3=|2%l2(UTX`E666}PS*XDuq zWZu~(%Nd>8T){OQO~3! zdi)YzYveKjyBzY_jqsBdG2SGFJWE) z=aYW|Qg@m@U_pY;Gs~|I+9e8caSz5Xfc4$c<|<-#$p!FkoUU&7^gw`{(XIl)HHiuzo)^2d4(8#+xv?cde?c*1KJU3+5}weTv-h6eqi zfZ;7Id)ijZ*IegzCIhOvIqE;0HSNS?{8(tl9*QeF@#bLh#NzX`^P~g%_c3|SDJ^d2 zmHmKl$hJ*(mI!GdbgCZS3RJm*o8h@#7yAQC{Md;_hRJL5PJ8>%B_E|03f@O~r{Dau zL4vE08JD7{ldfWAs%+Qo*Mz*3)1C)6uA1mijh^EOfr zI1dBko65-3zZ#r|gh~jK2WU`5S_5z_9FtNn`Tpyl`^t{-X3w2N=dnZr%~(IZFbIbf zkpJ4#zx!})D$_xqoKvSOQd@D;F>iyRwwH}Q{TsDe&lhMvb{dkqK?cPeJo`20+xo9> z$x9}(mMncSLmJkXtunLh*{}1B7c1-K8EDqCJfV6yIu)OLV@iE*=92dfO%T``KkG%V z$^fGWdh*h@rbhQ4&rgqP^EJ@R0wCj$nq%kB&WY3W4j)6{Zom8s;ChduM+q_eMHj&G zz?c*K?wT@41_O%&D9t%v`8c`etCsYb2SfZ7MY;Wpx9pfoG*4< z`HuEaS*}j&AxIEyS>4VwxD*9m>{5&nN@f`+Otqpf8GgxZn5KP2?z)lYAfVH1$wDAH zf}}=hcoo_IIG*~g|Irt~`$lVf^4QESXqdR^#%UawpqdV@o7e0|{dH;4Z_&fC992AnBk9d~1v^5%(` zDL$SS%eNgsj`+`Ke*3v!m)UBMt8LUNCsiCMUYMtZwQ6X5wu@}Hl8&L^C@+f(l+-=0qk(jNrKE40+uhq+q zzTte73*e%ojO+ra{5r;}JPLaKb58^A=xH=*ZkerTo{b2s$;4`}TPrNRp)+(z0{{gw*{lGEiOEG!7>?mOtVg)9Iw{8XO|dZx zw2g|!yeck}#c=rc?0)(4>FGZdf8ShKV#y_N?-Z7kv=4mj z76Ac~^LRnUQ(_<|pcp#0_Y^64Lg=1y_4UC&!_jZZ)7O}K$?!{NLo-5e?8ZN=}7YM3sJ0=4s(-`1bqj$E)Ah^&fhU;9Ljq?8R^0R~TCcDTNC07}q)T#LEmH zON&E0Q}OJq{JiD5LU@P!Fkfo?8N)h@U3@-Kr;3kOqa<2+(PMy3n&8*uk%Ud!metP# zyBwzp@IGT)Ya37A-stM&ky)SXDwi2pPvr(_f1PI3*RNM&x6-Yux(j^k5!-gqxz!rL z@`E-a54g^5p2UFX1*ZufKu!_{|6BmyWMy3dZyNolfb}4?{k|RVr5C_^ zyFgz8=O*YjUwI7J4Db&UcH_IUbp;8-y5thLb}Tt;wO4%n7J|X(UY2v9c}0xig%I`P zbLD>d4?_2xznPkt=@cDFh(-kk$JQkmH+E{YtsihSiEl!E8R!xgAmJ~6N*Q3(`f+6;DXKJ`>;Yw#_XYv0f7 zxIK*XxPBeGuM@*&vE$qDxjiKuFvkV(ZEvU>=lH9g(+ux&0`8USfB|k(FMpM~lf+}I z=E-?J;{XtY8TCJ8EObsm_=2(8R|;g5Q(cH%1rZh-0i*S|CP*q2{&LifZ!ckFdUX3!?lM^GFLr&mk+HJ80Lw3`)p*aP$JW z|FWm|`n>7_SUy%DBjbvDhfRlqK*DOZ`P$?_5peNy0__g#4Fomb=}TZOEQ?bI%b7kh zfgIw33rWYYL#m$<>R$nyVfDw{!FVXYbv%Wyf{o&|dZb-`IXR z_JiBsuer78aQ4&loO!i z2svxiuz0>_e6Jr}WE^$5U9#OF<5}Fr=Ht*U=ossm{~q;W^gmv-;TlSpV$8 zP;MgzHe;T$^`$%m^AYDks|#S&UpSCC+pzF`rjfIDFGa~DiZUO=ZPf}c82xJ101A2! zo&equVDXUd8T{=;@{Q>Z@sk|%+SuVgL&&b1+n!zJ!Jz^0i12Ij`G z1H#223v3odLOIPd;S}=oo597<1>AcaPJI4+Z2DkVFxYJJYQd5c(fIGO=oO<)64+Sv zm<|;_p3wSp_sK#=m^QXJ^Y-0-=&gLbBAzmkdlt!`7d!i!W8}gA1*;q@ruo&*C=r5o zda76uO0&Pu>iYgDXWh@RDK&s^PjmR#bscH|?~81#ep?QX0sHGkH_o+2f<+u+dL8;e zFlyEMTk#;R+>Mgs?;`=F)UMkR+Sr+x#O5LnI*oDTrP2ua@fh9dx8T4sy|~7hxkrH< zfnv2xFJ7i8F$AgthDirM&fY4O?E30|V=m+L*+$v2dOXr@Jj&0+cS<*j`REf=YI*O@ zH3~Do4d64?Eb!w+IW8Mp6Xd4aFG67DvqR|SC2c6qp@&^p-LLpOogSuRoj$9N+QYi@ zUX7G?o<%HHJkxXo0!!WjaUX(sKl_xV5H;jTna{NoHt<3?K3Gi*Vdx}qSOUm%?lW8JHi zVN%@$txF1Hg~8ne_d6v4t6$_W%FdfB;; zdOSacq24Tcof`h$UfmzOPM>dCW{sg9;m1lcMpfadM^R_zK7p0jn!oMd?DOk;6ds|y z6MLfW_I2a&G0%md3tfc1A?gUGj@gBHh7L6(&Y_n}pUpKmsWgYUXk(<$t8~`0N_-5K zuNRY}jcVn4;Wnp>oz2<4@}y_+!l7h2Sl8tAkodbl7E|{qfklNplvDJ4=GoeRj_N<= zb#`%+cL`UX2%KFd+X4_+ip0(7I~%~(PRE%&+W-#S0vG_@TL--k$%r#8$Z8`ih+gT4 zuVtOZd%tbDvDU-h0NxkjGpj~)%D=q{Tu6yFAh>0Gj&`b@a6Hs^0U==eqXRl%z#plZqg=1$F|RcbMWfj(DFq@7XqC{Kr#Sm`; z5`hEz;-veTjwe?G0rrIa=!#~-fA(g2Gu6qb0~R80noe5UzZ+!o!Jvwa?W~ zi8O%Q-z>ia3NTrXzTPh8K;p*0adO;_K&}4%KEU(+CZiq$DdrX&nm0J9@zDj3)ylhR z@Cc0Ka4K0^u3g9qdbAP-P$H39nY-O z!;YrTG8p2y=6Mp;Uy8}K&P-`iMEPU`n6DS`Sjgc4*N4!Bj5%-< zdObrWQREkVG~9fhjW94j=9#?L-N!qEyY5WS;eU6oY-{?;|PKk)Sh2ou$|(_%J6qNT&U zo0w-u1d%jH=YzwlHh?#!nkce-#BH{*Yc{8@8C8jF#kwcNV_fWR`<4dqULL9)M=ns^ zSH~z(7QNuR#gRCd;Q*Hr0Qa{E400J9roHwtC~m2`R zP;q(dOAKI$iepfB-n@T|)@SONZXFTz-(iW=hyGf;vGi|*zwe>XW`uCKjJ`#_XS>+u z<85cQuGm_Y!i7kG>vS!`t>_2+UhZ5l7lT53TTn0|@#LhV?dv_qdDHP0_Th@rbt;rM z`Z~|M@NYgZ!O~Gq#?FvtPI11N@9>3>lMG3Bc+75#XVL9&(r^JQ18%JvwtAw?vvy#K zaWw#DU(u{stglJ(1}`n>TD@sv;gIO;HZDT6Jrl1N@K~7VLC~e7OPDHP;P^I+v6O4X zc!mz!4$k4Fr<<~sDfab3KnK7LGGzWNg=mq+_%^HMeE9Ov*BP~@FF3t0i|dKb)NK!8 zojq$s%`oO=c$Yn=%$i|iW)o=T6hpA3bCvxu-*i=y+5q0XphR(E<1}VNBtp&&qbUYM zt2Ck3LYTq(o!vkA68xsjM-e{sU_%tkLkfJy5)D7OxaU3$DGJTsTJ$~lH$ z?W0v(#BJ;{9bnY#3X}zwXa|VK9G00`q7C3R{*d|ibfv8wb#W^B zLm3~#gYOC!AI%fMck!ALc5xX?n!r6AgFmi#XY9nCwr_@^0*b-YCt!W<(@;<=<~ibg zg5rvd`~D_yv5Me~7}|3-@7stMo|rR1$`kOuR0qo%xj*w(vw(OF!;I%Ibs5kH;~Xu< z=>DTkyg0nQu+?9sOW490K?uf&Vi1@p_e$dgY}SoX{aF+WMv7?2_ced_DsRUsHh=f$ zX`@8pz6^~#FOBcJW94$KKMb>lWW?VE3OM&3_Dx)?$xg_zZ{e1Rw(`;Evk%$j@_n$d zyF+s0vKD0SIwz((SlLagfdYorIp+!A$U3xi%i(vuFm0#i_7Ugt!u&k^+QlU2GaU~n z2W9#ix4QYe7juFQ=8Y0+^T&KtEPA%8+>0x$*Tzc$M~(h@7lB_rB-v-yxmWSu7+l zXOg&ld(mIgL|YSy#n{t9h7z@!Uck?stz8wTHh}k{;@l6q08O-M&K5AvcO}9iOSA(- z;tre1FinkP9q$Ab>~Y^Uq!}RZKA!Jm4OhuH1#Jh*Hp=`>kxRtseIN)xt%tLy!TJ8>)T0$SKoV$* ziLd|gy3jp^&%oe_X{;H}WW%H3r|T6R((mMI`w~~s+t(rQT>OE7P%V}Ew~Wgo+Nr$m z1xUw7eci{KVM?ol#D`O~WaNF_^48P8l37MBsxIi8zHOauyE`P8xJ?lJdt;xm%Dt1T zryIbB=IYq8uXp-SdHfnf^Yc*Eq z`9zyi?J&zg+9CNO>x1Az#@wi#D z0j}!)#s+Xr-fcy5I>=fV=4CHh#B*Rc#~oa(TS6T6Hn6X`yh#zY?i`<|F9GUWQg}Z6 z{$1Xezz28@Oqp5>QVjz7VcoDG3F`p8E?GS|CLx0uhXy49N)YoN++$JM`h)1KX@ULF zL$RGzyfF!`az*eMoGLVV2XXQBhXCt>!e!$e;3_o)ZLc-{OA)ZgQTy3-A=`Z-HGrl4 zh(BD|b?rNsf2d>npJTrHyjd-O1FM*buO$_R9Qh*{VYKw$nSD?iALLWuw(7Djpr+Sw`5=#yz z%(HWgxOTJsq8PXRSwg3l9yBg4uc~^r2Jq&Ez&$JBJb&n8`VB78Lf(oooD~27AOJ~3 zK~%S<9>F>9@Wr}i#9=>1D-X~_M5WI0dE&WG1sD*vKV6gL{v;h(~EJ+$%L@i4cZCuGX9T1aU(R4VMNFRnw;JmGl&IqJ;Y%% zh$As#Zu>#fMgK#ydF>Uk5m6GjRu zJEt>vgD#_M0vHpUkMj*sB;xTh3V^L|cIJ5FB#)FCtGmh=OD&5VzXe2|T}CPO4`~4Z z*^8txhEq9A3RxMGzW$~fz?InkRmiz<=H!pnYld|6b;~o2E0#C=Q2OIFfcLGFG%_h( zFEP{l?^_can!%}8pv!`5fjOs^7>){^1u5XTZ+#N@h+8jkxkVJ9XUUW|8o{N6-Zngs z)fGmwVe9*T1sYT;|+fQPb4xRzEd4e6? z>MNu9I6(-X8AJXSZNvca@>htF5<7x9y4tntXolI|=l$<3N2tuebITC8lh*FJq;qxm z(hNUN5`|5FI*vGfm<^1FIQ_k3B}~pMwK>_g722-F>*P4)<*Rn=ia+uuMauX;LZy9E zbC{8Hp=fGK_tqe_MoZreIU+f~ODr7vkh5x2d${)+8snUOkl&m^2S<<5 zf?FFIna5CNza{hmKBjF#1^fe=z(2nMtQT&f2C#a8BCjqqRP?o}RGxXU;B zrXqB>V|>286u4tqdLvlh3&h}IbD!%dXMp4-6oVfFv*_6QKQrc7E3?KQhfdGiKBxW& z1M$@4945X10%VAf)AJ>y1|OuIFN=f%#|Mt<42m z70$W{I0|w3Kc0+3PA{)|qH_=_>5l3htl)ezr}oz6olSF|{*{OZ17uZChlQ|s|banaf4WIe8mK4CmzgD9^_4F@;HOqgu9GO!HlXn2i2YX8N<6xQU zQk11NOV%MxTcJDMKtw#mNyz)`q<=sI`0$$iJH{*>YopXU8p&~IHc!zS&>>--BfEP2 zmIiRKGY=1tE2@A}-Gw{>e8^FVp6<-zVLzpc<4XnQ73;YtBb}QVj#Hk*g?1kH+*23S zRd zIoB3C#S!c+c;FNqdh(aT8tiCsqAQc81D~J}cilDi>HkHdIn`^qt#`kkYz`;xDsAL; zUernq_Z7_`Sa8_9F`@+Am+#{2!2`|Te&c5hz-e)d1g-w~vmGuNOp78wjs5cj=}S=W z!e*UwTbPF%z@VLZKoIsYK>xCM!E}RW5-2gfgurI#f%k~^eC*n3!P@O)OL%OVyv@s! z@f&hi6a>Axe`y1_zZ_I+n(#%~e7vyh`I{TSmo4TZex9>}i{_4XPOt{$bDj>YZU8sG zp&5>GNf%I`rf?_guKx;i*AIL&3?EfyFn^NpP}4IS0yJCwRn{fIkB)7P(E0*~g>U&2OXcSULi3qNa>^?0DOsZq|lq#+C7)@!&8&M|2~uCAKCmiH&MF6+@^}`@9CO=<4X;?n5{|5D^xKYrvU9j#CEfraHf6aYM2|~bC&O?ImGzv z)JCvN1ATR1p10;V0-PtYO#k-B*yqgq%zm3;)Brc|P(k82Rr*@BQnL2S7h z)dS8G{Ja0jD`Y|Oxx=;#3p60#S=T7KSze~<k6wG2{Jf9`*K64bU8(Yw;lG6HDg6 zeCX*do)BA2&9Q;!Hb-w(Js&^Cbzb0!xCK;{9AEOf|1gLZZ?SSBg5`9^T-a4RF3$1VktZQvTBK9189G8e-S!H5ssUWrU18rk#I&|#W|kH)<)47D zKkqfrPK?#39BpV4sX1cwQ(4{~6Z^d|{WuI^FOz)nHkY;X>PA_-5ZWY#z|!s%Ce+O|1jH;c zG0X_EnB-&DRE<0VZenV{+_>+a#c7!)H-E1sCapVdeQlF^!w`xfGL$yb`Q$GoBH-bS zDQyaD33(T{@0<;vdJvu>$JgD6XX4Pn)$&bZ@a&c1f0%>o%#RIRw`Z#N`GI|(@^hIPUQ8?F!_Ar(zlPI%Q0SS07ven>^j4@YsOFgTsrP+0UE)Nn((MHkot<4 zsly?tju-~B1r0pyR08_?-E0D1bSMPZ5-tcB-g0rx&&(_>sA)SK0)JKmSm#-M=wNX^ z%JGd8JFD}BVnqMv3uPJ}Y|Y$Xs2sDLRF&**5N~>pN zzrTJc1k~UeUgC4V2O=M*F!p*Nuf`|0K1*uyVX(eBX2f{uv$z6hz%4Et?!#fg=`;R1 z)$Jl?$0FCaD1OF2`V>*0(H@Vi~+NHo55X0RI9T5iQ z`h>{#bn46}fF)>Ay%TF|zD#Hh+3q1yo>UPJs3i`Aew_$YI#*i06n)Rx^!xO$=S-W= zw57IX_9j*jy;pN9aM2>w7{@y0V#H$z`Fv{cTDfIR<~+pq)noqrIeu^Td9Om-mu)@_ z`V$0Q;eXt<-oXKjnsmsNo@%nTzuiMJvrB9AlnoAlmtB9$_*d$VxK=x{YrkVmzXBQn zmCuP2J6@v#z-$gt3{q|!CZBGok=S;RZwnj8|M~C#@BapWAVCTEz~&v{e_BmazVVxg z#k#sgNm71_#xa0Q_tn${+-X07khP+~gN||MNg+VKI8@A2-5=THjONxxu9_KNB!^Ue z#|?XGB^7=3@b}k+hCqvB7qL6w4Tsca@>>Ae%y9EWBi2syv(yVf-gyF8yBwA-EFQfP zfEn)2r`J5z*X_YD5M!*u+QRyPT9;`s3( zCad55{XTx%_R(#@6IUi)#PIPu<-Tk3gx+An>Zhe&DEB6rfr#6m7tgp(FKU?25ByK+ z#&u!b_P<|@BsP>G9IGdBv?VB8GS4GQQq>h?jR(@e)_jppkB0; zT9dO6Wz8B#=Suo8$JzAT0Jgm4a~Y5MQE&FszuIm=$KYh(Pw!hj$-Y}A5HA%zf$RP< zfGlL14jv6`NWn#apD6HbY4x8&1p6#!qR{*pBNi%B+_*&VmVEbR? z6ZyiT2E+RyHx6uR);g^}8xK*0T~`53%qg&iDeH5B&kB03?4Dw|!uR zIjmfhG5t9_TN@-DNWg@rW4ng5idRf7Ku$FzPv#gWLD|Z(GvBBo#((?A3*YiOjk7zx zzBoN&&iKriE)d;ImPx%_fbOH|=9@;U3jO>5bjI)NpDic)@lnb$kZwcS=X$zPcRv9i zxmVH4Mc<}CSgTVGUT&RI`6RI5FhQ<9aR1|EC zFfgP;nee1%d{aDGEt zzFnzd)wjiBxqUT&<@j|1Q7;7|8+jz^-MTj-w4Vc1Jea+JpdemMe^59)t+KDHwjc3R zg;NanjCD*ddUW`@$grJv;WL1GHVoJaV?5b#=)ExTJJwvpaKb?m@n1ZLt#Kez+8q~~ z;t$${>VA6OgWO83@hzdpC$JqM5Vrs6F>pP94H0^H;cX3pSXFK}C$Bc1evtV%kQJ(FrJWcK;px_xTIR1j- zjU&=LhWcODoQKz}ua$kk`pgCEjXjZ{_4`9Xi! zP~`lS1~A{YyJEqafgMJpZuh z1p~ji2~0DIOxWY#4u)~P-G4#E&ANovp-lK~0MB|NXTIznr2%Xmc)0uRhey;FlcZfaRLACTv%^{xP|19IOTQ z>m-lg=?1X3kRNnGT$NSTNep^M*K@24_C({t-?!tudC{ePj_pL{(ySl-Jl?3C<7;c{ zqFlDai>+?f{!eetiQgI4NKPji#OP3+4lC|jjMV1fp&d0r5RCESqEXge_w?_6cr0P1 z=zMZb>UG|Mf}sUuS{PPaZ0B@FM+|$vUuoXZZl09TCBc;Z%-GwE^-=7}X#T zaF_{Y;;1jrmUvy0har>C99g<;qU?g(mQ>Hb$pKWQzkLo36L%eQ+9y=ow9Xd4u%>=VG{SP6lAXpnX)Z)}r}e?7h= zQs>1SF|)h@OafhwXTJ$h?l_ziefjuk0M}6(T7U8+WaC~H^KL_HMzO<@Z+D1f7qPF` z6_GT+wohvUmr%}T2VWxft2lvcW-=iln}Kwmshv`PZrLS5bK_RYCs(#e3Xgw~n0MA( z_6qq2Im9uAY5)h;_v+hu-t#jzX9xk@%?*z~DK<~VkbdJ5DTapGf$m)b!Wshv&5ArJ zvSU^j*=SE7Hq{?(u1o^LR^)bq@baHs%H_~OQ|wJJmsbDbN0`<8 zb?Tf|^=Z$(eh+vc@F+pOsgDzQ+Xv6Zbqu$36QOxRyLnQem-90SZ0gA@ggOw%;Wu3% zB}NPa1nhj2*%DUAI%eZMm&Hm64Yok3fOE;`wpd({ zoH7Q04dClFgi9~T${t17%N--`{MTQID00-Y5ppD92jeqk?9@IJ((l^`(M0L?bzYg1 zefoD_&d)soe55`jcOks!MISQT8H013plqp#Z)*aFnDr)Ii|t-@*z%up_e;JNbWQ=$Y-0F|Z(R(uvK93vy71n7w0)o~zfora5(57z!N0iBM1U@V5a8%;76m3FhHe|e5@SK-%`n?W>q+1(R1t=d^=Q>qmX3l! zKX-0r`uQmWq~gXKF5&9uXm<5;2VD-aSNMnr^hg~1d**!4+S52kR@KkUp=j`-y1<_+(}OK5OtqB07Dn^3~dxax?oC-NRh`m zV-)Fw&+r5PN*%uJ84kB|;W3}9jWDKs?3f(uj7{p$5*EEzxBL50N=t^#I10)$GMh2A zB(JC=>v6*YzI9Hdu8Y8+b7dq}q$Q@v`E3AOUbN#f7VAjV`0K&CQ@L>Uh5N(J-;}+| zKMo*-c4K^g143V)VmE>B-S;V=A(pL4)q+!-a#d{+(od2@>)7vH@XT?`$LEkHq*avc zQ@}KLtYPH%p6kmVuk7#jOc*vXRk8N0xP_QY)kO+>rU7iPnYP!~j=dYe{h6zidDy+b z{MHCJ8OS#@MwS4;KtI3qMT5CY<|8Pq-}18!EwISIzhN=KdCw~95LUv_h)9-n9IK)F zgapE`B&^hwIBRqvq<*;BL#YP|&L#JxfAsKg$bb0+zZVGaX$DwK1~)Gbsp^nSWXbUp z-@F|F_x**?Ua zpsjE}H-PRmhiSgX`P9T)E|ot+;;z;?(|*vgLI*CB zc1dF@u7_tRPd2{h9F%&(k|(OAWc$H|4=G`JBC8o3r?J@Jbj+Ajub<;O=&Vbs%Tcec zo6*1TsqFft_xq1cQaz~1`6&%xnzva;0l797?+7q|O=xl2V0yIy?Aw4akvrxaG38q5 zojafSs${V!#I`ZXv+d9;pQdwJzNJw%ZmF4Q{swjotVRRI#&u6zg8HKg4Q>H_4Oh@WZ8~y8^FDXI@xC#+0Zi-NmLqk@kjZ^dNI2{STan@8g5)>Uny&S>YaN)Q7IdkaT=XSW1DSn+YKSXEhDOA!fn-5J3E{s!0@Dt(z?IKEfSo*e{bU$MVgpV8al@kPx!!!9c>R0^u|MABqyf_KW9i5X zNPi`e#=f->QLy}C*6KyA)IgDVF-D&|rs>(sX#yTheExF*5P>b@G2T#$t z9IJ`S5)?PA!=KAgWJWMdkv=+V~Q=^ZD(*7`^MR0H?~Qt;f; zyi;$50i}=%uG-6rg3q7t9F2m&d^e6-EC2R;6kk7&$E&#qTW`ER-_m@UvWcB*uNj;y(-+v9IB=1@-2i5lDC4#8ndeCV z4dD6RrZR>E`fLOE2B*WUZl^w%rJpB&|L1eJI2PZ-)13nc`XaTK@2Y~6iBGtR#Rv`N ztW{0mJ?K{$s@<@61-KS~@ z@hkNHgJiBq2if%ecsGj%>?IdTm7Eds8o(Z&H5o}e1AAy(@;(A68HjnVKZ9}!_b$(UwipRPvQLqMjh!Lgjwi(B9M+1T z{Yky;&&75nFjC(N`hH_z_-S9G=R_l%2SvZmBxw3Iud)!_dmdskxB8U zidoVO@eEhctZV|SW#23T*3-Zz56FJ8=gbad^dO?02{K}-zhoiv0Q_1uT5g7MlQOCV zGAW6e9$agLhTowJ81T~0k9X^CfVGNI3uPI21MS|`Wj9(^oC_SUh(y^?5mf@xF6fIg zRbcNMOS4jn?NiRHGG$R*TdcQeG;X^+T5FIz7Qhx0+^eg8}|N zSA0sID}RU16Ushv$=G5<$ivcir(MwD1w1aA9pCWh^K?!%z>UNHU=W`RTu!P1_ddbQ zYR8r@PDLfuF2dK)T3!xY@^p-0m?wLOs>QhyuTxI|GvPZK&;0UD=G6@9y5-?z-c}Hl zCxHb;uU|M$it-Pi(gIcF{FLTzUyA@#Ck(M;laF;2QhZIs`t0KX03ZNKL_t(&x%t0- zo4+Xe*q0k6=f~ZawtKOSxu@Rm6QV|$gxg4GTR2AgfloJpOZbI&Rjg!X;eI$3{x*P} z>O?LJS-^$Un?7}f|yxEzj6-5=yv)wHi$?xq-vM!WY^zj=7d@(R=_UD~`h+N39elQxV< zaD^_9+ex_EBsRcD;Py9?$5595}0hG0r{ z>b{!fqQ%YSNLdCp4|WyNYC+CFEhFECuC(fmfF*KZS|Hz=ii|;KB6=dhU1F zBm-9HGpdS+ zWgQV7ANpd`<3n!HbIbM^JvM;7FEjO8{QcU-RpPN&+s8#a8(lLj7snOO_+Oqrr3ztz z>f^PA(U?&EqpRiI{96W0CvJ{Y7uUcDCx6BPPc?v#JSf}MW^%w9I?U~QeaHtI{jMXQ z^V^2`+nT=zrWOCidF@g}mx_=5dG&wK`$@8h<8bh!Nu=R;POa&Rh$yt?>lJ@(19(rQ zGEJDRw<9BbGHb=Wvi`te-hqV{4cRua@-QD%*6a$#tjX$S{1O@~UNn7hzXX(3EBoaE z-lx{;?J3q?&d0{C?KOapeAL0K|0&9r6?(;k^o{mnXg^mw%yPuYqrqMrr^+*4k+uX2 zfINOF00{3cclsGf{l63+V8T5l=vdX?Tq-DcL=@yN7<^gDnVW+=*JU}F{^e4%JXb&Q z^I^D%sGgq7XE7#G_W2Q)+y9-8308o$Bv@G#esnE*H#4#y z0?-9PlR58{SZb6UOp&M2jV3v7jhtdGvbJ8YvTi1f@t??|?74rUa*jrzUT{!v)wc%pXbNq3@q+Uj} z_c$6$9xtuO?AXX@0H1d59#CwSvX=8j0XAB_ryXxTSFV>{cE3tktJ?98)QoE2DcDQh z>!t59{SFhXbTS2VIVsFg2$C zqOI|2-zh!pWR{sIKNN4BiYM^-R!un75dIyu`PRoqw47bJWo;(Zp{{XZjGEtB z5Cg2s`24vt7yFSq23=6KcAST> zVGL5Okg<0SKmUgS7Kk`#-DM40a=C>XiPDS8J4wNZdjOb9ch$Bg75EN}dd=&zOefpG}W+rB&8hI*oqvnfnI;( ztTJ!h8$KUy4PfM$cTU!SHs+Lqn)Hch@xlWDgRC|G)zGca`tjGL5?^%nC%paN2XA=<+w=JSu3f@P}KZ6^S1i(2C1+E z)_~6tXE(B@be)_oAA3DwO#_&D0)HRNzKT~PRHJH(6U*=2XR5!TGZ*K9nbAvXWD}4b zi*s>qDUPp!HV0Qa{xuC?oV&q)l0$KEGokIyWnn~`z)v)QkIKOL&mC~g$8CHrbNrhc zz&QVP9y%)6{y)&=UgU&67r)G^eM9;spsZT70Sv82hE=t8^><6wMg|uACvMP=dHEvrI+SvMo z^Agzrv>vOBQ~zlL&L5lfKIbycK9q5GT)!vPanpE6dnG=rup58nai#fNuZQFH&4&Q3 zp;$QX&n0F97r7%xt#iUxHh^!F+X7@y)U9n$Iq;~Tv^BXhHYA<4zPUKp;%m-EHKlwS!17x==JeH8 z9J=%5;p@5{iRo{AXE_oR7lTU9Vxb^+8$ASBM{cB>c92G5HvTq%(NOc~$M`n1?FzURL{bdc{NM;>vv)6H&4-`Q<*Q3|sm6;R)Wd5oy81~-)w!o-O;8;~PqCYEs z%{h{q8Ap0l`Hcg135xju7P15npdGn<2gH~|EI)dU;MpcHc{Ua7@FFSB&J*0n(PhrO zIoxfYcSnH%+79KX`2=Eikl3p}L}rxx6qz}Hl^IQ-qP)qaehEnZjUo%%^Hi|_sd zmVG7NUPKBTX8nrKT7TUD-WtEh%YI$il#B$R_* zx#StQvN$~9dJt}_taTg*Dn$>Dspnja&wVxd4zD=zM#nLtFsd3toN^+#fEweskJba0 zQ7U@1e5gHvsWsBjh9Am0I?mglYO^;Nt-RLS_ZqJOe8tIm^(#Etw%N3QT7kdzF=auZ z`|K5eS{xSn%I9eK%6LZbp8pWLr2X@VpSy-ZaeHxRHGn-^YS~%?SbIvpXD()smrXtE z{m(~S$vVyR+{hB$0M<;T2={#$enve)F7& ziCkpQC{{f&B^Bece2*l~e3Md=Z>&yvE^}zh3B&30c+->XlcITPe0ArA-dfW2K3U)h z`3c}{vUbn}1t$%Q^70cK!0H}0#U;5``UY?b1N&0r{eZ0c$W_dIC#VON2f9B* z0I&@=OXTHmz8=O6g*V2I)otN=1#LG#yBR(y0a8tP`Djhsgoz$xCD7r2SIS5O-G6G-AHy(^?ws(|%_(m_K(Q zhrL%H^mg4U+SfgsSm8XeJxzMcRhw1F3RVg=u>rhAPR|{pV;ECs#HonxI0jzm+;Tm+}6pgWZ zoLZGW_WI{_Ysu#W*L~$DFHzwleRzo@hGm^xh%1$Dq6NlRXSL&2^>@CR`bedG>|{#J z@R*ev^7^wEym5DFVIQ(V6eeSTYq|Li;2PNn`$IsB8uqq9_mdqnX=agYpswWWs7=G; zUVM~7sA#`=+MfWf|Ez&}x(VD6wH@Sy^`1wdluWjTus}mFudRTBq)_Ql-=zygj623+ z+Ikvzqf`E6E?4C~pms;Dw}Xy8VSAS;m~}sI)M2;49lJ|BZTg(MpGN!j`ex{it{tlY zgz~Qf+IphYD}%4S`GHscBA28dw-$%2Puq)Wc6P-qaYH}6wzJw4qz3RV+B~47ihLhtZt0-2p+rEG7kYGFV`20 z&L@b8?PWJzY5<#&M#SM&FH{2iiL#kU8oYRr8^Ggl{c7fF7bznydkygy zeII#4aPBV$A5?FD$!`E(-tb)De*VxE8SvV2dv6JZ{9!vak>B4a@yBX+eS!>-@?$&i z&~xK^>A<}2frQQU1&ktFJ9~L0jz~U%A8{Ty=CS<_j7vV&5kuqLY7x!y=Iv9G6^HIP zc7z#w45s_?nddxA+&t`n1PL0yXX}cUN;iO%)uD&bjD3CPPc=jk_S2id>XyKM(Lh~8 z^5T1I$uX}c-Yba3K(#vFQ|qshhpJnx1R>+cvlm~-%*9nZwrK#D0#XCkT!7YtRQ=vA zgqf&q*nUxr$yY~pM3jF{TNM-lH6bQV)~3%ig0&4wJ3z|?m~d%!4lJKU8o`n)@)l-$ zB%@uE?C@N>Xlo`Wv|dv4(1eDRslj!fqWd2#gr(Iw;Q2*_QPg`2=md(^0eT_LIg{nb z%kdsZNTayd5y8k@KAVgU%6mt)MX&Y{-uN4jWdpLT^MZ!+wKlrcLJ^)h1TlMD+yY$>+|PJ3`nlkAT4n5FS6Kt zBY78rEj1vS=CWkhknhn=(C|5Xu^SE_cjD-meQ!!=07En(PVH=9rd$neZ<2EWzU3T( ztj6;3x%}O!9tL#PaAZ^y*R)cz?&`F7eRO|^Y+;;o|k{wR0@*q54F-=g|Ej8 zMU^{hqK{+9YqZmN9g>QgP8mXf%TkEQ(GQ#5HGtjNA7aDPq}ZdFtA>O6!NYu==03mI z`F2uE$#dKFxvy6frA0K$-OpOJD@ne+w$C4Q0#90 zERPu)z;>ePU_&RfoWvU0v@;gce$1;fp5-{oQfhE(NpfEhrfEeJ7*<|>BdYs~uXHED zHi9)*JhDj51(%DUs9GZx_vGA2X=4>GXrfB|leR5+VqHfe|I_Dv6Q$$tzgFzCK>t1` zT!rHq$D|x`cuKe+&Dl3_iN;+(y4}LLOX_8n2Jm2)dN_SH)AqQa@{EdxxII!Vs0DwA zN!sHn*yvyZk9Nwrt5eo;A$YEHED)wTRi%xX3ze$MPTlc0FZ_vFa<6Lqb?R#1& zJ1jlG+R$o(w%@As8HeuK9-m6Qss2(wSnIFv+3Oaq zKQmzFxYbe$TPJ8=b~C>?4%TS&dVwbRyfxvB?&E4OcKUqvl_Wkx_Au0QAyY&+yyCk$ zKK1eh+2fo?@!uK8$KR8iphQUk|xSwp&&&SUtex?ZwoaOB@u2bFzwO@b8 zBQlRH>~8~WnDZAb>GT;#17V+UAD}dKh_umGRz(a{H+2v=>0(gozjjy#om#DyN~)Ro zst>P3rvxWyFgZNcWJ%b!;kk-*Fc;|fTLEqVp1#RS_k*^7=J*37Pb^HipYT{~heNxt zOgTqIc;Ynl{wx}KKdVY2I$1T|eogSd#ccu2vr~3qp8S1{z~aV% zJ3dN=yf$?WT``P3PP)_BaT_p zsoJ5XFr;u36dmGnv71#$GX7rIEq;wn>Zviv|G?F*V8qTYBP5QkG2U8f@l<%926`GX z?-x5>vdq$N0OnF}+~3mf`1uCrsG*2^%t|%guz#&U z#1(~{S6!m)!&fngu4BMpV90Cn^3B)~Qmo5S>0En{kK9-yh+<=M{D3A*ZRb2HMzMw< z%*wIFP}nKp^|3q=#&<*Y%P>}^dgOABWSOruJ)f8@xv?kSq;>r8c;(~~bMAlV0qIYj zmo>*%hbe6c@>T>H6M%KINN6zgaazl988Qb*c;+Owv!A~d7pjPw;Nm7NS72_ej07g2 z4z5IPp{l)J`B)jkx{(~`rH9&*{V87yEMV(Lp0tY(fyD!9=aMLrp zW7-y5HBOYP_&g;ZBjpsjUXcAkFbEcZ&Glm@&Rae6h?xUliJzx*H;Lfdd%X*2J^n35 zIGa>|sUL9ib9}dX?rFWYK0eM7CgL{gH7_SKa)*4cDa6L?F}{6`uc-RD%O7fCdybQ8 zq2Amcj1ONVY|mgo10%||3@bP4RnwIZBKF>*a@_fL+9?3Xa~L|U*NuR>P_8(z@@KK-zyJ6Dgz)iA;G6^% z*}z@?fC1mw1U|Tk^XfU?+wYrK#+@A2GCgEc0t(kJRgKcy6>S0oVNnf*oyrF$ddKJX+*Klgvv#Fp&EMif`hyga`9SK?jOR1VNz zDK9aQ6CsF{#FcWYL$tm`tEpDKbooZG5~j-l%%|VtClp7q${%mp-_NeAlAhG@31Ea- zA73z_48fdE#EKxsz%;q!-Y#G?oIHN(_iY1^|Lf0R73vx%1g#yUVJm;vo(#SaGz5PB zp#(!-euIppb1mkFdEJ;Ef7HgOoReO{s9lIkDem((E@xCd#5Wugl}!aO?BhF!w%6 zUl*DR&!6MGr#LDUFZIX(&MrhH}RP*o*Hp8(zs^ImBw;tFgAU7WdkV{s|W(y_7_V5`A_Qc!7c(L?C) z7Ke5aF0xrZJWSGi);)|xrgjFruo4Fp59jzf=s;fZ)QoKZOo3T8IhXrqo*Z9B#;@QH z19K6f%|W5zLQeL%s znF_H5Ie^j+R36u(e`2-h)Vt#x?cfuwEt=-zxeMX1a08%2Wf$DmQb=(Av=zg)tvU%a8DjGIY3DxWLI1RO}j* zu(5<~YGy)ZIBE@Py;xfa&e61JRQF;| z0|2NyB=5WhvyJR|F78GfV}v!9TVEVTn4Wu}Rxb;powq1*tGe zx8X^gl`eldG*-lX&=Em=>1c@4O4M*h+y4-_?(~mXg!||H*m7*iDmAUEz=#10sQCBUjoq2X_Y+OOZ@3q!Ery~tlBzC4HL_2UXi2dR$@Jj;UeP+KJQ|*#p_jr zxW}ZCn)Cz1yxn@7bF!t1)bwjKAJ5VAT8OIv03ZNKL_t*fFZc~$&TlB4zYXA%DJ{{P zL{>hTPj*0gODdroKxov2z7mHEKSyd2pVa^!tJ?C=h`5#E?9H zJ%Kh;2Y6v*pBm|lnM@0QWg!e~Wq00|D{8cFMTRNET|*aRDR;27ke5@^%jyM}8Mo;D z=+96UKk0WQTD>um>pdBN-~c6p>*d7PS~yOm+rA#FC0swTcfKD7mcN9tdkz;q-wsOk zzP;=2n!nqh#s=_+Qhr;I)Lt!L+B2!!u7#W-2bh;`-~9C&fjN#^*kG6mXfkW#eg!U0q}!F~HkYC`kC z%C34RF0hc>YDuZIiqvf5*=x&F^9|rV*9zxVeaDaa31f`QKirzCWSbKe`>a$D2D0zG zJT;*ihn^N{q(a1%>m~16oB#g%KRC#a6R6Tfb8%4V){Bt*Aou>W0m`yqp8$P!-B#&Tv z>zVl&uto7`ugOmUm%J+G;Vx$ud^*P~_>yGWF@c8OAX#&a)r|GR zvjW56@&spbeduYi^+aUpvgNF9WPWV}xTl2+l=WXu9^AHQ{fXhRW*r<9uaRAwA;omb zwS7&Sdw=HJc7@qc^n2^Ql1;{{Cs}t%K#_Op?SdHxydC+^KLKp-`YeU-JOL~fnL)d< zV#*ApG1mRn%zEM;A8AZB4dAOz46M;O?5^;i)ostG`L9!CR?Jiu(|8n~ulm3Ld{-1M;UW77 z?>A55X=Yts)hMb}YW}wF$pOeUCH`^%tRQaj?*J+$(SbGOd`19To0b=o4lZ zOb_2hXe&fiEv*qekna0;a}L1y$q*h39!Oj#7q6pSE6sQ)W!+j4I5vRYy!vlz0Bg={ z9AU(UbA`bBb5$JHh8{XvY+jP!q8=Un4GrM-XB}?-jiVKxpS`V=43yQpjs9DF_GuKZ zSpx^fYh<@|-KgWY0qkT1)h+D8AjboV>g~v1*8ncY_nZ}rbGZE1H-Mp(Gja`01LF7c zGIFLiFl%agsts5aT@CtJndhQk)}$J%}DIp-@o!&RFn{8r36K-)7;A@nWHVYQd(G z)9X=+{A!@25pg$0?jc=!+k%R}I*|A$kZjI0RHL4L)x~%-yr>EkZ0r!lyiH$TU8H2AItN34neJJ#38uZ`25 z0G65qx%XtgZ5I!HVsfWe1NfwN&|_^Vs(w-#asB}V()r2&iO*3g*918_bQf#EkfV3? zh0|?UjaSOxenlg?hm9$BElFBNu0vu3(OFH&zpd8|qKheW9P5`sw;bP5-m|`_fmgvX zGW!N_!F`wh>S67_mNkHn{ehu=E;;3Hyr?4#%*r=!QOWUf-m#eRNgPFFrtQPI_=w=S z<~XX~i9P)&F=Z<-`Mc}|0KYWkdso^^guJZwwG6`E#VGZ=df0oJS5*D;{Cfw4c7=xU zg(jhl<&IkiH7C=B@o5t?V2QHjWBul>WB8on=m9Ux-z47LDBbA$@K+rMal205mEXRk zaY~B2dx$cm{_~i1=HkJ_Ep0E}DWHy0oL>(~?DK+u-IYnf<@urZCTucoK7XP>gFhq$m2upAWJzB0*^)te^ghq}B!qlfGPp76UtFgpa zC0Vv*$&np)+tt_OTAfGYLE_2}6err&oo1r<14Fg<+WhA6$G$#UL!z6hbp&WKia14JQwAIo`+s}N*8CovaN1@&K4gJ zI)caS+=f!M9fp#}s07x`mh6J4g?HDk`%Pm^`Ru{Yg*~_+h7&@q*se8f4TYKuMs2GEb+7V1O?*1&b9n>!*g8?O=NEYH28=|EgBffBYno8z>zvRx31plkw$fzlK^dKhUaux%6M2Y{8U|_Z zq6O*xCAl*-OR_Z0oZf-|vQKD@HYcuV0_zETksx1l4k5+tXC5V&P2ND;Iw_V*Zj(JY zr_bk_zh>>-;p>nVd(x)Xy;6VRw~3Y2T;93I55a8&1T`J#O>R=)C!1VK~8k}XeGt|T+weqI<2!`jzHTH`;zPUw{=-1_FFojWlReGg~2T0!!9)?7O<)V_t`iy zg-;Z~sm#BOF$7kW?Bc3R#Ja)TTn_b*kfL~vaTae<{rxD<6ZY9S7sg|)80a6iI0Lw} z9N_3i{Md>({?(g@$eD1XI#t&j;84^8IIo$<>1}xY{NwsJ+k8kMx9n-+{#D5@cR#Mr zQ7Ueu!&dZIv^}c*I|?ug%fDu|5V-uR@!HocLHyP0^u2YKbAI)3V*ZNpCg}DAIZps@ z60usT=*H~xSmHnbcQt@ve%Kr=HGr+!+&glBK-V|Udmwh4ddmhht6M$zENkR+okhYp z^v$hn?YG;%vH{!|hnD$XjeK!UM$~Tu*o{)YGO23{(jN_)nYpf6)k<5W=eGfTWVEIM z%vCwQ7r_y!>pb_SAgcka-4o93C^x@H16a7>Q5D=gJ=Op|_7K$M`GxzWk&6~n*V4=(rL4d3;! z1>ZWCyMn)M0N^KJ$hTRg;#p%0lZUqQ?jCbdfVi63NGIqdg@o6m{0o3s)CI?ka zX!*kH+bqxysH~r&<7NCo9z_sLlI8X8JI86n6*8Zi_>J||Hxhc^_Fwup zF)~zKf|yCSvuYfY1Ua`o!Lgq^EsJ9@P$z>JpBJ-G1GtQ?>Y-(4I?SFJZ$<{%_hdn8 z`YWI@`=Ys0pZCOC@KLXCWb*vhIoY+~w*kCUl(+tPe_1{naplUFbWhcFr@-%Q06X<6 zvnji7AR=lXN{n|G^)bMOxH$5&8cO4C-4mc4TEv96kLxT#W-PKzsv~ zILZ>A_0}-G#LMB`Br3J>TQu3YS^l%vYtILZN8X!0HlJn>@>B&kPk;W`|M`EPy(t3< zwl1(Ha9#jDXB&uFcqKGAQzsY}a1Y!)-kph_KsuUxqUB}#ghYaE-P1|FtBkGu~0KJBf^CX7j(~CzsVO1&4B|xa%rt1lxs`LZCv+imDtelD`CKA4IS`2l zNTEGQOD+G*2Ji#1Sr)c-zta4jynwG0h7}(`?1;I_2o|-H&N1&I!Q{-rKL%#|XCvdU%Vp7#$^EX(yQR;$s>0 zS!avbTQe}5e5~Zss2h9rw>8omzy%j(CuxN-++O>6db}EBwcWh@K9-KVFGbF81K8X{ z_&DPIW$AchA2@W**%501V|wRvrDK~_2Sc=w2>0RS93U`#sM$KR<+VoY_Gr~f?Z^nW z$Q-~i-H_X^Iel8AROQVN5W<*snQFQLeA?;94`D7dbV>79&lwT7?i@!Z5Lt6RswVPG%zu9w40iI50*T>jvL-xzfItt zGs@9C;gd7IDRw4J5vKoe?vvn0i;tPu(4ezBRuTn#XrTst#-(DE2ufAJQL$dN5fM_+ zY5o3NT`!dX-5YSKyF}OOEn_v9>j@ehb~J;~0OkB09bKcDY0#=)L^%~izo@dG4Yt_% zTqH}(T|dcUQ5z+Po+k&}3!z3M*OuM#lbM6GJsYhHerlb_p4h(m;5OF9 z9`>L;aotr33m9QfFAa+wrPf)`XB{B=wb}KF0!YP4(a{Y~Hog@{0b_%p8*k@N4@r!M z;#W^PXPS@2)+aSF__`jm$;Zmser?o)dd0un9^a{mVZ!Vstr3PFdSV#owcmU7YI}M4 zV%e_zhVbA2^`DlEqK++*Nk^=Ia=Q1i%_9ll2q4~HRy4j*D;zrK?YQcK?kxK5YoK#% z(|s0*qy-Hk%zFW>X6nqAC#R+n!c~b@AMse~(=End&OV}7vYhYN*ZFRrC(g5DKoc+~AN`Nj45ZNjGA%-ha z{7~pdM4Iu`+Vzjqxt!1p93_{_17&m!#Kf!%e>%)`ffH7CMTzUPG*tmX-^*LTm}ZK* zRshqZ&0Q3`i*eh+h1{<}|Bn%CfVn8_`Ed%E-bGnu zFJh#m7MV96iI;@-!il}z$^qg%+4~oDQPTQA`v&L!blzXeK>^si4$P+mySu^$?xX(H zZYk~fj(X9%6OGE%=K0lXKeO`DS}=DkYqTn%773;!#+zYt5vbpiHItLL`KI26R{?{soW&OSQ4k5-0mNe-7Cn{EbCG~0cSlaq| z;A#LLHBl5A&B0l+cKYgnF4_n*qFQs%~A?Z z@bV9ENi&2lRqS&MtDYV|UN*I!xf`=xhm+Q%Pq3c8?Hj*Eio2hjW?Ztx(D?jOd>UM+ zf4hLaF`uvd{X7A@Hg&zRm%c9F`v4ks2r$?UHh~iYJvZ?)KH=Avy>T$QXNW_Np)!_S zu4ioU<~I0U*zN#N-B*47R2<<(|Figo?f!vgYmmRX0SxdgmbYSq;W&HJXQs8c=5WZB zfdD0hOo=G1x)`7?u*AVH#e|J*Gr2WJ0!CWm8Z=eX+_uTf}4s)Xb6YhPU z%~w-uugQ3fNLeQytGHgz&JkDM)gNCQV0OiMQ`k_q1Psqr!&1OF*`6Qm&ktP`yg7y9 z?DcDu<5W#)^_v>10={_#v~qr$X#i`Kujj4TZ1b2KN1V@ej>b>6ud?N0m9?8SUcx%E z&r}!ywLnV0f4MwhI!Dt16!b;LJi)#-0B#CKwmeUHeihyP{L-f0C(#25eSWLyH|_f0 zKEJ;W;FE5}Z_i{-!R5;?%;cC5&9DBrx&fTEY`g~W_LF4&$;n%ALj!nU=U>$X_7}Qm zB=dQW?fIBjL(JoinY>s2_9D_?LCnxEd>SuVB zx)h3iH6ZQy(T#zbNN@bsn%gTu7*oo?xmbzEz?|Ma5B(XIG4}s%UO=rOda9?Mt_ZXxj*7K$pCmKhj35F{< zpJ{?5JpbkfaPPM~e@PyYd>GJZP6@~Z5(pN3*}Ajkd4|?iwB{?RR@CLb-vI8hah$%_ z0G4rLap?J3{+T>;mZCVX3iL5IBOY!57v1WwH7tGtIL+^Bbr+8}u>rgv5&p$Z;2itq za%HAOU+*k;+)QxE4w}3z^C++f?^WHsL+J}bMJ_mxhuo##Mn1aUq zDC+r3N5Gt_{;NE5{m=I0rIzhUYkYIsAgXFeT{-^qKk6nJqCO)a=$tbG%YcD-Rvy*I zp-0^uUQar2$q^zLue7^NI9he1*x1Fgdl!pR6>a`XWS9h1>u%%x96J{ep1&~?#58e= zj^V@fdg!;$$1?Pg9m6$htiK#qf2yDBeA}|H`TXEm_HcuN`Eq@1%!pi{GMekL>uU<0 zSM3<4xpIFBSW>fX@zRe{kiP>gbNlple49%*Oufl)sJp?!`%Drkp9`MjZDnlxcVIGy zeQf9X%ylY1z%4js|yl0yTPEq_^=B!ZR1r)$@Kg5pfZ)pH)^@wM%{*VJ2ZzT}!@oEEjF9?2{z@AT> z&*hS3_UN_LFFRy!A!Vd8pIYlsU1nok_#2*y#slJg?whLoDw{TO(jEZMn?o?4zKQUs z>)ubY{(q~NIfB8+Mp^@ScGcX!fx4Oi-v#vu^}?e20Hl>uJ~{dsOz-$>x~3iLvM}4F z;VV6n(_diRWAv*q2}u9i$9|0Wxo2FBruOLS7#eY(m#P89%Kf2ddf@XoLn|+|0*35U zdaBD49{pkU827+>7i+sJF6!4Vl}4BcD-cg2pLE_Bfn`C7`up(tfy<+<=!juPrAI8W zFK3HH+FdS`O`>+jv?s?n>|{n8zda%K!q-gd&2=la8hmNv zh0~e8l71^4YXD6wpW+`;2(Tz5%45`0;9i z*iS){g<*EgyxjmE?>0C~;|<_G0B$5^19*eyZ%UjI?C3`SBSF+15vH2pYKdu-pBO_+ z{j$U660n4NDaKAArfb3`?G#aPOo*;c!R)AKBq_$i?njN{x%^S)#g}OJTLDY0UL2m$ z0}xtJeNznWrMy#Bb_O+2{Su0LRLvoLxPA`0(~yFuI;L+r6k2Vm)eDI zzmK773}rq@4=VnCQo8pqp}0JiCMhMvz?hG=Syb{HmyWt=;{i#xZOknMW#~}#F6DRu z_3$6k0A^fexwc-Ou*`N%!_!c{g5#v$B(_BHxL5BBqx>49e*6v+=1zOyVt=;zyV;<@ zR2+PLQK0K6@$uji*q<)V31i-BhsW^c#q5~I%JrX`;8=ph@$wrr+M)GZJen_Hr6BNx z_#7ACHR;xMs4v$;#()0!mF~FxU4L0^KPO*{a@~!b{J!qJ{_Vy|8Tpp)9@r;#6XSf= z+}d>J=$C*n;7rg`Fa|}5HihpPjsrVj_c`F-3w!G1N%r1?#7N2-duN2Jb z;#_y@@;E$mruz0WWvys%QjHw3N5rSyp9sny*>N84*Eu_c;)K<|0W9WoZdvT3`3A6m zz;YYF`}RH61PxfKPGPSKa&*txF9l_Hf(^o)!{sR5VS7o~2cC`5IAV9j_5G&eqH9`jvNl`-%PDlMvf~kVbPb3C0pJY zmzZ7hsj2y^`mKU{6tBx)M{3TzK9D#R>g<^Ya9tCo8aZNT#YgUUL{1gO%fI^V7fJCT zQD@rgPHJQBFo89Y1(uD2P45*8>SQV2q`~7jr~$lhJ73WR)(WUB_vmtb`)hKMBVZX5 z-z;2AceTV5)WC{kEQ(#M1VYa&To-AVwf$jX5+^_Hz+l({>^(uq5@i~5T|2_qP6vJcHW?%2!l5~UIez7 zz0tFXN&ffj&68T&NyM;;)IKnHPjGNao>5g`ATtJzAS0PxUMXX^Y(Zs zb?qrRDC6nh%>;8h>K4QP&+2cLAugZwMW08V__@tzzig4y|E)#?w=!lA*)DG(t}4sA z{nWb?{KhAMB?>${{9SC4SR+PTpCUVIK9==AEs?V};C(zu(H_rDo;v=~HZN~mR9q*#EW$aDTOP)o>3r ze_8+U^?8j=70};^NCWkJ1UG>94ez%J9L#jyZBBf{aD5`}1!Fa(?c}v03L?$g5MXaM3!Aml{9|(9uV+_ z8)sHN?(;IB?@Bjku@JpPV++orhiQc0hxfxUI9$4c^*>#{K@O2&?!_N^^J`vw-$+=W zcs6hsbLBAUNnQ6jy5`|H>Y-i%>0E?W3Yw9iA2o);xGBo*=0y?JH!&y`4-K9_R_6fK z_m-2zCPAG#EoY;7V-p29s?D>b|DTCFjce{GoP(9q$wvt%KgTAXUnwlTnn~31WCIwu z&sfW6zv!y{xm%90JpagzWC!gabv19}mnQ9%RgbUV;Ip*G+shns{kp_)^7wos&5(Th zP7SC1rn^fUOhgX9GM*gSN7ks@8Mn5d(g4oM5qW&pcn+yGzi{wO4LrQqYhRyBThKbE zW)rv^V1axmopt9unU?_&Ct`TBF=fjeEgg>wbyOnE9Al8?Z@bEH+0l`h&u-~-16Tvb zDmD$AKdGkO{U~<*TN}V_UiNeRQ~mU|cSQt%#P6Id5UrR>>c!F;?7wF0IMhvYtM^YSK%Hp7 zWcXNOg2(m7IN;>3i(4CqwB99qU3_AkZ;6uQ!F>W4%&#WiO@?cb=XDv#UKe;%!|D;q zfO2ujA$yt@TD@(P)&Q>6q}O;yaYtF=AB8x1lyYakZ+(hJXbyrqcOUkTjfyNi^ZeSe zKQI5V|CUq#e&3P?aENT*&bb`n%V#5^jp$bX99A63p{MoYQ@U@IliWHvFSh~wJUdeU z89khbtE}%yui!y=jl6AOb^rVZ@P~DOGj2FlIbz8(JvGJ^E1tE>DGP>=|7{K6mVnAX zS_)ttrZ|8VgRV(Q-F?;I-}GIz+W-1L|BuDELg7E|ITUMX(k4!z_A3*8~rH@~X}6g~-_tDg?Wo=C1PN-8^RY7oC=uIJMDt?Ah6 zjPX@6A7ok%27>m_`Ne<)+FcR&ZvYojGb_!7qYfyvq1uty5MLiUs{mZPy`dQ12!E(S zcNK6S8Y23hnR8tFjkc}h(Y9+`)(5sBMQ?vTz_(==;wH3aFFJ;*PCpgB!y97ss>&48 z?M1VmmvH%OxX1L@p(y2~X1_HDcl!RWm|+ZbVLJm(U5rZ4$MWYcP*bdpuUf#3lsTQY zooBv^kufpLwyD%__0zwWvXpvnk8>H9wgmiAe5LP9M!J)|wTLI&=uG{#CxE4`)L)bH z{Adl}P4e+sVolSFf|H^htFRc6uGQ?O7*FJou9mHe! z>MwKDnt6WknA1nzHpu$5`T~0b_(_{|U1c8|{lzv)RUN5@jyPHItX*n+D2o4i4PbdK z7xT3>E4D&dXBo?w6*b!c*1w2yGf~6+JOTVapHKKim{NRC<-Zp5&us$NA;SBiQ26Xq zz(s2uFNAw4KCH<;?)T$6V7zbEF0{1`oD_ib6Q}%0ze_|fbL%p}kA%x>=sU$%oGBGT z(-_pMh)Skv7ch4<@qH7x->ao&>v2iKRVM1w*TU)M1ZeM@38o&bodyyxd zNf!qv-T-FH*3}VY%hze^Bj~iNoF_%G%7>B?a&4`1Z_Hoo@MOk=eJzlw36)iN`+Ixh zv4Yn$2I|m@x#!Li{ro<6H0k6ROok?E`ouV!gtf64bwF#bo;G~>>+JJ&drrIJ`5bt~ z@h)1}h0Bw^SL3&6s278$)dTR1M z4dD91j6S?LI+r&*pMNAh+o&@YI!eqF=WRmKKF9*U}4$LI@0BH zdIPxM^kJh{@5^~y$~@olVUwBQA@+o4_4f`>F>3!Z%#l-DzhPc{o&m&axd9x<`i%`> z%s(w#NV6#-7x9TS#;&qJ?1pmFmNY}rDG$lq}LoO)ZW9sw&ri#5&u4>oooqz*?w0>&45x>-?s8?I( z9;k8Z;b4Po$Kk$CtFo>J-W!3CzyhqsV+~;Ts4@X4Y3e{*`NQQGq{_c0>8N@|MsJ2D+0;ah!)&g*2{bMYzWw|>{%9I(|b-huK&U^$C+i*iNC2Lw)!@f!~y15Uh3 z3ydZPx91x9M*g?$+Uh9u>EBXQN_C!Bk6jcDbpl4?&uIW-_RNgZm)=?TH}&U?rg|>F zKKK;D>)@nUlI0_I z@%r*@*>Or>#VkX-XeQ`e3p4q4TQZ39a%8fnP0C|^0C|!wJllWC!+yu z_dvU~^}qi2`2=vul~{G#a0V6JOIVhj{&o{s=L0=Fd%>)eIp>Q??*IW^(lP9FxHE!F ziKS`kp=f8?mgNAHXw-=oxB}vPX#m zti7^mf0r)oh6NM(JmN=t63qU~kqXpD@LcD#+cxbt7i;TjZ1iPv(I!po2`gx@s|am2 z=3PFnFuC=pr!Ill*y4YA3`taE?%e1z&B1L|e|wvEWILmr{glOnZtdLK!|k3k@4Fko zn{6C#HyirdtBT_*1@U}i@y5%Y^XI*wTHeZrF)v+`pp`}I>&zIxcud9Q<1B0P$G?Xf zz|aE1Y{WU!tjF}=-1Q@G`SVy=6q3JK8Cm03^PGiqtsI+$c!Ye{)4%ruKkQYkzW#jM zjW&RvjwX2(Zx0Rpl@c(|T;*>uGlOpMDE;J(S<)R48>`ir?(WW{~`;X>n}*|#BLWf+JLrJ3hEaXNJF($<@H zn5jWj2mbTV!*6fryNZ-JmroFnl7QOb(pzy1$jkARGg@bq*8mRTg5pzR*YatPYvmI~an}0yp62g<3J3;cbY4*1IZg6`8SARk zj>|)Qt+w|585+PP2?T>PQcTZLsXL#cWgf#QA>IU@LzCkJXJIT@H#xZHxVvY!2Bu;2 zc%usV99!eIdB)`6`^i$`+-6yQY!Lc?FZ&Qyua;31QLs8n>K6l}SAqPqwul;XNM7 zdA_jzh=B1r<2iJ$M`A0d&mGI{0H6Fl)*JUkoxDn8+w}2^&i#MwzE5%03!^7%HHV!2 zgG&ntGA_OVfyxlh_q?8DJ3fT(9y-OUPc*`6oq?fEA6DKrfVG9?r%7e66}QuUthOxT z%LliakD-3X>X?-f`t}u0>HOHKL(W}w+#};_75?>@Z|l4dN1s}8nXhkL1I6lZYyeZ+ z7;&W<{_}15>eiyv1)35Tn#FF&jN&rXc<3$uT~kHhG2r%I%_N3#(HtqbRait(5Q=2M4$6 z3h{k)Bb(uu7^}_yX5T^Bkc)6h(0+PRG&Fx6Z@I@=@B0yn6Nt}UP{}jrjA`=}0f_Hv z!#?9h8%7s7ba;91j16=7%ExOXst^|?jKQ3R$3g<6#)lO?5o$qpe2Czr-H!-uu4;}6 z$NxRFd6~UoO|lchP^8pR)&K8;tX0yo==%_ZgT}Qa;fD?lu7j?%cZc*S*h{H$tu{yjgjlk2cP6#v<$W)0-}< z@GHm5kv8Xvx0}CX4S(CCt}NvPv;q9Yime0a*4Ji5`Ss6ub$Xpj9x+IcGfj0?b6Z`A zisGy);hP)4ny4)DSr5n5Kwi9+P%+(XFOVmV7MNO3;=jP z#p3Z0!C}nVo&p|V>g$Tlp7Yz|7|*TD<8#F4`?bpSHY=?!Jx4{oWyb>^S5f`PJo(y6 zlIbo}7f6y#AL7cE(Zs|_DAD^=_Z`<1b3n|_J>TvDEC^>~T6$bW2{?4Ue@DF5+#IAl zn^%3`X5z8VUH$%Sk3CS;WBh9|-_|CDq#2HXA!Tlz`dKc`BoQdcZ#9?0!^`LS)av%* zrH*}73*BLcHyYbsjypd#c&@w|E&h4Do<7XRcW_|XA{Ku09DOy-q5g&jaBIOGRqCqk zKDe57RzOyBp2&VMBga^$khwKN$@f!Ui>!jsKHwV zD#n2o?KxX2=8wa6`H#i*5a$jo^|KYP4>8rZH4_o5+Rv4aL2A~hmv8;4{`o|3XtmiM(=nbCRyw8%v;aQ;P`(Bt9AJx zAG>M>JPYYG+|aw#>{UE;VRsB|5tM)Rdau7P3lfhBJZ`KwxSn!dR;0^0m)SLAajf%K zE@J!|{kVI$Uj2MhzV8dw-)m3ESo3^&>zb2E|BkWhFa-zTG%e-#+rb#=bGG9vXUt51 zSuyeItas{_er-e=z^zH1&%Do*X}!c9dY|%Z8}q)+xww3NelFAez{!qz)5z(hz@|BD zl`LiZ8XSSIOA?weJdfMfj6<$gCDc#7zlFiKF^_v+*E1tle&yvyHh+iwU#$|b zP<=8=Ze2IHdw`GT85d`!Ov;{=fu%WM!WU|rk@Hf#CyMy ze-P@xJ#uh0fP2G+*FrI%4VI8Y>I})6q5FDxu?c+X7ma%dQA+NpJVu*saj&#q*+u9QiHeborY5` z>b+BQntDtSNzXQ1{3S@W0@Yyjit~843@6RSI9xPJV#vjxN$cV4v(&LKkzU*;rq~D1 zsh19y|HS;^8Mb37fGP)Uy}ALX`a_(1#dxbKjXp>@zGi*iJcTo#<2Z|!zQS0Kf5Rvi z!lL1V+f9N*{HRggmL*TS2T5%Ac!wu|Q7mp4@V<_e7))cwg**(fb8S7G-gaFuhVIU2 z@5x8)0aq(Nszl@>z&tEBn!7r|Q=>}51>f0XmI(|zddQt1f3E)$0Ye7vB$7NpeVnFJ0w4PBKV(V&9fa3}fAM2cajIDl@tb@fWHGsF+ zRri8@qwlLJ+X5DoEiI4R8&`V*&c*9{_t1CP)s<%c{e$?PUW8WTx1b(c9U}MT83NIn2+*ON70%k)5r5{-q4PLg{@nu` z9Z$z%kN3H>5OUT552%74`wqQfhQ%fDuEu@3T7fe3X;(aq414UChs_-|AE55tUu`N9 zY7C9Fy!`;cWf+F%CHIq{t-YDrG~XVM9}wO#%vcuXm86&UzOLRssOv0gQ{RFOLG&4P z)#lKIOQ_EuqCYZ*!&x-+l)r;NhFxOmdUb7Wphu^m{&xTQVHFP&S}Amg{UVjz9L{z~ z#^b7Lx}C0zZ2WooN^`!f-+GdOt<8%K@^K=^f3kJ+vfWqiLwmAN7{PRm-W2; zUdk9hKXj%paR>yqj>@Qfe6s$G2JoN1`i7h1*Chqk^M2LJpl|yfU_O?fSeHs(ht|?P zNNWJ^Ri^qDD9%2fKg$SCwyhg4ckJRWRHjD$tr1nLf^YW(~z+QYf>!`P#t0d>`=eRGUS6-oOh-_Q?bwsTb zhy3&70N%IvE0zphUEYGALxT>%`Mg2On?c{!0Oon|V})nM%M|)P=ItAG z*bA{tyWwm$$yWPHh-5))E(0lx(D-M;z~o>LNgC*+BWCzz_r zCM|tS_6d))u!BY{1B!3uJp^@0q9QLU$ci$Fi*NG;YnFS$#6Ae_G3nE40p+jV!a#B|H%xT;f?T6 z+*bDX&6Ld^~xROl)#B}ErQ2~1_0h3)&1DPV5}nvlY03h8Zd8v%rUF4 z(h+9H`lQT&dl^Wa1VN5z`MPP=1MsH{-X>&+9Spe&jIm z@^dJaeduh>O*}OX;O3`9Dum?QgL2~P2~JxboX;~nsN48WSTZbqT1NJcb^C+!%=1xP zGp%3F-s`?UcvkcKL{b^^gk4R{s14w}$a>;BRNQgFdveH9%`xQt5_f9qU(M|!eLQ~7 zYG-Wzdes%T-hIo*5$b;ZtqtJ4c^tbC_@B);c|9CNgE313VPF#dn`-tKkRZaWWJ@B1$# z(!KuxrIt3D=1k0oD7GL;@g!6v8v`arMOrFV3r0wdC@6)VXf+a15vm7j6RbpAn^;fV z#BNc+gCr-}k?#Hr`|Wdo&yVqOU1N@U-_Kg_T4=i8-!tYI*SN-*bB;O3bKj4U9|hS+RnI1H+VU<0`Ok_%OlA^zSSSDVi{ zF+6zSV##6QbR&_$WH!4T*80`MZSBzAd7gy`=c9EkgyH4vVSGtammLgO+>$&}_wyM% z3(C8=&*rkevl-Ri^Up_QHk1B}+BY!PeZ?ARP2Qc<*?x7ggI@pK`-md%8y#-oLAI7OTiD4gNNEy8G@tpkupS%rb zV1xT8`G7W-0lvwh>V4Ls2b!BaTqke z))in`JN8#UA9CIkz;`r&-!ZQ55KA6IPOe~cW0AV-@mQ_u<)v3VpqyC?L)6wf9Pb^R z);4f#Fb$5NQv+q03G2Bd24QgfuC!sy{yNK+3-OG&gE`%Xj$3U2Tdo#{?(nP12=n#N z)~<`^6;j&a+DJ^^xdt_?1xAajA}^c}T?Fi%@9jCXw0?!7n2#eq|6S57f#l|IT`_pb zdY`}e?Y05j=r~>hY%DvTRrB+sSe|g_q}c5}sSd*r<;5DvcW(mkjEa{B9d8d3X=Gf+ z#bYetH$I-TA484RN%2@`@zE~$aYR9$)D8^UdQ_cA2ZoT7Q&M<^`!+l^a(b@RBPmKn!6wR;H#^-?n%exbC+w?w+f|o?u4dBw}b}m*i5_sU2 z2q|_g;~1CLtaH~@O#m$*wXh3%rKR7+_sHqt*iV7=EL8-Lx6fMy7;c}=x%EtP=x^-2 z{!?22^52B?L|lDN-yxRjGO*Y5eY}0YA{nTUsqM|-tgUWJn@hWGv&z;8I1hJmdOw#; z-FQcA@tBl#7B?za`r2sa#_!ne7E)t-{>;wazGAvEMYC-_{cA0Hg|oB$>Uaff-)kH{ zW6<)>i@E)|f{XS~v7!c@lfTqpJVwrHcji!iPGMHwMHb^=EH8@DUM>s}hYgkebsNBk z3uQ6Ts~RJ-Yyy{rk7=b#_j5pgL5`=<#sy!d;ui8Gu}i$hmw7>@9K*0vDna35GrwbZ zLiui2kz$;+z$nWK$i=*dxP%#{0tQbCVhc5?R9P*?%48nHlo8dYDYM5;q46A;6~#dY zE629~SpV^__u+jEULII&7khd1$c#mjg1l}F%5>aY6XH_p-edyMKv63{ONc~{eY^!fvHDYfC; zl&P;xu6S<(x8q(i-Tb^fXppHuWoG8}HzSdtLY*tz(YXI%9zitz_sv1t6?lN`Gm%@T0%VrMuwcPw zV`lSYW4kUDU}tX-R54c{5cyGJ4qOS0Zn{@!mhEeTvpR-QjPrb~yCOc!F_Q zJZ_0ysAwo+57_IK?C!5R_DFjvu!TEl1Ngi!TYnt5bnNxt+yB@7tKJ~Yyz1GUe*>|Q zFgkO+ZUEP0iuVsn9W$EdFRh~sQ}FJ!7P=)*dF*l_6D$d zUUu_2DIR_@Y!XcKw=bJeD?lY(R${$ct^vG$i`u}p7Oa;5LwS1vQ^pg`bH?7~g+A)N zo4_$|;mjfhu?sx_Gay1jgTyiXkg9-CvB}TcwW7SX_kM+U$Q%`x9Fd&%ORI|)RqAWUrwOPVmx#_q^cdydu^kN` zxfD$%$iZeUg~wciIJ|BB>0gg*8#Q029Ky@zVZe+zM0*{!{7w7=uU1tvf9E{GV=FD3 zoUKy&oIb@Lt*IzmdM3`#e6hgywd9YFs~1b(zNg{%+{cF5>h79`>h8;?j}P?}mFxYT zivi=eny;uUryOsCHep=l&gE}IdgNbgYhD9*d@sj2uH$zHpOH2GIb0>$nYrG3IMZ4i zgHN&fyZA^w{VNcDXAI7mR1LB@nLq0)z0RxV2I6?r5573rl3H-c>!3{y$1{6Qot;N2 zp2qN#)sLLtKr#f$!-vVSry9WPmVN$~lH$~QZq^gcNlZ#QQaZhfW7T zHpWG~3%O0R9}z?(j#3|q;h$mo(7ACl1qVR;OwVN97pN&d4>-i`y#uB`53SQ5=0nbz zy41ISz5q7$-hyO7c#2Eo+QetpjeRWp1-SPnH;!&!&A}fHK8S7tu>QFT!dU_!6;Od6 zC>@w^$C>d)wm_}b_PH!jk?~IiTQ%)I*A&)bvl{maLU{aXi zB#2h0-LvMC>)p;qG|vw*7oWA)nM;J%@=!=Rp=X+NEsSz*T%XzB#xG-3{_j3Xw=Yes zGc-n0F^Z4zxXpEERt$4xR1OxF#AkBM_O;zH__!i0rnA#l4%j$cYzgwKzS~!(YO_?^m z6#3at|8hGRmY1y*+5kRQ#?&}4kRu1-AXt2uoG^3)cn$Pm6Sxa(@rOtg7)d^VJF+F- zs|nm5s+sJZFN-zu{D`bbL9tA)F#MSo zl010WDx!Zt3;4GjDRG&| zggu$6MxA-=6=g@Tdkwr1U(2c4W8D2j!B>r6q4Gub><*FQTS;dA22T;URrz6|jwkY@ zr1rYw?%Lp0G_=|BrSRnOd2CTXyPAAngSxEE>?esgzBrzNIX#k)$5;i_7b{V(4~x&w zpU^D|wCWVXIcTF-k2gFonXoR_ z^RZ5fV?9+)i>48~5so9>VDgSqWJVb^?hsfa_yD zw?f{LM|J~vava=16$0$#=Ky*5P&uAs4PdLnT-PHmi7Jkjiw3W#H5W@Lh&twYF%B7q zgf3d%zYOr3Gemw6q7adekdHmX3aW#1ekyhiiZt;!*a{gbN;=(BIYPtwSx#m^3c0bc zTkEoWSy}Ge4Vq6aN8FjD3K+*9B`zad|Hm;cyz5=>0qkDcNDDvJy_MK>0V39ml3i|nQc-ZQy-c~D5V^(*o9gwaN~yel zXboPA?{?N4vgKNRHGh{+@gq`ex75k(BWUAV_A`!`&Qm2vKp< z#uE+WBQO;hb%pGl7`;#9_lkaqpsE3UePN`1()Uwp03SSQ>(lbNoR4#I35nZ==L!3q z&HQ=H*+=&yU2eB$l+l)rb3gfVj~H~j?bV-1hOja+ule!oc4`)=^0hRpVV;*WZk||M zAnhqLfcJ5G(}l1#!a?V4G9J~kwJjK8+@LXXj^EGv#1WOnKt|)Y+zE-(7UwW5eIXD} z!Nt^<5#<0A3f%vIwO#iJedhYGS7mRb&o_eW6#zO9;A=&?q~1sglq-QD z5r^Kh`GYw>9lHl(Z1Mr&@&EuT6p`uN#i4y3*)ouv29mm`^Fbx=1I7?&i5+Rp$L?xUXJiuV`ADz@=H-V8vT-*Z}tjXeP15S-N77KG6;hR`U^^ zU)WQ_Qa+SOg#feVwDZ3Br64fQF( zj&qPPL`dH7)_K%ll^S2N@Et?YY%*%?NN}@kRUoECD=51AK;Xc=UVd$ukiJ8708h~X zuGil!v(Bf<4@Os0w!Q6D(T)sF%Ycuitv!L-JZiP~d6s0K_Pfmar!a7KxjAYP!rAqx z#c=I5kqt~RxbDw;^H;*t&x^}P44>yE`nk^Sd>mX{`#tXRQO3&YM;YtoWIOZuJCJaG z+Fz1ub(R0^)WC59osoTIBhD$hE#DzfN8? zi#L8jyg))SHP}$y-*5wXImL;_rBe`k8YdI*yu?$+N%-*4+mcWNob+c*TsU67S!Y;2 zz~d3A_z4bUIQA|a7+v|YM1JNQ=ho1%i3p<4O^A1jJ+{c#H081ZhJX-D+lKFOw7s!B zPX&?4=p>;}nX$R4QsjNm{ct9+(HeE-9U&u9F(B&2z4nm1+-I()nv2DNC*_d);?f;$ z2NP@4SK>$Kl4KZ}U)~opwuZ&`M8Dc!C_jbP(7*nVkpg8Y-QjcsC^df<+gk&exK5F3 z{MCsju7@8tC6;y^N3(5k`nbcLip?FLF3k@CXk{RVLN8*9qBmQTe&Kby@{vhS}wi5Q4TUs&(3 zFID@TT|TxN8Jt~@QViF!AQhTO2wnrY#rW0tUUf%d55wqrYJFbDS9b0m3?n{VW3@UW zN4uwm+H=S%s$>2@I1y+STDgVfW*Qk%eQ)k#C32D}q@I&kI4a@Q9C*ceDF4y(hB;<&5!L&Ifd zUw=Hx%~e~QcVyf~A7%IE@Amtm(KW@ylR@bGt#o&RS^Tw?OTMx>{yJlRmHb=!*UQ?y z)|DE->t~f)+kb2=*zFSStScM$+YqpX108ZN5xa1K8W2XZuy}y;oEvyXUzx0aSttKS*8q zcb?GsvBZerwH#q#Ij2AL`ezE|QQ;kf>Q!U(p5)LvGnZV9%4^U!OyVpGFo+MKo4*=N zz$C`IzEg}hfLHKD6L@uM2ZZck010OjHnYCGZ0Xh^LhmMOgOwPlf>ZuSp(>dI6X%qR zXPU=rK#eDXi3AmrJMYGuPkBwm?f4^cxOJVz0Uq383vC}6+>#&FCnci(%VozTPml|i zgn(3LyjKz)jiBA-1oK;2Q#6?%HZ`0tK-xh{TsJfa$dhK22k)>3agid#U72pbNqV8z z*JP_|F@Ot%u8n-;dx(WA(YWB0vJpfRYm=*g`xQskN^0?O4V|j1NoW0uLL3NyS+&4@LFc zDXvH}#Z{I2<|I)tD`Pkw^hPG9C(dhRWVw88aj9pU{RJp;W)?)KIbb=l-$l>oQ@Hdt z$yF{Bi*Mg7`5*Q3kaxgZ0pF2a|sv5vX=*(ua$v8e8}qiZtYVk*Lypg-_o<*7CfgT1i@qO zA1^s3;TTiu(Z;`ScNt{a-a>n?kPbK4zSzfz={PEuyQW2nCi zZ0j^E$C99SKOq2FKO4Xs3as*gG`m95T`I%{B;=Y0ebp<3y#f4pUlN1c-ahL%zYLoL za7LQI66HM<8=U(zupd`58d$++Tx;C1LW0MGst{ap4FtZmnW*Y4i>Goo0k9H>?(*b5 z)44Gg{NvUje=;uAcuinSOLA7bfV2H~4FUqG>6NOi2JfjJ<<`>=P-%*^2c)e*H1@B0 zrLESe(1>{%m!3q`E-*Qm8it5M&g%vi5-mM(&&25@~?8O*Gm2r2%sk4qIu5SsTo zYiotPc&UqR`KpP4Z_?7P_so|jO2x|)z}Hv}-Q~Y5!RN-=7+yCoKLdt%tBW|@*pLy! z2cl^*3xdz^CLw3-lMP@XIZEf0d}7v(jw@sDxMT~VQeFwDw!cVm%9?X%4zzM@6S&>6 z4}90t{!vTlI5H;`wHt0p7q}=naJ2^T$yae!`zRW~HysrEHK^EQ(G(e$i{)5+{f^nQ z+=Q{5f;)yN6u)S$;I6*|y#K4ed=>@31YNcPbHpvm>q z{<2evC)cj;X>V^1pB9q4efC*-N+Pq#%QBu*nXt^&*`}7mNe$q~GVO*2@XYIZ`~G2z zc^bEAingDYlKx%(w8r?=FAFYx&$2duFY9-%{XY{x^=w)>{J;=XT{pH^7`(K?y^`4Pf=Qt7UZ;l;o3wda2tJ|;~g z5-7>y^^3Pk1a{J>bl7=!J!QVbsr;Ol26N;dNOs9g~Bzy1{7Cq#bA2{Yyo zm-}P3kWhQAgfjOy?3neswq?fHvXMGRI&&W9#Js23xtM-ToaaSvuBN*hzgkr?*E>zS ze&Vao^soHXe!qkS&Sg5OTy^vCbJENi+*-xD+}x~sKT>&3R3z3x+sI9z7Dby0UUe47=a3ogI{i20kmWd~d6{D8_a&VwcuHgI2 zF!0y`my6N8yf>*= z8NYDLnDUBjy7@b0(W&Fa{_gQD4PbSn79(UN9+#67tv^njmOnGeQA|1iY_i^`!zNf7*yl@ zme!)Rj&&B%e)Ok+hvsnlj5%-uqnL z`OSO+xFycqj8{L501d=WYXUD8J^Bt*Bjs4-H<^qzq?~tKig5 zZ-wOw1jcpp5i>IcjV`S+>-~gck%W}Cbza7R@o5d{1*+}QI?lH_G`*8JmDOzPQu*)t zFW;{@&|Y@Wc*ZSsImB&go8d2Zewdn=OkQ35DgI^7w_R-Zx-idYJ+Bjz%}G-=^_DkZ zH6L!Nw)|Z(q#uS=KZ z$vT-Q+Se0a-fOx!aOFQ-)9oH_Yn0%dbH3(dsS%vd>v4k6WBR9?rXdSvMnD zBRZ`aDf_#`6 z21CWY8ao5{x&@Lv1Ol!PscnO$U|J+vMO#JC^AT`a!ANo)@N~l}*{SQDfNFDyzI5~r zU`r9Ur)?UxH*?6^+Lhp%_Qm|mCc)IF$38E=S^(ON!t;>FhU?Ct->je5wT%HJ8h-iS zxDTz-yIu3kgU6=vQdr9s1_OuxC*#}N_SgSAa?7^C^Ti}pDVytSv;pj)&wEw0z3*x} znul-v^V~R$;~CfBHh+^{PF5En;L3jYULpx>k{Z$1yymaJ;%d#&O#j&CuU6p(5@RnU z!z1f~>ZN4fu5lml0w+QP*nS8s&+q3Nz-)?aK3h3`djt3gr5ddDw3HXDE_DW)z$=-r z|9_+`6Pv(E?%LN)Eff3kyx=2qLLb&f?w9m~Jh(`D!AjyCL<5VV4c1m66Ti_W@Hvl( zgKgkU2y@mQS0=|c!XFc#Xbyx3n>=W8D0uYRX`j_p=o#@*UFTRliu?$+BnZ740+cov zzMNSntcaNzySYfXHI3S8Ei7LH=R` z*!s{K18^M$G7}M#`H--W;Usw{UD;2V8; z?ApHCHUc5!s6D0geVx?=<{Xsw{9`TeF3z1dCVtHE;CRcCj@+S*SkBL47EO7mcCsZ2 zY?2z)QLGuJ9_9qSimc&CrjKj`IMX(H-C-vm+yE{;;8w6K-`y`lNS>Z|MjHwr3+J0g zE|%}jXdfK4kf7?m_~J`f@2dg)cXxd`1i2Oqfp=>HV~I501YYg5jk6o*mreAqvO*IK ziM4dTMaCU6*K1saQC{=Ws_GYYH*n7Q+RBbJ0lgT`D!v%Z7RKSwGzvUEB5@k!(8I)V z8NvVbnBf?|nFCROmT_J#u&ze2uy#W7Bsj6LSS;V&R!ZvceHe?zu=x)Rnfi=rFO`F2|4SuvLCZ~L-J z@KxIDmZ`E|(0%n)^Bby%iiBLZ<0r>uo>|E;JU8OFa2q-KE@`;|Lq$+wuQ7d!MF|zc zxXlwK_XRqRyJ^4HKq8XIEx)ej+15R^ZA8O}Fnh_&@$;RV!0Ou^ygNsy4B~i4r02v2 zv8>6A-iwXc*2X^1QZZA#FRmwnO;V$VgM0e7-8kg4k!nnFCeuf@`I}zd<~k$oy!+os z?vO1%hy&0&e2q5cmGPa(VTHKmBp)isgkz_M=J(OA(kJm6%9|jN=L3 ze3yExSIx!cg>TD}m~U(4A6}yac#;C#oka>LUubL782R96n-gSe;S>e<2fZl8Haz#( z>g{TPV|dP|AKk*DF7(&9wNLuKbR4m&8o-Bj&{lMYry3U6F;3&X;?hk)|+q6DyB{nZ9GqFlj|C z{|3$y!;vf>{f4BBHOqc#sqE#Lm||co_OTJaeU6>nSB%cyAragvh6qtH8oE(X1Ne8o zQ~w6=6a5C6qy4YQZalJP4mN@PgSkJk&SJtB9r4s1J2Uo@Yv|m7e{7n^w*>;VvQMgBbBzM|PZ$wv90%WK5 z%gUJ&ZP{^GUM5`tuy!78bYfi%K7JVPmH)@Hh`5IL&2dE zCbE?eaWXU*C+Y3x=(0|qzSn*rQ*($ml?<6rt-gGYQw`_c>j0jABk`(u)+VQtOS;`g zQBp9^E2xH==NiEN6$TPTj2=YONG7y3(tY+0%Qg?|g~Bd61KXvu`r>k#bb$u&;aj{B zTJ{G?y#7j&+Xh3fpR2uv7d=U8g-KOVy&2vVUKFPuT|> z9p$Vd*CsIXEEIAlk`n`z%~pm+z zOq7FeHfP{%qVF~45`ibG68*y)z;)db3a;YJsE=H}_cM9aenM#^)9K}z98oGXtnVDx z4HUzy8pHf;I+=HIwdjk06#jB?VGZKy|L=hg>wD2 zNiPbKy>RAQ!FY@x@LT|}z>G$)<-O0{abzbJVe}Q-lXD9x$-L_buh5J(aS`6Nq|q*1 z;Uqhj=NZY?f^eoD%ijoZEI*%;yte{+dHw_!Cg%M^DIYvv@Al>0@Ze92HB7aREG2_P zrt0uBv-gv007ny8Z2&6@$;2haqh1i>@O*ne>~#a!@}#X{hJ7LDZz-N|vXp;1<^IK&J=J2IS-^#~90_NPfh)&%qP3?RnYG&*$>)SO5e+i$7KPBE+`$ zC5P@+S8uy)0IwqF{oW;8sqhFFKc5rZV@nsS_PBJS~<2s}}h=p)|z1@j}8vY}WrO}z`2 zJbP1lPExk6++MDAeDkXl3zx=37`Q~+TZnUYqY{zDYC_?E zjo>NgZ)CiQTdUO&XA3auTRW8tDMbAYnUAUgT;9m-|2r0c;cAa*00)c)hRg_eq0`?5 z-w*Qv|Esl;v3Y=9LXNK)FAdvGu@V;<$69*}#-HW3$9f+gKku>=ANS3|X2cygAiL&J z@{SE)CPqFzPvyi@b|v;^W7+g$4dDHrMS}DSru^os2!4EwpF>PWwz4>ma^yIsnB9n{ zI@TL7fVEYHag^Mu#Or;m8o=Gf^i^4m!tm;oNG#hiHO3p_SpmT6uM9sg9ryY8wod|E zrD#zWOLw;I`n}euLLDvNJ;_x!)!TWgz#{mn^C`tdmSF%0g}vwvCP;kEYUXj9=s=<> z(Pymr>rEPvPQ#gqpYa^;cc+N`&g&ESyJ!geQ^_ifu=Y@59I&j$W34d5*YJYSyuy#I!@f~Wl*re|SS z*0)7W|F?YZ<)u76HbF8%E?JK1^?Zjy2~d&Q1okjRx$yLU44-?UNQrj_5gt&(#=y`F z*qF3F-0Cs31a7`4o9i`bFC*G;PP#*7A>^^_5 zS-2hguYZs6=n^dpaCi;wQALLeRDOp|iU-+1hdps=hhnqjv`p3gIe2d++<2S<;d$s8BqZ@EGG&q5>SfLVJI&yrkT^=c?f$}Ha*^GO$^-r(8*7V~q<nnZ zQuuc@bNvtdihNOR1Udt3#7-bsH=8377Q`Wkjznh?RjEGbH-C*8Z#We3m2K)-r<#cU zfzk)g!F4Z1@@{aYW&Ou7A*c9dYBA-}Jcx+qx8V~3JG9~%JB62YCAL=fP^;*8o?m~5d>*5^gF1Dg?whpk zKz^P=-rU}ytztgMRSH2s$O!?7%Q)x5QIDh$>Zp+H*Lp1>#7vvmhIN)WFioCo{2ICJ ztaB1eIz1o}(ZIVQyWjqkT&UaITEn#eUfhuMv<+bIf{kqgv(pSu8`4ps{s>Hqa^t|E z4oE(kduTFM7$X5!w`(QF>Ys({$Mq-Q@Lai`eE;4+)as$qjVZ;~Zd}gt>_77`B`2sIKp05{n+~=(UT>i7> zWF@J&4*LTO`j`F&Xq*cXk8c}x!w~dA%D){En~*kQAB#2q9=$JhERxdo z-oyGR>?T{i!$z`G$?8-xum*6u-&&_#W0o6EMf_!(dKU>v6=Vc7nU?DjLd?C~)s%H5 z#64)l7vp_r@wP{|bGP)tkr6g-XS%rKe)kRF1(r28Cpd;M;a~haPUD<(aD3Z{2Z)Rf z^1ddplLUw>h0J~Yk-*xc)6Co^^3M`QAU?}C;pkYn%+W3fZvpcyK zT%(qlP!t51^}aM&H9M^=gD2{neP4R!aJqOxCy&Gu8Pig0i;1S+bYYyOsey#BXD4_RR8bj*o2niut2c0ZPy zm;3D3>wH-(7RKb*f>$`Fo&aYX054;Z($5v_9&cw@)*8 zlx_-?ddSUNNg4jbyc0%zQO@@;W+`=ja8wFO^IgY_`z<$s7i)$N;EQ>*bI1Vy@_+8l zpl=`X!jtiX=Y4zEv%r1s<3aV^!yk%9mz$p70HuHkQ~*5BIpWE9%vud$zn_7N5zthm&`q>7;>{zFL{Kb9PkXT}mFBf-#>HoI#S4HP0nAk(iuX5w4+rGU zA;c5lr!O)VUrB%KVeebXMX5o;LT;v|xSA@Zoom4TIdS;j=J@{i1Aj}4^mll#%#XL9 zW4*)%_kJvOO5A6^Uhg-%XBeA!uK!7rlQHGoH#NatE^&QgXOH<+i(2#gQW}5XB)sc_e?JJvRHhz{hG5Kx5e3M_D5l` zKj&i>?NN98U!$>oeimDVZLPeKbUp8#wlTln<53il5Kc&lV|0Sb3V_!TyX?1FDxHx* z-^i`Q)9U%4kJnE!p3Um>*+E+CM{AYHTQw0^;(YI{Ax2cm5IU)8l z;4+R($ML)!arPL?cr|A4oF51|h^bNN5gem75x-6u*_e7h-^U@VnFb@%y(jXU#_!Gf zePhq`g~mwb3?d9B{tIXrtMp1|5gK@#6$Ya7F+n9lJ}sl;RN`0`qmfPXFleO-L7sFR z1-4s*C+ph6&h5zBn2#S#0dSrw>WC248qWBm*Fzjm>8vzxMd6THVw0mE<_Qg>DaUcg zo??364trWwr#K~V9F?oJ-;XtbR~SMJw1uLitxYZS2$2`((FkoW+>hs??it(1`J)P9 z6X)<+Kn~Ozz}m~8N%hX&nLqb^eA2peUmiS}d+1#AIV=u%QiRQWL*c`~J>zoG$X(37 zW}VV39z9cGeBG5}e%*P546Um4Nqm=28sZBX7K70pi%Iqwwq%{Y?{~+E^PS1Vdp(hg zFX>Ra{q0k2{xa)qQ%!S;ph+7+kK_a6k9;7l{~EzCt?Y#kF#d|c1Ww()AuOOJkYrzs z_nplb6@w2BB;yk6*3PsB@bVkL)-9F8W8}V%_P!Z_6>@YP3?C2~@adSh11kE9Yj4lNT&=#Ja143j%sjVl zYH{aF&z7l^k457K$7r$3&9TL%Hi@wqx>Blo+28y4E|9NK0{kn!={^K(xCF-qHu(2r zddlwN?NwpaPu_MHIZ;~K%}m>$*R5NbBT;PCILYIjT!88n_=gu#oUN2Rmw!0FP#Qto za8Z=4@(Kp4q!K~^;WP5>eD%5V6fqNZ91G4rW51U5ZD@ORxjymseY?C)X+&+O^aYPY z4w6gDUB3IcF%I4bue2gqKHP)6s={~DrN7lP=BZacXID|){gai2SA4Kc6o2ZZG++cg znhSCNdY?iVLW2y}=|hXPaf5N&;aIN3d2W0q`0_*X243AYZ3VV*4%O->F;Dcj*2?%BCwC;vnI+xdJr}PI zoD!F2FFE#@ynHC=E+MS=xLnal(zzq`r)GwT=&OWA@*I=JL#5d%4wCO?pvaM#J#(W!*%JFvu0XX(8DD`dwbdYZW zAEa6m>l(|;Tq);gQ$%F>o0Xqgc<_~EfNW{#?m*v%^l~zQBabX{7Y|@f9@4pf{$a1V zn9?f)ThdJyAJV%Wt;yo?j*!jyDurYmuY@6KZYxEYckaU(9p{g)KoN8tE<~dxqhFs~ zpOoj6@thIRtQ*9x**KUkv6nth%L(n)lRYdeB$S%H9 zfp5EfBDiJJI%i23^qz)~!;2#RId2Q+Q$xYq#Qo`_;-yDi_0Y&WIpBeg#W>$LtrR*u z%eN?THpU9vgqz?@wo13*rKa4*VJaR&S;S7!H`SPa-3mv*Qzl%U6%i2TsKJu z677p|{;g5h_*INO)%-QF20BGw{Pyb=&`@q2L>Sz%=URSSt4H+q%v7xh^Eu+e&AO{JCLVmIFlSI(7hwUuyIhu-^PSo`dE3fZ)iBNiulXyBvYif9f2ZV_r#w zS;|qp8WZ*=k(UA9>gQsYdKmcDL-R?;w5#jxn8PI(bJvksuO}0l-gn+}4u2(uJ@2mM1~| zwyR11a4gZhy2f#~d>#=*oJ~ZdEpypxYtI~iMiAc3#R%4I>|D-dKHh_+pyy~oILXNw zYGaMNi@!8XhN7sAm~Z;b2;m3~Qsy?Af6&sv&jGcP%fv$#6PaFtv{Kf1VR3YJD zxkMm1a&tS`0oTI`0z|H!{I)k3EUdSnZ3IN0XA6|n*0~1T>yJaYAo?L8+1~=3y{7HM-(-`)_6|S9ti)4xxBR-|Y(;!1 z-`I`eeAl_mr1X{>rdhW7z5d?n_XGpluEs|7l85HNqrU^(Mm}2XARG;>E4zA?PwfNI zWVz^&m=t>ayJpgkR)I)g77|_+QCh31$-#j{`;x(JrmQs+>RsR8%f~iFa(wa;*b;aQ zMlIbr9^tn3{GE9~yeZiA7oEryq{26Y%~*qU(kf>-81X&k+i@D`LleP}zC1E{C}tO# z_l*wq7GxM#VF)A|6XX14pZ;A?Kh*%veEsv9^~)2$ThUIfOOP+E2hDZf!Z9yCIZotXF}QSf0u@I& zZlPa$=fP%-P%8vX`MnL`1#DJOcK;N0SyqrahrFI|#nWz%>mOUB$V!C8mY1@!p~tmF zbHPtyW`iTCCv|8jNi{sB!y`85eVm7f?G=pyAi7}tU;xbeHQt8U$|=yt;Bs?Mu5fck zqP*1rhQ&w-eKRS~D9DT6l$sZHZ%c&)I0@w8U%`9wq6Hn?io zvNzPZVk|iOMe$Mvcv*&pz-z+XHg~U03eNu9X zop3p1J~iCQzrJSC{@8h9KIrZq%s*G()_Ff0hnH#o1Tu3GhF|hdVlp;BKhC~?o<#Qr zh8}R}{@k~lx6b&sVAzzPZa2?23XmZD6gQ)|GseGz@BGP0+}}_-Cb~RJ zHQywyXIC07LlJ9(_o)rAyn?Ve+-n0guMW9zV=iY!G;ct{*cuWDl6_ImZ~E!qmwN9C zfDN%FU)suU{;ub;qXE4B2ge=d=T%ruG$L)s)rGfUdm@~nODc-p948>WlqpGAnm)}2 z19$K#k{%PTCUJ{GSxvM>#--mC;AtqaKsmyjP)5X@DM$GmMjF`baERn@%(Z;5=

    zcKoY9X36ko$IZ8%-nN3mS>yy=(wwu30sYG-Ps|1+aj0}L^S7~c{HL_;;tYo+pKSmiuyeWh$at&)yry^=aBgmv((1aeoN>6iG$$U|K98=l zUR3$d<=ofTZQg{GSCzHIDf$9~>QqMJ0q4csxTgUNwNL zG{Sg<9nvo&k_}0DW;SGA_9sKQ?;z*OzF-Pcp6(R0l9K#5 zzL9eVYmna`hbw8hp}Wfx5!q>38@SuT8^YGX&_zmVM!U1yR>THSqrLq2^^w>#K6JFj z+ieR|%c;!J@z*}ea@^_2dIQk(^7Mcyl%xiyqF7^pD)oe-PZpJ*vaujV0Kr- zP^bnu=I{F2R@z~KYF|f`BIzv`)dO1H4!K!sUq>sxE#o`}f(w)H=Kd<&Ll77M&X-E8 zcJTJ{#XUMF^tDd1Tdv{|cw=wxYfSH=s(-pN=bVr2 z^}^zhQ!pgC<$a41%M0Fca}WSq3FWE>om)isvwYfEuz_?{?q-d6ilbTnXnODVQ_EyLi?#jA^~4p3bDyo++mn5yJ)grE4F#6& zabGlV6MY;er@$C$vTFG+)gX5CyQ4w~Ph(?%A8e>T|Ec_G=_-uh_4?=ar&Rn2x=Y~e zUa3-T0JnBiVy|8>#K6Pcyadh5jSS};FgceisK+^cx|nG*+yK`;O2-?@rQEeyesNUa z#!y~N-_*f^N!Qmz7ql1Wx)|<=yyIt!{WxML(i7e!N3M;ai%G6oU`3lBf!@rwe%`)JQGdTL=_= z(Uby-(ys>^JY_X6>h|~;q#GE1z}kLWF$)i;M_LD$zwyV)+Tm+%AHH3@%63H!@51R*Y`u4sTn}D~kt#7$)Hoc<> zEI;*ee3b>;?UA?WUff8(g&K*zFhBWg6;q$#daY zH%syKFlfJreJoYlf?j|^)_47B$(~rL0ena?Yn2o-oj)zn=dafXP9Ixl5=#DJzCt-D zCGQCzvoqrDolRgF=khx9{*&!R9P|D6x$`ktyBw4Q6$sy+k2xw)+vc%H?MB8u$x{R` zJ7%_jUXjj6pMC;(vWwa3sfL#r?w->WjD`|R|F}PR; z3v5L~Gi*AIkp#;Yzwh2Fu)2E5%{$QPtuU zEiCus$KsRDwTwY(&RD)Nb%MsR^`#FaSK3rmpVC;L(2^2YwzB!AJk=%Uf6wXB_`S}) zFI&PUwqf3+7*2s{c!``jyZxzrF6}HYMkXx<1`~dd1~7&-M@pWTQhgbj8!kp|ZPJ#k z0>l(N#eBHtbbCd@+oPbEOUYY-z-&bwf4%{{t+wjF zS$8=wVLtyyoFz#p2RbaiO&C5cc-f9&rws-NJjqcI^6;<`pRH)N>l+8u{9>u3YQzl? zTDFOyrq_!3;y)FewR9R>jr$`hPu`V-MA2VFPHdXsM=|JK z(Sp<66nne@?A3V1`Bp52*vs3R4Kh(l#@z$?XyOBSTnvB?Tx6V27jM`EHqfV@zEi0Z90wn%lc|jP$~aDaeIW@lRHS%SwBGXLtqutrexZ`kE@lsX z)#u)B%tb=ubbD&b)`jE{TWpp0C7%5f9sJ~p^ILU@PwR0=0jIwZE+;OWmWVWe4Wy-s zL=nnw1o=8f0n^Qz-Ay&c)eromM;N;?u!K_`2*MYP<9?`XhY*JKiBcszTZ30}KDO4O zYe6N~nAe)r(%fJ53^snzCvHnz`tmHt_V5?=P2;hh!}c0)H+0ZF-QP#-I=am+J?FGZ zcs`ilrK(Fwaca~W5f3-ExrWmnU- z20DKfAJpdWVm`_55-YAUzJBVz0qpqXHG$iUxfY^*F&K9UN+#>IgzH3~YyVs`rWb@I z8*!i9OWe5X9U!K_#eoEWiVTLIHJ#$`9B8a7!}7OIm0`5+sURhvMqDFvkrXG9&DDN@ zF)tor2-a~Ob$c^5dJ)Ps15j)e<&+L{Nxe2NkizlfZ2)5pl%o`~UVA$Bg}*xX^pmdM z9NOLV#P-QigF)W)>ZGpakNMeJhAOia-VE_01Tq6P4$D5%#^bTpcv^Guxz={xT0f9^ ze(7Fj{1|Q|$0bZ^4oe-%7vQbw31$B2o;3#7w>`xz{nNPDn$>ztyR37<&&Eu7)#pAh zWn;39DRoyt{(Q9dfDH+P_u9sCAKQTkypA-0w<1y84ml+9jcLDz zTr4nkm?W#GH9Pk?Pf=-go}vndt9(jga`6$(^v6Zp$z#kcW@W2q84F_Ms{D6p8Qi|vb|3=nTR4cmjmRiRyQL_P!ZwV}LhVp&z>CSD+@0JSy+7p(GJoUv2C@1v1K^l-! z(wST~34`&To!j|hDWfix%^;$+}nt~2)oy=OuVs8tw5)QWmQV#h5{rHn^Y}q z_{65JaR(#aSIH|yeC}tgJco{V$U(%P@mSC2TTP2Kz2@8Bc*N{<^S;^ly_&#}8HU5x zQ%l71U=9`>yKO(_6K=hie439D>>uY?udY-ha$~4wnDYGgqiN3$3Ns;WiH`fE6wSh) z&11Di4dLrq3s`lHA1Fd1u;NAfUI7kJC$@@Fs-FBqFP%SzA7=x2qObW4V5#1|n6DbZ zZ9vKk6MK?gwNNMLDTB+sTNBtqzF`ea=(A9bjJ*(zTzvTv;jx7;O?)sn zN#H(L+(#B5+|*6J=bE{4;S+Z>m$s0$8SB7vQPV6(CRtDCsr@zw4@1}`B$EJsxy5LE zFWG2##C2Iv))t~tGwNidEWn{=AHt>lG+?V9s{MsBM4d$r{@$Lf$=vIgAws&hn%sW+ z;Kkt@V`noD^r;Ks&D(jJx z%I1Ib9&KhEa_bic0OD$q0$&Ri&_!`a3HQI_eEGR4q7UYj{ZcqT&va^KTSx==KpZ*K ztmkD3l;-+_xp8k3tWKJHY~yv;EmM|#3RuaFyp+-BBf4f*v%6T+m;Fgzd-Kqi|4L(JX8PMUrrpCrjk?Z%YKpdf3uRuYw3S17v^9Yj?1nf z<`ZtcmVBCvDDIDE99v6v5n)24oHbdt7?X%@mV;iWJu4`@gs>$#?vuuxcE_N|ThtJ~ z9@;Ix0_u$P2(EO{B~W2D7j&UmI_+w8g-ipTL)w;}H1F+t=JFS(RK0nFc002HEEm%n z(N_&3f;V!}dLuKk_+`jch1Y?#as<1e$-rXiNV^XX0-e$P!Js%B)YHUZP7E#9BKP=8 z0bMW-yYZj``|uRp3?KC8olR%21J6ar+d#*naB3fMaGB%kc&;)*VR*|5s%MP7`J+eu zP}iJYu~~p3-Pgf=&8y`P^`0CO33Vo^uf1arXkJ#<`VKs;Zxx*VvQT<58}hm8xH=;S zldT=zUnI)*&*oc0MEhi;*Vsf?O8dOrKZT3%oF;?37P)kweZBIYg3|sceaYj%t*!&Y zWwCikJU?vaLiwMAc{a{<-vC~8t~(XN|2TlfQi>KyiB7LaW}{3SU$|bg6D~EKjs&XU}g=% zp!if}k^Q0d{mcqKJ$l;C&1Ia?h~koO6kpO^6v)VZ`WL%cNNWIB2ZWbxkuWDWyZcZ)V^So=Ch(zoap;&F zl5>Oej&We{PM9&($@-IVNIfu^BRXD815naMyp7mdhP+jZqb}XMI~4Nq{u+=niTKR5 z;JGLyR`t@R-u}&VRIQ40f+(4fyja3>BM0p~Em`>0%YDkgT3pD^lAC>`e$QfAb6J1l zflGFFZC~(+eC$BmW)!NwJ6L%8?php=v0M+o430GLrN%JYtg=?kzJE{?G)Tn|k)~~R zaopoqxY6!?X@^aRob6-$(s_ui@L+jDEZB{eE^MtHh)l*YQ+kMe+h_xvUW>l^9_Q3U zlkk}a*hbAgw)NbX0@O-R2}|1y^U}0mz&HNV!FfRZly3L15@J1v#%=j%d5Y2oZO9;2O)Qr>)TvwL^46=b0a=5QVb=m} zQ?{7Si|3%Tf#ITGrn8EXtW-=|7qZ|4C`}oXg};3Q>H>J3?QYdqk zcyqX)`&=?I>%el3sg4rHMcm<7*QgeL$G0QF+l~iga}DD^IDM&Za9R(0r^+0e6Z`!6p~X$dpNB!( zSM)E^EQj=uqXE1wDHEU0w&vP>cIEt+u(gs?=0@2722!;8o_iq=Yz2XJ835#HE!W{{ z&#%_*%gz^Hd|7DJf3G~?3^e4vJY3+!_|3_~m~DteZ$Dob8qz+shbp?AvL5BtY5=cM zHC-e91_?*8*XrhA(ILm|#e4&a3(i4Q`==^LH*gdp&WwnqMk>8o5Nd9&6ITsZ`}-kP zXMGAbM9G{&0*I45%hk0sa!===&~h4~tygWums`=KpK<~Sjg}XR>h>l9QD6Hxv}O=n zI>Zeq)V(61&RV{;^HBuKt`yU&z}TgXYKaYe3?Rz$mnNY|fA83}-i;qHk)$ z!KjU*5RtvY3qWIA-4>%59~eiv>?5QUIyXgywerGn-F7KEKI{OeKv=&l2_BY~nA$<@ z`W<6yJ=h9ry*^Q=UQu+Ozsagy3Qm|)eH`9 zL63}8ajqYL{+D8qMex^F;uMSHY3z8o(`9Az#mP1C}qUlomi_ikQu|^XE$KGwlX-XZDu zd^~y5?aK*4Uu3h&s8EmqfbJ)%0xibG(r|_pNkNkp-Fs=xap}9h7D-wK(;ky3 zK!Z$0vpf+iVQmL^^UWs(uGEKBQHmM=lzaY~njm#s~3f!YqqgUykgEtD+AyQAW}kXUjuzzyj4=CR;i{KKX=G^V6P*9 zqp(P9os5LKhZM67yS5AJ=Pbj1H0W80LHOpw63^ z&6s~|#>TL*Rz5cQk!H?2+=okiXGWT9{>p3Bg=a#hd(J*`c#-{_{px2lmp#h(Ic&#O z!WF_08iae}sjuJUg6p-m@K%e5fwby2t9g6G92S(r4d8Vtd0>UL?n_wm!TL-n@4O=N z6$ByWLUuv)lcMm4H)x(s2M!O(8oFWp15MM`#2dKK&{Yn{@J-L zz9)7A{xw7OiwVVsw@L980`5#g$|k75@eWF+VGSvg0x2un{yH=89FZY+ITNt-+9)aC z=m?CI@VhTGLGP=F$-$ZifSc1qcEv_tYlOhDYB$DRT% z4`U@Soj==$$Df@o9d}$lc?^!nhPOGdTq$A7W=Tm+;Pq&#p=FbM9Qf0F+585uz7A?@ z-rV_d#4IP)q5E6uoBRu$iJQQ=_B5}7_8P!z^!72`tNFs0Ej{-WT^A;4JoY&_axv^4;SnU>n7GZDj~*WB^Ek$cwRawa zHqFjm?Tx6L38m+y&CX*()lp18S$YJ7iigo`)n{?`tDo82&8^H1ZMwe}J}-24AH5Jf zp$0IbxNw#fHHP@W@HT+q@6vDBHO9#Mk zP9Out8u0?RVrp&>5w&ypm9=gdrGMDQ`9A(^cq=^m<1~2`LkA7p+~W=47T)O-mIJx# z32rklh*G`s435jEm;H7@+vB1(fU{n)1rl4Q{xf`iZU7g-(id|xqVzp(n`cOQ1m=_` z)?d{eKOa%%-62)yVr~Oi&+~it!q|Mv!5Fj6rhtCVGVEK>ti4*R`CEMkfp>80{gi;j zF?t5}@!u17Jx_A%`+l;SYRTtd&O|g@7t$CxFjVZk0aem;&xVEl-me{{8dIIo!7`vW z=s8Un4Ov+y&))2(f0-OEJ@aVeSy1kf4E{qHLW6K`JoR@pe;2eK4&0;VZ5{Sbg4+u0 zNQ&~0rU8rugP}zu+r6LBj2sG=|Ca&6WRN18(+tT4U13U7ou&w8eVkh_qvrYaxfu+H z*%jRKppO-LSaJ<~T?CYLkIaJT-1Ii$^RN;A#(y15{bC}y!tipaz3+;UUf38M?xCIj zc^dvx5pnw?mX=EKo?3=-w5D;ynKh)fN>&(xSJda=kiXub?#|h|6kb{s*XLUG;F(OL z+g0R~{61LaqxXq#b_3We1zoN;fvF8(@BAVzaefZ8uI1$fZyTi96{~%C4##m#ac=L$ z>kPE!@8VonKP?K3_%FIf&JAT$a^%`>>-PTBz zn$~#Fi}m_-{>)+R^-TOmWpm>1<*<%2$G*jai7o6)XixwEAOJ~3K~(Y-u(e-TpEbT& zt~NU3d>%~ryt4UR{Vt?)2KMp$_(n5Z9-nX5_jQIR`F_kmsp&-TS}aT=18+!6HYE9} zU#S4ME!R6kGjLmNTZf7!nb?|88Syzyi5Sz=ooKl9)+prkuH3#@sGY`7lI@p->lIPO(jd#t}6 z-tP0s1}3Yg-DL-);a7im)?4?zjMx^FG@L9!58IaEDhq5$(!d%V;@TS2o!5PEThpd| z=MD8{!9bLwLu_9{Tt=b5MnR-z0V+NUT^#|1=4d6pH90TcINph;9E$Be% zx)R3##mo@8xP1=81~0x(sK0sIB+k)Dj-Dav<@t^#te(8^oESh*E*< z%=maY!r3BsAVv8XU%pOtzw@2%79Zn^hc3sFb<4{B*Z7P^iwDEKzV!qaW^qdS`QD5e zib-cZ7kKpIz$Yaar&@1hB%JRIDRGbQ>-ss{|NC4aIi4dvo6b3?bF@BI6O!;}=lryk zpQgAb@Fp{4)Nt`M{9Xf?`Vy3Uqv9O_aj!W^hNHZ4N7H1K$zCxBy3P1&mQ2iLA&9LM z8^Rf|Cl8V0apmuOU_6kQSPzUB!u5Y?fU`F1Qa^X%E9l<_st+p*fimNu;ZV6)jEBLW z=yG#o98Y9QY(6|=`@&n>XL)rm|6l%-i9v;>qp ze!nsSreKl0T;*%{mu+pkfbnyJdVY=Zp#8Qga$Y!iJ73Mqxily}=J#PdK5ujEGbB`4 z+kFd#W7U?{UTEnrfUWK{sD;+GRh+fhT2gl{=z9GVh3U16LzE|4S_P$KzFzR@|A= zVK^?EUy#~8)V$Y_?t(nG#Nc^@aF48W6`wbGxKIx^jQ88E@%8pu?!1ftmJj5t);5d} zOwazldCe8e6Pg#7oSYl&u4e6W`55!^HB`fE2bg?Eo$uX`@t}Qa0y!^qyxn%F8}qr` zwqoHLv(L;w6JOb|MIl*xc0vPq*+x3dA(Byt7&eO)t;yA{v0&x0%Hb@`v-I}dg+dhz z0XPcxJ=(wmfeeYMUX&kr8CVuoglBj7GtC4 z`NgF!)T*F)zD!(;%d3bAMk+C6;zh_+#)tTIG z945NGT!NG@0eshx>)(3T$zkF$-S6oJHXd#=GbJPQuq!2;XMj1(HVk;GGYHd;p_*^2?W=wEy;n}6Vi4;56?ZU?T~m47=oK2vIeq@Qv}p4nVk_otr9RJ*!odrl)Z{sS zv$$kLf|0P)xN$@UtRqGDnom^e6glaJ*jZPKi5pIbgjYRVbZBb}kN3Vcq{aMP6Ik|{ z=Ps78(pgMi7nYUba|2jnxs6pD(K)fqn=2K*<3H5Pe6+bB_+0>QpmNqe7Rig>^vqf_g`RrFs^MSQxCIm=eh`hxk^Kvc7 zw|@vWzTD5?|0mW|TKNlB4-ePzW9|SNsd@A4O-R5bze=^`A1-%s}cqcs0=hnIMIt^m} z94XYgwEkUCaYrqAaaIE;{|i}iB<>TYiyQsYE>cV8=ZFh&UpN#wV-FQ`0x{R=bn;WX z(L-z*G8K$68PvqU=FuRmbqViXzQ?wVUAFy9uG;LjPXQmz;$y99FZy%qpQm`za|2l$ ziL#4G?c97-b4}ah(5;^E$P=yClO4cqlLX|uShT0S4XCKYJigG+;}n9Npg_>Qq>^he z)CEDza#91hJu7?+JokiQF^>BtSls83cllm6f_+)c4>V!)^|JURcuC9D{Z^fh`hv*i zvIkfkG&nfi1t>Ru539^my?e4Y}skxLF^ zX~~NuZBIJUP4EarY;h?quKRhYw3bi`_X#kmGo8)fnf}ZZ8_@2;8K16Gy||TppLYX zMwOu0F_G$bMZ~{H9in0M*UM6bm6k7ja%`!Ph64TZ2 z-?wdLa6ZP|`C``W+v%e%1B^|}O{1{DhVzAmEBeCru7M!mN&|RBoqAaV;sHI6(RaNB^PQaM&n71(>VjDO=k^@6$Ns_ zJkPALfhF+~$77fMklcD&h6X_Vx$_O7nSfU+@Byrz}jJ`Rb ziA|BH?wbP=dsV7e{Ea!G-TBR>bU95MxV3cC#x(M?8^2xIy&rA8S)y^RF)=*`XAnH( z8^XDGS{5)&)j_Tp0xv#H(W$!YRiSksfLx*WX}QQ3TWBN70R4hJ%R-i( zqXE2yuMXn5W;O13X9oFq9wo$2^5oktC8QnCou;86<;)usoAxb^S!;*E!-g}*XO3>% zrn<$aT^wz{yP9#9C^?AbC(aAUcQ0Mzn`zhEynqxe&sl{lOA5qmyO}3q>OA1<)`*bn;p;iO@zm-?@zg) zbY)nt{#ee8g@>}~IY57|uNcuSbH-ep!;$X0=7Wi24oE1XhiRSrz|IixCotqao4-P- zdve=Q`Ni-4{@;7;OP=fAja48(RdM6lck*a8|1bt9)sq{ppv#Dun*yMJcZ)q+%plAP z`|8I^_TU_=is(lU<9BB#YcG~htQGS}G$l8g^r3;sTR!7;xDNXB^8 zB>-LUF!+bbnxvrjfyq|@6iSj~_EdxFdqHb2mjSc`B4;Uo>bRgLb2@;0lJJ+*a4YXHkn1wX}; zo~Nzb_wGk|^GD4!sR8VnoshWC*C3wL+kCNHmui3Z3!Uxj*0a{2SjaF=axrGxH1wIl zG`woYt!qTNFUH7L7T7FyJv|)nVHZ6Z-RB&xcKCY!jd$f~wAKKIvoWs^6ggT<5+<0y zReFqGn(!R33Z1-kz~-BBYGLsxW?W! zv>vg!hBMn+l5I`o7zYbU=5i(Y%^a=(Fn|c;HzqVMj&uCr@y@~Fv73ie(o`Lf&Xc!< zY5(x6*NC=>!$S0k6c#D-rxafwdMZ7Z^FH6eKZ~ai$g_AXcID(z@iuE@dCuc6>t3UU zv(`OaVUy;-GJoI3@SyWVkDp-2Gd(3BxB7x-HodC3E--vaT`(`7&cpm3sdtnX`>mo z%{sfxJuVY;3r<+Hk2Uj_x^+wz?f_@<20shX+V13{0_PT_{20G5VLX@jTzwAD+M~S~l9$yivb68N-HGtQ}(w#{>C?*=deL$NFQCmdt&;TeP5tnXA%QBN} zLF;49Yj}+5gc}UhLsc&SDPYOed_UC9BrQpXsU{WVa(1o_xoSzDK8t5EP_Fl00ooP} z_ssioZ$H{}9RUukS@`exNineYYIx`Jdm`iEk7;OJIR3Mx)w&F785#+v?1XGVsjgx? z+%zheo54DA0R!9>kp2!*49hwH%Zal z2g{TKSezF+1i}ED+bFi^xVT4Sd*JFvQa zXHv!~b(T00t*SgXo3lcM+`AndW!dEN^pI9=76w3#H1cBAZp3rhZv;C;4I~u7t&cgc zH$Ff8YY@w=7tGVY%Mn0q0G|`xy};$bvFU>rp{ia8UN1CkmvwZPcj-p-IzD@pL=T|r zILZMJ3F53QGruV`54+{{Q+XMWgfw!DJClPk)wynd)caT4Z`D?uQ%;;t#~9&z?<541S5bBvS?!vk`Do95T*vhkyTrREn=3X=Ix&jpOtf z>tPi(n=p>$wTHy}T)7DJhE4ta9Wj*-`}yO}Lsvi}*tdO5i}p7i(eoD8FxGMSt5kF? zTs+e@5{wr#ZO!m3O<=}cIMx!{+OVsd*mreq7-xGeE=Iwy)Br|e*XB5u%erPC`xrNf zPoB*3wW4EYw6Z?_v3177#(eJYg8{Bn@*njA#}|(aip5_$Ml`+WSc88&G;iaYzS1+! z=r>KJqkZG;{tRWjvVz1kf3sYmVHfe;a4b2JkxB-Psig5|J{#eL$HDu@*?N3BXcI$w)>X${b%^ zDt0{@1aEwdJ5Otj%=wMr1=k$xdTxv)M~uh$qc{#jImVfo@AB8yLM#w^S^n|NhnVM+ z5@i8nE%MT5tOI-Pz!t4#-Lch&TH!zUHRY(grGLoUBwn&v#()%8pYmuAJfU<#Z-p+P zA4>xmjWJFe5G?yNj+@#gD5x9vtvmt2FG&ZhJtIeL`)>$1T!P5#NZ8 zVr3K@aht$Um?5DdCtB#6#ocb39Q(fIUw#ikQU>c>pm{U{m9~*Ti|Ozb%O4l3Di*t9@I)1kw$d~*GOc`fBE)aC=WBEmcY6cJ-&NAgK-`T`a zE~Do|t|s89JigZ9)dAXR;~1wAxx8UP`YfAx-)kx~jyksa`^0L!xuD$v`Fv>-k$Wk` zT0A~h?tO`v?qpOfagZS#<)HH{{WWaX(#= z0)1siAsb^-O91pnv`a2e2BR+JvaH6ZE0TY%Iw zALDaY>Qwm)5zE=uwovqKB!?fmyxnv{(1vI@=dm;zv8qSC)Tp-rf;J+~stv6A15tI_ zLLc`?9m?S^)!gSxRnB?myYhFqEy5y~eenPkBPZ~- ztIVwvCg5!OQ`azoXcSH)p;6s*{4*3Q_W>dnZD+!X?sF(YC{2{=O@=16QM6a&8Kwg| zwEG`k)vTtkzpHpyTOY6d{Njt`=I?{ST=>UUfWREX6jy;@hm7VAZjbjrGN-Qwuyz6} zw`uojU@6IYN3^LDEl4YUE}Tms#hy3sozFv*1F;;0bq-f+&oJ=0;GvkhIfAg4q69H? z%0RwR8lM)nIb{8fEZ+A#MgBC;?`B_)yPggGwz|b_D>m+*i87y$;b?E_qTwbT;KZ%c zNIL+GHGq*PcU#No8X`SW(b4`=-mPI^g}CCXPNwp}Mqd zyoo|%Q~L`K0a~mu}zojI0HrA z72@qH4!Pfo+s5(sTo*zD=z`a6<{@j5K^M=hLqSKsr_y+}oa6XeGTfF41~BNV9&U=2d-=#S)gUB_=RfUKsRq-!;+! zx3+$kOIpO1{|N9hlRQn~&k=Xm7{V6x3#WF9pqJH%_bt9-437J75V2;HvCfM&-*+JK z2Jkp8IE35kU5j5`dsR*Tg|21_=Yo$v$5Jm{W4qtJhacyToA=HlvEFP5dF8>S)*fA% zwAO6<*TsjoM;)=ThoZ*M}FO~8_HX#G48xLVOnmM zN?mAA>^v3HUbvkd-|Zjoo9zMGB+9lMSPL?nmz=wJuMP;uRc);Ly$rS}E=E2Au(kxs$^(Sw9 zbiTyg03hqLU677&JL;QkJA+fNVSgY;8^n^QJWhn`a$O1VTYx&6ysMVx@26(1)~cLC zR#U_`-k$@8r@duOkBxq4QGX8`sz-g_G+*#M@>u9GNMCF?b6)W4kZ&z580{}f@YsCD zJc*di`S*1kElfpfwPQK77&EHsT*6SWa zb4+VH%ANycJR%cHtH)ROYx}Eu4-$>RQ^@gb?VH@*$k|1u%iQhOW0wk70EICiXJeql ze-&f{n8t=S-!-`qz4Cv%D0V_7uh#$oAOJ~3K~#A6!V)KiaLfZC)JXfEs*#GC)Y{>+ z(HNV_6HgDp{dR7M1Dlf^u9Bz}XEa zUAhGTgoboEHI=`q%2ogIc@v^g7{vG~EtAanEX=i@k74f5@%#y`a=h!ma@(ox#c?Q> z?SA!PdDXD+8M$BTzkcz2e#22#plZy)dR;+{Bl$v=E#lrG0{W9fE;%oOorm_GR~gDY zDSL1!?;H9&q&O9xWb|Svy`FF_ZpoTs#aY?6Zjq5#49dI!iEkoU{8Bz^p8`ESsDg0C z>iA}H&sFBS+E@RqcJ`9n${98<$|zd%1WEo$MloMrsmS8mmp^!pWXH%DUl z1~Yvh93tZm7YT?o-`Bs@I9AmNG#UeHpwC8bMx0JXR;H^NRZgmzrjr<;FmUJ*4ltW zWBb7O&J7|w`4F~QnYGeq2fc;-nOAdDXE~WZ z>Mu5bMj?*)IDQlxMZYbLA7>tC`2G$$Ml#69Z?zhZ-*vk6rlvMg^t^M6MI9L5R-#w?Vzbt<|aQ5%%U7?12FPvoe zv+DJn6^9j5co2h(-ugg)v>DC}G!5mM3tb*qUHD7pqB{#J%3mn!W+6$yYt#oPh z_+#_p@K2rx+o#sLv0Y}zey7~?rQ=>%Hx72nFH3Aw@cbm0t(n6jS)sfMzl9apqiYo$ zwtM!Gcf@q=U?uq$nq9*tW4pzV4BjA0ce_y z*jVQ<65vrIgX6Qgh%|;`71N;O=Wt;$*-7!Z`P}^d*qgt>oz_bXAvLWbv(^b5CRAKD z92yDDLWw zZAUk}FKImIY%E+93BGO;-R>d;E)K_v190nWJFYK+H@)n-ciDOUFM?n~RAd*$X+D{i zxW*$-wTvD-w5OrVg16#Td1MFqLVzaYHA>ByYODhn?xmrF!Ie)A7pf7`)+=R5!Zhd=Uz|HOxH z|7P=f6s$0=y9X#_{*(Xozx?p?|IUA~{^jR>_FEr*@!$P(`=^1$FA#w5|HdEu@OOUm zH!5xxPJZAAfAqt*f9rp*IZNV%gXwJ^_2-d!UgG)UYyeADPFFnJj9?cXfj|?1fH2Hz z1UIfhSP0)nM9)x0FGWU-mt(ovkYzPbkCMLQv7S3GMhF=9t+oEXzCt_!@bfu?kbUw( z0QG|$tk>hcj>2#qTNaVL07f=)%+cfpUvXD&Yzrtukn)ctY~(P$?~^L=uUU0ISzBUw zNi~l8e#<$^u4!vd`^GxL0z*0-NF%czWL(NO+RyYoZi|fDA@zw^w|kY8M@tB*;;+zq zVyJ!hzYwtL(4TUvKleO2);{eG8%sV^PigN8m41n8F3YdodDV^-T0S2=*6Po_V`Hmr z-Q}Dnuyyh7eWo|lUr`pPTI^t;PNUEsBW(SFS2<>^Uv~6yuI6L$@)XBv`5S*_6U+u{IA^{3d1|8 z{=|p>?l1q+-gFK49q>zP03YtmS~qZ*$bwzVMCN;mXKesifABVPCr;QUVIbJxjKb^} zYtHJtf=4?ET3CcJFecE)s92SVv6E}mv^)-<8M$_|v^B9FkMq2Fk>&E&!AFRzgiwuh z=^%ZFIS!GD3nkDF7%MKs6oXgnd_>xlhGqOC8+qr*3yNAogw|SNka^?YQ@i4Mvpm$c zbw83o>f9hwWM^Zos^qTEcE?Qr$|}&QL%mnwM+@mp{?VsYFOrlAqP>Pwd408Zn6NH0 zhg0StPH~~;wY`n)2UY9RK%*Mj-^z8b&#Uc;-%BR6h*k7@O=~z7O4DC|f~3bDohKSb z@vkg8yUzX~C`5BFhcYpD{G_NyOmd<_BX3tjPCR_4gMTT+J~2-uf4s$gBq^J*XES(|*HUkbU(uT0FPagK2Sa34#k6>J$ zgTUu&1Nd*h8o=NDhAQphnbG`Rzic2oVEQF`G-p*jmTg$r>sAS0d$QU3z=pdsG-Rp00tQud>wrBS$Ih#go@&l+f6PP5^zF%+#qzDE5OC!7P}1*UO?1AJTJ(JWLm8%M5rYM z^cw(Rf_Y8gW*@vQW?=qlSHkax6LiNHD{Hw!+S_xzTJ)u-Y}n!X-@~23yL>rl6=-tq zTbGQ7C-p_=*0j9+pO)0!HdXkkz)We9zRXx(6wnSY%NXft-%b9)e*CWonBGDw%pVE& zHQg@kv+@JI7u+4VUJu#$62ZrP!J&K#7~FG|33d96BmzJEH>>1RzzCG_^}*)t9t`V5 z*j?eWPx3z(^Ny>noMRl6cCt$C-_T2xW|4EN#fWjQi92beECRMjd9bWj^_$yFGz(u zti~O{G8#UWI04JRI(ZTiS+E1NxWumlueuf!{8~t5(j2K*pCCEY=MsOU5hVFP3!h|b zYXJYXwaL0P2LJFM{ijy3^|i}?7#AHMth|M!RGzn51)|KvaSvmgHKzy7bh z{QhGrroZ*K|IUX${bzpu!{7Y%zw+T*KmD(r{H?EQ{`3FViTj6t>`#37fBxV9Z~gCI z`>TI>9kb~96F>3CH$8vr|NQW$7CrluzNN$e_Rs(OD~{#gw}0!`*DnBUjp3sK+#k|@ z_(y-du=n47_@N*AM?QS#_ZD7%^i=)Jzw{SRKQ_+$&lb)9K=BIbANjE#|L`L}@{hfI z`*Z8xk5@pil{R{u3=LyPCE<)w;Q@B81Sursw`+3Kz9hdhm zrB@3)=i|T{4NkszPe}QA-oQt1VS{32DS3Y%%~y{duCZ=NXPsd#{fv5tX#=2iMOeCB zg=UH(Ctem&p8)ISIrA0@0W*T4Y*=q9@baWK`Lfp42F>N8u)UhGD4`(E3hf7XLSvCg=@S^|l+f{SB-oxUlh0oUh&*9@&V-m%W~DMCk$r|?w+Ix-gX=BciGGx4vuPS#S0mBA#vsR-a^3Hj@Vmaea5R8*p3vVH?s6cS)9Ph0AIp34 z(#G{120RPfY|q2oaC0<)(NGHIO^H=fgJDMj$m@W%7hR11{r0Z)cekS|zsG+866!gM z_KQkl6^vF%s8As^J%}MiDAoXN!{w0Fw9-(u7SNn(gNfh~wJk;3v=OkNAE2o~2*FE2 zIBl_}CSd%4npjKH{tMPUv-j*hmvwp8%+84{p*d;efbAiXb}!6%G5-nuGb>;vdow7Tat#erwB5}-6S}1zA94F_F7~xoAaG{3 z*|1GK=-79}kr2q>D0Zr$pi2v}V>&3S8%5i-1<8J% zP4o_mUi5=Y0{B%|UUT@|r|^X~n?Ljux$+}~%f{-wi1 z_g@&2l}{aBfA+c|u{kDbUGmcX{oFJEdT{UX{pMr;TqJK}4DOoe+ircIPx^*ra5(iV zodD(%z>hutFNceR&O5V&@fCxfhd*=A;q>WCMqC#MT<6oI@`wu3=lr)z06+HllZVg$?IUx!JBD}jUjB2hm=mdiuaGcy z{&9)nm;UgXIU(%Yrn_?bbAR*5;h_gceZM;-d4K-$pE=CR*2?idFff zFa5rz?UU=4|M;J0hrK~|i-_3hCG4N7vvY8DQ2_)$O#4#MoNRS4G_OHW^+INB74~yg zSa$^bb@(08Frvhm*%=_Eo}I^P0mV_dvyF;}`^4{Y+n9{YwQdAjN*^u(MJIr6&5F%U z08Ro!lefgMwqUB|pkJI#0|f}gyf+5Q)ndi^d?&S5m}>c8hkOE46*Cr)NO56YNt!l< zR*Ka|En+fV-xe31Q?=`02mQrQ&!;Dmy%Es)e8M#Enjay?2%B~632Jq7E-m2JD9MTQ zX{wIEt7lFNrx9bhK~*19t6`l5=e(}3vDCm{Jx%k;zw?pxfBZn&Opc%B>p$bkU#+|B z%QPQj+q8*(F-|SJ>un%#SrfpMBRLE~LyTL;+s>DK%D$BE@eN-)^T{9LFgI27n*_4C?2B!HiO`kA5rTQi@%?(mVjKIBgYpC3*Ozi+6AeCpbjHk!EBqnDxZQFubKBB!ZCB7W}hSyvfYk}tRZHrJL%X+ zjQwQrmPFf0=o7y^Y?OkzhkQFX)*5}d1hk$EI#@$?f!{L;ERBPialLKr7Gp+Wb8&Rc zG0F#`9xAevS_m6n2qPJ`6)p%MbeqwkSR|L6m`dW}3M9UGi#`@aZQTR7nIgsh@>H%T zW%cONn%w5n^C1b4pJ=7#{5cq4*kw;p=RPc4);W%Q5lO6VO3@hh6(A`hOI(&%HRdG* zEF%s}Qi>{X!JdGb7o`+L*GX|LTc)=fk2w(J_~JHe*TL5w>)h5t9bN*@m;tr1JXGQI zQ|&-*8%EtWq*H0UZEM%HOYPD&huk>E@}9O>Ny2K;0(SK`gem#h0#$ zVHT^nQK^%b0A90I*Cu`>SFMRR(d!j05gjLhZ@%^S=4+qhI#dEUPRw!%V3*i*pS$mU z@Nmb6|7b`We|kt7|I{qHCIK9H;u65I&JPYczdY!4pIhGlVd2{6l#{|wf^*{JudA0_ z0iD&862R`Xu=|`DPALEPko@C;cz&>*YIXtKS^O@&{`O)~8>R^(J+)6D#v5Z(dCib93 zjJQcK8LZkX7l3fEA=duDx+aD+s+>Sl%0eXAwUkw2G*o+`C4&v7i$%9>6DKQvdT`?> z)QZ_X^z@2{T+VJDgEoaHbd??J+OG~p{hIzlzGCqmoHkW8`^;Qnt!Pu5%6f`n$#qlB zalR*fdiucSR0vi1A|@_Ul+Vp1@gark`C9PFyF)#xgTp``Rr$9WP{|Q#h%nN(ywf)W z806$s&g4ak;k8TP>hiX69yu`_5U<;U~Ee#TNG>ik{ILXAo;X@<@r zM8#-@A-w>I>7Alno(Qu-8@8s_mnA0&Wjogp` zc8OE>?@!(L$A@3}<@7zhaRS)If|l^5u5NZoVD|~{1`e29+3?<9?F#6aD|e;y2d1l| z-IdNa4(}h1-wEvG$2wiY`2J6R%%3bSKSFC397OG#)Fy!a`*(+T0lUw`pZSD873>n^ z7e0QUzZ!Zx#r(D*iT+ui@N}npfBm{Q&(}!@o1C26e&bmQguXFm|bA2N3#luP7@ZR723TX1#lm9TDc%H6${`0^1OD`{6=^S4H z?fxyj;b6pWuQ5=wfTSFyU-XMNJIAmF>ykrBi^FobZBBTkUS+$&W3T zk_}8-%Vz-|65;I|K-c@Ux)ENC(3%9WW%y+`G8Dx{J;?zCAd|mLg}XO+Qs8kx3Irn) z6PX{?u24YS-PV1O-=sQ+2m@gL8V+u*G4|XYipgl?Ri~^|32rx8=)5K~bLRY2qP3`u z{l%;(pBra#G_loqAv?L`hO4~7-~eHg3YC~Nek`rZ4$scf@C5c=Q#C@Ll=eV1{Kj*>d?Q|) z*Qb|Ctau6-AClodxrVF66Nvz0n}Fv#qecv?5ksFq%%tFBPvcax8a;Q-6W@u6G&GRz@uslWkIa+lb3M<^=Fooc2!q;xkCxPhv?=R2i8e z0es1naJ(wI2KwB)-#)(s*j)kbPM*3CngDk1%!ZG9FL3?|N#F2&d`dXhllwU& zeO*2G{^5H*@sLjdJDn~W96rwuI$iue@q~Lf@vqI_pBvt1JiY^17(tZa5);6eq={Fj zSULghp6BoNb>F#Dzu*4OzYo_XzxMFm@BWuR0UQ#yFM7$#W_v)rc-Pp9we zjffwwZhqVRjk}83o%|gW!8iM>nUj;i6Avz-8$Mrt^soID;34UofA9V-pDm|#^LPEa z^8fhvUrgQsJmOrgfj;-1clvh#JB+h`zxQuNOocCOeFGf_%eU<_4GE7w0Zdv#e4Bh# z>=0#AthjeP;i)ZXM$3TN18cKP2Bx2lx5ftxwmA`Li(py5H4aSH48nI$pql`zg}*WlPDgkyGFLc{C zMsj;3r!ag)2DpEAKe(o?8G;F3x%(r-nc?Fsj>RBet}nCT8~ee!_E@jqS`*)hC)l5r z^@;OJu9BdfkPu@|O#=AT54a!08s7;ym{Ie?Evx6o@;GPlYPFBQ&~d5GvO0{8kG$P= zY=?s=5?Aa7w*-w$X6@+SnbQ7<{T`R7;g`EATAI_dZJ`KVJeI|XiVdT}VXlnptKo|7 z9C4j&^A^B}Q=$sH>sl^aiyC{%Xx(T!pMl2wl>8_HH5)32>4!vB7t%3MJ#Do*Q$-z{ zDvn(gt2H+&(80!ykoHnjyBE<*e~X;lTODT|9@dFZ{La%=egH!ve$N;|@NqFD<5p%E zf@0~`G{f=$4t)#%E&)8g%a^|zc~mUe-$HtB)piTB%Gnmr!}6qQHp)&b17JP@JU8H! zRnkA)szdR05rrov3Cy)0w;RBA32dWVBS`|caH2s%Nk~gWZI5Ba9JdO$0J5>OS82!( zB)HWH--{CVI;PzKX#?86z;x{!gi7!JZ3Dx? z*D!c8Y+T%xCt1RNV<(qIVtPfvBGS`i;ZrM5t#}#vE&xMKm3L-EE5nYOWv>z*M4@6Jy4XP?vcm^bOXfPK9GTRG~KEd9mGi z^?tOrLk3rv=Vyz1?}zXzqv#nr_i)MI@PU)S6G7YTGpLOvAuR5m&Fuh=G#e&OY#mMt z12s5l+L`BrC=%DCHr6i2!5p`hIKXP|G#|$ZC_*jPCjso#^o<`6TLp3%#SD_?VNw?$qqf#5;b= zHdJRj(iV#{+bqlywRqg{JSIYR$4-H}t;{=1{018{rmJ*1ogcLgu%pAUj}2&9f^~@;vuVcBmN; z2)76Ez+R09(Z5h!$H!aVC0lC*u8viMp$jL>WX|a znFWrIi3KbYRwPzyAt74;01JXiL_t()&MMAhwYEQ2KANd88yz%bHPMg9fW!*o!OWPj z*-qHV+M$d|e#0iJj3j`=M&0MD*U?8l+PlTN|%cM9t^NjZYySIKm8b##+2%Jv>%zF-UbrxURW2G7rmC#W>}4 zP6eJevWeP!Y;vu*JA^`DXI`RMwqBiXjnQ?uvGJkxw9V~EZ5#j#H4_{_Y@Z@FzWeCh zUW%R++a6P`#x*>)M&j2t;?=T|)$`=YtzP4AoKN@bIjojx_&9l3j0<*2QzwazTEGf1 zm_6gw&yW7yR}W7;`Ss%6zp08k+pYfd<=0=7HO?f$$eD5?{Z+$*78+OrnCVG0;RRr% zO&>uL*qaM2N)Ur07L?+c&YCbl>u572-CpZPJBkb|m*Inah)F(%Qc!%TE>a5|gQ+40 zh=*z`P8dI}aQVIMY6i)Qo%Hw(S8C2Fplzk7iHH@HuOPC?#JF;N3M+4?)Mi1IEkGq| zL4}P?_CN*T82Gi!suo5e3{)YDI?ak6igmpl%$uS7BB!Cxu{cK5Xu9wSo_n7Zc=Iikx8g#7d>JR-6$z`NEdCr1nu-c~_ z0(GcK9DpjG~b7rvpm04=I``Q3IJbG`FQhFV=nwsE9G^k_t+%v=5Zts~DOb z>ZR|PX?TWrHQW9-KT z;I2IS1TZ}jUKna`0|>2n0yyB!q#{aGubCGE?c}JK{6q|~&WJ@Rj_E|u*OW2ZB26JF z?)r%rG!sf7Ki2TIeH}GE%p995Y;QE7QRQJZlt;){3<>G7R^tW`+=ISjYtPgU20gw5 z1o1_BP}c;YrZV9xE-esGI*a6Se61(3ONK6{=p=AJgfkqUD#mLedhiBpe(xyNPe`#_ zo}ic_skw=s4J*IrFkF;f=-2~I7h#^=Wu57hR4_>Q(obWcVvW^b;Cs%3Q!?dK34tPRY3LE7Ya z{=mNrSo(1h#tqtX+W5(_bZN&0^frtL6FR3WV;BIC(L1TlhgEs+iP=EWjRdH&wQWFP zWf8$2+!ScDIXxaLTEC)`GmTxvC;{*jgg3-RS#{A%jS#v$y-LVFXfU|~ARZ4E;hGK7 z`evN=3ggev!ECetvHaMYo1t-WB+ck7Jo05L{Z_j^=>xh_N~Nup+K_6N1Q8iqWGAve)eM(#B#m;kodUJiBJCO z?Fr!o@rykH%y=A8hJaqmAQHFfFtEv%0gF-;(`RE7FKw^`5L(#MSA2nB+?W?Wn=Lc} zaw?1XB!*;U6UR-JD=q3%ZQpj2j6i)1dZ9|`5n_9_W6MrCI*xOjVub&DP`7zlalV=+ zYF3*<61R0Bg`Ega*@|_J8-&O_B`+gcjK~`?nG?Xllv(}okG_uT+k4ZjCc-M0EHduPD1+t|r z>ewVI#y&Xohe`_br5HQi*G6u*t90G>b!$F6UfTF$^q^N|=gK+mBu)#u z$DXRquBO14D)Tyu!*>|-y{5^b&f6%scsxSBZkij|&D>j*sns8AEs7XI2|Ua(DZ z-1n2eMwjo9{B;QH+Fu$M+|HJf0bd-&Q`uXcRl!vyONJnhC((o8Jb+dC?;AAT_=wzMCpHSlGAfer*Y{Xoe?kl5eU>fY`Z)D{S7sdKYmtz8Jk-yDBs|<+MbG|t z9ggZ^%o2xozqa@dKsFFb`f^fR;1wGb*XIE^$RfP$?d_pICRQSOYuIQ3+tpXiUGP|G z=TFe3jbGH5DNP-tXL-9{9vycAxSek#UUB~;($<+jjTrTl!phvF`bQG$_wlXVruDb; zX8wP9no4y(a#M5Yu}itgM`#V6Bvjryv#8<4o5AOw6*CzI{QmGfqv-$*|-7J+Rjv=ECdKS)-Gqsco&+`wK7?f|r^~MezEE#QCbi`@I2c&OJyzfeV9f!T+kc& zgudykwdVG1{BX>*^0vqge$C@e$K4MDY2^Tb#4xC3qn&L~0#@Bn0v;`|N>tZQsKO`t zJOsEUCT?5!sbCyiJCBSmtvigLbAtylbV_~WIDF!^cMXR^*j{nFt^IZJ6OARn%@z84 zg?rfCLq-||b=*i%*&pM&ZD1YgJLEyuF=QvHtx>dg;@8pAim{qnuUKihaKnZRR>N)S zEozgaqfW&(!GT5cx3ja`>>91ZAPF2`0x-Yt*x}Wgk@B+q)!rT~cseA2$0_AnpY)0> zi)k^U{`mSNjV4?mygoW>JOu(Yie77z!w4fS4u%+5OoY

    WHBSk|xGhZU3#v(E9te zEfnEafY}3fnBC6Hr71>?Di4OxPb}pmo(5MgftBuwa=+8G-&FzLoP{}K$ zna#J-?IWrD)u8;lymYq464It7$)|BL>?ztR0UQ9&u{`_(2>4>UOtl45a2Xop;<7{SS97SX41np9T4M-{C&T9{{^~`wIO+s3k!^3{7O7EhpJ9s(wmuz zM};+CQw-6%B*#!%Kt}?GX*Td8dSF;&%-3{geTVC3)6JJiZ}QI`cv5TgA+4S(ip73- z>u~kcPsYduii}=DwJ*mR;>&Y=9uVY35#9DWPHV8lb#z>%DN!Bbwh}V($lGN`Ir6jy z!`IH8pof`fs`u_z4%myj1(R*=(Hawae6;f|VZ?mi(@Lo;!1N3&lw#Z{Yig&3$M!(m zZ@X5yKZl6V^XZ?=U4M+2uhuCQ&l$9}nsNEJ4&W0gwKZb4NcsvhhxHgQh*4TA(wJAw z8KFdI{%%W>DkKQX=j5*j5H)lv*Je+u41*?cfCGh^gsxmhrl0yQ3y7YnBU Y1EWz)nP=7=LI3~&07*qoM6N<$f=0&UqyPW_ literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_zitadel_activate.png b/docs/static/img/guides/azure_zitadel_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..af4cb37115cd40f537e2ea652a1e713a031162f0 GIT binary patch literal 22990 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_zitadel_button.png b/docs/static/img/guides/azure_zitadel_button.png new file mode 100644 index 0000000000000000000000000000000000000000..143330a38b7cfe7cf8b72ba8fb4192ef0463355c GIT binary patch literal 54602 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 DM0^7* literal 0 HcmV?d00001 diff --git a/docs/static/img/guides/azure_zitadel_settings.png b/docs/static/img/guides/azure_zitadel_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3a8ec627c40135937b9f58f0e4fca558ff07a8 GIT binary patch literal 122101 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 Iuxspp0|B;v{r~^~ literal 0 HcmV?d00001 From 64508c42ead5bef0a4d7821bb1abcce9c0735932 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 3 Aug 2022 12:55:54 +0200 Subject: [PATCH 074/116] chore: fix .goreleaser.yaml (#4109) --- .goreleaser.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index e87f16fa86..5d8f31d3e7 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -51,12 +51,12 @@ dockers: - "--platform=linux/arm64" docker_manifests: - id: zitadel-latest +- id: zitadel-latest name_template: ghcr.io/zitadel/zitadel:latest image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 - id: zitadel-Tag +- id: zitadel-Tag name_template: ghcr.io/zitadel/zitadel:{{ .Tag }} image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 From 7020b59f1d409dd4886e9fbfeaea83dfd478014a Mon Sep 17 00:00:00 2001 From: Christian Jakob <47860090+thesephirot@users.noreply.github.com> Date: Thu, 4 Aug 2022 10:53:35 +0200 Subject: [PATCH 075/116] chore: Release channels action to create stable images (#4110) * feat: testing skopeo and introduce stable container * yaml syntax * yaml syntax * testing release * corrected docker images path * set release to 2.0.0 to test copy * reset channel * create stable images * feat: create release channels for docker containers * fix removed arch due to multiarch build * chore: updated action name * Update .github/workflows/release-channels.yml Co-authored-by: Florian Forster Co-authored-by: Florian Forster --- .github/workflows/release-channels.yml | 52 ++++++++++++++++++++++++++ release-channels.yaml | 1 + 2 files changed, 53 insertions(+) create mode 100644 .github/workflows/release-channels.yml create mode 100644 release-channels.yaml diff --git a/.github/workflows/release-channels.yml b/.github/workflows/release-channels.yml new file mode 100644 index 0000000000..282b1cf4a2 --- /dev/null +++ b/.github/workflows/release-channels.yml @@ -0,0 +1,52 @@ +name: ZITADEL Release tags + +on: + push: + branches: + - "main" + paths: + - 'release-channels.yaml' + workflow_dispatch: + +permissions: + contents: write + packages: write + +jobs: + Build: + runs-on: ubuntu-20.04 + env: + DOCKER_BUILDKIT: 1 + steps: + - name: Source checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: get stable tag + run: echo STABLE_RELEASE=$(yq eval '.stable' release-channels.yaml) >> $GITHUB_ENV + - name: checkout stable tag + uses: actions/checkout@v2 + with: + fetch-depth: 0 + ref: ${{ env.STABLE_RELEASE }} + - name: GitHub Container Registry Login + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - uses: tibdex/github-app-token@v1 + id: generate-token + with: + app_id: ${{ secrets.APP_ID }} + private_key: ${{ secrets.APP_PRIVATE_KEY }} + - name: Google Artifact Registry Login + uses: docker/login-action@v1 + with: + registry: europe-docker.pkg.dev + username: _json_key_base64 + password: ${{ secrets.GCR_JSON_KEY_BASE64 }} + - name: copy release to stable + run: | + skopeo --version + skopeo copy docker://ghcr.io/zitadel/zitadel:$STABLE_RELEASE docker://ghcr.io/zitadel/zitadel:stable diff --git a/release-channels.yaml b/release-channels.yaml new file mode 100644 index 0000000000..77df68d894 --- /dev/null +++ b/release-channels.yaml @@ -0,0 +1 @@ +stable: "v2.0.1" From 5fb73c15e8eb6c2a0004c498b82565d0f0b86f29 Mon Sep 17 00:00:00 2001 From: Christian Jakob <47860090+thesephirot@users.noreply.github.com> Date: Thu, 4 Aug 2022 11:30:28 +0200 Subject: [PATCH 076/116] chore: copy multiarchitecture manifests (#4115) * chore: copy multichannel manifests * use all option Co-authored-by: Florian Forster Co-authored-by: Florian Forster --- .github/workflows/release-channels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-channels.yml b/.github/workflows/release-channels.yml index 282b1cf4a2..7f7dcdd9ff 100644 --- a/.github/workflows/release-channels.yml +++ b/.github/workflows/release-channels.yml @@ -49,4 +49,4 @@ jobs: - name: copy release to stable run: | skopeo --version - skopeo copy docker://ghcr.io/zitadel/zitadel:$STABLE_RELEASE docker://ghcr.io/zitadel/zitadel:stable + skopeo copy --all docker://ghcr.io/zitadel/zitadel:$STABLE_RELEASE docker://ghcr.io/zitadel/zitadel:stable From 4e7f0eaec9c561559a459df594e38c39caf85f49 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Thu, 4 Aug 2022 16:08:24 +0200 Subject: [PATCH 077/116] docs: create secrets concepts and update docusaurus to stable release (#4111) * chore: update docusaurus to v2 * extend concepts for secrets handling * fix links * add credentials * docs review with @livio-a * remove change Co-authored-by: Livio Spring --- .goreleaser.yaml | 1 + docs/docs/concepts/architecture/secrets.md | 108 ++ docs/package.json | 22 +- docs/sidebars.js | 1 + docs/yarn.lock | 1198 +++++++++++++------- 5 files changed, 918 insertions(+), 412 deletions(-) create mode 100644 docs/docs/concepts/architecture/secrets.md diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 5d8f31d3e7..5e3dc1ab5a 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -62,6 +62,7 @@ docker_manifests: - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 + archives: - name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}' replacements: diff --git a/docs/docs/concepts/architecture/secrets.md b/docs/docs/concepts/architecture/secrets.md new file mode 100644 index 0000000000..d539702d0b --- /dev/null +++ b/docs/docs/concepts/architecture/secrets.md @@ -0,0 +1,108 @@ +--- +title: Secrets +--- + +In this chapter you can find information of how ZITADEL processes and stores secrets and credentials in a secure fashion. + +:::info +We use the terms secret and credentials interchangeable to keep this guide lean. +::: + +## Secrets Principles + +ZITADEL uses the following principles when handling Secrets across their lifecycle: + +- Automate rotation +- Limit lifetime +- Show only once +- Prefer public / private key concepts (FIDO2, U2F, JWT Profile, ...) +- Irreversible hash secrets / passwords +- Encrypt secrets storage +- When sent across unsecure channels (eMail, SMS, ...) + - Forced changed through receiver + - Verify that the secret can only be used once + +## Secrets Storage + +By default ZITADEL stores secrets from its users, clients as well as its generated secrets like signing keys in the database. +To protect the secrets against extraction from database as well as database dumps they are encrypted with AES256. + +:::info +The key used to encrypt and decrypt the secrets in the ZITADEL database is called `masterkey` and needs to be exactly 32 bytes long. +The only secrets stored outside of the Secrets Storage are the masterkey, the TLS Keys, the initial Admin User (including the password) +::: + +## Secrets stored in the Secrets Storage + +### Public Keys + +ZITADEL does handle many different public keys. These include: + +- FIDO2 +- U2F +- JWT Profile +- Signing Keys + +:::info +Due to the inherent nature of a public key being public we safeguard them against malicious key changes with our unique [eventstore concept](../eventstore/overview). +::: + +### Hashed Secrets + +ZITADEL does handle many different passwords and secrets. These include: + +- User Authentication + - Password +- Client / Machine Authentication + - Client Secrets + +:::info +ZITADEL uses `bcrypt` by default to store all Passwords and Client Secrets in an non reversible way to further reduce the risk of a Secrets Storage breach. +::: + +### Encrypted Secrets + +Some secrets cannot be hashed because they need to be used in their raw form. These include: + +- Federation + - Client Secrets of Identity Providers (IdPs) +- Multi Factor Authentication + - TOTP Seed Values +- Validation Secrets + - Verifying contact information like eMail, Phonenumbers + - Verifying proof of ownership over domain names (DNS) + - Resting accounts of users (password, MFA reset, ...) +- Private Keys + - Token Signing (JWT, ...) + - Token Encryption (Opaque Bearer Tokens) + - Useragent Cookies (Session Cookies) Encryption + - CSRF Cookie Encryption +- Mail Provider + - SMTP Passwords +- SMS Provider + - Twilio API Keys + +:::info +By default ZITADEL uses `RSA256` for signing purposes and `AES256` for encryption +::: + +## Secrets stored outside the Secrets Storage + +### Masterkey + +Since the Masterkey is used as means of protecting the Secrets Storage it cannot be stored in the storage. +You find [here the many ways how ZITADEL can consume the Masterkey](../../guides/manage/self-hosted/configure). + +### TLS Material + +ZITADEL does support end to end TLS as such it can consume TLS Key Material. +Please check our [TLS Modes documentation](../../guides/manage/self-hosted/tls_modes) for more details. + +### Admin User + +The initial Admin User of ZITADEL can be configured through [ZITADELs config options](../../guides/manage/self-hosted/configure). + +:::info +To prevent elevated breaches ZITADEL forces the Admin Users password to be changed during the first login. +::: + diff --git a/docs/package.json b/docs/package.json index 5e67ff8a7f..8b1555cc48 100644 --- a/docs/package.json +++ b/docs/package.json @@ -36,17 +36,17 @@ "@colors/colors": "1.5.0", "@docsearch/css": "3.0.0", "@docsearch/react": "3.0.0", - "@docusaurus/core": "^2.0.0-beta.20", - "@docusaurus/cssnano-preset": "2.0.0-rc.1", - "@docusaurus/module-type-aliases": "2.0.0-rc.1", - "@docusaurus/plugin-debug": "2.0.0-rc.1", - "@docusaurus/plugin-google-analytics": "2.0.0-rc.1", - "@docusaurus/plugin-google-gtag": "2.0.0-rc.1", - "@docusaurus/plugin-sitemap": "2.0.0-rc.1", - "@docusaurus/preset-classic": "2.0.0-rc.1", - "@docusaurus/theme-classic": "2.0.0-rc.1", - "@docusaurus/theme-search-algolia": "2.0.0-rc.1", - "@docusaurus/types": "2.0.0-rc.1", + "@docusaurus/core": "2.0.1", + "@docusaurus/cssnano-preset": "2.0.0", + "@docusaurus/module-type-aliases": "2.0.0", + "@docusaurus/plugin-debug": "2.0.0", + "@docusaurus/plugin-google-analytics": "2.0.0", + "@docusaurus/plugin-google-gtag": "2.0.0", + "@docusaurus/plugin-sitemap": "2.0.0", + "@docusaurus/preset-classic": "^2.0.1", + "@docusaurus/theme-classic": "2.0.0", + "@docusaurus/theme-search-algolia": "2.0.0", + "@docusaurus/types": "2.0.0", "@jridgewell/resolve-uri": "3.0.7", "@jridgewell/set-array": "1.1.1", "@jridgewell/trace-mapping": "0.3.11", diff --git a/docs/sidebars.js b/docs/sidebars.js index c7a5361aea..acbbd3516b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -233,6 +233,7 @@ module.exports = { items: [ "concepts/architecture/software", "concepts/architecture/solution", + "concepts/architecture/secrets", ], }, { diff --git a/docs/yarn.lock b/docs/yarn.lock index 2930652f04..73cfc98266 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -40,114 +40,114 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.1.tgz#95c3a0b4b78858fed730cf9c755b7d1cd0c82c74" integrity sha512-eTmGVqY3GeyBTT8IWiB2K5EuURAqhnumfktAEoHxfDY2o7vg2rSnO16ZtIG0fMgt3py28Vwgq42/bVEuaQV7pg== -"@algolia/cache-browser-local-storage@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.1.tgz#a0b85a6c3fe3d5c49fca01b16f00b41bf38a918c" - integrity sha512-BBdibsPn3hLBajc/NRAtHEeoXsw+ziSGR/3bqRNB5puUuwKPQZSE2MaMVWSADnlc3KV3bEj4xsfKOVLJyfJSPQ== +"@algolia/cache-browser-local-storage@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz#d5b1b90130ca87c6321de876e167df9ec6524936" + integrity sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA== dependencies: - "@algolia/cache-common" "4.14.1" + "@algolia/cache-common" "4.14.2" -"@algolia/cache-common@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.1.tgz#11d44a6442f83deb3629a04c20df8408088f6449" - integrity sha512-XhAzm0Sm3D3DuOWUyDoVSXZ/RjYMvI1rbki+QH4ODAVaHDWVhMhg3IJPv3gIbBQnEQdtPdBhsf2hyPxAu28E5w== +"@algolia/cache-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.14.2.tgz#b946b6103c922f0c06006fb6929163ed2c67d598" + integrity sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg== -"@algolia/cache-in-memory@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.1.tgz#68ede8520f054bc65938209b59962056ae5b56c7" - integrity sha512-fVUu7N1hYb/zZYfV9Krlij70NwS+8bQm5vmDJyfp0+9FjSjz2V7wj1CUxvaY8ZcgoBPj9ehQ8sRuqSM2m5OPww== +"@algolia/cache-in-memory@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz#88e4a21474f9ac05331c2fa3ceb929684a395a24" + integrity sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ== dependencies: - "@algolia/cache-common" "4.14.1" + "@algolia/cache-common" "4.14.2" -"@algolia/client-account@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.1.tgz#b92e091f698630c49ec7df48816ae75af3cbac40" - integrity sha512-Zm4+PN3bsBPhv1dKKwzBaRGzf0G1JcjjSTpE231L7Z7LsEDcFDW4E6L5ctwMz3SliSBeL/j1ghmaunJrZlkRIg== +"@algolia/client-account@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.14.2.tgz#b76ac1ba9ea71e8c3f77a1805b48350dc0728a16" + integrity sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w== dependencies: - "@algolia/client-common" "4.14.1" - "@algolia/client-search" "4.14.1" - "@algolia/transporter" "4.14.1" + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-analytics@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.1.tgz#aca3436775f608a6141cc81899e1d75ef030efa2" - integrity sha512-EhZLR0ezBZx7ZGkwzj7OTvnI8j2Alyv1ByC0Mx48qh3KqRhVwMFm/Uf34zAv4Dum2PTFin41Y4smAvAypth9nQ== +"@algolia/client-analytics@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.14.2.tgz#ca04dcaf9a78ee5c92c5cb5e9c74cf031eb2f1fb" + integrity sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ== dependencies: - "@algolia/client-common" "4.14.1" - "@algolia/client-search" "4.14.1" - "@algolia/requester-common" "4.14.1" - "@algolia/transporter" "4.14.1" + "@algolia/client-common" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-common@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.1.tgz#2709bddf934a3545cd9feecc0591e9285fbed7c2" - integrity sha512-WDwziD7Rt1yCRDfONmeLOfh1Lt8uOy6Vn7dma171KOH9NN3q8yDQpOhPqdFOCz1j3GC1FfIZxaC0YEOIobZ2lg== +"@algolia/client-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.14.2.tgz#e1324e167ffa8af60f3e8bcd122110fd0bfd1300" + integrity sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q== dependencies: - "@algolia/requester-common" "4.14.1" - "@algolia/transporter" "4.14.1" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-personalization@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.1.tgz#58f0b85b8f6d531e13877a099f54513ac2bec154" - integrity sha512-D4eeW7bTi769PWcEYZO+QiKuUXFOC5zK5Iy83Ey6FHqS7m5TXws5MP1rmETE018lTXeYq2NSHWp/F07fRRg0RA== +"@algolia/client-personalization@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.14.2.tgz#656bbb6157a3dd1a4be7de65e457fda136c404ec" + integrity sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw== dependencies: - "@algolia/client-common" "4.14.1" - "@algolia/requester-common" "4.14.1" - "@algolia/transporter" "4.14.1" + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" -"@algolia/client-search@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.1.tgz#44bfc65b3e6939b725f8f97aad725593f2a4ad7f" - integrity sha512-K6XrdIIQq8a3o+kCedj5slUVzA1aKttae4mLzwnY0bS7tYduv1IQggi9Sz8gOG6/MMyKMB4IwYqr47t/0z4Vxw== +"@algolia/client-search@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.14.2.tgz#357bdb7e640163f0e33bad231dfcc21f67dc2e92" + integrity sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw== dependencies: - "@algolia/client-common" "4.14.1" - "@algolia/requester-common" "4.14.1" - "@algolia/transporter" "4.14.1" + "@algolia/client-common" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/transporter" "4.14.2" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/logger-common@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.1.tgz#acbd36b66e3b408f99cacfb581ad3bd28defcc28" - integrity sha512-58CK87wTjUWI1QNXc3nFDQ7EXBi28NoLufXE9sMjng2fAL1wPdyO+KFD8KTBoXOZnJWflPj5F7p6jLyGAfgvcQ== +"@algolia/logger-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.14.2.tgz#b74b3a92431f92665519d95942c246793ec390ee" + integrity sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA== -"@algolia/logger-console@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.1.tgz#7e7d7486d71ccfe38e63234626931083592149d2" - integrity sha512-not+VwH1Dx2B/BaN+4+4+YnGRBJ9lduNz2qbMCTxZ4yFHb+84j4ewHRPBTtEmibn7caVCPybdTKfHLQhimSBLQ== +"@algolia/logger-console@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.14.2.tgz#ec49cb47408f5811d4792598683923a800abce7b" + integrity sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g== dependencies: - "@algolia/logger-common" "4.14.1" + "@algolia/logger-common" "4.14.2" -"@algolia/requester-browser-xhr@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.1.tgz#9e683dc0916afae221bf946255a998b06830be78" - integrity sha512-mpH6QsFBbXjTy9+iU86Rcdt9LxS7GA/tWhGMr0+Ap8+4Za5+ELToz0PC7euVeVOcclgGGi7gbjOAmf6k8b10iA== +"@algolia/requester-browser-xhr@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz#a2cd4d9d8d90d53109cc7f3682dc6ebf20f798f2" + integrity sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw== dependencies: - "@algolia/requester-common" "4.14.1" + "@algolia/requester-common" "4.14.2" -"@algolia/requester-common@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.1.tgz#b07ffa00ae0cf61442dcda71a3209051fed130d8" - integrity sha512-EbXBKrfYcX5/JJfaw7IZxhWlbUtjd5Chs+Alrfc4tutgRQn4dmImWS07n3iffwJcYdOWY1eRrnfBK5BwopuN5A== +"@algolia/requester-common@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.14.2.tgz#bc4e9e5ee16c953c0ecacbfb334a33c30c28b1a1" + integrity sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg== -"@algolia/requester-node-http@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.1.tgz#5e5f4ff55deb5aa0e92f3105d77299de744b1471" - integrity sha512-/sbRqL9P8aVuYUG50BgpCbdJyyCS7fia+sQIx9d1DiGPO7hunwLaEyR4H7JDHc/PLKdVEPygJx3rnbJWix4Btg== +"@algolia/requester-node-http@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz#7c1223a1785decaab1def64c83dade6bea45e115" + integrity sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg== dependencies: - "@algolia/requester-common" "4.14.1" + "@algolia/requester-common" "4.14.2" -"@algolia/transporter@4.14.1": - version "4.14.1" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.1.tgz#7eca8568ff710d9d1a7bbd3c1dafbbf44a6143f5" - integrity sha512-xbmoIqszFDOCCZqizBQ2TNHcGtjZX7EkJCzABsrokA0WqtfZzClFmtc+tZYgtEiyAfIF70alTegG19poQGdkvg== +"@algolia/transporter@4.14.2": + version "4.14.2" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.14.2.tgz#77c069047fb1a4359ee6a51f51829508e44a1e3d" + integrity sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ== dependencies: - "@algolia/cache-common" "4.14.1" - "@algolia/logger-common" "4.14.1" - "@algolia/requester-common" "4.14.1" + "@algolia/cache-common" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/requester-common" "4.14.2" "@ampproject/remapping@2.2.0", "@ampproject/remapping@^2.1.0": version "2.2.0" @@ -213,32 +213,32 @@ semver "^6.3.0" "@babel/core@^7.18.5", "@babel/core@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" - integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.10.tgz#39ad504991d77f1f3da91be0b8b949a5bc466fb8" + integrity sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw== dependencies: "@ampproject/remapping" "^2.1.0" "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-compilation-targets" "^7.18.9" "@babel/helper-module-transforms" "^7.18.9" "@babel/helpers" "^7.18.9" - "@babel/parser" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.1" semver "^6.3.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.17.10", "@babel/generator@^7.18.7", "@babel/generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" - integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== +"@babel/generator@^7.12.5", "@babel/generator@^7.17.10", "@babel/generator@^7.18.10", "@babel/generator@^7.18.7": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.10.tgz#794f328bfabdcbaf0ebf9bf91b5b57b61fa77a2a" + integrity sha512-0+sW7e3HjQbiHbj1NeU/vN8ornohYlacAfZIaXhdoGweQqgcNy69COVciYYqEXJ/v+9OBA7Frxm4CVAuNqKeNA== dependencies: - "@babel/types" "^7.18.9" + "@babel/types" "^7.18.10" "@jridgewell/gen-mapping" "^0.3.2" jsesc "^2.5.1" @@ -267,7 +267,7 @@ browserslist "^4.20.2" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.18.6": +"@babel/helper-create-class-features-plugin@^7.16.10", "@babel/helper-create-class-features-plugin@^7.17.6", "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== @@ -300,7 +300,7 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.6", "@babel/helper-environment-visitor@^7.18.9": +"@babel/helper-environment-visitor@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== @@ -372,7 +372,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== -"@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.6": +"@babel/helper-remap-async-to-generator@^7.16.8", "@babel/helper-remap-async-to-generator@^7.18.6", "@babel/helper-remap-async-to-generator@^7.18.9": version "7.18.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== @@ -414,6 +414,11 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-string-parser@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz#181f22d28ebe1b3857fa575f5c290b1aaf659b56" + integrity sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw== + "@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" @@ -425,14 +430,14 @@ integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== "@babel/helper-wrap-function@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz#ae1feddc6ebbaa2fd79346b77821c3bd73a39646" - integrity sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.18.10.tgz#a7fcd3ab9b1be4c9b52cf7d7fdc1e88c2ce93396" + integrity sha512-95NLBP59VWdfK2lyLKe6eTMq9xg+yWKzxzxbJ1wcYNi1Auz200+83fMDADjRxBvc2QQor5zja2yTQzXGhk2GtQ== dependencies: "@babel/helper-function-name" "^7.18.9" - "@babel/template" "^7.18.6" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.18.10" + "@babel/types" "^7.18.10" "@babel/helpers@^7.12.5", "@babel/helpers@^7.17.9", "@babel/helpers@^7.18.9": version "7.18.9" @@ -452,10 +457,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.17.10", "@babel/parser@^7.18.6", "@babel/parser@^7.18.8", "@babel/parser@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" - integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== +"@babel/parser@^7.12.7", "@babel/parser@^7.17.10", "@babel/parser@^7.18.10", "@babel/parser@^7.18.8": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.10.tgz#94b5f8522356e69e8277276adf67ed280c90ecc1" + integrity sha512-TYk3OA0HKL6qNryUayb5UUEhM/rkOQozIBEA5ITXh5DWrSp0TlUQXMyZmnWxG/DizSWBeeQ0Zbc5z8UGaaqoeg== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": version "7.18.6" @@ -482,14 +487,14 @@ "@babel/helper-remap-async-to-generator" "^7.16.8" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz#aedac81e6fc12bb643374656dd5f2605bf743d17" - integrity sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w== +"@babel/plugin-proposal-async-generator-functions@^7.16.8", "@babel/plugin-proposal-async-generator-functions@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz#85ea478c98b0095c3e4102bff3b67d306ed24952" + integrity sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew== dependencies: - "@babel/helper-environment-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-remap-async-to-generator" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-remap-async-to-generator" "^7.18.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.16.7", "@babel/plugin-proposal-class-properties@^7.18.6": @@ -1026,15 +1031,15 @@ "@babel/plugin-transform-react-jsx" "^7.18.6" "@babel/plugin-transform-react-jsx@^7.16.7", "@babel/plugin-transform-react-jsx@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz#2721e96d31df96e3b7ad48ff446995d26bc028ff" - integrity sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.10.tgz#ea47b2c4197102c196cbd10db9b3bb20daa820f1" + integrity sha512-gCy7Iikrpu3IZjYZolFE4M1Sm+nrh1/6za2Ewj77Z+XirT4TsbJcvOFOyF+fRPwU6AKKK136CZxx6L8AbSFG6A== dependencies: "@babel/helper-annotate-as-pure" "^7.18.6" "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/types" "^7.18.10" "@babel/plugin-transform-react-pure-annotations@^7.16.7", "@babel/plugin-transform-react-pure-annotations@^7.18.6": version "7.18.6" @@ -1079,15 +1084,15 @@ semver "^6.3.0" "@babel/plugin-transform-runtime@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz#d9e4b1b25719307bfafbf43065ed7fb3a83adb8f" - integrity sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz#37d14d1fa810a368fd635d4d1476c0154144a96f" + integrity sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ== dependencies: "@babel/helper-module-imports" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" semver "^6.3.0" "@babel/plugin-transform-shorthand-properties@^7.16.7", "@babel/plugin-transform-shorthand-properties@^7.18.6": @@ -1127,20 +1132,20 @@ "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-typescript@^7.16.7", "@babel/plugin-transform-typescript@^7.18.6": - version "7.18.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz#303feb7a920e650f2213ef37b36bbf327e6fa5a0" - integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.10.tgz#b23401b32f1f079396bcaed01667a54ebe4f9f85" + integrity sha512-j2HQCJuMbi88QftIb5zlRu3c7PU+sXNnscqsrjqegoGiCgXR569pEdben9vly5QHKL2ilYkfnSwu64zsZo/VYQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-syntax-typescript" "^7.18.6" -"@babel/plugin-transform-unicode-escapes@^7.16.7", "@babel/plugin-transform-unicode-escapes@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz#0d01fb7fb2243ae1c033f65f6e3b4be78db75f27" - integrity sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw== +"@babel/plugin-transform-unicode-escapes@^7.16.7", "@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.9" "@babel/plugin-transform-unicode-regex@^7.16.7", "@babel/plugin-transform-unicode-regex@^7.18.6": version "7.18.6" @@ -1231,9 +1236,9 @@ semver "^6.3.0" "@babel/preset-env@^7.18.2", "@babel/preset-env@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.9.tgz#9b3425140d724fbe590322017466580844c7eaff" - integrity sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg== + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.18.10.tgz#83b8dfe70d7eea1aae5a10635ab0a5fe60dfc0f4" + integrity sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA== dependencies: "@babel/compat-data" "^7.18.8" "@babel/helper-compilation-targets" "^7.18.9" @@ -1241,7 +1246,7 @@ "@babel/helper-validator-option" "^7.18.6" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" - "@babel/plugin-proposal-async-generator-functions" "^7.18.6" + "@babel/plugin-proposal-async-generator-functions" "^7.18.10" "@babel/plugin-proposal-class-properties" "^7.18.6" "@babel/plugin-proposal-class-static-block" "^7.18.6" "@babel/plugin-proposal-dynamic-import" "^7.18.6" @@ -1301,13 +1306,13 @@ "@babel/plugin-transform-sticky-regex" "^7.18.6" "@babel/plugin-transform-template-literals" "^7.18.9" "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.6" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" "@babel/plugin-transform-unicode-regex" "^7.18.6" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.18.9" - babel-plugin-polyfill-corejs2 "^0.3.1" - babel-plugin-polyfill-corejs3 "^0.5.2" - babel-plugin-polyfill-regenerator "^0.3.1" + "@babel/types" "^7.18.10" + babel-plugin-polyfill-corejs2 "^0.3.2" + babel-plugin-polyfill-corejs3 "^0.5.3" + babel-plugin-polyfill-regenerator "^0.4.0" core-js-compat "^3.22.1" semver "^6.3.0" @@ -1387,36 +1392,37 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" - integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== +"@babel/template@^7.12.7", "@babel/template@^7.16.7", "@babel/template@^7.18.10", "@babel/template@^7.18.6": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" + integrity sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.18.6" - "@babel/types" "^7.18.6" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.17.10", "@babel/traverse@^7.18.8", "@babel/traverse@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" - integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.17.10", "@babel/traverse@^7.18.10", "@babel/traverse@^7.18.8", "@babel/traverse@^7.18.9": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.10.tgz#37ad97d1cb00efa869b91dd5d1950f8a6cf0cb08" + integrity sha512-J7ycxg0/K9XCtLyHf0cz2DqDihonJeIo+z+HEdRe9YuT8TY4A66i+Ab2/xZCEW7Ro60bPCBBfqqboHSamoV3+g== dependencies: "@babel/code-frame" "^7.18.6" - "@babel/generator" "^7.18.9" + "@babel/generator" "^7.18.10" "@babel/helper-environment-visitor" "^7.18.9" "@babel/helper-function-name" "^7.18.9" "@babel/helper-hoist-variables" "^7.18.6" "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/parser" "^7.18.10" + "@babel/types" "^7.18.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.17.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" - integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== +"@babel/types@^7.12.7", "@babel/types@^7.15.6", "@babel/types@^7.17.10", "@babel/types@^7.18.10", "@babel/types@^7.18.4", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.4.4": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.10.tgz#4908e81b6b339ca7c6b7a555a5fc29446f26dde6" + integrity sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ== dependencies: + "@babel/helper-string-parser" "^7.18.10" "@babel/helper-validator-identifier" "^7.18.6" to-fast-properties "^2.0.0" @@ -1435,10 +1441,10 @@ resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.0.0.tgz#fe57b474802ffd706d3246eab25d52fac8aa3698" integrity sha512-1kkV7tkAsiuEd0shunYRByKJe3xQDG2q7wYg24SOw1nV9/2lwEd4WrUYRJC/ukGTl2/kHeFxsaUvtiOy0y6fFA== -"@docsearch/css@3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.1.1.tgz#e0976bf995e383f8ee8657306311b9cb95016330" - integrity sha512-utLgg7E1agqQeqCJn05DWC7XXMk4tMUUnL7MZupcknRu2OzGN13qwey2qA/0NAKkVBGugiWtON0+rlU0QIPojg== +"@docsearch/css@3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.2.0.tgz#9f0f7ccb315cfe2db4565264569e1cb4b26dc26d" + integrity sha512-jnNrO2JVYYhj2pP2FomlHIy6220n6mrLn2t9v2/qc+rM7M/fbIcKMgk9ky4RN+L/maUEmteckzg6/PIYoAAXJg== "@docsearch/react@3.0.0": version "3.0.0" @@ -1451,19 +1457,19 @@ algoliasearch "^4.0.0" "@docsearch/react@^3.1.1": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.1.1.tgz#3dffb5db8cf9eb95d6e732cf038264bfc10191ed" - integrity sha512-cfoql4qvtsVRqBMYxhlGNpvyy/KlCoPqjIsJSZYqYf9AplZncKjLBTcwBu6RXFMVCe30cIFljniI4OjqAU67pQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.2.0.tgz#440c91e57cd48b87ff8e7d7fd446620ada9e677a" + integrity sha512-ATS3w5JBgQGQF0kHn5iOAPfnCCaoLouZQMmI7oENV//QMFrYbjhUZxBU9lIwAT7Rzybud+Jtb4nG5IEjBk3Ixw== dependencies: "@algolia/autocomplete-core" "1.7.1" "@algolia/autocomplete-preset-algolia" "1.7.1" - "@docsearch/css" "3.1.1" + "@docsearch/css" "3.2.0" algoliasearch "^4.0.0" -"@docusaurus/core@2.0.0-rc.1", "@docusaurus/core@^2.0.0-beta.20": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-rc.1.tgz#828d93d241171565d8947a9ab404091e04759141" - integrity sha512-b9FX0Z+EddfQ6wAiNh+Wx4fysKfcvEcWJrZ5USROn3C+EVU5P4luaa8mwWK//O+hTwD9ur7/A44IZ/tWCTAoLQ== +"@docusaurus/core@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0.tgz#37b0088b6feaff84b6308b323197111e9f09d74e" + integrity sha512-IqB3viXUuXvDENZYQMjs8++KcRbT3uCBNgahJqOh9V8OJA9aBYYe+hf7qxg6gWEDjdx8CK9Blnl2rDlNUYyk+A== dependencies: "@babel/core" "^7.18.6" "@babel/generator" "^7.18.7" @@ -1475,13 +1481,13 @@ "@babel/runtime" "^7.18.6" "@babel/runtime-corejs3" "^7.18.6" "@babel/traverse" "^7.18.8" - "@docusaurus/cssnano-preset" "2.0.0-rc.1" - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/mdx-loader" "2.0.0-rc.1" + "@docusaurus/cssnano-preset" "2.0.0" + "@docusaurus/logger" "2.0.0" + "@docusaurus/mdx-loader" "2.0.0" "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-common" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-common" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" "@slorber/static-site-generator-webpack-plugin" "^4.0.7" "@svgr/webpack" "^6.2.1" autoprefixer "^10.4.7" @@ -1537,33 +1543,128 @@ webpack-merge "^5.8.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0-rc.1.tgz#76bbd7f6912779a0667f8f2fd8fc1a05618a6148" - integrity sha512-9/KmQvF+eTlMqUqG6UcXbRgxbGed/8bQInXuKEs+95/jI6jO/3xSzuRwuHHHP0naUvSVWjnNI9jngPrQerXE5w== +"@docusaurus/core@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.1.tgz#a2b0d653e8f18eacddda4778a46b638dd1f0f45c" + integrity sha512-Prd46TtZdiixlTl8a+h9bI5HegkfREjSNkrX2rVEwJZeziSz4ya+l7QDnbnCB2XbxEG8cveFo/F9q5lixolDtQ== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^1.12.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.0.tgz#1cedd37b4cbea24aed5656cc4761f72708398bd3" + integrity sha512-twqSw77mOY6UYxFjETBdMBU9ymX2RK3l+sDCcyjANil9v6Hj2/mbYCSDfVeq/XgOJI4cRM0ntgZsHK9G0Cml4A== dependencies: cssnano-preset-advanced "^5.3.8" postcss "^8.4.14" postcss-sort-media-queries "^4.2.1" tslib "^2.4.0" -"@docusaurus/logger@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0-rc.1.tgz#db95e9b15bc243695830a5b791c0eff705ef1b54" - integrity sha512-daa3g+SXuO9K60PVMiSUmDEK9Vro+Ed7i7uF8CH6QQJLcNZy/zJc0Xz62eH7ip1x77fmeb6Rg4Us1TqTFc9AbQ== +"@docusaurus/cssnano-preset@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.0.1.tgz#4d0c49338cf3aa88c5bd7cffbf77654db8e1e3b2" + integrity sha512-MCJ6rRmlqLmlCsZIoIxOxDb0rYzIPEm9PYpsBW+CGNnbk+x8xK+11hnrxzvXHqDRNpxrq3Kq2jYUmg/DkqE6vg== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.0.tgz#cb691500e9cf2f97b7effb7c6a3f5df269c25835" + integrity sha512-J1nTIrNF56mfTn748fTIkjLB9bvSgRyYhJ5x5221K0w6pg/oqSHVFK8HqDI0JJMs+vp3XgUZNOgZxFOB9IyE+Q== dependencies: chalk "^4.1.2" tslib "^2.4.0" -"@docusaurus/mdx-loader@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-rc.1.tgz#e78d7d416aacc289f2427c5ccdb9145820acb0cb" - integrity sha512-8Fg0c/ceu39knmr7w0dutm7gq3YxKYCqWVS2cB/cPATzChCCNH/AGLfBT6sz/Z4tjVXE+NyREq2pfOFvkhjVXg== +"@docusaurus/logger@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.0.1.tgz#78a940a333d2f654fd9dea24db2c962034d4b1ff" + integrity sha512-wIWseCKko1w/WARcDjO3N/XoJ0q/VE42AthP0eNAfEazDjJ94NXbaI6wuUsuY/bMg6hTKGVIpphjj2LoX3g6dA== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0.tgz#30c341d139c3fe9dd639745c24ce33a15e9726b4" + integrity sha512-3Bi64ZRpmbshRWYMsKWiP2ReUHJEiDvSL+Vq63/ADOvmZAehLAbxwXelMXIoZjW5VyRGk4vKq8YRrjk/djLmzw== dependencies: "@babel/parser" "^7.18.8" "@babel/traverse" "^7.18.8" - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" + "@docusaurus/logger" "2.0.0" + "@docusaurus/utils" "2.0.0" "@mdx-js/mdx" "^1.6.22" escape-html "^1.0.3" file-loader "^6.2.0" @@ -1578,13 +1679,36 @@ url-loader "^4.1.1" webpack "^5.73.0" -"@docusaurus/module-type-aliases@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0-rc.1.tgz#c7839ac15b7712a8d86353a3253918f63ffbea09" - integrity sha512-la7D8ggFP8I5nOp/Epl6NqTeDWcbofPVMOaVisRxQbx5iuF9Al+AITbaDgm4CXpFLJACsqhsXD5W4BnKX8ZxfA== +"@docusaurus/mdx-loader@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.1.tgz#cc73690ca5d356687d9e75740560b4159cd5cdb5" + integrity sha512-tdNeljdilXCmhbaEND3SAgsqaw/oh7v9onT5yrIrL26OSk2AFwd+MIi4R8jt8vq33M0R4rz2wpknm0fQIkDdvQ== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.0.tgz#eb8d6c2f19fd940b93adb537571ba3a371ce8310" + integrity sha512-lztiqqC7MylhK92rAcjGdMMMfevro4IpViwopnxGVIskuAUNcvWuh2PS4WPnoSkKhAfzX6qiOtd7ujOwAOcNqA== dependencies: "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "2.0.0-rc.1" + "@docusaurus/types" "2.0.0" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1592,18 +1716,32 @@ react-helmet-async "*" react-loadable "npm:@docusaurus/react-loadable@5.5.2" -"@docusaurus/plugin-content-blog@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-rc.1.tgz#8ae5d5ec2da08c583a057bf2754a5b9278b3eb08" - integrity sha512-BVVrAGZujpjS/0rarY2o24rlylRRh2NZuM65kg0JNkkViF79SeEHsepog7IuHyoqGWPm1N/I7LpEp7k+gowZzQ== +"@docusaurus/module-type-aliases@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.0.1.tgz#44d7132297bedae0890695b0e7ebbe14a73e26d1" + integrity sha512-f888ylnxHAM/3T8p1lx08+lTc6/g7AweSRfRuZvrVhHXj3Tz/nTTxaP6gPTGkJK7WLqTagpar/IGP6/74IBbkg== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/mdx-loader" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-common" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.0.1" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0.tgz#3754c33291f5d350829247b81dce832ef78b5630" + integrity sha512-CQlRp6pqefgXmDdvhmEeAo0d28JMkK4Lh1+d4hmmFAYF/qadjdqlO3u93PFkDbKA51CvdZu6oKsV03Cek4tLVg== + dependencies: + "@docusaurus/core" "2.0.0" + "@docusaurus/logger" "2.0.0" + "@docusaurus/mdx-loader" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-common" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" cheerio "^1.0.0-rc.12" feed "^4.2.2" fs-extra "^10.1.0" @@ -1614,18 +1752,40 @@ utility-types "^3.10.0" webpack "^5.73.0" -"@docusaurus/plugin-content-docs@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-rc.1.tgz#2dda88166bf21b0eeb3821ef748059b20c8c49f7" - integrity sha512-Yk5Hu6uaw3tRplzJnbDygwRhmZ3PCzEXD4SJpBA6cPC73ylfqOEh6qhiU+BWhMTtDXNhY+athk5Kycfk3DW1aQ== +"@docusaurus/plugin-content-blog@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.1.tgz#a37065e18ffd26e022ffb16a21ff28199140729e" + integrity sha512-/4ua3iFYcpwgpeYgHnhVGROB/ybnauLH2+rICb4vz/+Gn1hjAmGXVYq1fk8g49zGs3uxx5nc0H5bL9P0g977IQ== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/mdx-loader" "2.0.0-rc.1" - "@docusaurus/module-type-aliases" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0.tgz#6eb0e1c65e3211678b2b66dcbb034a02fb2e470a" + integrity sha512-QRhJmW3WL9hahh4mllIheeS/Fp0ZROY8pa60KIONRUSCOOVKqeKeryk7UuhtTLcKGjVQpCKyTYOKnxEId6p5xg== + dependencies: + "@docusaurus/core" "2.0.0" + "@docusaurus/logger" "2.0.0" + "@docusaurus/mdx-loader" "2.0.0" + "@docusaurus/module-type-aliases" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" "@types/react-router-config" "^5.0.6" combine-promises "^1.1.0" fs-extra "^10.1.0" @@ -1636,84 +1796,167 @@ utility-types "^3.10.0" webpack "^5.73.0" -"@docusaurus/plugin-content-pages@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-rc.1.tgz#2be82f53d6c77e6aa66787726c30dc60b210e6f8" - integrity sha512-FdO79WC5hfWDQu3/CTFLRQzTNc0e5n+HNzavm2MNkSzGV08BFJ6RAkbPbtra5CWef+6iXZav6D/tzv2jDPvLzA== +"@docusaurus/plugin-content-docs@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.1.tgz#4059591b4bff617e744e856ca680674b27c0b98a" + integrity sha512-2qeBWRy1EjgnXdwAO6/csDIS1UVNmhmtk/bQ2s9jqjpwM8YVgZ8QVdkxFAMWXgZWDQdwWwdP1rnmoEelE4HknQ== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/mdx-loader" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/module-type-aliases" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0.tgz#7dc94d1998a0d8746fd3f5e26c38bacc81debd11" + integrity sha512-Lcmohcbs+oc+e33ZjI82agSaZyCwZHGL1R7c1jiYEBCGIQzyTkQgQarBgfL63i82q5DCBwv0GC5CYjRUG2ugtg== + dependencies: + "@docusaurus/core" "2.0.0" + "@docusaurus/mdx-loader" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" fs-extra "^10.1.0" tslib "^2.4.0" webpack "^5.73.0" -"@docusaurus/plugin-debug@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-rc.1.tgz#73c06ad08d66810941e456d50b07be008f5235cb" - integrity sha512-aOsyYrPMbnsyqHwsVZ+0frrMRtnYqm4eaJpG4sC/6LYAJ07IDRQ9j3GOku2dKr5GsFK1Vx7VlE6ZLwe0MaGstg== +"@docusaurus/plugin-content-pages@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.1.tgz#013f2e66f80d19b5c95a2d941d67c7cdb67b7191" + integrity sha512-6apSVeJENnNecAH5cm5VnRqR103M6qSI6IuiP7tVfD5H4AWrfDNkvJQV2+R2PIq3bGrwmX4fcXl1x4g0oo7iwA== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.0.tgz#73008bc2544ecc7047bf178476cbd9f2b10f2c47" + integrity sha512-7/QsPq/d6GjjF8kbItlN9mQvmPCG67tCnRKMOZOhS2Q//+1W9GQCTahX2gdnm4QIvfUfrC2MjlCFH1e6kElHyQ== + dependencies: + "@docusaurus/core" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils" "2.0.0" fs-extra "^10.1.0" react-json-view "^1.21.3" tslib "^2.4.0" -"@docusaurus/plugin-google-analytics@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-rc.1.tgz#0136cc7534573ca56e023178ec2bda5c1e89ce71" - integrity sha512-f+G8z5OJWfg5QqWDLIdcN2SDoK5J5Gg8HMrqCI6Pfl+rxPb5I1niA+/UkAM+kMCpnekvhSt5AWz2fgkRenkPLA== +"@docusaurus/plugin-debug@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.0.1.tgz#2b2a473f8e01fd356e32236f753665b48209bcd4" + integrity sha512-jpZBT5HK7SWx1LRQyv9d14i44vSsKXGZsSPA2ndth5HykHJsiAj9Fwl1AtzmtGYuBmI+iXQyOd4MAMHd4ZZ1tg== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + fs-extra "^10.1.0" + react-json-view "^1.21.3" tslib "^2.4.0" -"@docusaurus/plugin-google-gtag@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-rc.1.tgz#61698fdc41a4ace912fb8f6c834efd288edad3c0" - integrity sha512-yE1Et9hhhX9qMRnMJzpNq0854qIYiSEc2dZaXNk537HN7Q0rKkr/YONUHz2iqNYwPX2hGOY4LdpTxlMP88uVhA== +"@docusaurus/plugin-google-analytics@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0.tgz#94228ba52439b26eec26d7b6a38799cf6d07b406" + integrity sha512-2r1S/dfkWLmUNkMLnl3olnjrU4OyYB/bprAe5Z3DBPHX1iHn9rHp3KPnQJW0BvjhLSyxOIp5xVmYuSxsCUwqUQ== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" tslib "^2.4.0" -"@docusaurus/plugin-sitemap@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-rc.1.tgz#0b638e774b253d90e9f2d11663e961250f557bc4" - integrity sha512-5JmbNpssUF03odFM4ArvIsrO9bv7HnAJ0VtefXhh0WBpaFs8NgI3rTkCTFimvtRQjDR9U2bh23fXz2vjQQz6oA== +"@docusaurus/plugin-google-analytics@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.1.tgz#e3b84237aad2e94dcd1cf1810c1c9bc3d94f186d" + integrity sha512-d5qb+ZeQcg1Czoxc+RacETjLdp2sN/TAd7PGN/GrvtijCdgNmvVAtZ9QgajBTG0YbJFVPTeZ39ad2bpoOexX0w== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-common" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0.tgz#72baf169e706d397715222a8961b935b1dffc760" + integrity sha512-uoi9ivLTzsNQcRKbGWDZaYd9o+aq2QHwFctMT9OR9K2/zFzislo87KXbAiEWBJci9EtDtnUxwfzbMplCqaGXcw== + dependencies: + "@docusaurus/core" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.1.tgz#4cbcf9d520f7ec8124679fbe00867f2299a2f6bb" + integrity sha512-qiRufJe2FvIyzICbkjm4VbVCI1hyEju/CebfDKkKh2ZtV4q6DM1WZG7D6VoQSXL8MrMFB895gipOM4BwdM8VsQ== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0.tgz#382ff17864f2ffd547201b8411a2f1661035f98a" + integrity sha512-8pwEAZKDxG6vMVjDnsvAPJC85reLiVXSetkdfIuchX9WTcKMMSQpZ51urUSxJPP3vQsVDMVNGc0RlaXzYBHwxg== + dependencies: + "@docusaurus/core" "2.0.0" + "@docusaurus/logger" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-common" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" fs-extra "^10.1.0" sitemap "^7.1.1" tslib "^2.4.0" -"@docusaurus/preset-classic@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-rc.1.tgz#5e5b1cf80b3dd4e2c3f824c78a111f105858d853" - integrity sha512-5jjTVZkhArjyoNHwCI9x4PSG0zPmBJILjZLVrxPcHpm/K0ltkYcp6J3GxYpf5EbMuOh5+yCWM63cSshGcNOo3Q== +"@docusaurus/plugin-sitemap@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.1.tgz#6f8edb82b745b040d6b1495e2798396f63e50289" + integrity sha512-KcYuIUIp2JPzUf+Xa7W2BSsjLgN1/0h+VAz7D/C3RYjAgC5ApPX8wO+TECmGfunl/m7WKGUmLabfOon/as64kQ== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/plugin-content-blog" "2.0.0-rc.1" - "@docusaurus/plugin-content-docs" "2.0.0-rc.1" - "@docusaurus/plugin-content-pages" "2.0.0-rc.1" - "@docusaurus/plugin-debug" "2.0.0-rc.1" - "@docusaurus/plugin-google-analytics" "2.0.0-rc.1" - "@docusaurus/plugin-google-gtag" "2.0.0-rc.1" - "@docusaurus/plugin-sitemap" "2.0.0-rc.1" - "@docusaurus/theme-classic" "2.0.0-rc.1" - "@docusaurus/theme-common" "2.0.0-rc.1" - "@docusaurus/theme-search-algolia" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.1.tgz#21a806e16b61026d2a0efa6ca97e17397065d894" + integrity sha512-nOoniTg46My1qdDlLWeFs55uEmxOJ+9WMF8KKG8KMCu5LAvpemMi7rQd4x8Tw+xiPHZ/sQzH9JmPTMPRE4QGPw== + dependencies: + "@docusaurus/core" "2.0.1" + "@docusaurus/plugin-content-blog" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/plugin-content-pages" "2.0.1" + "@docusaurus/plugin-debug" "2.0.1" + "@docusaurus/plugin-google-analytics" "2.0.1" + "@docusaurus/plugin-google-gtag" "2.0.1" + "@docusaurus/plugin-sitemap" "2.0.1" + "@docusaurus/theme-classic" "2.0.1" + "@docusaurus/theme-common" "2.0.1" + "@docusaurus/theme-search-algolia" "2.0.1" + "@docusaurus/types" "2.0.1" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -1723,23 +1966,23 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-rc.1.tgz#4ab30745e6b03b0f277837debae786a0a83aee6a" - integrity sha512-qNiz7ieeq3AC+V8TbW6S63pWLJph1CbzWDDPTqxDLHgA8VQaNaSmJM8S92pH+yKALRb9u14ogjjYYc75Nj2JmQ== +"@docusaurus/theme-classic@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0.tgz#a048a37275538628fcc5b5e2daa64488f1e7860d" + integrity sha512-/tT2xd3kLHNdeQbf9hwqAbL8tf/jD6DtRwquDwujmew5ONe0Ltzo2oxYp8mcZORWE5Z6yilcyXqBUmGAP6WtHw== dependencies: - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/mdx-loader" "2.0.0-rc.1" - "@docusaurus/module-type-aliases" "2.0.0-rc.1" - "@docusaurus/plugin-content-blog" "2.0.0-rc.1" - "@docusaurus/plugin-content-docs" "2.0.0-rc.1" - "@docusaurus/plugin-content-pages" "2.0.0-rc.1" - "@docusaurus/theme-common" "2.0.0-rc.1" - "@docusaurus/theme-translations" "2.0.0-rc.1" - "@docusaurus/types" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-common" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.0" + "@docusaurus/mdx-loader" "2.0.0" + "@docusaurus/module-type-aliases" "2.0.0" + "@docusaurus/plugin-content-blog" "2.0.0" + "@docusaurus/plugin-content-docs" "2.0.0" + "@docusaurus/plugin-content-pages" "2.0.0" + "@docusaurus/theme-common" "2.0.0" + "@docusaurus/theme-translations" "2.0.0" + "@docusaurus/types" "2.0.0" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-common" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" "@mdx-js/react" "^1.6.22" clsx "^1.2.1" copy-text-to-clipboard "^3.0.1" @@ -1754,17 +1997,48 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-common@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0-rc.1.tgz#ea5d9732a16b03b488555e50107161bfa2abad98" - integrity sha512-1r9ZLKD9SeoCYVzWzcdR79Dia4ANlrlRjNl6uzETOEybjK6FF7yEa9Yra8EJcOCbi3coyYz5xFh/r1YHFTFHug== +"@docusaurus/theme-classic@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.1.tgz#043b6fcd2ecb2aecd134419b198c9f519029d5e7" + integrity sha512-0jfigiqkUwIuKOw7Me5tqUM9BBvoQX7qqeevx7v4tkYQexPhk3VYSZo7aRuoJ9oyW5makCTPX551PMJzmq7+sw== dependencies: - "@docusaurus/mdx-loader" "2.0.0-rc.1" - "@docusaurus/module-type-aliases" "2.0.0-rc.1" - "@docusaurus/plugin-content-blog" "2.0.0-rc.1" - "@docusaurus/plugin-content-docs" "2.0.0-rc.1" - "@docusaurus/plugin-content-pages" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/module-type-aliases" "2.0.1" + "@docusaurus/plugin-content-blog" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/plugin-content-pages" "2.0.1" + "@docusaurus/theme-common" "2.0.1" + "@docusaurus/theme-translations" "2.0.1" + "@docusaurus/types" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-common" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.42" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.0.tgz#484736bfceae78509268a619ffc4c631cd9072b9" + integrity sha512-4R0jmyEPrz9Jehcvvar3SbQTzwwpD4/jskyX2bXqgD2GbMvW4wA/CskuG0mNFEW+6JBYJUz4HGvxMmHLi3nU0Q== + dependencies: + "@docusaurus/mdx-loader" "2.0.0" + "@docusaurus/module-type-aliases" "2.0.0" + "@docusaurus/plugin-content-blog" "2.0.0" + "@docusaurus/plugin-content-docs" "2.0.0" + "@docusaurus/plugin-content-pages" "2.0.0" + "@docusaurus/utils" "2.0.0" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1774,19 +2048,39 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-rc.1.tgz#e78c0aeaea6a3717ae3a6ecd75a8652bd7c8e974" - integrity sha512-H5yq6V/B4qo6GZrDKMbeSpk3T9e9K2MliDzLonRu0w3QHW9orVGe0c/lZvRbGlDZjnsOo7XGddhXXIDWGwnpaA== +"@docusaurus/theme-common@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.0.1.tgz#9594d58fbef11fe480967b5ce4cdbb3cd78d9ca3" + integrity sha512-I3b6e/ryiTQMsbES40cP0DRGnfr0E2qghVq+XecyMKjBPejISoSFEDn0MsnbW8Q26k1Dh/0qDH8QKDqaZZgLhA== + dependencies: + "@docusaurus/mdx-loader" "2.0.1" + "@docusaurus/module-type-aliases" "2.0.1" + "@docusaurus/plugin-content-blog" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/plugin-content-pages" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-search-algolia@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0.tgz#3742a4177f804e703d8873d9bd1e478978197ce7" + integrity sha512-MxSGSe5MnqEiIGcRrtNfl5fOk3a+oWIZ1yOZtttryFBoqAPgiigMcTr9ms+/muqDIhsyPpQ+Bi7xiOWZ9NSWAQ== dependencies: "@docsearch/react" "^3.1.1" - "@docusaurus/core" "2.0.0-rc.1" - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/plugin-content-docs" "2.0.0-rc.1" - "@docusaurus/theme-common" "2.0.0-rc.1" - "@docusaurus/theme-translations" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" - "@docusaurus/utils-validation" "2.0.0-rc.1" + "@docusaurus/core" "2.0.0" + "@docusaurus/logger" "2.0.0" + "@docusaurus/plugin-content-docs" "2.0.0" + "@docusaurus/theme-common" "2.0.0" + "@docusaurus/theme-translations" "2.0.0" + "@docusaurus/utils" "2.0.0" + "@docusaurus/utils-validation" "2.0.0" algoliasearch "^4.13.1" algoliasearch-helper "^3.10.0" clsx "^1.2.1" @@ -1796,18 +2090,48 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0-rc.1.tgz#bd647f78c741ee7f6c6d2cbbd3e3f282ef2f89ad" - integrity sha512-JLhNdlnbQhxVQzOnLyiCaTzKFa1lpVrM3nCrkGQKscoG2rY6ARGYMgMN2DkoH6hm7TflQ8+PE1S5MzzASeLs4Q== +"@docusaurus/theme-search-algolia@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.1.tgz#0aab8407b2163f67eb4c48f1de33944e1695fa74" + integrity sha512-cw3NaOSKbYlsY6uNj4PgO+5mwyQ3aEWre5RlmvjStaz2cbD15Nr69VG8Rd/F6Q5VsCT8BvSdkPDdDG5d/ACexg== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.0.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/plugin-content-docs" "2.0.1" + "@docusaurus/theme-common" "2.0.1" + "@docusaurus/theme-translations" "2.0.1" + "@docusaurus/utils" "2.0.1" + "@docusaurus/utils-validation" "2.0.1" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^1.12.3" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.0.tgz#a3038b4dc09f531fab95bbb64fd2ad921edfe99f" + integrity sha512-PMIlwAIVQjbKlGeL9b0gWdDVxrPUCie/GnWt2nwtgPrSFl8Qn5ik2XJo7lnpojKf96ukX3ZtvnVEueWylJNVpg== dependencies: fs-extra "^10.1.0" tslib "^2.4.0" -"@docusaurus/types@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0-rc.1.tgz#032f8afde6b4878e37f984b9949a96b150103c21" - integrity sha512-wX25FOZa/aKnCGA5ljWPaDpMW3TuTbs0BtjQ8WTC557p8zDvuz4r+g2/FPHsgWE0TKwUMf4usQU1m3XpJLPN+g== +"@docusaurus/theme-translations@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.0.1.tgz#955a687c974265a811bfc743d98ef3eab0379100" + integrity sha512-v1MYYlbsdX+rtKnXFcIAn9ar0Z6K0yjqnCYS0p/KLCLrfJwfJ8A3oRJw2HiaIb8jQfk1WMY2h5Qi1p4vHOekQw== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.0.tgz#da56187c0a6de1885bb70fa507c13f94d1465b27" + integrity sha512-h++LPAd9sdxUJW3hTUvXNXThx8JMS0XwyyM9O6XUUaelhyziizk3L2CzH7IpMWM0Xw8mE6wJuP4A+Yo4rfhLog== dependencies: "@types/history" "^4.7.11" "@types/react" "*" @@ -1818,30 +2142,83 @@ webpack "^5.73.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0-rc.1.tgz#3e233a28794325d5d9d3af3f7b1c22b59aa8b847" - integrity sha512-+iZICpeFPZJ9oGJXuG92WTWee6WRnVx5BdzlcfuKf/f5KQX8PvwXR2tDME78FGGhShB8zr+vjuNEXuLvXT7j2A== +"@docusaurus/types@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.0.1.tgz#8696a70e85c4b9be80b38ac592d520f6fe72618b" + integrity sha512-o+4hAFWkj3sBszVnRTAnNqtAIuIW0bNaYyDwQhQ6bdz3RAPEq9cDKZxMpajsj4z2nRty8XjzhyufAAjxFTyrfg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.0.tgz#e51c81de49ba8bec5a7bad47ac31c76826decfb2" + integrity sha512-JZ/eM9YingxRJ0Jbt/u9/5V05ttQklxCAXY9wmUuvL4fN/glbDb2UbDlFbFgeoRxQ9IM9LdYy+P8AldXJ9lbxw== dependencies: tslib "^2.4.0" -"@docusaurus/utils-validation@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0-rc.1.tgz#dded12f036cda8a54a19e01694b35859fe0cf1d5" - integrity sha512-lj36gm9Ksu4tt/EUeLDWoMbXe3sfBxeIPIUUdqYcBYkF/rpQkh+uL/dncjNGiw6uvBOqXhOfsFVP045HtgShVw== +"@docusaurus/utils-common@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.0.1.tgz#b6f2b029547f739e1431ec84abd16974edf495e0" + integrity sha512-kajCCDCXRd1HFH5EUW31MPaQcsyNlGakpkDoTBtBvpa4EIPvWaSKy7TIqYKHrZjX4tnJ0YbEJvaXfjjgdq5xSg== dependencies: - "@docusaurus/logger" "2.0.0-rc.1" - "@docusaurus/utils" "2.0.0-rc.1" + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.0.tgz#3dba16b5f4865aef5b60fe0f18acafeaab8c1bb4" + integrity sha512-kuF7chhahq8Hgh87nwPGoqH9q3NopmvlWHLzGbNwZH/q0UaWKsbNNCk7wFYcdRGBLsCfOtn+2YJm1bdSioHHBA== + dependencies: + "@docusaurus/logger" "2.0.0" + "@docusaurus/utils" "2.0.0" joi "^17.6.0" js-yaml "^4.1.0" tslib "^2.4.0" -"@docusaurus/utils@2.0.0-rc.1": - version "2.0.0-rc.1" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-rc.1.tgz#53584b800df9e13864d5ef1a76aa7655a90ec86e" - integrity sha512-ym9I1OwIYbKs1LGaUajaA/vDG8VweJj/6YoZjHp+eDQHhTRIrHXiYoGDqorafRhftKwnA1EnyomuXpNd9bq8Gg== +"@docusaurus/utils-validation@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.0.1.tgz#69f7d4944288d71f00fdba6dde10f05008f04308" + integrity sha512-f14AnwFBy4/1A19zWthK+Ii80YDz+4qt8oPpK3julywXsheSxPBqgsND3LVBBvB2p3rJHvbo2m3HyB9Tco1JRw== dependencies: - "@docusaurus/logger" "2.0.0-rc.1" + "@docusaurus/logger" "2.0.1" + "@docusaurus/utils" "2.0.1" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0.tgz#740d60fc7a3d67c5fb6e2fb583bd6cc37c9d86eb" + integrity sha512-ir/JLBuOB/dvdQRD3aV8m4PFlUlb3/gMDY6/Q3Nx/oS+uY1pEoZiEQP1GNH0yaysT36QHkpMMyRZL+hbdFaoWA== + dependencies: + "@docusaurus/logger" "2.0.0" + "@svgr/webpack" "^6.2.1" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/utils@2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.1.tgz#37b4b42e29175e5d2d811fcbf9f93bffeca7c353" + integrity sha512-u2Vdl/eoVwMfUjDCkg7FjxoiwFs/XhVVtNxQEw8cvB+qaw6QWyT73m96VZzWtUb1fDOefHoZ+bZ0ObFeKk9lMQ== + dependencies: + "@docusaurus/logger" "2.0.1" "@svgr/webpack" "^6.2.1" file-loader "^6.2.0" fs-extra "^10.1.0" @@ -2249,9 +2626,9 @@ integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.18": - version "4.17.29" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" - integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== + version "4.17.30" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.30.tgz#0f2f99617fa8f9696170c46152ccf7500b34ac04" + integrity sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2303,15 +2680,15 @@ dependencies: "@types/unist" "*" -"@types/mime@^1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" - integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== +"@types/mime@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.0.tgz#e9a9903894405c6a6551f1774df4e64d9804d69c" + integrity sha512-fccbsHKqFDXClBZTDLA43zl0+TbxyIwyzIzwwhvoJvhNjOErCdeX2xJbURimv2EbSVUGav001PaCJg4mZxMl4w== "@types/node@*": - version "18.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.1.tgz#828e4785ccca13f44e2fb6852ae0ef11e3e20ba5" - integrity sha512-z+2vB6yDt1fNwKOeGbckpmirO+VBDuQqecXkgeIqDlaOtmKn6hPR/viQ8cxCfqLU4fTlvM3+YjM367TukWdxpg== + version "18.6.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.6.3.tgz#4e4a95b6fe44014563ceb514b2598b3e623d1c98" + integrity sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg== "@types/node@^17.0.5": version "17.0.45" @@ -2403,11 +2780,11 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" - integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== + version "1.15.0" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155" + integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg== dependencies: - "@types/mime" "^1" + "@types/mime" "*" "@types/node" "*" "@types/sockjs@^0.3.33": @@ -2636,31 +3013,31 @@ ajv@^8.0.0, ajv@^8.8.0: uri-js "^4.2.2" algoliasearch-helper@^3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.10.0.tgz#59a0f645dd3c7e55cf01faa568d1af50c49d36f6" - integrity sha512-4E4od8qWWDMVvQ3jaRX6Oks/k35ywD011wAA4LbYMMjOtaZV6VWaTjRr4iN2bdaXP2o1BP7SLFMBf3wvnHmd8Q== + version "3.11.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.11.0.tgz#c4355056d97748a92f6ff0d4fce153b96b561ddb" + integrity sha512-TLl/MSjtQ98mgkd8hngWkzSjE+dAWldZ1NpJtv2mT+ZoFJ2P2zDE85oF9WafJOXWN9FbVRmyxpO5H+qXcNaFng== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^4.0.0, algoliasearch@^4.13.1: - version "4.14.1" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.1.tgz#7f24cabd264f8294b461d108e1603e673571e806" - integrity sha512-ZWqnbsGUgU03/IyG995pMCc+EmNVDA/4c9ntr8B0dWQwFqazOQ4ErvKZxarbgSNmyPo/eZcVsTb0bNplJMttGQ== + version "4.14.2" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.14.2.tgz#63f142583bfc3a9bd3cd4a1b098bf6fe58e56f6c" + integrity sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg== dependencies: - "@algolia/cache-browser-local-storage" "4.14.1" - "@algolia/cache-common" "4.14.1" - "@algolia/cache-in-memory" "4.14.1" - "@algolia/client-account" "4.14.1" - "@algolia/client-analytics" "4.14.1" - "@algolia/client-common" "4.14.1" - "@algolia/client-personalization" "4.14.1" - "@algolia/client-search" "4.14.1" - "@algolia/logger-common" "4.14.1" - "@algolia/logger-console" "4.14.1" - "@algolia/requester-browser-xhr" "4.14.1" - "@algolia/requester-common" "4.14.1" - "@algolia/requester-node-http" "4.14.1" - "@algolia/transporter" "4.14.1" + "@algolia/cache-browser-local-storage" "4.14.2" + "@algolia/cache-common" "4.14.2" + "@algolia/cache-in-memory" "4.14.2" + "@algolia/client-account" "4.14.2" + "@algolia/client-analytics" "4.14.2" + "@algolia/client-common" "4.14.2" + "@algolia/client-personalization" "4.14.2" + "@algolia/client-search" "4.14.2" + "@algolia/logger-common" "4.14.2" + "@algolia/logger-console" "4.14.2" + "@algolia/requester-browser-xhr" "4.14.2" + "@algolia/requester-common" "4.14.2" + "@algolia/requester-node-http" "4.14.2" + "@algolia/transporter" "4.14.2" ansi-align@^3.0.0, ansi-align@^3.0.1: version "3.0.1" @@ -2758,7 +3135,7 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== -autoprefixer@10.4.7, autoprefixer@^10.3.7, autoprefixer@^10.4.7: +autoprefixer@10.4.7: version "10.4.7" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.7.tgz#1db8d195f41a52ca5069b7593be167618edbbedf" integrity sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA== @@ -2770,6 +3147,18 @@ autoprefixer@10.4.7, autoprefixer@^10.3.7, autoprefixer@^10.4.7: picocolors "^1.0.0" postcss-value-parser "^4.2.0" +autoprefixer@^10.3.7, autoprefixer@^10.4.7: + version "10.4.8" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.8.tgz#92c7a0199e1cfb2ad5d9427bd585a3d75895b9e5" + integrity sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw== + dependencies: + browserslist "^4.21.3" + caniuse-lite "^1.0.30001373" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + axios@0.25.0, axios@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" @@ -2809,7 +3198,7 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.1: +babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz#e4c31d4c89b56f3cf85b92558954c66b54bd972d" integrity sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q== @@ -2818,7 +3207,7 @@ babel-plugin-polyfill-corejs2@^0.3.0, babel-plugin-polyfill-corejs2@^0.3.1: "@babel/helper-define-polyfill-provider" "^0.3.2" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.2: +babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz#d7e09c9a899079d71a8b670c6181af56ec19c5c7" integrity sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw== @@ -2826,13 +3215,20 @@ babel-plugin-polyfill-corejs3@^0.5.0, babel-plugin-polyfill-corejs3@^0.5.2: "@babel/helper-define-polyfill-provider" "^0.3.2" core-js-compat "^3.21.0" -babel-plugin-polyfill-regenerator@^0.3.0, babel-plugin-polyfill-regenerator@^0.3.1: +babel-plugin-polyfill-regenerator@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz#2c0678ea47c75c8cc2fbb1852278d8fb68233990" integrity sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A== dependencies: "@babel/helper-define-polyfill-provider" "^0.3.1" +babel-plugin-polyfill-regenerator@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz#8f51809b6d5883e07e71548d75966ff7635527fe" + integrity sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.2" + bail@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" @@ -2954,15 +3350,15 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.2: - version "4.21.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" - integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4.18.1, browserslist@^4.20.2, browserslist@^4.20.3, browserslist@^4.21.3: + version "4.21.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.3.tgz#5df277694eb3c48bc5c4b05af3e8b7e09c5a6d1a" + integrity sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ== dependencies: - caniuse-lite "^1.0.30001366" - electron-to-chromium "^1.4.188" + caniuse-lite "^1.0.30001370" + electron-to-chromium "^1.4.202" node-releases "^2.0.6" - update-browserslist-db "^1.0.4" + update-browserslist-db "^1.0.5" buffer-from@^1.0.0: version "1.1.2" @@ -3033,10 +3429,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001366: - version "1.0.30001370" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001370.tgz#0a30d4f20d38b9e108cc5ae7cc62df9fe66cd5ba" - integrity sha512-3PDmaP56wz/qz7G508xzjx8C+MC2qEm4SYhSEzC9IBROo+dGXFWRuaXkWti0A9tuI00g+toiriVqxtWMgl350g== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001335, caniuse-lite@^1.0.30001370, caniuse-lite@^1.0.30001373: + version "1.0.30001373" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz#2dc3bc3bfcb5d5a929bec11300883040d7b4b4be" + integrity sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ== ccount@^1.0.0: version "1.1.0" @@ -3396,11 +3792,11 @@ copy-webpack-plugin@^11.0.0: serialize-javascript "^6.0.0" core-js-compat@^3.21.0, core-js-compat@^3.22.1: - version "3.24.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.0.tgz#885958fac38bf3f4464a90f2663b4620f6aee6e3" - integrity sha512-F+2E63X3ff/nj8uIrf8Rf24UDGIz7p838+xjEp+Bx3y8OWXj+VTPPZNCtdqovPaS9o7Tka5mCH01Zn5vOd6UQg== + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.24.1.tgz#d1af84a17e18dfdd401ee39da9996f9a7ba887de" + integrity sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw== dependencies: - browserslist "^4.21.2" + browserslist "^4.21.3" semver "7.0.0" core-js-pure@3.22.5: @@ -3409,9 +3805,9 @@ core-js-pure@3.22.5: integrity sha512-8xo9R00iYD7TcV7OrC98GwxiUEAabVWO3dix+uyWjnYrx9fyASLlIX+f/3p5dW5qByaP2bcZ8X/T47s55et/tA== core-js-pure@^3.20.2: - version "3.24.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.0.tgz#10eeb90dbf0d670a6b22b081aecc7deb2faec7e1" - integrity sha512-uzMmW8cRh7uYw4JQtzqvGWRyC2T5+4zipQLQdi2FmiRqP83k3d6F3stv2iAlNhOs6cXN401FCD5TL0vvleuHgA== + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.24.1.tgz#8839dde5da545521bf282feb7dc6d0b425f39fd3" + integrity sha512-r1nJk41QLLPyozHUUPmILCEMtMw24NG4oWK6RbsDdjzQgg9ZvrUsPBj1MnG0wXXp1DCDU6j+wUvEmBSrtRbLXg== core-js@3.22.5: version "3.22.5" @@ -3419,9 +3815,9 @@ core-js@3.22.5: integrity sha512-VP/xYuvJ0MJWRAobcmQ8F2H6Bsn+s7zqAAjFaHGBMc5AQm7zaelhD1LGduFn2EehEcQcU+br6t+fwbpQ5d1ZWA== core-js@^3.23.3: - version "3.24.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.0.tgz#4928d4e99c593a234eb1a1f9abd3122b04d3ac57" - integrity sha512-IeOyT8A6iK37Ep4kZDD423mpi6JfPRoPUdQwEWYiGolvn4o6j2diaRzNfDfpTdu3a5qMbrGUzKUpYpRY8jXCkQ== + version "3.24.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.24.1.tgz#cf7724d41724154010a6576b7b57d94c5d66e64f" + integrity sha512-0QTBSYSUZ6Gq21utGzkfITDylE8jWC9Ne1D2MrhvlsZBI1x39OdDIVbzSqtgMndIy6BlHxBXpMGqzZmnztg2rg== core-util-is@~1.0.0: version "1.0.3" @@ -4482,10 +4878,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.188: - version "1.4.199" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz#e0384fde79fdda89880e8be58196a9153e04db3b" - integrity sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg== +electron-to-chromium@^1.4.202: + version "1.4.210" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.210.tgz#12611fe874b833a3bf3671438b5893aba7858980" + integrity sha512-kSiX4tuyZijV7Cz0MWVmGT8K2siqaOA4Z66K5dCttPPRh0HicOcOAEj1KlC8O8J1aOS/1M8rGofOzksLKaHWcQ== emoji-regex@^8.0.0: version "8.0.0" @@ -8285,9 +8681,9 @@ type-fest@^0.20.2: integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== type-fest@^2.5.0: - version "2.17.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.17.0.tgz#c677030ce61e5be0c90c077d52571eb73c506ea9" - integrity sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA== + version "2.18.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.18.0.tgz#fdef3a74e0a9e68ebe46054836650fb91ac3881e" + integrity sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw== type-is@~1.6.18: version "1.6.18" @@ -8439,7 +8835,7 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.4: +update-browserslist-db@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== From ce853970501ba502896144862b0dc94661364d60 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Fri, 5 Aug 2022 14:24:57 +0200 Subject: [PATCH 078/116] docs: fix i18n link (#4126) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4d2bcd1f9e..02fe20e3ce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -95,7 +95,7 @@ We add the label "good first issue" for problems we think are a good starting po ZITADEL loads translations from four files: - [Console texts](./console/src/assets/i18n) -- [Login interface](./internal/ui/login/static/i18n) +- [Login interface](./internal/api/ui/login/static/i18n) - [Email notification](./internal/notification/static/i18n) - [Common texts](./internal/static/i18n) for success or error toasts From fc99ec87c518c1b74203fbeb3b3ec8b40149971c Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Fri, 5 Aug 2022 20:00:46 +0200 Subject: [PATCH 079/116] ci(e2e): Run Tests in Pipelines (#3903) * cy10 changes * test: setup local e2e env * test(e2e): migrate e2e setup * add more config * make e2e setup work * align variables * fix config * skip mfa * set user register to false * read ids from database if not provided * don't read ids withing env file * fix escaping in id queries * fix project root * export projectRoot path * export projectRoot * add e2e-setup.sh * specify GOOS and GOARCH for dockerfile compatible binary * add org default redirect uri * correctly initialize org policy * await ids * fix awaiting ids * fix cypress configuration * fix some tests * initial compose setup * fix working directory * fix references * make tests less flaky * run go tests * compose works until e2e-setup incl * pass created e2e sa key * make cypress run * derive e2e orgs domain from baseurl * use host from baseurl for setup ctx * move defaults.yaml back to cmd pkg * just create org owner * Don't render element if no roles are passed * use map instead of switchMap * fix e2e tests * added testdata for e3e * zipped dump * removed dumpDir * cypress workflow with compose * quote name * cleanup vars * eliminate need for e2e setup * compose has no builds anymore * use compose run and zitadel nw * test e2e on pr (#4114) * test e2e on pr * install goreleaser * install npm dev dependencies * run cypress wf * dynamic release version * skip flaky user tests * skip flaky permissions test * cache docker layers in pipeline * Update .github/workflows/cypress.yml Co-authored-by: Florian Forster * align goreleaser version * get rid of install.sh * remove cypress-terminal-report * Revert "remove cypress-terminal-report" This reverts commit 254b5a1f87be71c64c1289b12fc1bf23a401ea64. * just one npm e2e:build command * cache npm dependencies * install node modules using docker * dedicated e2e context * fix syntax * don't copy node modules from goreleaser * add npm-copy target * add tsconfig.json * remove docker caching * deleted unneeded shellscript * naming and cleanup Co-authored-by: Florian Forster Co-authored-by: Christian Jakob * cleanup Co-authored-by: Elio Bischof Co-authored-by: Christian Jakob Co-authored-by: Florian Forster --- .artifacts/zitadel/.gitignore | 3 + .../zitadel/.gitkeep | 0 .github/workflows/e2e.yml | 44 + .github/workflows/zitadel-pr.yml | 45 +- .gitignore | 3 +- .goreleaser.yaml | 2 +- console/cypress.json | 14 - console/cypress.sh | 21 - .../integration/applications/applications.ts | 50 - console/cypress/integration/humans/humans.ts | 83 - .../cypress/integration/machines/machines.ts | 60 - .../cypress/integration/projects/projects.ts | 78 - .../integration/settings/private-labeling.ts | 85 - console/cypress/plugins/index.ts | 15 - console/cypress/support/api/apiauth.ts | 49 - console/cypress/support/login/users.ts | 164 - console/cypress/tsconfig.json | 8 - console/e2e.env | 14 - console/package-lock.json | 2897 ---------- console/package.json | 8 +- .../action-keys/action-keys.component.html | 2 +- .../paginator/paginator.component.html | 2 +- .../project-roles-table.component.html | 4 +- .../table-actions.component.html | 3 +- .../project-list/project-list.component.html | 3 +- .../user-table/user-table.component.html | 4 + e2e/.gitignore | 1 + e2e/README.md | 12 + e2e/cypress.config.ts | 41 + {console => e2e}/cypress/.gitignore | 0 .../e2e/applications/applications.cy.ts | 42 + e2e/cypress/e2e/humans/humans.cy.ts | 57 + e2e/cypress/e2e/machines/machines.cy.ts | 55 + .../cypress/e2e/permissions/permissions.cy.ts | 79 +- e2e/cypress/e2e/projects/projects.cy.ts | 71 + e2e/cypress/e2e/register/register.cy.ts | 0 .../cypress/e2e/settings/login-policy.cy.ts | 2 +- .../e2e/settings/password-complexity.cy.ts | 2 +- .../e2e/settings/private-labeling.cy.ts | 79 + .../cypress/fixtures/example.json | 0 {console => e2e}/cypress/fixtures/logo.png | Bin e2e/cypress/support/api/apiauth.ts | 15 + .../cypress/support/api/ensure.ts | 0 .../cypress/support/api/policies.ts | 0 .../cypress/support/api/projects.ts | 0 {console => e2e}/cypress/support/api/users.ts | 0 {console => e2e}/cypress/support/commands.ts | 4 +- e2e/cypress/support/e2e.ts | 20 + {console => e2e}/cypress/support/index.ts | 0 e2e/cypress/support/login/users.ts | 219 + e2e/cypress/tsconfig.json | 9 + e2e/docker-compose.yaml | 63 + e2e/package-lock.json | 4704 +++++++++++++++++ e2e/package.json | 15 + e2e/tsconfig.json | 9 + 55 files changed, 5539 insertions(+), 3621 deletions(-) create mode 100644 .artifacts/zitadel/.gitignore rename console/cypress/integration/register/register.ts => .artifacts/zitadel/.gitkeep (100%) create mode 100644 .github/workflows/e2e.yml delete mode 100644 console/cypress.json delete mode 100755 console/cypress.sh delete mode 100644 console/cypress/integration/applications/applications.ts delete mode 100644 console/cypress/integration/humans/humans.ts delete mode 100644 console/cypress/integration/machines/machines.ts delete mode 100644 console/cypress/integration/projects/projects.ts delete mode 100644 console/cypress/integration/settings/private-labeling.ts delete mode 100644 console/cypress/plugins/index.ts delete mode 100644 console/cypress/support/api/apiauth.ts delete mode 100644 console/cypress/support/login/users.ts delete mode 100644 console/cypress/tsconfig.json delete mode 100644 console/e2e.env create mode 100644 e2e/.gitignore create mode 100644 e2e/README.md create mode 100644 e2e/cypress.config.ts rename {console => e2e}/cypress/.gitignore (100%) create mode 100644 e2e/cypress/e2e/applications/applications.cy.ts create mode 100644 e2e/cypress/e2e/humans/humans.cy.ts create mode 100644 e2e/cypress/e2e/machines/machines.cy.ts rename console/cypress/integration/permissions/permissions.ts => e2e/cypress/e2e/permissions/permissions.cy.ts (56%) create mode 100644 e2e/cypress/e2e/projects/projects.cy.ts create mode 100644 e2e/cypress/e2e/register/register.cy.ts rename console/cypress/integration/settings/login-policy.ts => e2e/cypress/e2e/settings/login-policy.cy.ts (96%) rename console/cypress/integration/settings/password-complexity.ts => e2e/cypress/e2e/settings/password-complexity.cy.ts (96%) create mode 100644 e2e/cypress/e2e/settings/private-labeling.cy.ts rename {console => e2e}/cypress/fixtures/example.json (100%) rename {console => e2e}/cypress/fixtures/logo.png (100%) create mode 100644 e2e/cypress/support/api/apiauth.ts rename {console => e2e}/cypress/support/api/ensure.ts (100%) rename {console => e2e}/cypress/support/api/policies.ts (100%) rename {console => e2e}/cypress/support/api/projects.ts (100%) rename {console => e2e}/cypress/support/api/users.ts (100%) rename {console => e2e}/cypress/support/commands.ts (92%) create mode 100644 e2e/cypress/support/e2e.ts rename {console => e2e}/cypress/support/index.ts (100%) create mode 100644 e2e/cypress/support/login/users.ts create mode 100644 e2e/cypress/tsconfig.json create mode 100644 e2e/docker-compose.yaml create mode 100644 e2e/package-lock.json create mode 100644 e2e/package.json create mode 100644 e2e/tsconfig.json diff --git a/.artifacts/zitadel/.gitignore b/.artifacts/zitadel/.gitignore new file mode 100644 index 0000000000..bf27f3114d --- /dev/null +++ b/.artifacts/zitadel/.gitignore @@ -0,0 +1,3 @@ +* +!.gitignore +!.gitkeep diff --git a/console/cypress/integration/register/register.ts b/.artifacts/zitadel/.gitkeep similarity index 100% rename from console/cypress/integration/register/register.ts rename to .artifacts/zitadel/.gitkeep diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml new file mode 100644 index 0000000000..3f61e1fac6 --- /dev/null +++ b/.github/workflows/e2e.yml @@ -0,0 +1,44 @@ +name: "ZITADEL e2e Tests" + +on: + release: + types: [created] + workflow_dispatch: + inputs: + releaseversion: + description: 'Release version to test' + required: true + default: 'latest' + +jobs: + test: + runs-on: ubuntu-20.04 + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + - name: Set TAG env manual trigger + if: github.event_name == 'workflow_dispatch' + run: echo "RELEASE_VERSION=${{ github.event.inputs.releaseversion }}" >> $GITHUB_ENV + - name: Set TAG env on release + if: github.event_name == 'release' + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + with: + driver: docker + install: true + - name: Test + run: docker compose run e2e + working-directory: e2e + env: + ZITADEL_IMAGE: ghcr.io/zitadel/zitadel:${RELEASE_VERSION} + - name: Archive production tests + if: always() + uses: actions/upload-artifact@v2 + with: + name: production-tests + path: | + e2e/cypress/results + e2e/cypress/videos + e2e/cypress/screenshots + retention-days: 30 diff --git a/.github/workflows/zitadel-pr.yml b/.github/workflows/zitadel-pr.yml index 2883660243..53741b61e5 100644 --- a/.github/workflows/zitadel-pr.yml +++ b/.github/workflows/zitadel-pr.yml @@ -4,7 +4,7 @@ on: pull_request: jobs: - Go: + Test: runs-on: ubuntu-20.04 env: DOCKER_BUILDKIT: 1 @@ -18,28 +18,33 @@ jobs: with: driver: docker install: true - - name: Test - run: docker build -f build/grpc/Dockerfile -t zitadel-base:local . && docker build -f build/zitadel/Dockerfile . -t zitadel-go-test --target go-codecov -o .artifacts/codecov + - name: Install GoReleaser + uses: goreleaser/goreleaser-action@v3 + with: + install-only: true + version: v1.8.3 + - name: Build and Unit Test + run: GOOS="linux" GOARCH="amd64" goreleaser build --snapshot --single-target --rm-dist --output .artifacts/zitadel/zitadel - name: Publish go coverage uses: codecov/codecov-action@v3.1.0 with: file: .artifacts/codecov/profile.cov name: go-codecov - - Angular: - runs-on: ubuntu-20.04 - env: - DOCKER_BUILDKIT: 1 - steps: - - name: Source checkout - uses: actions/checkout@v2 - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + # As goreleaser doesn't build a dockerfile in snapshot mode, we have to build it here + - name: Build Docker Image + run: docker build -t zitadel:pr --file build/Dockerfile .artifacts/zitadel + - name: Run E2E Tests + run: docker compose run e2e + working-directory: e2e + env: + ZITADEL_IMAGE: zitadel:pr + - name: Archive Test Results + if: always() + uses: actions/upload-artifact@v2 with: - driver: docker - install: true - - name: Test - run: docker build -f build/grpc/Dockerfile -t zitadel-base:local . && docker build -f build/console/Dockerfile . -t zitadel-npm-base --target angular-build - + name: pull-request-tests + path: | + e2e/cypress/results + e2e/cypress/videos + e2e/cypress/screenshots + retention-days: 30 diff --git a/.gitignore b/.gitignore index 9f5525c78a..ed9eaa0085 100644 --- a/.gitignore +++ b/.gitignore @@ -61,6 +61,7 @@ openapi/**/*.json build/local/*.env migrations/cockroach/migrate_cloud.go .notifications -.artifacts +/.artifacts/* +!/.artifacts/zitadel /zitadel diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 5e3dc1ab5a..1f078e4bd9 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -16,7 +16,7 @@ before: - docker build -f build/zitadel/Dockerfile . -t zitadel-go-base --target go-copy -o .artifacts/grpc/go-client - sh -c "cp -r .artifacts/grpc/go-client/* ." - docker build -f build/console/Dockerfile . -t zitadel-npm-base --target npm-copy -o .artifacts/grpc/js-client - - docker build -f build/console/Dockerfile . -t zitadel-npm-base --target angular-export -o .artifacts/console + - docker build -f build/console/Dockerfile . -t zitadel-npm-console --target angular-export -o .artifacts/console - sh -c "cp -r .artifacts/console/* internal/api/ui/console/static/" builds: diff --git a/console/cypress.json b/console/cypress.json deleted file mode 100644 index 6fe4163c33..0000000000 --- a/console/cypress.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "supportFile": "./cypress/support/index.ts", - "reporter": "mochawesome", - "reporterOptions": { - "reportDir": "cypress/results", - "overwrite": false, - "html": true, - "json": true - }, - "chromeWebSecurity": false, - "experimentalSessionSupport": true, - "trashAssetsBeforeRuns": false - } - diff --git a/console/cypress.sh b/console/cypress.sh deleted file mode 100755 index 577ef53a11..0000000000 --- a/console/cypress.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -ACTION=$1 -ENVFILE=$2 - -shift -shift - -projectRoot=".." - -set -a; source $ENVFILE; set +a - -NPX="" -if ! command -v cypress &> /dev/null; then - NPX="npx" -fi - -$NPX cypress $ACTION \ - --port ${E2E_CYPRESS_PORT} \ - --env org="${E2E_ORG}",org_owner_password="${E2E_ORG_OWNER_PW}",org_owner_viewer_password="${E2E_ORG_OWNER_VIEWER_PW}",org_project_creator_password="${E2E_ORG_PROJECT_CREATOR_PW}",login_policy_user_password="${E2E_LOGIN_POLICY_USER_PW}",password_complexity_user_password="${E2E_PASSWORD_COMPLEXITY_USER_PW}",consoleUrl=${E2E_CONSOLE_URL},apiUrl="${E2E_API_URL}",accountsUrl="${E2E_ACCOUNTS_URL}",issuerUrl="${E2E_ISSUER_URL}",serviceAccountKey="${E2E_SERVICEACCOUNT_KEY}",serviceAccountKeyPath="${E2E_SERVICEACCOUNT_KEY_PATH}",otherZitadelIdpInstance="${E2E_OTHER_ZITADEL_IDP_INSTANCE}",zitadelProjectResourceId="${E2E_ZITADEL_PROJECT_RESOURCE_ID}" \ - "$@" diff --git a/console/cypress/integration/applications/applications.ts b/console/cypress/integration/applications/applications.ts deleted file mode 100644 index 4b0313bf68..0000000000 --- a/console/cypress/integration/applications/applications.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { login, User } from "../../support/login/users"; -import { Apps, ensureProjectExists, ensureProjectResourceDoesntExist } from "../../support/api/projects"; -import { apiAuth } from "../../support/api/apiauth"; - -describe('applications', () => { - - const testProjectName = 'e2eprojectapplication' - const testAppName = 'e2eappundertest' - - ;[User.OrgOwner].forEach(user => { - - describe(`as user "${user}"`, () => { - - beforeEach(`ensure it doesn't exist already`, () => { - login(user) - apiAuth().then(api => { - ensureProjectExists(api, testProjectName).then(projectID => { - ensureProjectResourceDoesntExist(api, projectID, Apps, testAppName).then(() => { - cy.visit(`${Cypress.env('consoleUrl')}/projects/${projectID}`) - }) - }) - }) - }) - - it('add app', () => { - cy.get('mat-spinner') - cy.get('mat-spinner').should('not.exist') - cy.get('[data-e2e="app-card-add"]').should('be.visible').click() - // select webapp - cy.get('[formcontrolname="name"]').type(testAppName) - cy.get('[for="WEB"]').click() - cy.get('[data-e2e="continue-button-nameandtype"]').click() - //select authentication - cy.get('[for="PKCE"]').click() - cy.get('[data-e2e="continue-button-authmethod"]').click() - //enter URL - cy.get('cnsl-redirect-uris').eq(0).type("https://testurl.org") - cy.get('cnsl-redirect-uris').eq(1).type("https://testlogouturl.org") - cy.get('[data-e2e="continue-button-redirecturis"]').click() - cy.get('[data-e2e="create-button"]').click().then(() => { - cy.get('[id*=overlay]').should('exist') - }) - cy.get('.data-e2e-success') - cy.wait(200) - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist') - //TODO: check client ID/Secret - }) - }) - }) -}) \ No newline at end of file diff --git a/console/cypress/integration/humans/humans.ts b/console/cypress/integration/humans/humans.ts deleted file mode 100644 index 28a7ba2e14..0000000000 --- a/console/cypress/integration/humans/humans.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { apiAuth } from '../../support/api/apiauth'; -import { ensureHumanUserExists, ensureUserDoesntExist } from '../../support/api/users'; -import { login, User, username } from '../../support/login/users'; - -describe('humans', () => { - const humansPath = `${Cypress.env('consoleUrl')}/users?type=human`; - const testHumanUserNameAdd = 'e2ehumanusernameadd'; - const testHumanUserNameRemove = 'e2ehumanusernameremove'; - - [User.OrgOwner].forEach((user) => { - describe(`as user "${user}"`, () => { - beforeEach(() => { - login(user); - cy.visit(humansPath); - cy.get('[data-cy=timestamp]'); - }); - - describe('add', () => { - before(`ensure it doesn't exist already`, () => { - apiAuth().then((apiCallProperties) => { - ensureUserDoesntExist(apiCallProperties, testHumanUserNameAdd); - }); - }); - - it('should add a user', () => { - cy.get('a[href="/users/create"]').click(); - cy.url().should('contain', 'users/create'); - cy.get('[formcontrolname="email"]').type(username('e2ehuman')); - //force needed due to the prefilled username prefix - cy.get('[formcontrolname="userName"]').type(testHumanUserNameAdd, { force: true }); - cy.get('[formcontrolname="firstName"]').type('e2ehumanfirstname'); - cy.get('[formcontrolname="lastName"]').type('e2ehumanlastname'); - cy.get('[formcontrolname="phone"]').type('+41 123456789'); - cy.get('[data-e2e="create-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - - describe('remove', () => { - before('ensure it exists', () => { - apiAuth().then((api) => { - ensureHumanUserExists(api, testHumanUserNameRemove); - }); - }); - - it('should delete a human user', () => { - cy.contains('tr', testHumanUserNameRemove, { timeout: 1000 }) - .find('button') - //force due to angular hidden buttons - .click({ force: true }); - cy.get('[e2e-data="confirm-dialog-input"]').type(username(testHumanUserNameRemove, Cypress.env('org'))); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - }); - }); -}); -/* -describe("users", ()=> { - - before(()=> { - cy.consolelogin(Cypress.env('username'), Cypress.env('password'), Cypress.env('consoleUrl')) - }) - - it('should show personal information', () => { - cy.log(`USER: show personal information`); - //click on user information - cy.get('a[href*="users/me"').eq(0).click() - cy.url().should('contain', '/users/me') - }) - - it('should show users', () => { - cy.visit(Cypress.env('consoleUrl') + '/users/list/humans') - cy.url().should('contain', 'users/list/humans') - }) -}) - -*/ diff --git a/console/cypress/integration/machines/machines.ts b/console/cypress/integration/machines/machines.ts deleted file mode 100644 index 38c0f770fd..0000000000 --- a/console/cypress/integration/machines/machines.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { apiAuth } from '../../support/api/apiauth'; -import { ensureMachineUserExists, ensureUserDoesntExist } from '../../support/api/users'; -import { login, User, username } from '../../support/login/users'; - -describe('machines', () => { - const machinesPath = `${Cypress.env('consoleUrl')}/users?type=machine`; - const testMachineUserNameAdd = 'e2emachineusernameadd'; - const testMachineUserNameRemove = 'e2emachineusernameremove'; - - [User.OrgOwner].forEach((user) => { - describe(`as user "${user}"`, () => { - beforeEach(() => { - login(user); - cy.visit(machinesPath); - cy.get('[data-cy=timestamp]'); - }); - - describe('add', () => { - before(`ensure it doesn't exist already`, () => { - apiAuth().then((apiCallProperties) => { - ensureUserDoesntExist(apiCallProperties, testMachineUserNameAdd); - }); - }); - - it('should add a machine', () => { - cy.get('a[href="/users/create-machine"]').click(); - cy.url().should('contain', 'users/create-machine'); - //force needed due to the prefilled username prefix - cy.get('[formcontrolname="userName"]').type(testMachineUserNameAdd, { force: true }); - cy.get('[formcontrolname="name"]').type('e2emachinename'); - cy.get('[formcontrolname="description"]').type('e2emachinedescription'); - cy.get('[data-e2e="create-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - - describe('remove', () => { - before('ensure it exists', () => { - apiAuth().then((api) => { - ensureMachineUserExists(api, testMachineUserNameRemove); - }); - }); - - it('should delete a machine', () => { - cy.contains('tr', testMachineUserNameRemove, { timeout: 1000 }) - .find('button') - //force due to angular hidden buttons - .click({ force: true }); - cy.get('[e2e-data="confirm-dialog-input"]').type(username(testMachineUserNameRemove, Cypress.env('org'))); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - }); - }); -}); diff --git a/console/cypress/integration/projects/projects.ts b/console/cypress/integration/projects/projects.ts deleted file mode 100644 index 0a1c10283c..0000000000 --- a/console/cypress/integration/projects/projects.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { apiAuth } from '../../support/api/apiauth'; -import { ensureProjectDoesntExist, ensureProjectExists } from '../../support/api/projects'; -import { login, User } from '../../support/login/users'; - -describe('projects', () => { - const testProjectNameCreate = 'e2eprojectcreate'; - const testProjectNameDeleteList = 'e2eprojectdeletelist'; - const testProjectNameDeleteGrid = 'e2eprojectdeletegrid'; - - [User.OrgOwner].forEach((user) => { - describe(`as user "${user}"`, () => { - beforeEach(() => { - login(user); - }); - - describe('add project', () => { - beforeEach(`ensure it doesn't exist already`, () => { - apiAuth().then((api) => { - ensureProjectDoesntExist(api, testProjectNameCreate); - }); - cy.visit(`${Cypress.env('consoleUrl')}/projects`); - }); - - it('should add a project', () => { - cy.get('.add-project-button').click({ force: true }); - cy.get('input').type(testProjectNameCreate); - cy.get('[data-e2e="continue-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - - describe('remove project', () => { - describe('list view', () => { - beforeEach('ensure it exists', () => { - apiAuth().then((api) => { - ensureProjectExists(api, testProjectNameDeleteList); - }); - cy.visit(`${Cypress.env('consoleUrl')}/projects`); - }); - - it('removes the project', () => { - cy.get('[data-e2e=toggle-grid]').click(); - cy.get('[data-cy=timestamp]'); - cy.contains('tr', testProjectNameDeleteList, { timeout: 1000 }) - .find('[data-e2e=delete-project-button]') - .click({ force: true }); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - - describe('grid view', () => { - beforeEach('ensure it exists', () => { - apiAuth().then((api) => { - ensureProjectExists(api, testProjectNameDeleteGrid); - }); - cy.visit(`${Cypress.env('consoleUrl')}/projects`); - }); - - it('removes the project', () => { - cy.contains('[data-e2e=grid-card]', testProjectNameDeleteGrid) - .find('[data-e2e=delete-project-button]') - .trigger('mouseover') - .click(); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); - cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); - }); - }); - }); - }); - }); -}); diff --git a/console/cypress/integration/settings/private-labeling.ts b/console/cypress/integration/settings/private-labeling.ts deleted file mode 100644 index 767e56b69c..0000000000 --- a/console/cypress/integration/settings/private-labeling.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { apiAuth, apiCallProperties } from "../../support/api/apiauth"; -import { Policy, resetPolicy } from "../../support/api/policies"; -import { login, User } from "../../support/login/users"; - -describe("private labeling", ()=> { - - const orgPath = `${Cypress.env('consoleUrl')}/org` - - ;[User.OrgOwner].forEach(user => { - - describe(`as user "${user}"`, () => { - - let api: apiCallProperties - - - beforeEach(()=> { - login(user) - cy.visit(orgPath) - // TODO: Why force? - cy.contains('[data-e2e=policy-card]', 'Private Labeling').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e - }) - - customize('white', user) - customize('dark', user) - }) - }) -}) - - -function customize(theme: string, user: User) { - - describe(`${theme} theme`, () => { - - beforeEach(() => { - apiAuth().then(api => { - resetPolicy(api, Policy.Label) - }) - }) - - describe.skip('logo', () => { - - beforeEach('expand logo category', () => { - cy.contains('[data-e2e=policy-category]', 'Logo').click() // TODO: select data-e2e - cy.fixture('logo.png').as('logo') - }) - - it('should update a logo', () => { - cy.get('[data-e2e=image-part-logo]').find('input').then(function (el) { - const blob = Cypress.Blob.base64StringToBlob(this.logo, 'image/png') - const file = new File([blob], 'images/logo.png', { type: 'image/png' }) - const list = new DataTransfer() - - list.items.add(file) - const myFileList = list.files - - el[0].files = myFileList - el[0].dispatchEvent(new Event('change', { bubbles: true })) - }) - }) - it('should delete a logo') - }) - it('should update an icon') - it('should delete an icon') - it.skip('should update the background color', () => { - cy.contains('[data-e2e=color]', 'Background Color').find('button').click() // TODO: select data-e2e - cy.get('color-editable-input').find('input').clear().type('#ae44dc') - cy.get('[data-e2e=save-colors-button]').click() - cy.get('[data-e2e=header-user-avatar]').click() - cy.contains('Logout All Users').click() // TODO: select data-e2e - login(User.LoginPolicyUser, true, null, () => { - cy.pause() - }) - }) - it('should update the primary color') - it('should update the warning color') - it('should update the font color') - it('should update the font style') - it('should hide the loginname suffix') - it('should show the loginname suffix') - it('should hide the watermark') - it('should show the watermark') - it('should show the current configuration') - it('should reset the policy') - }) -} diff --git a/console/cypress/plugins/index.ts b/console/cypress/plugins/index.ts deleted file mode 100644 index 7bca64c030..0000000000 --- a/console/cypress/plugins/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { readFileSync } from "fs"; - -module.exports = (on, config) => { - - require('cypress-terminal-report/src/installLogsPrinter')(on); - - config.defaultCommandTimeout = 10_000 - - config.env.parsedServiceAccountKey = config.env.serviceAccountKey - if (config.env.serviceAccountKeyPath) { - config.env.parsedServiceAccountKey = JSON.parse(readFileSync(config.env.serviceAccountKeyPath, 'utf-8')) - } - - return config -} diff --git a/console/cypress/support/api/apiauth.ts b/console/cypress/support/api/apiauth.ts deleted file mode 100644 index 7a51846a86..0000000000 --- a/console/cypress/support/api/apiauth.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { sign } from 'jsonwebtoken' - -export interface apiCallProperties { - authHeader: string - mgntBaseURL: string -} - -export function apiAuth(): Cypress.Chainable { - const apiUrl = Cypress.env('apiUrl') - const issuerUrl = Cypress.env('issuerUrl') - const zitadelProjectResourceID = (Cypress.env('zitadelProjectResourceId')).replace('bignumber-', '') - - const key = Cypress.env("parsedServiceAccountKey") - - const now = new Date().getTime() - const iat = Math.floor(now / 1000) - const exp = Math.floor(new Date(now + 1000 * 60 * 55).getTime() / 1000) // 55 minutes - const bearerToken = sign({ - iss: key.userId, - sub: key.userId, - aud: `${issuerUrl}`, - iat: iat, - exp: exp - }, key.key, { - header: { - alg: "RS256", - kid: key.keyId - } - }) - - return cy.request({ - method: 'POST', - url: `${apiUrl}/oauth/v2/token`, - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: { - 'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', - scope: `openid urn:zitadel:iam:org:project:id:${zitadelProjectResourceID}:aud`, - assertion: bearerToken, - } - }).its('body.access_token').then(token => { - - return { - authHeader: `Bearer ${token}`, - mgntBaseURL: `${apiUrl}/management/v1/`, - } - }) -} \ No newline at end of file diff --git a/console/cypress/support/login/users.ts b/console/cypress/support/login/users.ts deleted file mode 100644 index cdd4f85bf5..0000000000 --- a/console/cypress/support/login/users.ts +++ /dev/null @@ -1,164 +0,0 @@ -export enum User { - OrgOwner = 'org_owner', - OrgOwnerViewer = 'org_owner_viewer', - OrgProjectCreator = 'org_project_creator', - LoginPolicyUser = 'login_policy_user', - PasswordComplexityUser = 'password_complexity_user', - IAMAdminUser = "zitadel-admin" -} - -export function login(user:User, force?: boolean, pw?: string, onUsernameScreen?: () => void, onPasswordScreen?: () => void, onAuthenticated?: () => void): void { - let creds = credentials(user, pw) - - const accountsUrl: string = Cypress.env('accountsUrl') - const consoleUrl: string = Cypress.env('consoleUrl') - const otherZitadelIdpInstance: boolean = Cypress.env('otherZitadelIdpInstance') - - cy.session(creds.username, () => { - - const cookies = new Map() - - if (otherZitadelIdpInstance) { - cy.intercept({ - method: 'GET', - url: `${accountsUrl}/login*`, - times: 1 - }, (req) => { - req.headers['cookie'] = requestCookies(cookies) - req.continue((res) => { - updateCookies(res.headers['set-cookie'] as string[], cookies) - }) - }).as('login') - - cy.intercept({ - method: 'POST', - url: `${accountsUrl}/loginname*`, - times: 1 - }, (req) => { - req.headers['cookie'] = requestCookies(cookies) - req.continue((res) => { - updateCookies(res.headers['set-cookie'] as string[], cookies) - }) - }).as('loginName') - - cy.intercept({ - method: 'POST', - url: `${accountsUrl}/password*`, - times: 1 - }, (req) => { - req.headers['cookie'] = requestCookies(cookies) - req.continue((res) => { - updateCookies(res.headers['set-cookie'] as string[], cookies) - }) - }).as('password') - - cy.intercept({ - method: 'GET', - url: `${accountsUrl}/success*`, - times: 1 - }, (req) => { - req.headers['cookie'] = requestCookies(cookies) - req.continue((res) => { - updateCookies(res.headers['set-cookie'] as string[], cookies) - }) - }).as('success') - - cy.intercept({ - method: 'GET', - url: `${accountsUrl}/oauth/v2/authorize/callback*`, - times: 1 - }, (req) => { - req.headers['cookie'] = requestCookies(cookies) - req.continue((res) => { - updateCookies(res.headers['set-cookie'] as string[], cookies) - }) - }).as('callback') - - cy.intercept({ - method: 'GET', - url: `${accountsUrl}/oauth/v2/authorize*`, - times: 1, - }, (req) => { - req.continue((res) => { - updateCookies(res.headers['set-cookie'] as string[], cookies) - }) - }) - } - - cy.visit(`${consoleUrl}/loginname`, { retryOnNetworkFailure: true }); - - otherZitadelIdpInstance && cy.wait('@login') - onUsernameScreen ? onUsernameScreen() : null - cy.get('#loginName').type(creds.username) - cy.get('#submit-button').click() - - otherZitadelIdpInstance && cy.wait('@loginName') - onPasswordScreen ? onPasswordScreen() : null - cy.get('#password').type(creds.password) - cy.get('#submit-button').click() - - onAuthenticated ? onAuthenticated() : null - - otherZitadelIdpInstance && cy.wait('@callback') - - cy.location('pathname', {timeout: 5 * 1000}).should('eq', '/'); - - }, { - validate: () => { - - if (force) { - throw new Error("clear session"); - } - - cy.visit(`${consoleUrl}/users/me`) - } - }) -} - - - -export function username(withoutDomain: string, project?: string): string { - return `${withoutDomain}@${project ? `${project}.` : ''}${host(Cypress.env('apiUrl')).replace('api.', '')}` -} - -function credentials(user: User, pw?: string) { - const isAdmin = user == User.IAMAdminUser - return { - username: username(isAdmin ? user : `${user}_user_name`, isAdmin ? 'caos-ag' : Cypress.env('org')), - password: pw ? pw : Cypress.env(`${user}_password`) - } -} - -function updateCookies(newCookies: string[] | undefined, currentCookies: Map) { - if (newCookies === undefined) { - return - } - newCookies.forEach(cs => { - cs.split('; ').forEach(cookie => { - const idx = cookie.indexOf('=') - currentCookies.set(cookie.substring(0,idx), cookie.substring(idx+1)) - }) - }) -} - -function requestCookies(currentCookies: Map): string[] { - let list: Array = [] - currentCookies.forEach((val, key) => { - list.push(key+"="+val) - }) - return list -} - -export function host(url: string): string { - return stripPort(stripProtocol(url)) -} - -function stripPort(s: string): string { - const idx = s.indexOf(":") - return idx === -1 ? s : s.substring(0,idx) -} - -function stripProtocol(url: string): string { - return url.replace('http://', '').replace('https://', '') -} - diff --git a/console/cypress/tsconfig.json b/console/cypress/tsconfig.json deleted file mode 100644 index 15353f2416..0000000000 --- a/console/cypress/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["es5", "dom"], - "types": ["cypress"] - }, - "include": ["**/*.ts"] - } \ No newline at end of file diff --git a/console/e2e.env b/console/e2e.env deleted file mode 100644 index 373e72db38..0000000000 --- a/console/e2e.env +++ /dev/null @@ -1,14 +0,0 @@ -E2E_CYPRESS_PORT=5003 -E2E_ORG=e2e-tests -E2E_ORG_OWNER_PW=Password1! -E2E_ORG_OWNER_VIEWER_PW=Password1! -E2E_ORG_PROJECT_CREATOR_PW=Password1! -E2E_PASSWORD_COMPLEXITY_USER_PW=Password1! -E2E_LOGIN_POLICY_USER_PW=Password1! -E2E_SERVICEACCOUNT_KEY_PATH="${projectRoot}/.keys/e2e.json" -E2E_CONSOLE_URL="http://localhost:4200" -E2E_API_URL="http://localhost:50002" -E2E_ACCOUNTS_URL="http://localhost:50003" -E2E_ISSUER_URL="http://localhost:50002/oauth/v2" -E2E_OTHER_ZITADEL_IDP_INSTANCE=false -E2E_ZITADEL_PROJECT_RESOURCE_ID="bignumber-$(echo -n $(docker compose -f ${projectRoot}/build/local/docker-compose-local.yml exec --no-TTY db cockroach sql --insecure --execute "select aggregate_id from eventstore.events where event_type = 'project.added' and event_data = '{\"name\": \"Zitadel\"}';" --format tsv) | cut -d " " -f 2)" diff --git a/console/package-lock.json b/console/package-lock.json index 72a20673ed..d832f26d18 100644 --- a/console/package-lock.json +++ b/console/package-lock.json @@ -64,18 +64,14 @@ "@typescript-eslint/eslint-plugin": "5.30.4", "@typescript-eslint/parser": "5.30.4", "codelyzer": "^6.0.0", - "cypress": "^10.1.0", - "cypress-terminal-report": "^4.0.1", "eslint": "^8.18.0", "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", - "jsonwebtoken": "^8.5.1", "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.0.0", - "mochawesome": "^7.1.2", "prettier": "^2.4.1", "protractor": "~7.0.0", "stylelint": "^13.10.0", @@ -2724,54 +2720,6 @@ "node": ">=10" } }, - "node_modules/@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - } - }, - "node_modules/@cypress/xvfb/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -4102,18 +4050,6 @@ "@types/node": "*" } }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, "node_modules/@types/sockjs": { "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", @@ -4151,16 +4087,6 @@ "@types/node": "*" } }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.30.4", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz", @@ -4467,13 +4393,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true, - "peer": true - }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -4919,26 +4838,6 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, - "node_modules/arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/are-we-there-yet": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", @@ -5350,12 +5249,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, "node_modules/blocking-proxy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", @@ -5371,12 +5264,6 @@ "node": ">=6.9.x" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "node_modules/body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -5470,13 +5357,6 @@ "node": ">=8" } }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "peer": true - }, "node_modules/browserslist": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", @@ -5571,21 +5451,6 @@ "ieee754": "^1.2.1" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5649,15 +5514,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -5777,15 +5633,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5831,12 +5678,6 @@ "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -5870,37 +5711,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -6116,24 +5926,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -6760,261 +6552,6 @@ "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, - "node_modules/cypress": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.3.0.tgz", - "integrity": "sha512-txkQWKzvBVnWdCuKs5Xc08gjpO89W2Dom2wpZgT9zWZT5jXxqPIxqP/NC1YArtkpmp3fN5HW8aDjYBizHLUFvg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^5.1.0", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "eventemitter2": "^6.4.3", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.6", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/cypress-terminal-report": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-4.0.2.tgz", - "integrity": "sha512-sk7zBRZIh19U32pbOyv6GtlWPxE1C6l+mMAhnPAmsv619s7+O7/jZbI4YZfM2MyO50Om/qEq7W5rVP8yolihAA==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "fs-extra": "^9.0.1", - "methods": "^1.1.2", - "semver": "^7.3.5", - "tv4": "^1.3.0" - }, - "peerDependencies": { - "cypress": ">=4.10.0" - } - }, - "node_modules/cypress-terminal-report/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cypress-terminal-report/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress-terminal-report/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cypress-terminal-report/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cypress-terminal-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress-terminal-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/@types/node": { - "version": "14.18.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", - "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==", - "dev": true - }, - "node_modules/cypress/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cypress/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/cypress/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/cypress/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -7042,21 +6579,6 @@ "node": ">=4.0" } }, - "node_modules/dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/dayjs": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", - "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==", - "dev": true - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7365,15 +6887,6 @@ "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", "dev": true }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/dijkstrajs": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", @@ -7507,15 +7020,6 @@ "safer-buffer": "^2.1.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8530,12 +8034,6 @@ "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "dev": true }, - "node_modules/eventemitter2": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", - "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==", - "dev": true - }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -8551,29 +8049,6 @@ "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, "node_modules/execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -8586,18 +8061,6 @@ "node": ">=8" } }, - "node_modules/executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "dependencies": { - "pify": "^2.2.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -8773,26 +8236,6 @@ "node": ">=0.6.0" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -8874,15 +8317,6 @@ "node": ">=0.8.0" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -9171,12 +8605,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fsu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", - "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", - "dev": true - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -9260,30 +8688,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "dependencies": { - "async": "^3.2.0" - } - }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -9331,30 +8735,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -9626,16 +9006,6 @@ "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "peer": true, - "bin": { - "he": "bin/he" - } - }, "node_modules/hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -9891,20 +9261,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9918,15 +9274,6 @@ "node": ">= 6" } }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -10284,18 +9631,6 @@ "node": ">=4" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -10372,22 +9707,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -10445,15 +9764,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -11112,52 +10422,6 @@ "node >= 0.2.0" ] }, - "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dev": true, - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "node_modules/jszip": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz", @@ -11194,27 +10458,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/karma": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", @@ -11461,15 +10704,6 @@ "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true }, - "node_modules/lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, - "engines": { - "node": "> 0.8" - } - }, "node_modules/less": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", @@ -11623,33 +10857,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -11696,72 +10903,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true - }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true - }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -11860,88 +11007,6 @@ "node": ">=8" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-update/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/log4js": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", @@ -11973,18 +11038,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "7.12.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", @@ -12661,451 +11714,6 @@ "node": ">=10" } }, - "node_modules/mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "peer": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "peer": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "peer": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "peer": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "peer": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "peer": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "peer": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "peer": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "peer": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "peer": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "peer": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/mochawesome": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", - "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "diff": "^5.0.0", - "json-stringify-safe": "^5.0.1", - "lodash.isempty": "^4.4.0", - "lodash.isfunction": "^3.0.9", - "lodash.isobject": "^3.0.2", - "lodash.isstring": "^4.0.1", - "mochawesome-report-generator": "^6.2.0", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2" - }, - "peerDependencies": { - "mocha": ">=7" - } - }, - "node_modules/mochawesome-report-generator": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", - "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "dateformat": "^4.5.1", - "escape-html": "^1.0.3", - "fs-extra": "^10.0.0", - "fsu": "^1.1.1", - "lodash.isfunction": "^3.0.9", - "opener": "^1.5.2", - "prop-types": "^15.7.2", - "tcomb": "^3.2.17", - "tcomb-validation": "^3.3.0", - "validator": "^13.6.0", - "yargs": "^17.2.1" - }, - "bin": { - "marge": "bin/cli.js" - } - }, - "node_modules/mochawesome-report-generator/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mochawesome-report-generator/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/mochawesome-report-generator/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mochawesome-report-generator/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mochawesome-report-generator/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/mochawesome-report-generator/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome-report-generator/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mochawesome/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/mochawesome/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mochawesome/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mochawesome/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mochawesome/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/moment": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", @@ -13786,15 +12394,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true, - "bin": { - "opener": "bin/opener-bin.js" - } - }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -13914,12 +12513,6 @@ "node": ">=0.10.0" } }, - "node_modules/ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -14202,12 +12795,6 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -15206,17 +13793,6 @@ "node": ">=10" } }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "node_modules/protobufjs": { "version": "6.11.3", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", @@ -15550,12 +14126,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -15569,16 +14139,6 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -15786,12 +14346,6 @@ "node": ">= 0.8" } }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -16128,15 +14682,6 @@ "node": ">= 6" } }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, "node_modules/request/node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -16955,53 +15500,6 @@ "node": ">=8" } }, - "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -17935,21 +16433,6 @@ "node": ">=6" } }, - "node_modules/tcomb": { - "version": "3.2.29", - "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", - "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", - "dev": true - }, - "node_modules/tcomb-validation": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", - "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", - "dev": true, - "dependencies": { - "tcomb": "^3.0.0" - } - }, "node_modules/terser": { "version": "5.13.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", @@ -18131,12 +16614,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -18448,15 +16925,6 @@ "node": "*" } }, - "node_modules/tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -18686,15 +17154,6 @@ "node": ">= 0.8" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", @@ -18781,15 +17240,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -19413,13 +17863,6 @@ "node": ">=0.10.0" } }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true, - "peer": true - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -19577,58 +18020,6 @@ "node": ">=10" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "peer": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/yargs/node_modules/yargs-parser": { "version": "21.0.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", @@ -19638,29 +18029,6 @@ "node": ">=12" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zone.js": { "version": "0.11.6", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.6.tgz", @@ -21495,53 +19863,6 @@ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz", "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==" }, - "@cypress/request": { - "version": "2.88.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", - "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "http-signature": "~1.3.6", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" - } - }, - "@cypress/xvfb": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", - "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "lodash.once": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -22631,18 +20952,6 @@ "@types/node": "*" } }, - "@types/sinonjs__fake-timers": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true - }, - "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", - "dev": true - }, "@types/sockjs": { "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", @@ -22680,16 +20989,6 @@ "@types/node": "*" } }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, "@typescript-eslint/eslint-plugin": { "version": "5.30.4", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.4.tgz", @@ -22860,13 +21159,6 @@ "eslint-visitor-keys": "^3.3.0" } }, - "@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true, - "peer": true - }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -23236,12 +21528,6 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, "are-we-there-yet": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", @@ -23540,12 +21826,6 @@ } } }, - "blob-util": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true - }, "blocking-proxy": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", @@ -23555,12 +21835,6 @@ "minimist": "^1.2.0" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, "body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -23643,13 +21917,6 @@ "fill-range": "^7.0.1" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "peer": true - }, "browserslist": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", @@ -23710,18 +21977,6 @@ "ieee754": "^1.2.1" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -23776,12 +22031,6 @@ "unique-filename": "^1.1.1" } }, - "cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", - "dev": true - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -23861,12 +22110,6 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "check-more-types": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -23895,12 +22138,6 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, - "ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", - "dev": true - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -23922,26 +22159,6 @@ "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true }, - "cli-table3": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -24121,18 +22338,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -24599,198 +22804,6 @@ "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, - "cypress": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.3.0.tgz", - "integrity": "sha512-txkQWKzvBVnWdCuKs5Xc08gjpO89W2Dom2wpZgT9zWZT5jXxqPIxqP/NC1YArtkpmp3fN5HW8aDjYBizHLUFvg==", - "dev": true, - "requires": { - "@cypress/request": "^2.88.10", - "@cypress/xvfb": "^1.2.4", - "@types/node": "^14.14.31", - "@types/sinonjs__fake-timers": "8.1.1", - "@types/sizzle": "^2.3.2", - "arch": "^2.2.0", - "blob-util": "^2.0.2", - "bluebird": "^3.7.2", - "buffer": "^5.6.0", - "cachedir": "^2.3.0", - "chalk": "^4.1.0", - "check-more-types": "^2.24.0", - "cli-cursor": "^3.1.0", - "cli-table3": "~0.6.1", - "commander": "^5.1.0", - "common-tags": "^1.8.0", - "dayjs": "^1.10.4", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "eventemitter2": "^6.4.3", - "execa": "4.1.0", - "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", - "fs-extra": "^9.1.0", - "getos": "^3.2.1", - "is-ci": "^3.0.0", - "is-installed-globally": "~0.4.0", - "lazy-ass": "^1.6.0", - "listr2": "^3.8.3", - "lodash": "^4.17.21", - "log-symbols": "^4.0.0", - "minimist": "^1.2.6", - "ospath": "^1.2.2", - "pretty-bytes": "^5.6.0", - "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.3.2", - "supports-color": "^8.1.1", - "tmp": "~0.2.1", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "@types/node": { - "version": "14.18.21", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", - "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "cypress-terminal-report": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-4.0.2.tgz", - "integrity": "sha512-sk7zBRZIh19U32pbOyv6GtlWPxE1C6l+mMAhnPAmsv619s7+O7/jZbI4YZfM2MyO50Om/qEq7W5rVP8yolihAA==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "fs-extra": "^9.0.1", - "methods": "^1.1.2", - "semver": "^7.3.5", - "tv4": "^1.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -24812,18 +22825,6 @@ "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", "dev": true }, - "dateformat": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", - "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "dev": true - }, - "dayjs": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz", - "integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A==", - "dev": true - }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -25057,12 +23058,6 @@ "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", "dev": true }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, "dijkstrajs": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.2.tgz", @@ -25166,15 +23161,6 @@ "safer-buffer": "^2.1.0" } }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -25848,12 +23834,6 @@ "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "dev": true }, - "eventemitter2": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", - "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==", - "dev": true - }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -25866,23 +23846,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, "execall": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", @@ -25892,15 +23855,6 @@ "clone-regexp": "^2.1.0" } }, - "executable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", - "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, - "requires": { - "pify": "^2.2.0" - } - }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -26039,18 +23993,6 @@ } } }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -26123,15 +24065,6 @@ "websocket-driver": ">=0.5.1" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -26343,12 +24276,6 @@ "dev": true, "optional": true }, - "fsu": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", - "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==", - "dev": true - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -26411,24 +24338,6 @@ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "getos": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", - "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, - "requires": { - "async": "^3.2.0" - } - }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -26467,23 +24376,6 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - } - } - }, "global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", @@ -26699,13 +24591,6 @@ "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", "dev": true }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "peer": true - }, "hosted-git-info": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.0.0.tgz", @@ -26924,17 +24809,6 @@ } } }, - "http-signature": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", - "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^2.0.2", - "sshpk": "^1.14.1" - } - }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -26945,12 +24819,6 @@ "debug": "4" } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true - }, "humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -27202,15 +25070,6 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true }, - "is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "requires": { - "ci-info": "^3.2.0" - } - }, "is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", @@ -27258,16 +25117,6 @@ "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "dev": true }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -27312,12 +25161,6 @@ } } }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -27827,44 +25670,6 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dev": true, - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "jsprim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", - "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, "jszip": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz", @@ -27903,27 +25708,6 @@ } } }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dev": true, - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dev": true, - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "karma": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", @@ -28124,12 +25908,6 @@ "integrity": "sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw==", "dev": true }, - "lazy-ass": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true - }, "less": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/less/-/less-4.1.2.tgz", @@ -28237,22 +26015,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - } - }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -28290,72 +26052,12 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true - }, - "lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "dev": true - }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", - "dev": true - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true - }, - "lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", - "dev": true - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true - }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -28429,66 +26131,6 @@ } } }, - "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } - } - }, "log4js": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.5.2.tgz", @@ -28513,15 +26155,6 @@ "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "lru-cache": { "version": "7.12.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.12.0.tgz", @@ -29026,340 +26659,6 @@ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true }, - "mocha": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", - "dev": true, - "peer": true, - "requires": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "peer": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "peer": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "peer": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "peer": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "peer": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "peer": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "peer": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "peer": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "peer": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "peer": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "peer": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "peer": true - } - } - }, - "mochawesome": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", - "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "diff": "^5.0.0", - "json-stringify-safe": "^5.0.1", - "lodash.isempty": "^4.4.0", - "lodash.isfunction": "^3.0.9", - "lodash.isobject": "^3.0.2", - "lodash.isstring": "^4.0.1", - "mochawesome-report-generator": "^6.2.0", - "strip-ansi": "^6.0.1", - "uuid": "^8.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "mochawesome-report-generator": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", - "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", - "dev": true, - "requires": { - "chalk": "^4.1.2", - "dateformat": "^4.5.1", - "escape-html": "^1.0.3", - "fs-extra": "^10.0.0", - "fsu": "^1.1.1", - "lodash.isfunction": "^3.0.9", - "opener": "^1.5.2", - "prop-types": "^15.7.2", - "tcomb": "^3.2.17", - "tcomb-validation": "^3.3.0", - "validator": "^13.6.0", - "yargs": "^17.2.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, "moment": { "version": "2.29.3", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", @@ -29885,12 +27184,6 @@ "is-wsl": "^2.2.0" } }, - "opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "dev": true - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -29979,12 +27272,6 @@ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, - "ospath": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -30214,12 +27501,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -30866,17 +28147,6 @@ "retry": "^0.12.0" } }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, "protobufjs": { "version": "6.11.3", "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", @@ -31143,12 +28413,6 @@ } } }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -31162,16 +28426,6 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -31321,12 +28575,6 @@ "unpipe": "1.0.0" } }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -31630,15 +28878,6 @@ } } }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -32243,43 +29482,6 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -32994,21 +30196,6 @@ "readable-stream": "^3.1.1" } }, - "tcomb": { - "version": "3.2.29", - "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", - "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", - "dev": true - }, - "tcomb-validation": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", - "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", - "dev": true, - "requires": { - "tcomb": "^3.0.0" - } - }, "terser": { "version": "5.13.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", @@ -33141,12 +30328,6 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -33393,12 +30574,6 @@ "safe-buffer": "^5.0.1" } }, - "tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", - "dev": true - }, "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -33561,12 +30736,6 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, - "untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true - }, "update-browserslist-db": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", @@ -33628,12 +30797,6 @@ "builtins": "^5.0.0" } }, - "validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "dev": true - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -34090,13 +31253,6 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true, - "peer": true - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -34217,59 +31373,6 @@ "integrity": "sha512-8eblPHTL7ZWRkyjIZJjnGf+TijiKJSwA24svzLRVvtgoi/RZiKa9fFQTrlx0OKLnyHSdt/enrdadji6WFfESVA==", "dev": true }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "peer": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "peer": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "peer": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "peer": true - } - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "peer": true - }, "zone.js": { "version": "0.11.6", "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.6.tgz", diff --git a/console/package.json b/console/package.json index 2db0c1dc52..b147f596e5 100644 --- a/console/package.json +++ b/console/package.json @@ -6,9 +6,7 @@ "start": "ng serve", "build": "ng build", "prodbuild": "ng build --configuration production --base-href=/ui/console/", - "lint": "ng lint && stylelint './src/**/*.scss' --syntax scss", - "e2e": "./cypress.sh run e2e.env", - "e2e:open": "./cypress.sh open e2e.env" + "lint": "ng lint && stylelint './src/**/*.scss' --syntax scss" }, "private": true, "dependencies": { @@ -68,18 +66,14 @@ "@typescript-eslint/eslint-plugin": "5.30.4", "@typescript-eslint/parser": "5.30.4", "codelyzer": "^6.0.0", - "cypress": "^10.1.0", - "cypress-terminal-report": "^4.0.1", "eslint": "^8.18.0", "jasmine-core": "~4.2.0", "jasmine-spec-reporter": "~7.0.0", - "jsonwebtoken": "^8.5.1", "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "^2.0.0", - "mochawesome": "^7.1.2", "prettier": "^2.4.1", "protractor": "~7.0.0", "stylelint": "^13.10.0", diff --git a/console/src/app/modules/action-keys/action-keys.component.html b/console/src/app/modules/action-keys/action-keys.component.html index 73c2cd117b..609b61c395 100644 --- a/console/src/app/modules/action-keys/action-keys.component.html +++ b/console/src/app/modules/action-keys/action-keys.component.html @@ -6,7 +6,7 @@ ESC

    -
    +
    N diff --git a/console/src/app/modules/paginator/paginator.component.html b/console/src/app/modules/paginator/paginator.component.html index 08fa472c4c..3206d854d3 100644 --- a/console/src/app/modules/paginator/paginator.component.html +++ b/console/src/app/modules/paginator/paginator.component.html @@ -3,7 +3,7 @@

    {{ length }} {{ 'PAGINATOR.COUNT' | translate }}

    -

    +

    {{ timestamp | timestampToDate | localizedDate: 'EEEE dd. MMM YYYY, HH:mm' }}

    diff --git a/console/src/app/modules/project-roles-table/project-roles-table.component.html b/console/src/app/modules/project-roles-table/project-roles-table.component.html index f5ed54367e..188bb80a1b 100644 --- a/console/src/app/modules/project-roles-table/project-roles-table.component.html +++ b/console/src/app/modules/project-roles-table/project-roles-table.component.html @@ -5,8 +5,8 @@
    - add + color="primary" class="cnsl-action-button" mat-raised-button> + add {{ 'ACTIONS.NEW' | translate }} diff --git a/console/src/app/modules/table-actions/table-actions.component.html b/console/src/app/modules/table-actions/table-actions.component.html index 8a06c86206..fe4eabe7c1 100644 --- a/console/src/app/modules/table-actions/table-actions.component.html +++ b/console/src/app/modules/table-actions/table-actions.component.html @@ -3,7 +3,8 @@ diff --git a/console/src/app/pages/projects/project-list/project-list.component.html b/console/src/app/pages/projects/project-list/project-list.component.html index 2fc756ad0a..409603b3bd 100644 --- a/console/src/app/pages/projects/project-list/project-list.component.html +++ b/console/src/app/pages/projects/project-list/project-list.component.html @@ -84,7 +84,8 @@ diff --git a/console/src/app/pages/users/user-list/user-table/user-table.component.html b/console/src/app/pages/users/user-list/user-table/user-table.component.html index a6c263f77b..72bbf9af4f 100644 --- a/console/src/app/pages/users/user-list/user-table/user-table.component.html +++ b/console/src/app/pages/users/user-list/user-table/user-table.component.html @@ -13,11 +13,13 @@ label="{{ 'USER.TABLE.TYPES.HUMAN' | translate }}" (clicked)="setType(Type.TYPE_HUMAN)" [active]="type === Type.TYPE_HUMAN" + [attr.data-e2e]="'list-humans'" >
    @@ -56,6 +58,7 @@ mat-raised-button [disabled]="!canWrite" class="cnsl-action-button" + [attr.data-e2e]="'create-user-button'" > add {{ 'ACTIONS.NEW' | translate }} @@ -194,6 +197,7 @@ color="warn" (click)="deleteUser(user)" [disabled]="!canWrite || !canDelete" + [attr.e2e-data]="!canWrite || !canDelete ? 'disabled-delete-button' : 'enabled-delete-button'" mat-icon-button > diff --git a/e2e/.gitignore b/e2e/.gitignore new file mode 100644 index 0000000000..3c3629e647 --- /dev/null +++ b/e2e/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/e2e/README.md b/e2e/README.md new file mode 100644 index 0000000000..a442584f83 --- /dev/null +++ b/e2e/README.md @@ -0,0 +1,12 @@ +# Run e2e Tests + +```bash +docker compose run e2e +``` + +# Cleanup e2e Tests + +```bash +docker compose down +``` + diff --git a/e2e/cypress.config.ts b/e2e/cypress.config.ts new file mode 100644 index 0000000000..d0d1c800e1 --- /dev/null +++ b/e2e/cypress.config.ts @@ -0,0 +1,41 @@ +import { defineConfig } from 'cypress'; + +let tokensCache = new Map() + +export default defineConfig({ + reporter: 'mochawesome', + + reporterOptions: { + reportDir: 'cypress/results', + overwrite: false, + html: true, + json: true, + }, + + chromeWebSecurity: false, + trashAssetsBeforeRuns: false, + defaultCommandTimeout: 10000, + + env: { + ORGANIZATION: process.env.CYPRESS_ORGANIZATION || 'zitadel' + }, + + e2e: { + baseUrl: process.env.CYPRESS_BASE_URL || 'http://localhost:8080', + experimentalSessionAndOrigin: true, + setupNodeEvents(on, config) { + + on('task', { + safetoken({key, token}) { + tokensCache.set(key,token); + return null + } + }) + on('task', { + loadtoken({key}): string | null { + return tokensCache.get(key) || null; + } + }) + }, + }, +}); diff --git a/console/cypress/.gitignore b/e2e/cypress/.gitignore similarity index 100% rename from console/cypress/.gitignore rename to e2e/cypress/.gitignore diff --git a/e2e/cypress/e2e/applications/applications.cy.ts b/e2e/cypress/e2e/applications/applications.cy.ts new file mode 100644 index 0000000000..1306fad312 --- /dev/null +++ b/e2e/cypress/e2e/applications/applications.cy.ts @@ -0,0 +1,42 @@ +import { Apps, ensureProjectExists, ensureProjectResourceDoesntExist } from "../../support/api/projects"; +import { apiAuth } from "../../support/api/apiauth"; + +describe('applications', () => { + + const testProjectName = 'e2eprojectapplication' + const testAppName = 'e2eappundertest' + + beforeEach(`ensure it doesn't exist already`, () => { + apiAuth().then(api => { + ensureProjectExists(api, testProjectName).then(projectID => { + ensureProjectResourceDoesntExist(api, projectID, Apps, testAppName).then(() => { + cy.visit(`/ui/console/projects/${projectID}`) + }) + }) + }) + }) + + it('add app', () => { + cy.get('mat-spinner') + cy.get('mat-spinner').should('not.exist') + cy.get('[data-e2e="app-card-add"]').should('be.visible').click() + // select webapp + cy.get('[formcontrolname="name"]').type(testAppName) + cy.get('[for="WEB"]').click() + cy.get('[data-e2e="continue-button-nameandtype"]').click() + //select authentication + cy.get('[for="PKCE"]').click() + cy.get('[data-e2e="continue-button-authmethod"]').click() + //enter URL + cy.get('cnsl-redirect-uris').eq(0).type("https://testurl.org") + cy.get('cnsl-redirect-uris').eq(1).type("https://testlogouturl.org") + cy.get('[data-e2e="continue-button-redirecturis"]').click() + cy.get('[data-e2e="create-button"]').click().then(() => { + cy.get('[id*=overlay]').should('exist') + }) + cy.get('.data-e2e-success') + cy.wait(200) + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist') + //TODO: check client ID/Secret + }) +}) \ No newline at end of file diff --git a/e2e/cypress/e2e/humans/humans.cy.ts b/e2e/cypress/e2e/humans/humans.cy.ts new file mode 100644 index 0000000000..f7fdd14f2a --- /dev/null +++ b/e2e/cypress/e2e/humans/humans.cy.ts @@ -0,0 +1,57 @@ +import { apiAuth } from '../../support/api/apiauth'; +import { ensureHumanUserExists, ensureUserDoesntExist } from '../../support/api/users'; +import { loginname } from '../../support/login/users'; + +describe.skip('humans', () => { + const humansPath = `/ui/console/users?type=human`; + const testHumanUserNameAdd = 'e2ehumanusernameadd'; + const testHumanUserNameRemove = 'e2ehumanusernameremove'; + + describe('add', () => { + before(`ensure it doesn't exist already`, () => { + apiAuth().then((apiCallProperties) => { + ensureUserDoesntExist(apiCallProperties, testHumanUserNameAdd).then(()=>{ + cy.visit(humansPath); + }); + }); + }); + + it('should add a user', () => { + cy.get('[data-e2e="action-key-add"]').parents('[data-e2e="create-user-button"]').click(); + cy.url().should('contain', 'users/create'); + cy.get('[formcontrolname="email"]').type(loginname('e2ehuman')); + //force needed due to the prefilled username prefix + cy.get('[formcontrolname="userName"]').type(testHumanUserNameAdd, { force: true }); + cy.get('[formcontrolname="firstName"]').type('e2ehumanfirstname'); + cy.get('[formcontrolname="lastName"]').type('e2ehumanlastname'); + cy.get('[formcontrolname="phone"]').type('+41 123456789'); + cy.get('[data-e2e="create-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); + + describe('remove', () => { + before('ensure it exists', () => { + apiAuth().then((api) => { + ensureHumanUserExists(api, testHumanUserNameRemove).then(()=>{ + cy.visit(humansPath); + }); + }); + }); + + it('should delete a human user', () => { + cy.contains('tr', testHumanUserNameRemove) + // doesn't work, need to force click. + // .trigger('mouseover') + .find('[e2e-data="enabled-delete-button"]') + .click({force: true}); + cy.get('[e2e-data="confirm-dialog-input"]').click().type(loginname(testHumanUserNameRemove, Cypress.env('org'))); + cy.get('[e2e-data="confirm-dialog-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); +}); \ No newline at end of file diff --git a/e2e/cypress/e2e/machines/machines.cy.ts b/e2e/cypress/e2e/machines/machines.cy.ts new file mode 100644 index 0000000000..6bccb64e70 --- /dev/null +++ b/e2e/cypress/e2e/machines/machines.cy.ts @@ -0,0 +1,55 @@ +import { apiAuth } from '../../support/api/apiauth'; +import { ensureMachineUserExists, ensureUserDoesntExist } from '../../support/api/users'; +import { loginname } from '../../support/login/users'; + +describe.skip('machines', () => { + const machinesPath = `/ui/console/users?type=machine`; + const testMachineUserNameAdd = 'e2emachineusernameadd'; + const testMachineUserNameRemove = 'e2emachineusernameremove'; + + describe('add', () => { + before(`ensure it doesn't exist already`, () => { + apiAuth().then((apiCallProperties) => { + ensureUserDoesntExist(apiCallProperties, testMachineUserNameAdd).then(()=>{ + cy.visit(machinesPath); + }); + }); + }); + + it('should add a machine', () => { + cy.get('[data-e2e="action-key-add"]').parents('[data-e2e="create-user-button"]').click(); + cy.url().should('contain', 'users/create-machine'); + //force needed due to the prefilled username prefix + cy.get('[formcontrolname="userName"]').type(testMachineUserNameAdd, { force: true }); + cy.get('[formcontrolname="name"]').type('e2emachinename'); + cy.get('[formcontrolname="description"]').type('e2emachinedescription'); + cy.get('[data-e2e="create-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); + + describe('remove', () => { + before('ensure it exists', () => { + apiAuth().then((api) => { + ensureMachineUserExists(api, testMachineUserNameRemove).then(()=>{ + cy.visit(machinesPath); + }); + }); + }); + + it('should delete a machine', () => { + cy.contains('tr', testMachineUserNameRemove, { timeout: 1000 }) + // doesn't work, need to force click. + // .trigger('mouseover') + .find('[e2e-data="enabled-delete-button"]') + .click({force: true}); + cy.get('[e2e-data="confirm-dialog-input"]').click().type(loginname(testMachineUserNameRemove, Cypress.env('org'))); + cy.get('[e2e-data="confirm-dialog-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); +}); diff --git a/console/cypress/integration/permissions/permissions.ts b/e2e/cypress/e2e/permissions/permissions.cy.ts similarity index 56% rename from console/cypress/integration/permissions/permissions.ts rename to e2e/cypress/e2e/permissions/permissions.cy.ts index 49b19741a1..b6beefc875 100644 --- a/console/cypress/integration/permissions/permissions.ts +++ b/e2e/cypress/e2e/permissions/permissions.cy.ts @@ -1,8 +1,7 @@ -import { apiAuth, apiCallProperties } from "../../support/api/apiauth"; +import { apiAuth } from "../../support/api/apiauth"; import { ensureProjectExists, ensureProjectResourceDoesntExist, Roles } from "../../support/api/projects"; -import { login, User } from "../../support/login/users"; -describe('permissions', () => { +describe.skip('permissions', () => { const testProjectName = 'e2eprojectpermission' const testAppName = 'e2eapppermission' @@ -11,42 +10,34 @@ describe('permissions', () => { const testRoleGroup = 'e2eroleundertestgroup' const testGrantName = 'e2egrantundertest' - ;[User.OrgOwner].forEach(user => { + var projectId: number - describe(`as user "${user}"`, () => { - - var api: apiCallProperties - var projectId: number - - beforeEach(() => { - login(user) - apiAuth().then(apiCalls => { - api = apiCalls - ensureProjectExists(apiCalls, testProjectName).then(projId => { - projectId = projId - cy.visit(`${Cypress.env('consoleUrl')}/projects/${projId}`) - }) - }) + beforeEach(() => { + apiAuth().then(apiCalls => { + ensureProjectExists(apiCalls, testProjectName).then(projId => { + projectId = projId }) + }) + }) - - describe('add role', () => { - beforeEach(()=> { - ensureProjectResourceDoesntExist(api, projectId, Roles, testRoleName) - }) - - it('should add a role', () => { - cy.get('[data-e2e="add-new-role"]').click() - cy.get('[formcontrolname="key"]').type(testRoleName) - cy.get('[formcontrolname="displayName"]').type(testRoleDisplay) - cy.get('[formcontrolname="group"]').type(testRoleGroup) - cy.get('[data-e2e="save-button"]').click() - cy.get('.data-e2e-success') - cy.wait(200) - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist') - }) + describe('add role', () => { + beforeEach(()=> { + apiAuth().then((api)=> { + ensureProjectResourceDoesntExist(api, projectId, Roles, testRoleName) + cy.visit(`/ui/console/projects/${projectId}?id=roles`) }) }) + + it('should add a role', () => { + cy.get('[data-e2e="add-new-role"]').click() + cy.get('[formcontrolname="key"]').type(testRoleName) + cy.get('[formcontrolname="displayName"]').type(testRoleDisplay) + cy.get('[formcontrolname="group"]').type(testRoleGroup) + cy.get('[data-e2e="save-button"]').click() + cy.get('.data-e2e-success') + cy.wait(200) + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist') + }) }) }) /* @@ -54,19 +45,19 @@ describe('permissions', () => { describe('permissions', () => { before(()=> { -// cy.consolelogin(Cypress.env('username'), Cypress.env('password'), Cypress.env('consoleUrl')) +// cy.consolelogin(Cypress.env('username'), Cypress.env('password'), Cypress.config('baseUrl')/ui/console) }) it('should show projects ', () => { - cy.visit(Cypress.env('consoleUrl') + '/projects') + cy.visit(Cypress.config('baseUrl')/ui/console + '/projects') cy.url().should('contain', '/projects') }) it('should add a role', () => { - cy.visit(Cypress.env('consoleUrl') + '/org').then(() => { + cy.visit(Cypress.config('baseUrl')/ui/console + '/org').then(() => { cy.url().should('contain', '/org'); }) - cy.visit(Cypress.env('consoleUrl') + '/projects').then(() => { + cy.visit(Cypress.config('baseUrl')/ui/console + '/projects').then(() => { cy.url().should('contain', '/projects'); cy.get('.card').should('contain.text', "newProjectToTest") }) @@ -77,8 +68,8 @@ describe('permissions', () => { cy.log(url.split('/')[4]) projectID = url.split('/')[4] }); - - cy.then(() => cy.visit(Cypress.env('consoleUrl') + '/projects/' + projectID +'/roles/create')) + + cy.then(() => cy.visit(Cypress.config('baseUrl')/ui/console + '/projects/' + projectID +'/roles/create')) cy.get('[formcontrolname^=key]').type("newdemorole") cy.get('[formcontrolname^=displayName]').type("newdemodisplayname") cy.get('[formcontrolname^=group]').type("newdemogroupname") @@ -88,10 +79,10 @@ describe('permissions', () => { }) it('should add a grant', () => { - cy.visit(Cypress.env('consoleUrl') + '/org').then(() => { + cy.visit(Cypress.config('baseUrl')/ui/console + '/org').then(() => { cy.url().should('contain', '/org'); }) - cy.visit(Cypress.env('consoleUrl') + '/projects').then(() => { + cy.visit(Cypress.config('baseUrl')/ui/console + '/projects').then(() => { cy.url().should('contain', '/projects'); cy.get('.card').should('contain.text', "newProjectToTest") }) @@ -102,8 +93,8 @@ describe('permissions', () => { cy.log(url.split('/')[4]) projectID = url.split('/')[4] }); - - cy.then(() => cy.visit(Cypress.env('consoleUrl') + '/grant-create/project/' + projectID )) + + cy.then(() => cy.visit(Cypress.config('baseUrl')/ui/console + '/grant-create/project/' + projectID )) cy.get('input').type("demo") cy.get('[role^=listbox]').filter(`:contains("${Cypress.env("fullUserName")}")`).should('be.visible').click() cy.wait(5000) diff --git a/e2e/cypress/e2e/projects/projects.cy.ts b/e2e/cypress/e2e/projects/projects.cy.ts new file mode 100644 index 0000000000..c5352a233a --- /dev/null +++ b/e2e/cypress/e2e/projects/projects.cy.ts @@ -0,0 +1,71 @@ +import { apiAuth } from '../../support/api/apiauth'; +import { ensureProjectDoesntExist, ensureProjectExists } from '../../support/api/projects'; + +describe('projects', () => { + const testProjectNameCreate = 'e2eprojectcreate'; + const testProjectNameDeleteList = 'e2eprojectdeletelist'; + const testProjectNameDeleteGrid = 'e2eprojectdeletegrid'; + + describe('add project', () => { + beforeEach(`ensure it doesn't exist already`, () => { + apiAuth().then((api) => { + ensureProjectDoesntExist(api, testProjectNameCreate); + }); + cy.visit(`/ui/console/projects`); + }); + + it('should add a project', () => { + cy.get('.add-project-button').click({ force: true }); + cy.get('input').type(testProjectNameCreate); + cy.get('[data-e2e="continue-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); + + describe('remove project', () => { + describe('list view', () => { + beforeEach('ensure it exists', () => { + apiAuth().then((api) => { + ensureProjectExists(api, testProjectNameDeleteList); + }); + cy.visit(`/ui/console/projects`); + }); + + it('removes the project', () => { + cy.get('[data-e2e=toggle-grid]').click(); + cy.get('[data-e2e=timestamp]'); + cy.contains('tr', testProjectNameDeleteList, { timeout: 1000 }) + .find('[data-e2e=delete-project-button]') + .click({force: true}); + cy.get('[e2e-data="confirm-dialog-input"]').type(testProjectNameDeleteList); + cy.get('[e2e-data="confirm-dialog-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); + + describe('grid view', () => { + beforeEach('ensure it exists', () => { + apiAuth().then((api) => { + ensureProjectExists(api, testProjectNameDeleteGrid); + }); + cy.visit(`/ui/console/projects`); + }); + + it('removes the project', () => { + cy.contains('[data-e2e=grid-card]', testProjectNameDeleteGrid) + .find('[data-e2e=delete-project-button]') + .trigger('mouseover') + .click(); + cy.get('[e2e-data="confirm-dialog-input"]').type(testProjectNameDeleteGrid); + cy.get('[e2e-data="confirm-dialog-button"]').click(); + cy.get('.data-e2e-success'); + cy.wait(200); + cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + }); + }); + }); +}); diff --git a/e2e/cypress/e2e/register/register.cy.ts b/e2e/cypress/e2e/register/register.cy.ts new file mode 100644 index 0000000000..e69de29bb2 diff --git a/console/cypress/integration/settings/login-policy.ts b/e2e/cypress/e2e/settings/login-policy.cy.ts similarity index 96% rename from console/cypress/integration/settings/login-policy.ts rename to e2e/cypress/e2e/settings/login-policy.cy.ts index e0e81694f8..327476d715 100644 --- a/console/cypress/integration/settings/login-policy.ts +++ b/e2e/cypress/e2e/settings/login-policy.cy.ts @@ -4,7 +4,7 @@ import { login, User } from "../../support/login/users"; describe("login policy", ()=> { - const orgPath = `${Cypress.env('consoleUrl')}/org` + const orgPath = `/ui/console/org` ;[User.OrgOwner].forEach(user => { diff --git a/console/cypress/integration/settings/password-complexity.ts b/e2e/cypress/e2e/settings/password-complexity.cy.ts similarity index 96% rename from console/cypress/integration/settings/password-complexity.ts rename to e2e/cypress/e2e/settings/password-complexity.cy.ts index 05e2698b98..48e95ec87c 100644 --- a/console/cypress/integration/settings/password-complexity.ts +++ b/e2e/cypress/e2e/settings/password-complexity.cy.ts @@ -2,7 +2,7 @@ import { login, User } from "../../support/login/users"; describe("password complexity", ()=> { - const orgPath = `${Cypress.env('consoleUrl')}/org` + const orgPath = `/ui/console/org` const testProjectName = 'e2eproject' ;[User.OrgOwner].forEach(user => { diff --git a/e2e/cypress/e2e/settings/private-labeling.cy.ts b/e2e/cypress/e2e/settings/private-labeling.cy.ts new file mode 100644 index 0000000000..4fdcd922fa --- /dev/null +++ b/e2e/cypress/e2e/settings/private-labeling.cy.ts @@ -0,0 +1,79 @@ +import { apiAuth, apiCallProperties } from '../../support/api/apiauth'; +import { Policy, resetPolicy } from '../../support/api/policies'; +import { login, User } from '../../support/login/users'; + +describe('private labeling', () => { + const orgPath = `/ui/console/org`; + + [User.OrgOwner].forEach((user) => { + describe(`as user "${user}"`, () => { + let api: apiCallProperties; + + beforeEach(() => { + login(user); + cy.visit(orgPath); + // TODO: Why force? + cy.contains('[data-e2e=policy-card]', 'Private Labeling').contains('button', 'Modify').click({ force: true }); // TODO: select data-e2e + }); + + customize('white', user); + customize('dark', user); + }); + }); +}); + +function customize(theme: string, user: User) { + describe(`${theme} theme`, () => { + beforeEach(() => { + apiAuth().then((api) => { + resetPolicy(api, Policy.Label); + }); + }); + + describe.skip('logo', () => { + beforeEach('expand logo category', () => { + cy.contains('[data-e2e=policy-category]', 'Logo').click(); // TODO: select data-e2e + cy.fixture('logo.png').as('logo'); + }); + + it('should update a logo', () => { + cy.get('[data-e2e=image-part-logo]') + .find('input') + .then(function (el) { + const blob = Cypress.Blob.base64StringToBlob(this.logo, 'image/png'); + const file = new File([blob], 'images/logo.png', { type: 'image/png' }); + const list = new DataTransfer(); + + list.items.add(file); + const myFileList = list.files; + + el[0].files = myFileList; + el[0].dispatchEvent(new Event('change', { bubbles: true })); + }); + }); + it('should delete a logo'); + }); + it('should update an icon'); + it('should delete an icon'); + it.skip('should update the background color', () => { + cy.contains('[data-e2e=color]', 'Background Color').find('button').click(); // TODO: select data-e2e + cy.get('color-editable-input').find('input').clear().type('#ae44dc'); + cy.get('[data-e2e=save-colors-button]').click(); + cy.get('[data-e2e=header-user-avatar]').click(); + cy.contains('Logout All Users').click(); // TODO: select data-e2e + login(User.LoginPolicyUser, undefined, true, null, () => { + cy.pause(); + }); + }); + it('should update the primary color'); + it('should update the warning color'); + it('should update the font color'); + it('should update the font style'); + it('should hide the loginname suffix'); + it('should show the loginname suffix'); + it('should hide the watermark'); + it('should show the watermark'); + it('should show the current configuration'); + it('should reset the policy'); + }); +} diff --git a/console/cypress/fixtures/example.json b/e2e/cypress/fixtures/example.json similarity index 100% rename from console/cypress/fixtures/example.json rename to e2e/cypress/fixtures/example.json diff --git a/console/cypress/fixtures/logo.png b/e2e/cypress/fixtures/logo.png similarity index 100% rename from console/cypress/fixtures/logo.png rename to e2e/cypress/fixtures/logo.png diff --git a/e2e/cypress/support/api/apiauth.ts b/e2e/cypress/support/api/apiauth.ts new file mode 100644 index 0000000000..865b6bbe1d --- /dev/null +++ b/e2e/cypress/support/api/apiauth.ts @@ -0,0 +1,15 @@ +import { login, User } from 'support/login/users' + +export interface apiCallProperties { + authHeader: string + mgntBaseURL: string +} + +export function apiAuth(): Cypress.Chainable { + return login(User.IAMAdminUser, 'Password1!', false, true).then(token => { + return { + authHeader: `Bearer ${token}`, + mgntBaseURL: `/management/v1/`, + } + }) +} diff --git a/console/cypress/support/api/ensure.ts b/e2e/cypress/support/api/ensure.ts similarity index 100% rename from console/cypress/support/api/ensure.ts rename to e2e/cypress/support/api/ensure.ts diff --git a/console/cypress/support/api/policies.ts b/e2e/cypress/support/api/policies.ts similarity index 100% rename from console/cypress/support/api/policies.ts rename to e2e/cypress/support/api/policies.ts diff --git a/console/cypress/support/api/projects.ts b/e2e/cypress/support/api/projects.ts similarity index 100% rename from console/cypress/support/api/projects.ts rename to e2e/cypress/support/api/projects.ts diff --git a/console/cypress/support/api/users.ts b/e2e/cypress/support/api/users.ts similarity index 100% rename from console/cypress/support/api/users.ts rename to e2e/cypress/support/api/users.ts diff --git a/console/cypress/support/commands.ts b/e2e/cypress/support/commands.ts similarity index 92% rename from console/cypress/support/commands.ts rename to e2e/cypress/support/commands.ts index 20af219d25..241a1fe176 100644 --- a/console/cypress/support/commands.ts +++ b/e2e/cypress/support/commands.ts @@ -7,14 +7,14 @@ namespace Cypress { * * @example cy.consolelogin('hodor', 'hodor1234') */ -/* consolelogin(username: string, password: string): void +/* consolelogin(username: string, password: string): void } } Cypress.Commands.add('consolelogin', { prevSubject: false }, (username: string, password: string) => { window.sessionStorage.removeItem("zitadel:access_token") - cy.visit(Cypress.env('consoleUrl')).then(() => { + cy.visit(Cypress.config('baseUrl')/ui/console).then(() => { // fill the fields and push button cy.get('#loginName').type(username, { log: false }) cy.get('#submit-button').click() diff --git a/e2e/cypress/support/e2e.ts b/e2e/cypress/support/e2e.ts new file mode 100644 index 0000000000..f80f74f8e1 --- /dev/null +++ b/e2e/cypress/support/e2e.ts @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') \ No newline at end of file diff --git a/console/cypress/support/index.ts b/e2e/cypress/support/index.ts similarity index 100% rename from console/cypress/support/index.ts rename to e2e/cypress/support/index.ts diff --git a/e2e/cypress/support/login/users.ts b/e2e/cypress/support/login/users.ts new file mode 100644 index 0000000000..dbcfd464c2 --- /dev/null +++ b/e2e/cypress/support/login/users.ts @@ -0,0 +1,219 @@ +import { debug } from "console"; + +export enum User { + OrgOwner = 'org_owner', + OrgOwnerViewer = 'org_owner_viewer', + OrgProjectCreator = 'org_project_creator', + LoginPolicyUser = 'login_policy_user', + PasswordComplexityUser = 'password_complexity_user', + IAMAdminUser = 'zitadel-admin', +} + +export function login( + user: User, + pw?: string, + force?: boolean, + skipMFAChangePW?: boolean, + onUsernameScreen?: () => void, + onPasswordScreen?: () => void, + onAuthenticated?: () => void, +): Cypress.Chainable { + let creds = credentials(user, pw); + + const loginUrl: string = '/ui/login'; + const issuerUrl: string = '/oauth/v2'; + const otherZitadelIdpInstance: boolean = Cypress.env('otherZitadelIdpInstance'); + + return cy.session( + creds.username, + () => { + const cookies = new Map(); + + cy.intercept( + { + method: 'GET', + url: `${loginUrl}*`, + times: 1, + }, + (req) => { + req.headers['cookie'] = requestCookies(cookies); + req.continue((res) => { + updateCookies(res.headers['set-cookie'] as string[], cookies); + }); + }, + ).as('login'); + + cy.intercept( + { + method: 'POST', + url: `${loginUrl}/loginname*`, + times: 1, + }, + (req) => { + req.headers['cookie'] = requestCookies(cookies); + req.continue((res) => { + updateCookies(res.headers['set-cookie'] as string[], cookies); + }); + }, + ).as('loginName'); + + cy.intercept( + { + method: 'POST', + url: `${loginUrl}/password*`, + times: 1, + }, + (req) => { + req.headers['cookie'] = requestCookies(cookies); + req.continue((res) => { + updateCookies(res.headers['set-cookie'] as string[], cookies); + }); + }, + ).as('password'); + + cy.intercept( + { + method: 'GET', + url: `${loginUrl}/success*`, + times: 1, + }, + (req) => { + req.headers['cookie'] = requestCookies(cookies); + req.continue((res) => { + updateCookies(res.headers['set-cookie'] as string[], cookies); + }); + }, + ).as('success'); + + cy.intercept( + { + method: 'GET', + url: `${issuerUrl}/authorize/callback*`, + times: 1, + }, + (req) => { + req.headers['cookie'] = requestCookies(cookies); + req.continue((res) => { + updateCookies(res.headers['set-cookie'] as string[], cookies); + }); + }, + ).as('callback'); + + cy.intercept( + { + method: 'GET', + url: `${issuerUrl}/authorize*`, + times: 1, + }, + (req) => { + req.continue((res) => { + updateCookies(res.headers['set-cookie'] as string[], cookies); + }); + }, + ); + + let userToken: string + cy.intercept({ + method: 'POST', + url: `${issuerUrl}/token`, + }, req => { + req.continue(res => { + userToken = res.body["access_token"]} + ) + }).as('token') + + cy.visit(loginUrl, { retryOnNetworkFailure: true }); + + otherZitadelIdpInstance && cy.wait('@login'); + onUsernameScreen ? onUsernameScreen() : null; + cy.get('#loginName').type(creds.username); + cy.get('#submit-button').click(); + + otherZitadelIdpInstance && cy.wait('@loginName'); + onPasswordScreen ? onPasswordScreen() : null; + cy.get('#password').type(creds.password); + cy.get('#submit-button').click(); + + cy.wait('@password').then((interception) => { + if (interception.response.body.indexOf('Multifactor Setup') === -1){ + return + } + + cy.contains('button', 'skip').click() + cy.get('#change-old-password').type(creds.password) + cy.get('#change-new-password').type(creds.password) + cy.get('#change-password-confirmation').type(creds.password) + cy.contains('button', 'next').click() + cy.contains('button', 'next').click() + }) + + cy.wait('@token').then(() => { + cy.task('safetoken', {key: creds.username, token: userToken}) + }) + + onAuthenticated ? onAuthenticated() : null; + + otherZitadelIdpInstance && cy.wait('@callback'); + + cy.location('pathname', { timeout: 5 * 1000 }).should('eq', '/ui/console/'); + }, + { + validate: () => { + if (force) { + throw new Error('clear session'); + } + }, + }, + ).then(() => { + return cy.task('loadtoken', {key: creds.username}) + }); +} + +export function loginname(withoutDomain: string, org?: string): string { + return `${withoutDomain}@${org}.${host(Cypress.config('baseUrl'))}`; +} + +function credentials(user: User, pw?: string) { + + // TODO: ugly + const woDomain = user == User.IAMAdminUser ? User.IAMAdminUser : `${user}_user_name` + const org = Cypress.env('ORGANIZATION') ? Cypress.env('ORGANIZATION') : 'zitadel' + + return { + username: loginname(woDomain, org), + password: pw ? pw : Cypress.env(`${user}_password`), + }; +} + +function updateCookies(newCookies: string[] | undefined, currentCookies: Map) { + if (newCookies === undefined) { + return; + } + newCookies.forEach((cs) => { + cs.split('; ').forEach((cookie) => { + const idx = cookie.indexOf('='); + currentCookies.set(cookie.substring(0, idx), cookie.substring(idx + 1)); + }); + }); +} + +function requestCookies(currentCookies: Map): string[] { + let list: Array = []; + currentCookies.forEach((val, key) => { + list.push(key + '=' + val); + }); + return list; +} + +export function host(url: string): string { + return stripPort(stripProtocol(url)); +} + +function stripPort(s: string): string { + const idx = s.indexOf(':'); + return idx === -1 ? s : s.substring(0, idx); +} + +function stripProtocol(url: string): string { + return url.replace('http://', '').replace('https://', ''); +} diff --git a/e2e/cypress/tsconfig.json b/e2e/cypress/tsconfig.json new file mode 100644 index 0000000000..4b187edbba --- /dev/null +++ b/e2e/cypress/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "target": "es5", + "lib": ["es5", "dom"], + "types": ["cypress"] + }, + "include": ["**/*.ts"] +} diff --git a/e2e/docker-compose.yaml b/e2e/docker-compose.yaml new file mode 100644 index 0000000000..a98dc89485 --- /dev/null +++ b/e2e/docker-compose.yaml @@ -0,0 +1,63 @@ +version: '3.8' + +services: + zitadel: + restart: 'always' + networks: + - 'zitadel' + image: '${ZITADEL_IMAGE:-ghcr.io/zitadel/zitadel:latest}' + command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled' + environment: + ZITADEL_DATABASE_COCKROACH_HOST: db + ZITADEL_EXTERNALSECURE: false + ZITADEL_EXTERNALDOMAIN: zitadel + ZITADEL_FIRSTINSTANCE_CUSTOMDOMAIN: zitadel + + depends_on: + db: + condition: 'service_healthy' + ports: + - '8080:8080' + + db: + restart: 'always' + networks: + - 'zitadel' + image: 'cockroachdb/cockroach:v22.1.0' + command: 'start-single-node --insecure' + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"] + interval: '10s' + timeout: '30s' + retries: 5 + start_period: '20s' + ports: + - '9090:8080' + - '26257:26257' + + npm-install: + image: node:18-alpine3.15 + working_dir: /e2e + volumes: + - .:/e2e + command: "npm ci" + + e2e: + image: cypress/included:10.3.0 + environment: + CYPRESS_BASE_URL: http://zitadel:8080 + depends_on: + zitadel: + condition: 'service_started' + db: + condition: 'service_healthy' + npm-install: + condition: 'service_completed_successfully' + working_dir: /e2e + volumes: + - .:/e2e + networks: + - zitadel + +networks: + zitadel: diff --git a/e2e/package-lock.json b/e2e/package-lock.json new file mode 100644 index 0000000000..e1dc3a4290 --- /dev/null +++ b/e2e/package-lock.json @@ -0,0 +1,4704 @@ +{ + "name": "zitadel-e2e", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "zitadel-e2e", + "version": "0.0.0", + "dependencies": { + "cypress-terminal-report": "^4.1.1", + "debug": "^4.3.4", + "jsonwebtoken": "^8.5.1", + "mochawesome": "^7.1.3", + "typescript": "^4.7.4" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@cypress/request": { + "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "peer": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "peer": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@types/node": { + "version": "14.18.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.23.tgz", + "integrity": "sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA==", + "peer": true + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "peer": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "peer": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "peer": true + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "peer": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "peer": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "peer": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "peer": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "peer": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "peer": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "peer": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "peer": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "peer": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "peer": true + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "peer": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "peer": true + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "peer": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "peer": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "peer": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "peer": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "peer": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "peer": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cypress": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.4.0.tgz", + "integrity": "sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "^6.4.3", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.6", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/cypress-terminal-report": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-4.1.1.tgz", + "integrity": "sha512-3KREZwj3oLT0qilcPsBhwPdogJMtKkpkIfweV8uBd0bltM9uHMWiv+JzsXr6rfCPzfDvDG9YB7x67TVxWn1aGQ==", + "dependencies": { + "chalk": "^4.0.0", + "fs-extra": "^10.1.0", + "semver": "^7.3.5", + "tv4": "^1.3.0" + }, + "peerDependencies": { + "cypress": ">=4.10.0" + } + }, + "node_modules/cypress-terminal-report/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", + "engines": { + "node": "*" + } + }, + "node_modules/dayjs": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", + "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==", + "peer": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "peer": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "peer": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "peer": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "peer": true + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "peer": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "peer": true + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "peer": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "peer": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "peer": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "peer": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "peer": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "peer": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "peer": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "peer": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "peer": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "peer": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "peer": true + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "peer": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "peer": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "peer": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "peer": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "peer": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "peer": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "peer": true + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "peer": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "peer": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "peer": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "engines": [ + "node >=0.6.0" + ], + "peer": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "peer": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "peer": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "peer": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "peer": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "peer": true + }, + "node_modules/mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "peer": true, + "dependencies": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "peer": true + }, + "node_modules/mochawesome": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", + "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", + "dependencies": { + "chalk": "^4.1.2", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^6.2.0", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2" + }, + "peerDependencies": { + "mocha": ">=7" + } + }, + "node_modules/mochawesome-report-generator": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", + "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", + "dependencies": { + "chalk": "^4.1.2", + "dateformat": "^4.5.1", + "escape-html": "^1.0.3", + "fs-extra": "^10.0.0", + "fsu": "^1.1.1", + "lodash.isfunction": "^3.0.9", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^13.6.0", + "yargs": "^17.2.1" + }, + "bin": { + "marge": "bin/cli.js" + } + }, + "node_modules/mochawesome-report-generator/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mochawesome-report-generator/node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mochawesome-report-generator/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "peer": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "peer": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "peer": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "peer": true + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "peer": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "peer": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "peer": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "peer": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "peer": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "peer": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "peer": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "peer": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "peer": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "peer": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "peer": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "peer": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "peer": true + }, + "node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "peer": true + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "peer": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==" + }, + "node_modules/tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "dependencies": { + "tcomb": "^3.0.0" + } + }, + "node_modules/throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "peer": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "peer": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "peer": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "peer": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "peer": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "peer": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "peer": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "peer": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "peer": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "peer": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "peer": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "peer": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "peer": true + }, + "@cypress/request": { + "version": "2.88.10", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-2.88.10.tgz", + "integrity": "sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==", + "peer": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "peer": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "peer": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "@types/node": { + "version": "14.18.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.23.tgz", + "integrity": "sha512-MhbCWN18R4GhO8ewQWAFK4TGQdBpXWByukz7cWyJmXhvRuCIaM/oWytGPqVmDzgEnnaIc9ss6HbU5mUi+vyZPA==", + "peer": true + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "peer": true + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==", + "peer": true + }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "peer": true, + "requires": { + "@types/node": "*" + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "peer": true + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "peer": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "peer": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "peer": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "peer": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "peer": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "peer": true + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "peer": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "peer": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "peer": true + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "peer": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "peer": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "peer": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "peer": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "peer": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "peer": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "peer": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "peer": true + }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "peer": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "peer": true + }, + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "peer": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "peer": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "peer": true + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "peer": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "peer": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "cachedir": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", + "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "peer": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "peer": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "peer": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "peer": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "peer": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", + "peer": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "peer": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "peer": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-table3": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", + "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", + "peer": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "peer": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "peer": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "peer": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "peer": true + }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "peer": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "peer": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "peer": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "peer": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cypress": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-10.4.0.tgz", + "integrity": "sha512-OM7F8MRE01SHQRVVzunid1ZK1m90XTxYnl+7uZfIrB4CYqUDCrZEeSyCXzIbsS6qcaijVCAhqDL60SxG8N6hew==", + "peer": true, + "requires": { + "@cypress/request": "^2.88.10", + "@cypress/xvfb": "^1.2.4", + "@types/node": "^14.14.31", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.6.0", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^5.1.0", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "eventemitter2": "^6.4.3", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.0", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.6", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.3.2", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + } + }, + "cypress-terminal-report": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/cypress-terminal-report/-/cypress-terminal-report-4.1.1.tgz", + "integrity": "sha512-3KREZwj3oLT0qilcPsBhwPdogJMtKkpkIfweV8uBd0bltM9uHMWiv+JzsXr6rfCPzfDvDG9YB7x67TVxWn1aGQ==", + "requires": { + "chalk": "^4.0.0", + "fs-extra": "^10.1.0", + "semver": "^7.3.5", + "tv4": "^1.3.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "dateformat": { + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", + "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==" + }, + "dayjs": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz", + "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g==", + "peer": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "peer": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "peer": true + }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "peer": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "peer": true, + "requires": { + "once": "^1.4.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "peer": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "peer": true + }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "peer": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "peer": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "peer": true, + "requires": { + "pify": "^2.2.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "peer": true + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "peer": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "peer": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "peer": true, + "requires": { + "pend": "~1.2.0" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "peer": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "peer": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "peer": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "peer": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "peer": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "peer": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "peer": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "peer": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true, + "peer": true + }, + "fsu": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fsu/-/fsu-1.1.1.tgz", + "integrity": "sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "peer": true, + "requires": { + "pump": "^3.0.0" + } + }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "peer": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "peer": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "peer": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "peer": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "peer": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "peer": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "peer": true, + "requires": { + "ini": "2.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "peer": true + }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "peer": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "peer": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "peer": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "peer": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "peer": true + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "peer": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "peer": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "peer": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "peer": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "peer": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "peer": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "peer": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "peer": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "peer": true + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "peer": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "peer": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "peer": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "peer": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "peer": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "peer": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "peer": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "peer": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "peer": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "peer": true + }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "peer": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "peer": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "peer": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "lodash.isempty": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", + "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==" + }, + "lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isobject": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", + "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "peer": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "peer": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "peer": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "peer": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "peer": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "peer": true + }, + "minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "peer": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "peer": true + }, + "mocha": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", + "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", + "peer": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "peer": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "peer": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "peer": true + } + } + }, + "mochawesome": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/mochawesome/-/mochawesome-7.1.3.tgz", + "integrity": "sha512-Vkb3jR5GZ1cXohMQQ73H3cZz7RoxGjjUo0G5hu0jLaW+0FdUxUwg3Cj29bqQdh0rFcnyV06pWmqmi5eBPnEuNQ==", + "requires": { + "chalk": "^4.1.2", + "diff": "^5.0.0", + "json-stringify-safe": "^5.0.1", + "lodash.isempty": "^4.4.0", + "lodash.isfunction": "^3.0.9", + "lodash.isobject": "^3.0.2", + "lodash.isstring": "^4.0.1", + "mochawesome-report-generator": "^6.2.0", + "strip-ansi": "^6.0.1", + "uuid": "^8.3.2" + } + }, + "mochawesome-report-generator": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mochawesome-report-generator/-/mochawesome-report-generator-6.2.0.tgz", + "integrity": "sha512-Ghw8JhQFizF0Vjbtp9B0i//+BOkV5OWcQCPpbO0NGOoxV33o+gKDYU0Pr2pGxkIHnqZ+g5mYiXF7GMNgAcDpSg==", + "requires": { + "chalk": "^4.1.2", + "dateformat": "^4.5.1", + "escape-html": "^1.0.3", + "fs-extra": "^10.0.0", + "fsu": "^1.1.1", + "lodash.isfunction": "^3.0.9", + "opener": "^1.5.2", + "prop-types": "^15.7.2", + "tcomb": "^3.2.17", + "tcomb-validation": "^3.3.0", + "validator": "^13.6.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "peer": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "peer": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "peer": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "peer": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "peer": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "peer": true + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "peer": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "peer": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "peer": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "peer": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "peer": true + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "peer": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "peer": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "peer": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "peer": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "peer": true + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "peer": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "peer": true + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "peer": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "peer": true + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "peer": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "peer": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "peer": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "peer": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "peer": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "peer": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "peer": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rxjs": { + "version": "7.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.6.tgz", + "integrity": "sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==", + "peer": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "peer": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "peer": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "peer": true + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "peer": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "peer": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "peer": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "peer": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==" + }, + "tcomb-validation": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tcomb-validation/-/tcomb-validation-3.4.1.tgz", + "integrity": "sha512-urVVMQOma4RXwiVCa2nM2eqrAomHROHvWPuj6UkDGz/eb5kcy0x6P0dVt6kzpUZtYMNoAqJLWmz1BPtxrtjtrA==", + "requires": { + "tcomb": "^3.0.0" + } + }, + "throttleit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", + "peer": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "peer": true + }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "peer": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "peer": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "peer": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "peer": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "peer": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tv4": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", + "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==" + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "peer": true + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "peer": true + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "peer": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "peer": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "peer": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "peer": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "peer": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "peer": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "peer": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "peer": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "peer": true + } + } +} diff --git a/e2e/package.json b/e2e/package.json new file mode 100644 index 0000000000..c0ef0db86d --- /dev/null +++ b/e2e/package.json @@ -0,0 +1,15 @@ +{ + "name": "zitadel-e2e", + "version": "0.0.0", + "scripts": { + "start": "npx cypress open", + "run": "npx cypress run" + }, + "private": true, + "dependencies": { + "debug": "^4.3.4", + "jsonwebtoken": "^8.5.1", + "mochawesome": "^7.1.3", + "typescript": "^4.7.4" + } +} diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json new file mode 100644 index 0000000000..4b187edbba --- /dev/null +++ b/e2e/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "baseUrl": "./", + "target": "es5", + "lib": ["es5", "dom"], + "types": ["cypress"] + }, + "include": ["**/*.ts"] +} From 52f098e6ad1b2b2d03ab942e5cc77bad51ada2ff Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Fri, 5 Aug 2022 20:23:10 +0200 Subject: [PATCH 080/116] fix e2e workflow (#4133) * fix e2e workflow * configure registry once --- .github/workflows/e2e.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 3f61e1fac6..2023545762 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -13,15 +13,17 @@ on: jobs: test: runs-on: ubuntu-20.04 + env: + ZITADEL_IMAGE_REGISTRY: 'ghcr.io/zitadel/zitadel' steps: - name: Checkout Repository uses: actions/checkout@v2 - name: Set TAG env manual trigger if: github.event_name == 'workflow_dispatch' - run: echo "RELEASE_VERSION=${{ github.event.inputs.releaseversion }}" >> $GITHUB_ENV + run: echo "ZITADEL_IMAGE=${ZITADEL_IMAGE_REGISTRY}:${{ github.event.inputs.releaseversion }}" >> $GITHUB_ENV - name: Set TAG env on release if: github.event_name == 'release' - run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + run: echo "ZITADEL_IMAGE=${ZITADEL_IMAGE_REGISTRY}:${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 with: @@ -30,8 +32,6 @@ jobs: - name: Test run: docker compose run e2e working-directory: e2e - env: - ZITADEL_IMAGE: ghcr.io/zitadel/zitadel:${RELEASE_VERSION} - name: Archive production tests if: always() uses: actions/upload-artifact@v2 From a7d63271bdf29689b57512650839f61df1131140 Mon Sep 17 00:00:00 2001 From: Stefan Benz <46600784+stebenz@users.noreply.github.com> Date: Mon, 8 Aug 2022 12:02:15 +0200 Subject: [PATCH 081/116] docs: correct import and export documentation (#4137) --- .../guides/integrate/export-and-import.md | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/docs/docs/guides/integrate/export-and-import.md b/docs/docs/guides/integrate/export-and-import.md index d47df6d174..05f9cabd18 100644 --- a/docs/docs/guides/integrate/export-and-import.md +++ b/docs/docs/guides/integrate/export-and-import.md @@ -12,20 +12,18 @@ Currently, this doesn't include the following points: * Global IDPs * Global second/multi factors * Machine keys -* PAT's +* Personal Access Tokens * Application keys +* Passwordless authentication Which results in that if you want to import, and you have no defined organization-specific custom policies, the experience for your users will not be exactly like in your old instance. -```suggestion -::note Note that the ressources will be migrated without the event stream. This means that you will not have the audit trail for the imported objects. - -*** With this export and import the current audit trail is not included, the resources will be newly created *** +:::note +Note that the resources will be migrated without the event stream. This means that you will not have the audit trail for the imported objects. +::: ### Export from V1 to import into V2 directly -***To use this requests you have to have an access token with enough permissions to export and import.*** - To export all necessary data you only have to use one request, as an example: ```bash @@ -50,7 +48,9 @@ curl --request POST \ * "timeout": timeout of the call to export the data * "response_output": to output the export as response to the call -***To import the exported data into you new instance, you have to have an already existing instance on a ZITADEL V2, with all desired configuration and global resources.*** +:::note +To import the exported data into you new instance, you have to have an already existing instance on a ZITADEL V2, with all desired configuration and global resources. +::: Then as an example you can use one request for the import: @@ -66,9 +66,10 @@ curl --request POST \ ## Export from V1 to Import into V2 thorugh GCS -***To use this requests you have to have an access token with enough permissions to export and import.*** - -***The used serviceaccount has to have at least the role "Storage Object Creator" to create objects on GCS*** +:::note +To use this requests you have to have an access token with enough permissions to export and import. +The used serviceaccount has to have at least the role "Storage Object Creator" to create objects on GCS +::: To export all necessary data you only have to use one request which results in a file in your GCS, as an example: @@ -100,9 +101,10 @@ curl --request POST \ * "bucket": used bucket for output on GCS * "serviceaccount_json": base64-encoded serviceaccount.json used to output the file on GCS -***To import the exported data into you new instance, you have to have an already existing instance on a ZITADEL V2, with all desired configuration and global resources.*** - -***The used serviceaccount has to have at least the role "Storage Object Viewer" to create objects on GCS*** +:::note +To import the exported data into you new instance, you have to have an already existing instance on a ZITADEL V2, with all desired configuration and global resources. +The used serviceaccount has to have at least the role "Storage Object Viewer" to read objects from GCS +::: Then as an example you can use one request for the import: From 8f999e58069651e614595836d21c156a6dda747d Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 8 Aug 2022 14:02:24 +0200 Subject: [PATCH 082/116] docs(import/export): improve and fix heading (#4138) --- docs/docs/guides/integrate/export-and-import.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/guides/integrate/export-and-import.md b/docs/docs/guides/integrate/export-and-import.md index 05f9cabd18..583bd78f9b 100644 --- a/docs/docs/guides/integrate/export-and-import.md +++ b/docs/docs/guides/integrate/export-and-import.md @@ -22,7 +22,7 @@ Which results in that if you want to import, and you have no defined organizatio Note that the resources will be migrated without the event stream. This means that you will not have the audit trail for the imported objects. ::: -### Export from V1 to import into V2 directly +### Use the API To export all necessary data you only have to use one request, as an example: @@ -64,7 +64,7 @@ curl --request POST \ }' ``` -## Export from V1 to Import into V2 thorugh GCS +### Use a Google Cloud Storage :::note To use this requests you have to have an access token with enough permissions to export and import. From 50acb223999fdf64730165a7521417a355a35118 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 8 Aug 2022 14:18:55 +0200 Subject: [PATCH 083/116] fix(console): authz creation from user, add org settings keyboardshortcut (#4135) * fix(console): create user grant from user * add org settings to keyboard shortcuts Co-authored-by: Livio Spring --- .../user-grant-create.component.ts | 9 +++++- .../keyboard-shortcuts.service.ts | 28 +++++++++++-------- .../keyboard-shortcuts/keyboard-shortcuts.ts | 13 +++++++-- console/src/assets/i18n/de.json | 3 +- console/src/assets/i18n/en.json | 3 +- console/src/assets/i18n/fr.json | 17 +++++------ console/src/assets/i18n/it.json | 3 +- 7 files changed, 50 insertions(+), 26 deletions(-) diff --git a/console/src/app/pages/user-grant-create/user-grant-create.component.ts b/console/src/app/pages/user-grant-create/user-grant-create.component.ts index 1ac1fd2cb8..469b052d24 100644 --- a/console/src/app/pages/user-grant-create/user-grant-create.component.ts +++ b/console/src/app/pages/user-grant-create/user-grant-create.component.ts @@ -141,13 +141,20 @@ export class UserGrantCreateComponent implements OnDestroy { break; case UserGrantContext.USER: let grantId: string = ''; + let grantedProjectId: string = ''; if (this.grantedProject?.grantId) { grantId = this.grantedProject.grantId; + grantedProjectId = this.grantedProject.projectId; } const promu = this.userIds.map((id) => - this.userService.addUserGrant(id, this.rolesList, (this.project as Project.AsObject).id, grantId), + this.userService.addUserGrant( + id, + this.rolesList, + this.project?.id ? this.project.id : grantedProjectId ? grantedProjectId : '', + grantId, + ), ); Promise.all(promu) .then(() => { diff --git a/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.service.ts b/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.service.ts index 6f80cd170e..a570ce5091 100644 --- a/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.service.ts +++ b/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.service.ts @@ -6,16 +6,17 @@ import { BehaviorSubject, Observable, of, pairwise, Subject, takeUntil } from 'r import { KeyboardShortcutsComponent } from '../../modules/keyboard-shortcuts/keyboard-shortcuts.component'; import { GrpcAuthService } from '../grpc-auth.service'; import { - ACTIONS, - DOMAINS, - HOME, - INSTANCE, - KeyboardShortcut, - ME, - ORG, - PROJECTS, - USERGRANTS, - USERS, + ACTIONS, + DOMAINS, + HOME, + INSTANCE, + KeyboardShortcut, + ME, + ORG, + ORGSETTINGS, + PROJECTS, + USERGRANTS, + USERS, } from './keyboard-shortcuts'; @Injectable({ @@ -58,7 +59,7 @@ export class KeyboardShortcutsService implements OnDestroy { this.router.navigate(HOME.link); } } - if (firstKey.code === 'KeyG' && secondKey.code === 'KeyS') { + if (firstKey.code === 'KeyG' && secondKey.code === 'KeyI') { if (this.hasPermission(INSTANCE)) { this.router.navigate(INSTANCE.link); } @@ -98,6 +99,11 @@ export class KeyboardShortcutsService implements OnDestroy { this.router.navigate(DOMAINS.link); } } + if (firstKey.code === 'KeyG' && secondKey.code === 'KeyS') { + if (this.hasPermission(ORGSETTINGS)) { + this.router.navigate(ORGSETTINGS.link); + } + } } else if (secondKey && exclude.indexOf(secondTagname?.toLowerCase()) === -1) { if (secondKey.key === '?') { this.openOverviewDialog(); diff --git a/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.ts b/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.ts index b0ca9d863a..f0896dac2d 100644 --- a/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.ts +++ b/console/src/app/services/keyboard-shortcuts/keyboard-shortcuts.ts @@ -12,9 +12,9 @@ export const HOME: KeyboardShortcut = { }; export const INSTANCE: KeyboardShortcut = { - i18nKey: 'KEYBOARDSHORTCUTS.SHORTCUTS.SYSTEM', + i18nKey: 'KEYBOARDSHORTCUTS.SHORTCUTS.INSTANCE', link: ['/instance'], - keyboardKeys: ['g', 's'], + keyboardKeys: ['g', 'i'], permissions: ['iam.read'], }; @@ -66,7 +66,14 @@ export const DOMAINS: KeyboardShortcut = { permissions: ['org.read'], }; -export const SIDEWIDESHORTCUTS = [ME, HOME, INSTANCE, ORG, PROJECTS, USERS, USERGRANTS, ACTIONS, DOMAINS]; +export const ORGSETTINGS: KeyboardShortcut = { + i18nKey: 'KEYBOARDSHORTCUTS.SHORTCUTS.ORGSETTINGS', + link: ['/org-settings'], + keyboardKeys: ['g', 's'], + permissions: ['org.read'], +}; + +export const SIDEWIDESHORTCUTS = [ME, HOME, INSTANCE, ORG, PROJECTS, USERS, USERGRANTS, ACTIONS, DOMAINS, ORGSETTINGS]; export const ORGSWITCHER: KeyboardShortcut = { i18nKey: 'KEYBOARDSHORTCUTS.SHORTCUTS.ORGSWITCHER', diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index dd17b1d248..7f42a2bc8c 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -182,8 +182,9 @@ "SIDEWIDE": "Seitenübergreifende Tastaturkürzel", "SHORTCUTS": { "HOME": "Zur Startseite", - "SYSTEM": "Zum System", + "INSTANCE": "Zur Instanz", "ORG": "Zur Organisation", + "ORGSETTINGS": "Zu den Organisationseinstellungen", "ORGSWITCHER": "Organisation wechseln", "ME": "Zum eigenen Profil", "PROJECTS": "Zu den Projekten", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index 8cfa999c8b..4d1a9f24f4 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -182,8 +182,9 @@ "SIDEWIDE": "Site-wide shortcuts", "SHORTCUTS": { "HOME": "Go to Home", - "SYSTEM": "Go to System", + "INSTANCE": "Go to Iinstance", "ORG": "Go to Organization", + "ORGSETTINGS": "Go to Organization Settings", "ORGSWITCHER": "Change Organization", "ME": "Go To own profile", "PROJECTS": "Go to Projects", diff --git a/console/src/assets/i18n/fr.json b/console/src/assets/i18n/fr.json index 6c347e6845..a0ee06f30f 100644 --- a/console/src/assets/i18n/fr.json +++ b/console/src/assets/i18n/fr.json @@ -181,16 +181,17 @@ "UNDERORGCONTEXT": "Dans les pages de l'organisation", "SIDEWIDE": "Raccourcis pour l'ensemble du site", "SHORTCUTS": { - "HOME": "Aller à Accueil", - "SYSTEM": "Aller à Système", - "ORG": "Aller à Organisation", + "HOME": "Aller à Accueil", + "INSTANCE": "Vers l'aperçu des instances", + "ORG": "Aller à Organisation", + "ORGSETTINGS": "Vers les paramètres de l'organisation", "ORGSWITCHER": "Modifier l'organisation", "ME": "Aller à son propre profil", - "PROJECTS": "Aller à Projets", - "USERS": "Aller à Utilisateurs", - "USERGRANTS": "Aller àAutorisations", - "ACTIONS": "Aller à Actions et Flux", - "DOMAINS": "Aller à Domaines" + "PROJECTS": "Aller à Projets", + "USERS": "Aller à Utilisateurs", + "USERGRANTS": "Aller à Autorisations", + "ACTIONS": "Aller à Actions et Flux", + "DOMAINS": "Aller à Domaines" } }, "RESOURCEID": "Id de la ressource", diff --git a/console/src/assets/i18n/it.json b/console/src/assets/i18n/it.json index 3050fa1763..a6c784be42 100644 --- a/console/src/assets/i18n/it.json +++ b/console/src/assets/i18n/it.json @@ -182,8 +182,9 @@ "SIDEWIDE": "Tasti rapidi globali", "SHORTCUTS": { "HOME": "Vai alla panoramica", - "SYSTEM": "Vai al pagina di sistema", + "INSTANCE": "Vai alla pagina dell' istanza", "ORG": "Vai all'organizzazione", + "ORGSETTINGS": "Alle impostazioni dell'organizzazione", "ORGSWITCHER": "Cambia organizzazione", "ME": "Vai al profilo", "PROJECTS": "Vai ai progetti", From 46e5c0da9725b33774f2d37fd92f4b455bc9e4d8 Mon Sep 17 00:00:00 2001 From: Stefan Benz <46600784+stebenz@users.noreply.github.com> Date: Mon, 8 Aug 2022 14:33:56 +0200 Subject: [PATCH 084/116] docs(import): correct formatting of json examples for export and import (#4142) Co-authored-by: Florian Forster --- .../guides/integrate/export-and-import.md | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/docs/docs/guides/integrate/export-and-import.md b/docs/docs/guides/integrate/export-and-import.md index 583bd78f9b..d3988f604a 100644 --- a/docs/docs/guides/integrate/export-and-import.md +++ b/docs/docs/guides/integrate/export-and-import.md @@ -35,9 +35,9 @@ curl --request POST \ "org_ids": [ "70669144072186707", "70671105999825752" ], "excluded_org_ids": [ ], "with_passwords": true, - "with_otp": true - "timeout": "30s", - "response_output": true, + "with_otp": true, + "timeout": "30s", + "response_output": true }' -o export.json ``` @@ -80,15 +80,16 @@ curl --request POST \ --header 'Content-Type: application/json' \ --data ' "{ "org_ids": [ "70669144072186707", "70671105999825752" ], - "excluded_org_ids": [ ], - "with_passwords": true, - "with_otp": true, - "timeout": "10m", - "gcs_output": { - "path": "export.json", - "bucket": "caos-zitadel-exports", - "serviceaccount_json": "XXXX" - }' -o export.json + "excluded_org_ids": [ ], + "with_passwords": true, + "with_otp": true, + "timeout": "10m", + "gcs_output": { + "path": "export.json", + "bucket": "caos-zitadel-exports", + "serviceaccount_json": "XXXX" + } +}' ``` * "org_ids": to select which organizations should be exported @@ -114,12 +115,12 @@ curl --request POST \ --header 'Authorization: Bearer XXXX' \ --header 'Content-Type: application/json' \ --data '{ - "timeout": "10m", - "data_orgsv1_gcs": { - "path": "export.json", - "bucket": "caos-zitadel-exports", - "serviceaccount_json": "XXXX" - } + "timeout": "10m", + "data_orgsv1_gcs": { + "path": "export.json", + "bucket": "caos-zitadel-exports", + "serviceaccount_json": "XXXX" + } }' ``` From d4d39dbd80b69543b6e045cb819905e0e266fd17 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Mon, 8 Aug 2022 14:52:59 +0200 Subject: [PATCH 085/116] docs: document authentication for system api (#4140) * docs: add authentication for system api * update defaults.yaml --- cmd/defaults.yaml | 5 +- docs/docs/apis/introduction.mdx | 2 + .../guides/integrate/access-zitadel-apis.md | 4 + .../integrate/access-zitadel-system-api.md | 158 ++++++++++++++++++ docs/sidebars.js | 1 + 5 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 docs/docs/guides/integrate/access-zitadel-system-api.md diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index 4c7872b5e4..ce9fa26d97 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -215,10 +215,11 @@ EncryptionKeys: SystemAPIUsers: # add keys for authentication of the systemAPI here: + # you can specify any name for the user, but they will have to match the `issuer` and `sub` claim in the JWT: # - superuser: - # Path: /path/to/superuser/key.pem + # Path: /path/to/superuser/key.pem # you can provide the key either by reference with the path # - superuser2: - # Path: /path/to/superuser2/key.pem + # KeyData: # or you can directly embed it as base64 encoded value #TODO: remove as soon as possible SystemDefaults: diff --git a/docs/docs/apis/introduction.mdx b/docs/docs/apis/introduction.mdx index ad71667ace..4d1f01903b 100644 --- a/docs/docs/apis/introduction.mdx +++ b/docs/docs/apis/introduction.mdx @@ -137,6 +137,8 @@ Definition: This API is intended to manage the different ZITADEL instances within the system. +Checkout the guide how to [access the ZITADEL System API](/docs/guides/integrate/access-zitadel-system-api). +
    diff --git a/docs/docs/guides/integrate/access-zitadel-apis.md b/docs/docs/guides/integrate/access-zitadel-apis.md index 844b1e2c97..abcba8644f 100644 --- a/docs/docs/guides/integrate/access-zitadel-apis.md +++ b/docs/docs/guides/integrate/access-zitadel-apis.md @@ -28,6 +28,10 @@ title: Access ZITADEL APIs +:::note +This guide focuses on the Admin, Auth and Management APIs. To access the ZITADEL System API, please checkout [this guide](./access-zitadel-system-api). +::: + ## ZITADEL Managers ZITADEL Managers are Users who have permission to manage ZITADEL itself. There are some different levels for managers. diff --git a/docs/docs/guides/integrate/access-zitadel-system-api.md b/docs/docs/guides/integrate/access-zitadel-system-api.md new file mode 100644 index 0000000000..d049a2ce09 --- /dev/null +++ b/docs/docs/guides/integrate/access-zitadel-system-api.md @@ -0,0 +1,158 @@ +--- +title: Access ZITADEL System API +--- +:::note +This guide focuses on the ZITADEL System API. To access the other APIs (Admin, Auth, Management), please checkout [this guide](./access-zitadel-apis). +The ZITADEL System API is currently only available for ZITADEL Self-Hosted deployments. +::: + +## System API User + +The System API works superordinate over all instances. Therefore, you need to define a separate users to get access to this API. +You can do so by customizing the [runtime configuration](/docs/guides/manage/self-hosted/configure#runtime-configuration). + +To authenticate the user a self-signed JWT will be created and utilized. + +You can define any id for your user. This guide will assume it's `system-user-1`. + +## Generate an RSA keypair + +Generate an RSA private key with 2048 bit modulus: + +```bash +openssl genrsa -out system-user-1.pem 2048 +``` + +and export a public key from the newly created private key: + +```bash +openssl rsa -in system-user-1.pem -outform PEM -pubout -out system-user-1.pub +``` + +## Runtime Configuration + +Provide the **public** key to the ZITADEL runtime configuration. + +Either with the path to the key: + +```yaml +SystemAPIUsers: + - system-user-1: + Path: /system-user-1.pub +``` + +or with a base64 encoded value of the key: + +```yaml +SystemAPIUsers: + - system-user-1: + KeyData: +``` + +## Generate JWT + +Similar to the OAuth 2.0 JWT Profile, we will create and sign a JWT. For this API, the JWT will not be used to authenticate against ZITADEL Authorization Server, but rather directly to the API itself. + +The JWT payload will need to contain the following claims: + +```json +{ + "iss": "", + "sub": "", + "aud": "", + "exp": , + "iat": +} +``` + +So for your instance running on `custom-domain.com` the claims could look like this: + +```json +{ + "iss": "system-user-1", + "sub": "system-user-1", + "aud": "https://custom-domain.com", + "iat": 1659957184, + "exp": 1659960784 +} +``` + +:::note +If your system is exposed without TLS or on a dedicated port, be sure to provide this in your audience, e.g. http://localhost:8080 +::: + +### ZITADEL Tools + +If you want to manually create a JWT for a test, you can also use our [ZITADEL Tools](https://github.com/zitadel/zitadel-tools). Download the latest release and run: + +```bash +./key2jwt -audience=https://custom-domain.com -key=system-user-1.pem -issuer=system-user-1 +``` + +## Call the System API + +Now that you configured ZITADEL and created a JWT, you can call the System API and authenticate using the token: + +```bash +curl --request POST \ + --url {your_domain}/system/v1/instances/_search \ + --header 'Authorization: Bearer {token}' \ + --header 'Content-Type: application/json' +``` + +You should get a successful response with a `totalResult` number of 1 and the details of your instance: + +```json +{ + "details": { + "totalResult": "1" + }, + "result": [ + { + "id": "172698969497928101", + "details": { + "sequence": "102", + "creationDate": "2022-08-02T09:30:10.781068Z", + "changeDate": "2022-08-02T09:30:10.781068Z", + "resourceOwner": "172698969497928101" + }, + "state": "STATE_RUNNING", + "name": "ZITADEL", + "domains": [ + { + "details": { + "sequence": "108", + "creationDate": "2022-08-02T09:30:10.781068Z", + "changeDate": "2022-08-02T09:30:10.781068Z", + "resourceOwner": "172698969497928101" + }, + "domain": "custom-domain.com", + "primary": true + }, + { + "details": { + "sequence": "108", + "creationDate": "2022-08-02T09:30:10.781068Z", + "changeDate": "2022-08-02T09:30:10.781068Z", + "resourceOwner": "172698969497928101" + }, + "domain": "zitadel-gnft7o.custom-domain.com", + "generated": true + } + ] + } + ] +} +``` + +With this token you are allowed to access the whole [ZITADEL System API](../../apis/proto/system). + +## Summary + +* Create an RSA keypair +* Provide the public key with a userID to ZITADEL using the runtime configuration +* Authorize the request with a JWT signed with your private key + +Where to go from here: + +* [ZITADEL API Documentation](../../apis/introduction) diff --git a/docs/sidebars.js b/docs/sidebars.js index acbbd3516b..d9cd5522f4 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -117,6 +117,7 @@ module.exports = { items: [ "guides/integrate/identity-brokering", "guides/integrate/access-zitadel-apis", + "guides/integrate/access-zitadel-system-api", "guides/integrate/authenticated-mongodb-charts", "guides/integrate/auth0", "guides/integrate/azuread", From 075fd1dfe6629fac1c262627a5a77b89f1dc07aa Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 8 Aug 2022 15:03:28 +0200 Subject: [PATCH 086/116] fix(console): restore url after state handling, remove user metadata without user.write permission (#4136) * metadata role check * fix: restore url after handling state * hide metadata if has user not user.write * allow metadata read Co-authored-by: Livio Spring --- .../users/user-detail/metadata/metadata.component.html | 10 +++++++++- .../statehandler/statehandler-processor.service.ts | 3 +-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/console/src/app/pages/users/user-detail/metadata/metadata.component.html b/console/src/app/pages/users/user-detail/metadata/metadata.component.html index c341e2aa4a..88551c32aa 100644 --- a/console/src/app/pages/users/user-detail/metadata/metadata.component.html +++ b/console/src/app/pages/users/user-detail/metadata/metadata.component.html @@ -1,7 +1,15 @@

    + 🚨 We are on ProductHunt and HackerNews today! 🚨 +

    + +--- +

    Zitadel Logo Zitadel Logo diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css index c9d827e971..37c2b5538f 100644 --- a/docs/src/css/custom.css +++ b/docs/src/css/custom.css @@ -72,14 +72,14 @@ :root { --ifm-navbar-background-color: #ffffff; --ifm-footer-background-color: #f4f4f4; - --ifm-menu-color-background-active: #7E21CE10; - --ifm-menu-color-active: #7E21CE; + --ifm-menu-color-background-active: #7e21ce10; + --ifm-menu-color-active: #7e21ce; --ifm-menu-color-background-hover: #f7fafc; --ifm-font-color-base: #6b7280; --ifm-link-color: #5469d4; --ifm-menu-color: #697386; --ifm-footer-link-color: #000000; - --ifm-color-primary: #7E21CE; + --ifm-color-primary: #7e21ce; --ifm-color-primary-dark: #4d61cf; --ifm-color-primary-darker: #4356c9; --ifm-color-primary-darkest: #3a4cc3; /* 293bb9 */ @@ -118,10 +118,12 @@ --apiauthbackground: linear-gradient(40deg, #a9d9ca 30%, #b4d5cb); --apimgmtbackground: linear-gradient(40deg, #c6d7f3 30%, #c7c6e3); --apiadminbackground: linear-gradient(40deg, #c192c790, #c192c790); - --apisystembackground: linear-gradient(40deg, #C7A6928E, #C7A6928E); + --apisystembackground: linear-gradient(40deg, #c7a6928e, #c7a6928e); --apiassetbackground: linear-gradient(40deg, #e4eaf1, #eef2f9); --overlaycolor: #6c90b420; --ifm-hero-text-color: #ffffff; + --gigibannerbackground: white; + --gigibannerforeground: black; } .get-started { @@ -238,8 +240,8 @@ h2 { --ifm-menu-color-background-active: #ffffff10; --ifm-menu-color-active: #ffffff; --ifm-menu-color-background-hover: #3c405850; - --ifm-font-color-base: #DDDDDD; - --ifm-menu-color: #DDDDDD; + --ifm-font-color-base: #dddddd; + --ifm-menu-color: #dddddd; --ifm-link-color: #ff2069; --docsearch-searchbox-background: #454a66; --docsearch-searchbox-focus-background: #454a66; @@ -260,7 +262,7 @@ h2 { --ifm-hero-background-color: #0f1022; --ifm-hero-text-color: #ffffff; --get-started-bg: var(--ifm-font-color-base); - --get-started: #FF1F69; + --get-started: #ff1f69; --ifm-footer-color: #ffffff50; --ifm-heading-color: #ffffff; --ifm-font-color-base: #c1c9d2; @@ -282,9 +284,11 @@ h2 { --apiauthbackground: linear-gradient(40deg, #506e6e90 30%, #506e6e90); --apimgmtbackground: linear-gradient(40deg, #595d8090 30%, #595d8090); --apiadminbackground: linear-gradient(40deg, #6a506e90, #6a506e90); - --apisystembackground: linear-gradient(40deg, #6E695090, #6E695090); + --apisystembackground: linear-gradient(40deg, #6e695090, #6e695090); --apiassetbackground: linear-gradient(40deg, #3c4257, #3c4257); --overlaycolor: #ffffff15; + --gigibannerbackground: #7e21ce; + --gigibannerforeground: white; } .get-started:hover { diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index e8ea377810..4edfbd72a6 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -1,14 +1,19 @@ -import Link from '@docusaurus/Link'; -import useBaseUrl from '@docusaurus/useBaseUrl'; -import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import Layout from '@theme/Layout'; -import ThemedImage from '@theme/ThemedImage'; -import clsx from 'clsx'; -import React from 'react'; +import Link from "@docusaurus/Link"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import Layout from "@theme/Layout"; +import ThemedImage from "@theme/ThemedImage"; +import clsx from "clsx"; +import React from "react"; -import Column from '../components/column'; -import { HomeListWrapper, ICONTYPE, ListElement, ListWrapper } from '../components/list'; -import styles from './styles.module.css'; +import Column from "../components/column"; +import { + HomeListWrapper, + ICONTYPE, + ListElement, + ListWrapper, +} from "../components/list"; +import styles from "./styles.module.css"; const features = [ { @@ -248,6 +253,17 @@ function Feature({ ); } +const Gigi = () => { + return ( +

    +
    + +
    ZITADEL Cloud OUT NOW! 🚀
    +
    +
    + ); +}; + export default function Home() { const context = useDocusaurusContext(); const { siteConfig = {} } = context; @@ -272,6 +288,7 @@ export default function Home() {
    +
    {features && features.length > 0 && ( diff --git a/docs/src/pages/styles.module.css b/docs/src/pages/styles.module.css index 01d9ca3901..d3d41481e2 100644 --- a/docs/src/pages/styles.module.css +++ b/docs/src/pages/styles.module.css @@ -12,6 +12,46 @@ overflow: hidden; } +.gigiwrapper { + position: absolute; + right: 0; + top: 0; + pointer-events: none; +} + +.gigiwrapperrelative { + position: relative; + overflow: hidden; + height: 256px; + width: 256px; +} + +.gigiwrapperrelative img { + top: 50px; + position: absolute; + right: 0; +} + +.gigibanner { + position: absolute; + top: 201px; + right: -50px; + padding: 1rem 0; + background-color: var(--gigibannerbackground); + color: var(--gigibannerforeground); + transform: rotate(45deg); + transform-origin: top right; + width: 350px; + text-align: center; + font-weight: 700; +} + +@media screen and (max-width: 800px) { + .gigiwrapper { + display: none; + } +} + @media screen and (max-width: 966px) { .heroBanner { padding: 2rem; @@ -81,7 +121,6 @@ background-position: center; } - @media screen and (max-width: 600px) { .quickstartcontainer { flex-direction: column; @@ -100,4 +139,4 @@ .apilinks h2 { font-size: 1rem; -} \ No newline at end of file +} diff --git a/docs/static/img/gigi.svg b/docs/static/img/gigi.svg new file mode 100644 index 0000000000..9014d82fea --- /dev/null +++ b/docs/static/img/gigi.svg @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/img/github-header01-dark@2x.png b/docs/static/img/github-header01-dark@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3245715df5da23be5bb1b32104e1c8bd09fea5a2 GIT binary patch literal 40745 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/github-header01-light@2x.png b/docs/static/img/github-header01-light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..63ec42b8ddd7b19f43f75a4e23c9a1a3c0a00735 GIT binary patch literal 44672 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 NZ4G_(%KHzW{|9zyQZfJl literal 0 HcmV?d00001 From 4014c017fab8337dc8d4685f725f6c73584f22b2 Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Thu, 11 Aug 2022 10:06:25 +0200 Subject: [PATCH 099/116] ci: ignore some changes for tests (#4152) * ci: ignore some changes for tests * is check ok? * match all .md files * is check ok? * is check ok? * avoid skipped but required checks * document test-docs.yml workflow * cleanup check tests * trigger check * revert readme changes * respect changes in /tools/ for tests Co-authored-by: Livio Spring --- .../{zitadel-pr.yml => test-code.yml} | 4 ++++ .github/workflows/test-docs.yml | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+) rename .github/workflows/{zitadel-pr.yml => test-code.yml} (95%) create mode 100644 .github/workflows/test-docs.yml diff --git a/.github/workflows/zitadel-pr.yml b/.github/workflows/test-code.yml similarity index 95% rename from .github/workflows/zitadel-pr.yml rename to .github/workflows/test-code.yml index 53741b61e5..f0b3d36d47 100644 --- a/.github/workflows/zitadel-pr.yml +++ b/.github/workflows/test-code.yml @@ -2,6 +2,10 @@ name: ZITADEL PR on: pull_request: + paths-ignore: + - 'docs/**' + - 'guides/**' + - '**.md' jobs: Test: diff --git a/.github/workflows/test-docs.yml b/.github/workflows/test-docs.yml new file mode 100644 index 0000000000..5574b835a5 --- /dev/null +++ b/.github/workflows/test-docs.yml @@ -0,0 +1,20 @@ +# ATTENTION: Although this workflow doesn't do much, it is still important. +# It is complementary to the workflow in the file test-code.yml. +# It enables to exclude files for the workflow and still mark the Test job as required without having pending PRs. +# GitHub recommends this solution here: +# https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks + +name: ZITADEL PR + +on: + pull_request: + paths: + - 'docs/**' + - 'guides/**' + - '**.md' + +jobs: + Test: + runs-on: ubuntu-20.04 + steps: + - run: 'echo "No tests for docs are implemented, yet"' From 9bf656deec6fb5b207faa5795f78dce19fe1f4ea Mon Sep 17 00:00:00 2001 From: Christian Jakob <47860090+thesephirot@users.noreply.github.com> Date: Thu, 11 Aug 2022 11:28:01 +0200 Subject: [PATCH 100/116] chore: changed trigger to follow release (#4163) * fix: changed trigger to follow release * fix: changed variable trigger --- .github/workflows/e2e.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 9c5a655104..25d8fce9e3 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -1,8 +1,10 @@ name: "ZITADEL e2e Tests" on: - release: - types: [created] + workflow_run: + workflows: [ZITADEL Release] + types: + - completed workflow_dispatch: inputs: releaseversion: @@ -24,8 +26,8 @@ jobs: - name: Set TAG env manual trigger if: github.event_name == 'workflow_dispatch' run: echo "ZITADEL_IMAGE=${ZITADEL_IMAGE_REGISTRY}:${{ github.event.inputs.releaseversion }}" >> $GITHUB_ENV - - name: Set TAG env on release - if: github.event_name == 'release' + - name: Set TAG env on ZITADEL release + if: github.event_name == 'workflow_run' run: echo "ZITADEL_IMAGE=${ZITADEL_IMAGE_REGISTRY}:${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 From 2388764f1cfba0bd78a8dbf4ba2ffaeb3a24b7d4 Mon Sep 17 00:00:00 2001 From: Stefan Benz <46600784+stebenz@users.noreply.github.com> Date: Thu, 11 Aug 2022 11:56:59 +0200 Subject: [PATCH 101/116] fix(IDP): correct org idp response resourceowner (#4165) --- internal/api/grpc/idp/converter.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/api/grpc/idp/converter.go b/internal/api/grpc/idp/converter.go index 7624523b87..8fe219f73a 100644 --- a/internal/api/grpc/idp/converter.go +++ b/internal/api/grpc/idp/converter.go @@ -29,7 +29,7 @@ func ModelIDPViewToPb(idp *query.IDP) *idp_pb.IDP { idp.Sequence, idp.CreationDate, idp.ChangeDate, - idp.ID, + idp.ResourceOwner, ), } } From 33b8eecba4e97f5d0a8cd11d549df04d9d112796 Mon Sep 17 00:00:00 2001 From: mffap Date: Fri, 12 Aug 2022 11:02:18 +0200 Subject: [PATCH 102/116] chore(docs): update readme and docs for producthunt (#4168) * readme * wip * zitadel.com * remove pointer events none Co-authored-by: Max Peintner --- README.md | 4 ++-- docs/src/pages/index.js | 16 ++++++++++------ docs/src/pages/styles.module.css | 1 - 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 528a72fb12..3d5c88891a 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,9 @@ ZITADEL Cloud launched ZITADEL Cloud launched

    - +

    - 🚨 We are on ProductHunt and HackerNews today! 🚨 + We are live on ProductHunt.
    Thank you for the support and feedback.

    --- diff --git a/docs/src/pages/index.js b/docs/src/pages/index.js index 4edfbd72a6..c972b1c461 100644 --- a/docs/src/pages/index.js +++ b/docs/src/pages/index.js @@ -255,12 +255,14 @@ function Feature({ const Gigi = () => { return ( -
    -
    - -
    ZITADEL Cloud OUT NOW! 🚀
    + +
    +
    + +
    ZITADEL Cloud OUT NOW! 🚀
    +
    -
    + ); }; @@ -288,7 +290,9 @@ export default function Home() {
    - + + +
    {features && features.length > 0 && ( diff --git a/docs/src/pages/styles.module.css b/docs/src/pages/styles.module.css index d3d41481e2..a68aa2b610 100644 --- a/docs/src/pages/styles.module.css +++ b/docs/src/pages/styles.module.css @@ -16,7 +16,6 @@ position: absolute; right: 0; top: 0; - pointer-events: none; } .gigiwrapperrelative { From 872a4eae6686514817e9587cc458612839ad1011 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 15 Aug 2022 17:22:15 +0200 Subject: [PATCH 103/116] fix: release version for arm broken (#4187) * fix: release version for arm broken This PR fixes the problem that the arm container included the amd binary * build prerelease * remove prerelease Co-authored-by: Livio Spring --- .goreleaser.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 1f078e4bd9..fba26ac35c 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -38,6 +38,7 @@ dockers: - image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 - europe-docker.pkg.dev/zitadel-common/zitadel-repo/zitadel:{{ .Tag }}-amd64 + goarch: amd64 use: buildx dockerfile: build/Dockerfile build_flag_templates: @@ -45,6 +46,7 @@ dockers: - image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-arm64 + goarch: arm64 use: buildx dockerfile: build/Dockerfile build_flag_templates: From 0c6b47a0813465a35e10fb326118f885177df0cc Mon Sep 17 00:00:00 2001 From: Elio Bischof Date: Mon, 15 Aug 2022 17:40:43 +0200 Subject: [PATCH 104/116] docs: update rate limiting docs (#4186) * docs: update rate limiting docs * reduce regexp mental overhead --- docs/docs/apis/ratelimits/api.md | 14 -------------- docs/docs/apis/ratelimits/login.md | 10 ---------- docs/docs/apis/ratelimits/ratelimits.md | 16 ++++++++++++++++ docs/docs/legal/rate-limit-policy.md | 10 ++-------- docs/docusaurus.config.js | 4 ++-- docs/sidebars.js | 3 +-- 6 files changed, 21 insertions(+), 36 deletions(-) delete mode 100644 docs/docs/apis/ratelimits/api.md delete mode 100644 docs/docs/apis/ratelimits/login.md create mode 100644 docs/docs/apis/ratelimits/ratelimits.md diff --git a/docs/docs/apis/ratelimits/api.md b/docs/docs/apis/ratelimits/api.md deleted file mode 100644 index b5fef8da44..0000000000 --- a/docs/docs/apis/ratelimits/api.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: API Rate Limits ---- - - - -| Path | Description | Effective Limit | -|-----------------------------------------------------|--------------------------|----------------------------| -| /oauth/v2/* | Sum of all OAuth request | 500 request per 1 min | -| /oauth/v2/token | | 120 request per 1 min | -| /auth/v1/* | | none | -| /caos.zitadel.auth.api.v1.AuthService/* | | none | -| /management/v1/* | | 240 request per 1 min | -| /caos.zitadel.management.api.v1.ManagementService/* | | 240 request per 1 min | diff --git a/docs/docs/apis/ratelimits/login.md b/docs/docs/apis/ratelimits/login.md deleted file mode 100644 index fe0f4b6261..0000000000 --- a/docs/docs/apis/ratelimits/login.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Login Rate Limits ---- - - - -| Path | Description | Effective Limit | -|---------------------|----------------------------------------|---------------------------| -| /* | Global Login, Register and Reset Limit | none | -| /oauth/v2/authorize | Authorize endpoint | 20 request per 10 seconds | diff --git a/docs/docs/apis/ratelimits/ratelimits.md b/docs/docs/apis/ratelimits/ratelimits.md new file mode 100644 index 0000000000..b4af8eb0ef --- /dev/null +++ b/docs/docs/apis/ratelimits/ratelimits.md @@ -0,0 +1,16 @@ +--- +title: ZITADEL Cloud Rate Limits +--- + +| Path | Description | Throttling | One Minute Banning | +|--------------------------|----------------------------------------|--------------------------------------|----------------------------------------| +| /ui/login* | Global Login, Register and Reset Limit | 10 requests per second over a minute | 15 requests per sencond over 3 minutes | +| *Various API paths* [^1] | All other gRPC- and REST APIs
    - Management API
    - Admin API
    - Auth API
    - System API | 4 requests per second over a minute | 8 requests per second over 3 minutes | + +[^1] API paths: +
    + Open to see the reqular expression +
    +/system/v[0-9]+/.*|/auth/v[0-9]+/.|/admin/v[0-9]+/.|/management/v[0-9]+/.*|zitadel\.system\.v[0-9]+\.SystemService/.*|zitadel\.admin\.v[0-9]+\.AdminService/.*|zitadel\.auth\.v[0-9]+\.AuthService/.*|zitadel\.management\.v[0-9]+\.ManagementService/.*
    +    
    +
    diff --git a/docs/docs/legal/rate-limit-policy.md b/docs/docs/legal/rate-limit-policy.md index 094af0f306..4f4e2b4140 100644 --- a/docs/docs/legal/rate-limit-policy.md +++ b/docs/docs/legal/rate-limit-policy.md @@ -23,15 +23,9 @@ You should consider to implement [exponential backoff](https://en.wikipedia.org/ ## What rate limits do apply -### Login, Register, Reset Limits - -For the rate limits of the Login, Register and Reset features please visit [Login Rate Limits](/docs/apis/ratelimits/login) - -### API Rate Limits - -For our API rate limits please check the [API Endpoint Rate Limits](/docs/apis/ratelimits/api) +For ZITADEL Cloud, we have a rate limiting rule for login paths (login, register and reset features) and for API paths each. Learn more about [the exact rules](/docs/apis/ratelimits). ## Load Testing -If you would like to conduct load testing of ZITADEL Cloud or a managed instance, you MUST request to do so with a minimum of 2 weeks notice before the test by contacting us at support@zitadel.com. +If you would like to conduct load testing of ZITADEL Cloud or a managed instance, you MUST request to do so with a minimum of 2 weeks notice before the test by contacting us at support@zitadel.com. You MUST NOT conduct load testing without prior approval by us. Without prior approval and setup there is a high risk of being flagged by our DDoS solution as malicious traffic. This can have a severe impact on your service quality or result in termination of your agreement. diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 77322f0155..c09e8add03 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -155,7 +155,7 @@ module.exports = { } ], }, - + ], copyright: `Copyright © ${new Date().getFullYear()} ZITADEL Docs - Built with Docusaurus.`, }, @@ -166,7 +166,7 @@ module.exports = { selector: 'div#' }, prism: { - additionalLanguages: ["csharp", "dart", "groovy"], + additionalLanguages: ["csharp", "dart", "groovy", "regex"], }, }, presets: [ diff --git a/docs/sidebars.js b/docs/sidebars.js index 1a35b3b0fe..c6d99111cc 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -210,9 +210,8 @@ module.exports = { label: "Rate Limits", collapsed: false, items: [ + "apis/ratelimits/ratelimits", "legal/rate-limit-policy", - "apis/ratelimits/login", - "apis/ratelimits/api", ], }, ], From dcac08b1d5107b8ce96e8083ec99c3c3662a5764 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 16 Aug 2022 07:04:36 +0200 Subject: [PATCH 105/116] fix: caching of assets (correct headers and versioned avatar and variables.css url) (#4118) * fix: caching of assets (correct headers and versioned avatar url) * serve variables.css versioned and extend shared max age of assets * fix TestCommandSide_AddHumanAvatar * refactor: const types * refactor: return values Co-authored-by: Fabi <38692350+hifabienne@users.noreply.github.com> Co-authored-by: adlerhurst --- cmd/defaults.yaml | 11 ++- cmd/start/start.go | 5 +- internal/api/assets/asset.go | 14 ++-- .../api/http/middleware/cache_interceptor.go | 67 ++++++++++--------- internal/api/oidc/op.go | 2 +- internal/api/ui/console/console.go | 5 +- internal/api/ui/login/login.go | 35 +++++++--- internal/api/ui/login/renderer.go | 13 ++-- internal/command/user_human_avatar.go | 2 +- internal/command/user_human_avatar_test.go | 2 +- internal/static/config/config.go | 2 + internal/static/storage.go | 4 ++ 12 files changed, 96 insertions(+), 66 deletions(-) diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml index ce9fa26d97..2034957f51 100644 --- a/cmd/defaults.yaml +++ b/cmd/defaults.yaml @@ -103,6 +103,15 @@ Machine: # Url: "http://169.254.169.254/metadata/instance?api-version=2021-02-01" # JPath: "$.compute.vmId" +# Storage for assets like user avatar, organization logo, icon, font, ... +AssetStorage: + Type: db + # HTTP cache control settings for serving assets in the assets API and login UI + # the assets will also be served with an etag and last-modified header + Cache: + MaxAge: 5s + SharedMaxAge: 168h #7d + Projections: RequeueEvery: 60s RetryFailedAfter: 1s @@ -177,7 +186,7 @@ Console: SharedMaxAge: 5m LongCache: MaxAge: 12h - SharedMaxAge: 168h + SharedMaxAge: 168h #7d Notification: Repository: diff --git a/cmd/start/start.go b/cmd/start/start.go index 9d152aae8a..6df8501bd6 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -189,7 +189,8 @@ func startAPIs(ctx context.Context, router *mux.Router, commands *command.Comman } instanceInterceptor := middleware.InstanceInterceptor(queries, config.HTTP1HostHeader, login.IgnoreInstanceEndpoints...) - apis.RegisterHandler(assets.HandlerPrefix, assets.NewHandler(commands, verifier, config.InternalAuthZ, id.SonyFlakeGenerator(), store, queries, instanceInterceptor.Handler)) + assetsCache := middleware.AssetsCacheInterceptor(config.AssetStorage.Cache.MaxAge, config.AssetStorage.Cache.SharedMaxAge) + apis.RegisterHandler(assets.HandlerPrefix, assets.NewHandler(commands, verifier, config.InternalAuthZ, id.SonyFlakeGenerator(), store, queries, instanceInterceptor.Handler, assetsCache.Handler)) userAgentInterceptor, err := middleware.NewUserAgentHandler(config.UserAgentCookie, keys.UserAgentCookieKey, id.SonyFlakeGenerator(), config.ExternalSecure, login.EndpointResources) if err != nil { @@ -213,7 +214,7 @@ func startAPIs(ctx context.Context, router *mux.Router, commands *command.Comman } apis.RegisterHandler(console.HandlerPrefix, c) - l, err := login.CreateLogin(config.Login, commands, queries, authRepo, store, console.HandlerPrefix+"/", op.AuthCallbackURL(oidcProvider), config.ExternalSecure, userAgentInterceptor, op.NewIssuerInterceptor(oidcProvider.IssuerFromRequest).Handler, instanceInterceptor.Handler, keys.User, keys.IDPConfig, keys.CSRFCookieKey) + l, err := login.CreateLogin(config.Login, commands, queries, authRepo, store, console.HandlerPrefix+"/", op.AuthCallbackURL(oidcProvider), config.ExternalSecure, userAgentInterceptor, op.NewIssuerInterceptor(oidcProvider.IssuerFromRequest).Handler, instanceInterceptor.Handler, assetsCache.Handler, keys.User, keys.IDPConfig, keys.CSRFCookieKey) if err != nil { return fmt.Errorf("unable to start login: %w", err) } diff --git a/internal/api/assets/asset.go b/internal/api/assets/asset.go index 3ff3feeda7..c417230b24 100644 --- a/internal/api/assets/asset.go +++ b/internal/api/assets/asset.go @@ -76,7 +76,7 @@ func DefaultErrorHandler(w http.ResponseWriter, r *http.Request, err error, code http.Error(w, err.Error(), code) } -func NewHandler(commands *command.Commands, verifier *authz.TokenVerifier, authConfig authz.Config, idGenerator id.Generator, storage static.Storage, queries *query.Queries, instanceInterceptor func(handler http.Handler) http.Handler) http.Handler { +func NewHandler(commands *command.Commands, verifier *authz.TokenVerifier, authConfig authz.Config, idGenerator id.Generator, storage static.Storage, queries *query.Queries, instanceInterceptor, assetCacheInterceptor func(handler http.Handler) http.Handler) http.Handler { h := &Handler{ commands: commands, errorHandler: DefaultErrorHandler, @@ -88,7 +88,7 @@ func NewHandler(commands *command.Commands, verifier *authz.TokenVerifier, authC verifier.RegisterServer("Assets-API", "assets", AssetsService_AuthMethods) router := mux.NewRouter() - router.Use(instanceInterceptor) + router.Use(instanceInterceptor, assetCacheInterceptor) RegisterRoutes(router, h) router.PathPrefix("/{owner}").Methods("GET").HandlerFunc(DownloadHandleFunc(h, h.GetFile())) return http_util.CopyHeadersToContext(http_mw.CORSInterceptor(router)) @@ -190,6 +190,10 @@ func DownloadHandleFunc(s AssetsService, downloader Downloader) func(http.Respon } func GetAsset(w http.ResponseWriter, r *http.Request, resourceOwner, objectName string, storage static.Storage) error { + split := strings.Split(objectName, "?v=") + if len(split) == 2 { + objectName = split[0] + } data, getInfo, err := storage.GetObject(r.Context(), authz.GetInstance(r.Context()).InstanceID(), resourceOwner, objectName) if err != nil { return fmt.Errorf("download failed: %v", err) @@ -198,14 +202,16 @@ func GetAsset(w http.ResponseWriter, r *http.Request, resourceOwner, objectName if err != nil { return fmt.Errorf("download failed: %v", err) } - if info.Hash == r.Header.Get(http_util.IfNoneMatch) { + if info.Hash == strings.Trim(r.Header.Get(http_util.IfNoneMatch), "\"") { + w.Header().Set(http_util.LastModified, info.LastModified.Format(time.RFC1123)) + w.Header().Set(http_util.Etag, "\""+info.Hash+"\"") w.WriteHeader(304) return nil } w.Header().Set(http_util.ContentLength, strconv.FormatInt(info.Size, 10)) w.Header().Set(http_util.ContentType, info.ContentType) w.Header().Set(http_util.LastModified, info.LastModified.Format(time.RFC1123)) - w.Header().Set(http_util.Etag, info.Hash) + w.Header().Set(http_util.Etag, "\""+info.Hash+"\"") _, err = w.Write(data) logging.New().OnError(err).Error("error writing response for asset") return nil diff --git a/internal/api/http/middleware/cache_interceptor.go b/internal/api/http/middleware/cache_interceptor.go index 5a8af8b802..04dbf2b6c9 100644 --- a/internal/api/http/middleware/cache_interceptor.go +++ b/internal/api/http/middleware/cache_interceptor.go @@ -3,7 +3,6 @@ package middleware import ( "fmt" "net/http" - "regexp" "strings" "time" @@ -24,16 +23,16 @@ type Cacheability string const ( CacheabilityNotSet Cacheability = "" - CacheabilityPublic = "public" - CacheabilityPrivate = "private" + CacheabilityPublic Cacheability = "public" + CacheabilityPrivate Cacheability = "private" ) type Revalidation string const ( RevalidationNotSet Revalidation = "" - RevalidationMust = "must-revalidate" - RevalidationProxy = "proxy-revalidate" + RevalidationMust Revalidation = "must-revalidate" + RevalidationProxy Revalidation = "proxy-revalidate" ) type CacheConfig struct { @@ -54,40 +53,42 @@ var ( } ) -func DefaultCacheInterceptor(pattern string, maxAge, sharedMaxAge time.Duration) (func(http.Handler) http.Handler, error) { - regex, err := regexp.Compile(pattern) - if err != nil { - return nil, err +func NoCacheInterceptor() *cacheInterceptor { + return CacheInterceptorOpts(NeverCacheOptions) +} + +func AssetsCacheInterceptor(maxAge, sharedMaxAge time.Duration) *cacheInterceptor { + return CacheInterceptorOpts(AssetOptions(maxAge, sharedMaxAge)) +} + +func CacheInterceptorOpts(cache *Cache) *cacheInterceptor { + return &cacheInterceptor{ + cache: cache, } - return func(handler http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if regex.MatchString(r.URL.Path) { - AssetsCacheInterceptor(maxAge, sharedMaxAge, handler).ServeHTTP(w, r) - return - } - NoCacheInterceptor(handler).ServeHTTP(w, r) - }) - }, nil } -func NoCacheInterceptor(h http.Handler) http.Handler { - return CacheInterceptorOpts(h, NeverCacheOptions) +type cacheInterceptor struct { + cache *Cache } -func AssetsCacheInterceptor(maxAge, sharedMaxAge time.Duration, h http.Handler) http.Handler { - return CacheInterceptorOpts(h, AssetOptions(maxAge, sharedMaxAge)) -} - -func CacheInterceptorOpts(h http.Handler, cache *Cache) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { - cachingResponseWriter := &cachingResponseWriter{ +func (c *cacheInterceptor) Handler(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + next.ServeHTTP(&cachingResponseWriter{ ResponseWriter: w, - Cache: cache, - } - h.ServeHTTP(cachingResponseWriter, req) + Cache: c.cache, + }, r) }) } +func (c *cacheInterceptor) HandlerFunc(next http.HandlerFunc) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + next.ServeHTTP(&cachingResponseWriter{ + ResponseWriter: w, + Cache: c.cache, + }, r) + } +} + type cachingResponseWriter struct { http.ResponseWriter *Cache @@ -121,16 +122,16 @@ func (c *Cache) serializeHeaders(w http.ResponseWriter) { expires := time.Now().UTC().Add(maxAge).Format(http.TimeFormat) if c.NoCache { - control = append(control, fmt.Sprintf("no-cache")) + control = append(control, "no-cache") pragma = true } if c.NoStore { - control = append(control, fmt.Sprintf("no-store")) + control = append(control, "no-store") pragma = true } if c.NoTransform { - control = append(control, fmt.Sprintf("no-transform")) + control = append(control, "no-transform") } if c.Revalidation != RevalidationNotSet { diff --git a/internal/api/oidc/op.go b/internal/api/oidc/op.go index b2db6c5233..a3ab352a28 100644 --- a/internal/api/oidc/op.go +++ b/internal/api/oidc/op.go @@ -123,7 +123,7 @@ func createOptions(config Config, externalSecure bool, userAgentCookie, instance op.WithHttpInterceptors( middleware.MetricsHandler(metricTypes), middleware.TelemetryHandler(), - middleware.NoCacheInterceptor, + middleware.NoCacheInterceptor().Handler, instanceHandler, userAgentCookie, http_utils.CopyHeadersToContext, diff --git a/internal/api/ui/console/console.go b/internal/api/ui/console/console.go index ede686fc04..04785576fe 100644 --- a/internal/api/ui/console/console.go +++ b/internal/api/ui/console/console.go @@ -147,12 +147,11 @@ func assetsCacheInterceptorIgnoreManifest(shortMaxAge, shortSharedMaxAge, longMa return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { for _, file := range shortCacheFiles { if r.URL.Path == file || isIndexOrSubPath(r.URL.Path) { - middleware.AssetsCacheInterceptor(shortMaxAge, shortSharedMaxAge, handler).ServeHTTP(w, r) + middleware.AssetsCacheInterceptor(shortMaxAge, shortSharedMaxAge).Handler(handler).ServeHTTP(w, r) return } } - middleware.AssetsCacheInterceptor(longMaxAge, longSharedMaxAge, handler).ServeHTTP(w, r) - return + middleware.AssetsCacheInterceptor(longMaxAge, longSharedMaxAge).Handler(handler).ServeHTTP(w, r) }) } } diff --git a/internal/api/ui/login/login.go b/internal/api/ui/login/login.go index 43aa6d6f69..19964a1a39 100644 --- a/internal/api/ui/login/login.go +++ b/internal/api/ui/login/login.go @@ -5,6 +5,7 @@ import ( "fmt" "net/http" "strings" + "time" "github.com/gorilla/csrf" "github.com/gorilla/mux" @@ -44,6 +45,7 @@ type Config struct { LanguageCookieName string CSRFCookieName string Cache middleware.CacheConfig + AssetCache middleware.CacheConfig } const ( @@ -62,7 +64,8 @@ func CreateLogin(config Config, externalSecure bool, userAgentCookie, issuerInterceptor, - instanceHandler mux.MiddlewareFunc, + instanceHandler, + assetCache mux.MiddlewareFunc, userCodeAlg crypto.EncryptionAlgorithm, idpConfigAlg crypto.EncryptionAlgorithm, csrfCookieKey []byte, @@ -84,14 +87,8 @@ func CreateLogin(config Config, return nil, fmt.Errorf("unable to create filesystem: %w", err) } - csrfInterceptor, err := createCSRFInterceptor(config.CSRFCookieName, csrfCookieKey, externalSecure, login.csrfErrorHandler()) - if err != nil { - return nil, fmt.Errorf("unable to create csrfInterceptor: %w", err) - } - cacheInterceptor, err := middleware.DefaultCacheInterceptor(EndpointResources, config.Cache.MaxAge, config.Cache.SharedMaxAge) - if err != nil { - return nil, fmt.Errorf("unable to create cacheInterceptor: %w", err) - } + csrfInterceptor := createCSRFInterceptor(config.CSRFCookieName, csrfCookieKey, externalSecure, login.csrfErrorHandler()) + cacheInterceptor := createCacheInterceptor(config.Cache.MaxAge, config.Cache.SharedMaxAge, assetCache) security := middleware.SecurityHeaders(csp(), login.cspErrorHandler) login.router = CreateRouter(login, statikFS, middleware.TelemetryHandler(IgnoreInstanceEndpoints...), instanceHandler, csrfInterceptor, cacheInterceptor, security, userAgentCookie, issuerInterceptor) @@ -108,7 +105,7 @@ func csp() *middleware.CSP { return &csp } -func createCSRFInterceptor(cookieName string, csrfCookieKey []byte, externalSecure bool, errorHandler http.Handler) (func(http.Handler) http.Handler, error) { +func createCSRFInterceptor(cookieName string, csrfCookieKey []byte, externalSecure bool, errorHandler http.Handler) func(http.Handler) http.Handler { path := "/" return func(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -123,7 +120,23 @@ func createCSRFInterceptor(cookieName string, csrfCookieKey []byte, externalSecu csrf.ErrorHandler(errorHandler), )(handler).ServeHTTP(w, r) }) - }, nil + } +} + +func createCacheInterceptor(maxAge, sharedMaxAge time.Duration, assetCache mux.MiddlewareFunc) func(http.Handler) http.Handler { + return func(handler http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if strings.HasPrefix(r.URL.Path, EndpointDynamicResources) { + assetCache.Middleware(handler).ServeHTTP(w, r) + return + } + if strings.HasPrefix(r.URL.Path, EndpointResources) { + middleware.AssetsCacheInterceptor(maxAge, sharedMaxAge).Handler(handler).ServeHTTP(w, r) + return + } + middleware.NoCacheInterceptor().Handler(handler).ServeHTTP(w, r) + }) + } } func (l *Login) Handler() http.Handler { diff --git a/internal/api/ui/login/renderer.go b/internal/api/ui/login/renderer.go index 2de8692f7d..c083a4f479 100644 --- a/internal/api/ui/login/renderer.go +++ b/internal/api/ui/login/renderer.go @@ -8,6 +8,7 @@ import ( "net/http" "path" "strings" + "time" "github.com/gorilla/csrf" "github.com/zitadel/logging" @@ -84,19 +85,13 @@ func CreateRenderer(pathPrefix string, staticDir http.FileSystem, staticStorage return path.Join(r.pathPrefix, EndpointResources, "themes", theme, file) }, "hasCustomPolicy": func(policy *domain.LabelPolicy) bool { - if policy != nil { - return true - } - return false + return policy != nil }, "hasWatermark": func(policy *domain.LabelPolicy) bool { - if policy != nil && policy.DisableWatermark { - return false - } - return true + return policy == nil || !policy.DisableWatermark }, "variablesCssFileUrl": func(orgID string, policy *domain.LabelPolicy) string { - cssFile := domain.CssPath + "/" + domain.CssVariablesFileName + cssFile := domain.CssPath + "/" + domain.CssVariablesFileName + "?v=" + policy.ChangeDate.Format(time.RFC3339) return path.Join(r.pathPrefix, fmt.Sprintf("%s?%s=%s&%s=%v&%s=%s", EndpointDynamicResources, "orgId", orgID, "default-policy", policy.Default, "filename", cssFile)) }, "customLogoResource": func(orgID string, policy *domain.LabelPolicy, darkMode bool) string { diff --git a/internal/command/user_human_avatar.go b/internal/command/user_human_avatar.go index b70fabdd77..8994bda945 100644 --- a/internal/command/user_human_avatar.go +++ b/internal/command/user_human_avatar.go @@ -25,7 +25,7 @@ func (c *Commands) AddHumanAvatar(ctx context.Context, orgID, userID string, upl return nil, caos_errs.ThrowInternal(err, "USER-1Xyud", "Errors.Assets.Object.PutFailed") } userAgg := UserAggregateFromWriteModel(&existingUser.WriteModel) - pushedEvents, err := c.eventstore.Push(ctx, user.NewHumanAvatarAddedEvent(ctx, userAgg, asset.Name)) + pushedEvents, err := c.eventstore.Push(ctx, user.NewHumanAvatarAddedEvent(ctx, userAgg, asset.VersionedName())) if err != nil { return nil, err } diff --git a/internal/command/user_human_avatar_test.go b/internal/command/user_human_avatar_test.go index 4c2a62dfbf..0f6f19d327 100644 --- a/internal/command/user_human_avatar_test.go +++ b/internal/command/user_human_avatar_test.go @@ -155,7 +155,7 @@ func TestCommandSide_AddHumanAvatar(t *testing.T) { eventFromEventPusher( user.NewHumanAvatarAddedEvent(context.Background(), &user.NewAggregate("user1", "org1").Aggregate, - "avatar", + "avatar?v=test", ), ), }, diff --git a/internal/static/config/config.go b/internal/static/config/config.go index 334c3b6fbb..2ace6a731e 100644 --- a/internal/static/config/config.go +++ b/internal/static/config/config.go @@ -3,6 +3,7 @@ package config import ( "database/sql" + "github.com/zitadel/zitadel/internal/api/http/middleware" "github.com/zitadel/zitadel/internal/errors" "github.com/zitadel/zitadel/internal/static" "github.com/zitadel/zitadel/internal/static/database" @@ -11,6 +12,7 @@ import ( type AssetStorageConfig struct { Type string + Cache middleware.CacheConfig Config map[string]interface{} `mapstructure:",remain"` } diff --git a/internal/static/storage.go b/internal/static/storage.go index a8520320e8..ba42575edb 100644 --- a/internal/static/storage.go +++ b/internal/static/storage.go @@ -35,3 +35,7 @@ type Asset struct { Location string ContentType string } + +func (a *Asset) VersionedName() string { + return a.Name + "?v=" + a.Hash +} From 44fc2efbb7af315c1708f7660b232481d44fdc1c Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Tue, 16 Aug 2022 14:02:59 +0200 Subject: [PATCH 106/116] fix(console, e2e): static data-e2e attributes, consistent naming (#4188) * fix(console, e2e): static data-e2e attributes, consistent naming * quote cypress attribute selectors * Update console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.html Co-authored-by: Elio Bischof * Update console/src/app/modules/project-roles-table/project-roles-table.component.html Co-authored-by: Elio Bischof * fix , Co-authored-by: Elio Bischof --- .../action-keys/action-keys.component.html | 13 +- .../src/app/modules/card/card.component.html | 13 +- .../paginator/paginator.component.html | 2 +- .../color/color.component.html | 2 +- .../private-labeling-policy.component.html | 8 +- .../project-roles-table.component.html | 111 ++++++++---- .../settings-grid.component.html | 2 +- .../table-actions.component.html | 11 +- .../warn-dialog/warn-dialog.component.html | 4 +- .../apps/app-create/app-create.component.html | 16 +- .../app-secret-dialog.component.html | 2 +- .../redirect-uris.component.html | 2 +- .../application-grid.component.html | 4 +- .../project-role-create.component.html | 2 +- .../project-create.component.html | 2 +- .../project-grid/project-grid.component.html | 4 +- .../project-list/project-list.component.html | 167 ++++++++++++------ .../pages/projects/projects.component.html | 2 +- .../user-create-machine.component.html | 8 +- .../user-create/user-create.component.html | 2 +- .../user-table/user-table.component.html | 8 +- e2e/cypress/e2e/humans/humans.cy.ts | 75 ++++---- e2e/cypress/e2e/machines/machines.cy.ts | 69 +++++--- e2e/cypress/e2e/projects/projects.cy.ts | 77 ++++---- e2e/cypress/e2e/settings/login-policy.cy.ts | 2 +- .../e2e/settings/password-complexity.cy.ts | 2 +- .../e2e/settings/private-labeling.cy.ts | 12 +- 27 files changed, 375 insertions(+), 247 deletions(-) diff --git a/console/src/app/modules/action-keys/action-keys.component.html b/console/src/app/modules/action-keys/action-keys.component.html index 609b61c395..8d127a5314 100644 --- a/console/src/app/modules/action-keys/action-keys.component.html +++ b/console/src/app/modules/action-keys/action-keys.component.html @@ -1,12 +1,16 @@ -
    +
    ESC
    -
    +
    N @@ -38,7 +42,6 @@
    -
    +
    @@ -56,4 +59,4 @@ crtl - \ No newline at end of file + diff --git a/console/src/app/modules/card/card.component.html b/console/src/app/modules/card/card.component.html index d484d20090..3abfeb87ca 100644 --- a/console/src/app/modules/card/card.component.html +++ b/console/src/app/modules/card/card.component.html @@ -1,18 +1,17 @@ -
    -
    +
    +
    -

    {{title}}

    +

    {{ title }}

    -
    -

    {{description}}

    +

    {{ description }}

    -
    \ No newline at end of file +
    diff --git a/console/src/app/modules/paginator/paginator.component.html b/console/src/app/modules/paginator/paginator.component.html index 3206d854d3..ab29ca228e 100644 --- a/console/src/app/modules/paginator/paginator.component.html +++ b/console/src/app/modules/paginator/paginator.component.html @@ -3,7 +3,7 @@

    {{ length }} {{ 'PAGINATOR.COUNT' | translate }}

    -

    +

    {{ timestamp | timestampToDate | localizedDate: 'EEEE dd. MMM YYYY, HH:mm' }}

    diff --git a/console/src/app/modules/policies/private-labeling-policy/color/color.component.html b/console/src/app/modules/policies/private-labeling-policy/color/color.component.html index a8142eaba6..a1909de9f2 100644 --- a/console/src/app/modules/policies/private-labeling-policy/color/color.component.html +++ b/console/src/app/modules/policies/private-labeling-policy/color/color.component.html @@ -1,4 +1,4 @@ -
    +

    {{ name }}

    diff --git a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.html b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.html index 1a6fb38694..58ed3cb4dc 100644 --- a/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.html +++ b/console/src/app/modules/policies/private-labeling-policy/private-labeling-policy.component.html @@ -101,7 +101,7 @@
    - +
    @@ -127,7 +127,7 @@ {{ 'POLICY.PRIVATELABELING.EMAILNOSVG' | translate }} -
    +
    Logo
    -
    +
    Icon
    - +
    diff --git a/console/src/app/modules/project-roles-table/project-roles-table.component.html b/console/src/app/modules/project-roles-table/project-roles-table.component.html index 188bb80a1b..9f51d79f40 100644 --- a/console/src/app/modules/project-roles-table/project-roles-table.component.html +++ b/console/src/app/modules/project-roles-table/project-roles-table.component.html @@ -1,15 +1,25 @@ - - + - - add + + add {{ 'ACTIONS.NEW' | translate }} - - + @@ -17,55 +27,70 @@ - + - - + + - + - + - + @@ -73,9 +98,16 @@ - - +
    - + [indeterminate]="selection.hasValue() && !isAllSelected()" + > - + {{ 'PROJECT.ROLE.KEY' | translate }} {{ 'PROJECT.ROLE.KEY' | translate }}
    - {{ role.key }} - + {{ role.key }}
    {{ 'PROJECT.ROLE.DISPLAY_NAME' | translate }} {{role.displayName}} {{ 'PROJECT.ROLE.DISPLAY_NAME' | translate }}{{ role.displayName }} {{ 'PROJECT.ROLE.GROUP' | translate }} {{ 'PROJECT.ROLE.GROUP' | translate }} - {{role.group}} + [matTooltip]="selectionAllowed ? ('PROJECT.ROLE.SELECTGROUPTOOLTIP' | translate: role) : null" + >{{ role.group }} {{ 'PROJECT.ROLE.CREATIONDATE' | translate }} {{ 'PROJECT.ROLE.CREATIONDATE' | translate }} - {{role.details.creationDate | timestampToDate | - localizedDate: 'dd. MMM, HH:mm' }} + {{ + role.details.creationDate | timestampToDate | localizedDate: 'dd. MMM, HH:mm' + }} {{ 'PROJECT.ROLE.CHANGEDATE' | translate }} {{ 'PROJECT.ROLE.CHANGEDATE' | translate }} - {{role.details.changeDate | timestampToDate | - localizedDate: 'dd. MMM, HH:mm' }} + {{ + role.details.changeDate | timestampToDate | localizedDate: 'dd. MMM, HH:mm' + }} - @@ -83,17 +115,22 @@
    - {{'PROJECT.ROLE.EMPTY' | translate}} + {{ 'PROJECT.ROLE.EMPTY' | translate }}
    - + - \ No newline at end of file + diff --git a/console/src/app/modules/settings-grid/settings-grid.component.html b/console/src/app/modules/settings-grid/settings-grid.component.html index a75db95114..eba9de4796 100644 --- a/console/src/app/modules/settings-grid/settings-grid.component.html +++ b/console/src/app/modules/settings-grid/settings-grid.component.html @@ -14,7 +14,7 @@ : [] " > -
    +
    diff --git a/console/src/app/modules/table-actions/table-actions.component.html b/console/src/app/modules/table-actions/table-actions.component.html index fe4eabe7c1..5032f4dace 100644 --- a/console/src/app/modules/table-actions/table-actions.component.html +++ b/console/src/app/modules/table-actions/table-actions.component.html @@ -2,9 +2,14 @@
    - @@ -12,4 +17,4 @@
    -
    \ No newline at end of file +
    diff --git a/console/src/app/modules/warn-dialog/warn-dialog.component.html b/console/src/app/modules/warn-dialog/warn-dialog.component.html index 98f8da4853..b70d8620b2 100644 --- a/console/src/app/modules/warn-dialog/warn-dialog.component.html +++ b/console/src/app/modules/warn-dialog/warn-dialog.component.html @@ -10,7 +10,7 @@ }} {{ data.confirmationKey | translate: { value: data.confirmation } }} - +
    @@ -24,7 +24,7 @@ mat-raised-button class="ok-button" (click)="closeDialogWithSuccess()" - [attr.e2e-data]="'confirm-dialog-button'" + data-e2e="confirm-dialog-button" > {{ data.confirmKey | translate }} diff --git a/console/src/app/pages/projects/apps/app-create/app-create.component.html b/console/src/app/pages/projects/apps/app-create/app-create.component.html index 7835c60031..82bd772227 100644 --- a/console/src/app/pages/projects/apps/app-create/app-create.component.html +++ b/console/src/app/pages/projects/apps/app-create/app-create.component.html @@ -40,7 +40,7 @@ [disabled]="firstFormGroup.invalid" color="primary" matStepperNext - [attr.data-e2e]="'continue-button-nameandtype'" + data-e2e="continue-button-nameandtype" > {{ 'ACTIONS.CONTINUE' | translate }} @@ -72,7 +72,7 @@ color="primary" [disabled]="secondFormGroup.invalid" matStepperNext - [attr.data-e2e]="'continue-button-authmethod'" + data-e2e="continue-button-authmethod" > {{ 'ACTIONS.CONTINUE' | translate }} @@ -130,7 +130,7 @@
    -
    @@ -234,13 +234,7 @@
    -
    @@ -248,7 +242,7 @@
    -
    +
    {{ 'APP.NAME' | translate }} diff --git a/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html b/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html index 2fca079282..396818a197 100644 --- a/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html +++ b/console/src/app/pages/projects/apps/app-secret-dialog/app-secret-dialog.component.html @@ -46,7 +46,7 @@ mat-raised-button class="ok-button" (click)="closeDialog()" - [attr.data-e2e]="'close-dialog'" + data-e2e="close-dialog" > {{ 'ACTIONS.CLOSE' | translate }} diff --git a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.html b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.html index 4ff326a471..6a0efe8a30 100644 --- a/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.html +++ b/console/src/app/pages/projects/apps/redirect-uris/redirect-uris.component.html @@ -1,4 +1,4 @@ - + {{ title }} diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.html b/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.html index f297673cd4..f5d043c4d4 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.html +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/application-grid/application-grid.component.html @@ -12,7 +12,7 @@
    diff --git a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html index 851741cd76..8e68738c85 100644 --- a/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html +++ b/console/src/app/pages/projects/owned-projects/project-role-create/project-role-create.component.html @@ -46,7 +46,7 @@ class="continue-button" [disabled]="formArray.invalid" type="submit" - [attr.data-e2e]="'save-button'" + data-e2e="save-button" > {{ 'ACTIONS.SAVE' | translate }} diff --git a/console/src/app/pages/projects/project-create/project-create.component.html b/console/src/app/pages/projects/project-create/project-create.component.html index 16c4311fa8..2dd98dec0e 100644 --- a/console/src/app/pages/projects/project-create/project-create.component.html +++ b/console/src/app/pages/projects/project-create/project-create.component.html @@ -20,7 +20,7 @@ [disabled]="!project.name" cdkFocusInitial type="submit" - [attr.data-e2e]="'continue-button'" + data-e2e="continue-button" > {{ 'ACTIONS.CONTINUE' | translate }} diff --git a/console/src/app/pages/projects/project-grid/project-grid.component.html b/console/src/app/pages/projects/project-grid/project-grid.component.html index 59edac1a4d..df618192ed 100644 --- a/console/src/app/pages/projects/project-grid/project-grid.component.html +++ b/console/src/app/pages/projects/project-grid/project-grid.component.html @@ -47,7 +47,7 @@ *ngFor="let item of notPinned; index as i" (click)="navigateToProject(type, $any(item), $event)" [ngClass]="{ inactive: item.state !== ProjectState.PROJECT_STATE_ACTIVE }" - [attr.data-e2e]="'grid-card'" + data-e2e="grid-card" >
    diff --git a/console/src/app/pages/projects/project-list/project-list.component.html b/console/src/app/pages/projects/project-list/project-list.component.html index 409603b3bd..695868c881 100644 --- a/console/src/app/pages/projects/project-list/project-list.component.html +++ b/console/src/app/pages/projects/project-list/project-list.component.html @@ -1,81 +1,136 @@
    - - - + + - + add {{ 'ACTIONS.NEW' | translate }} - - +
    - - + - + + {{ project.projectOwnerName }} + - - + - - - + - - - + @@ -83,9 +138,15 @@ - +
    - + [indeterminate]="selection.hasValue() && !isAllSelected()" + > - + {{ 'PROJECT.NAME' | translate }} - {{project.name}} - {{project.projectName}} + {{ 'PROJECT.NAME' | translate }} + {{ project.name }} + {{ project.projectName }} {{ 'PROJECT.TABLE.RESOURCEOWNER' | translate }} {{ 'PROJECT.TABLE.RESOURCEOWNER' | translate }} - {{project.projectOwnerName}} {{ 'PROJECT.TABLE.STATE' | translate }} - {{'PROJECT.STATE.'+project.state | translate}} + {{ 'PROJECT.TABLE.STATE' | translate }} + {{ 'PROJECT.STATE.' + project.state | translate }} {{ 'PROJECT.TABLE.CREATIONDATE' | translate }} - {{project.details.creationDate | timestampToDate | - localizedDate: 'EEE dd. MMM, HH:mm'}} + {{ 'PROJECT.TABLE.CREATIONDATE' | translate }} + {{ + project.details.creationDate | timestampToDate | localizedDate: 'EEE dd. MMM, HH:mm' + }} {{ 'PROJECT.TABLE.CHANGEDATE' | translate }} - {{project.details.changeDate | timestampToDate | - localizedDate: 'EEE dd. MMM, HH:mm'}} + {{ 'PROJECT.TABLE.CHANGEDATE' | translate }} + {{ + project.details.changeDate | timestampToDate | localizedDate: 'EEE dd. MMM, HH:mm' + }} - @@ -93,15 +154,21 @@
    - {{'PROJECT.TABLE.EMPTY' | translate}} + {{ 'PROJECT.TABLE.EMPTY' | translate }}
    - +
    -
    \ No newline at end of file +
    diff --git a/console/src/app/pages/projects/projects.component.html b/console/src/app/pages/projects/projects.component.html index 9d62108cb3..af78f0cc0c 100644 --- a/console/src/app/pages/projects/projects.component.html +++ b/console/src/app/pages/projects/projects.component.html @@ -25,7 +25,7 @@
    - diff --git a/console/src/app/pages/users/user-create-machine/user-create-machine.component.html b/console/src/app/pages/users/user-create-machine/user-create-machine.component.html index 46a29181fd..d2ae668c77 100644 --- a/console/src/app/pages/users/user-create-machine/user-create-machine.component.html +++ b/console/src/app/pages/users/user-create-machine/user-create-machine.component.html @@ -32,13 +32,7 @@
    -
    diff --git a/console/src/app/pages/users/user-create/user-create.component.html b/console/src/app/pages/users/user-create/user-create.component.html index 7887ef49b3..fbb5245572 100644 --- a/console/src/app/pages/users/user-create/user-create.component.html +++ b/console/src/app/pages/users/user-create/user-create.component.html @@ -149,7 +149,7 @@
    @@ -58,7 +58,7 @@ mat-raised-button [disabled]="!canWrite" class="cnsl-action-button" - [attr.data-e2e]="'create-user-button'" + data-e2e="create-user-button" > add {{ 'ACTIONS.NEW' | translate }} @@ -197,7 +197,7 @@ color="warn" (click)="deleteUser(user)" [disabled]="!canWrite || !canDelete" - [attr.e2e-data]="!canWrite || !canDelete ? 'disabled-delete-button' : 'enabled-delete-button'" + [attr.data-e2e]="!canWrite || !canDelete ? 'disabled-delete-button' : 'enabled-delete-button'" mat-icon-button > diff --git a/e2e/cypress/e2e/humans/humans.cy.ts b/e2e/cypress/e2e/humans/humans.cy.ts index f7fdd14f2a..47fa33b879 100644 --- a/e2e/cypress/e2e/humans/humans.cy.ts +++ b/e2e/cypress/e2e/humans/humans.cy.ts @@ -1,57 +1,68 @@ -import { apiAuth } from '../../support/api/apiauth'; -import { ensureHumanUserExists, ensureUserDoesntExist } from '../../support/api/users'; -import { loginname } from '../../support/login/users'; +import { apiAuth } from "../../support/api/apiauth"; +import { + ensureHumanUserExists, + ensureUserDoesntExist, +} from "../../support/api/users"; +import { loginname } from "../../support/login/users"; -describe.skip('humans', () => { +describe.skip("humans", () => { const humansPath = `/ui/console/users?type=human`; - const testHumanUserNameAdd = 'e2ehumanusernameadd'; - const testHumanUserNameRemove = 'e2ehumanusernameremove'; + const testHumanUserNameAdd = "e2ehumanusernameadd"; + const testHumanUserNameRemove = "e2ehumanusernameremove"; - describe('add', () => { + describe("add", () => { before(`ensure it doesn't exist already`, () => { apiAuth().then((apiCallProperties) => { - ensureUserDoesntExist(apiCallProperties, testHumanUserNameAdd).then(()=>{ - cy.visit(humansPath); - }); + ensureUserDoesntExist(apiCallProperties, testHumanUserNameAdd).then( + () => { + cy.visit(humansPath); + } + ); }); }); - it('should add a user', () => { - cy.get('[data-e2e="action-key-add"]').parents('[data-e2e="create-user-button"]').click(); - cy.url().should('contain', 'users/create'); - cy.get('[formcontrolname="email"]').type(loginname('e2ehuman')); + it("should add a user", () => { + cy.get('[data-e2e="action-key-add"]') + .parents('[data-e2e="create-user-button"]') + .click(); + cy.url().should("contain", "users/create"); + cy.get('[formcontrolname="email"]').type(loginname("e2ehuman")); //force needed due to the prefilled username prefix - cy.get('[formcontrolname="userName"]').type(testHumanUserNameAdd, { force: true }); - cy.get('[formcontrolname="firstName"]').type('e2ehumanfirstname'); - cy.get('[formcontrolname="lastName"]').type('e2ehumanlastname'); - cy.get('[formcontrolname="phone"]').type('+41 123456789'); + cy.get('[formcontrolname="userName"]').type(testHumanUserNameAdd, { + force: true, + }); + cy.get('[formcontrolname="firstName"]').type("e2ehumanfirstname"); + cy.get('[formcontrolname="lastName"]').type("e2ehumanlastname"); + cy.get('[formcontrolname="phone"]').type("+41 123456789"); cy.get('[data-e2e="create-button"]').click(); - cy.get('.data-e2e-success'); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); - describe('remove', () => { - before('ensure it exists', () => { + describe("remove", () => { + before("ensure it exists", () => { apiAuth().then((api) => { - ensureHumanUserExists(api, testHumanUserNameRemove).then(()=>{ + ensureHumanUserExists(api, testHumanUserNameRemove).then(() => { cy.visit(humansPath); }); }); }); - it('should delete a human user', () => { - cy.contains('tr', testHumanUserNameRemove) + it("should delete a human user", () => { + cy.contains("tr", testHumanUserNameRemove) // doesn't work, need to force click. // .trigger('mouseover') - .find('[e2e-data="enabled-delete-button"]') - .click({force: true}); - cy.get('[e2e-data="confirm-dialog-input"]').click().type(loginname(testHumanUserNameRemove, Cypress.env('org'))); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); + .find('[data-e2e="enabled-delete-button"]') + .click({ force: true }); + cy.get('[data-e2e="confirm-dialog-input"]') + .click() + .type(loginname(testHumanUserNameRemove, Cypress.env("org"))); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); -}); \ No newline at end of file +}); diff --git a/e2e/cypress/e2e/machines/machines.cy.ts b/e2e/cypress/e2e/machines/machines.cy.ts index 6bccb64e70..632bcf7cb2 100644 --- a/e2e/cypress/e2e/machines/machines.cy.ts +++ b/e2e/cypress/e2e/machines/machines.cy.ts @@ -1,55 +1,66 @@ -import { apiAuth } from '../../support/api/apiauth'; -import { ensureMachineUserExists, ensureUserDoesntExist } from '../../support/api/users'; -import { loginname } from '../../support/login/users'; +import { apiAuth } from "../../support/api/apiauth"; +import { + ensureMachineUserExists, + ensureUserDoesntExist, +} from "../../support/api/users"; +import { loginname } from "../../support/login/users"; -describe.skip('machines', () => { +describe.skip("machines", () => { const machinesPath = `/ui/console/users?type=machine`; - const testMachineUserNameAdd = 'e2emachineusernameadd'; - const testMachineUserNameRemove = 'e2emachineusernameremove'; + const testMachineUserNameAdd = "e2emachineusernameadd"; + const testMachineUserNameRemove = "e2emachineusernameremove"; - describe('add', () => { + describe("add", () => { before(`ensure it doesn't exist already`, () => { apiAuth().then((apiCallProperties) => { - ensureUserDoesntExist(apiCallProperties, testMachineUserNameAdd).then(()=>{ - cy.visit(machinesPath); - }); + ensureUserDoesntExist(apiCallProperties, testMachineUserNameAdd).then( + () => { + cy.visit(machinesPath); + } + ); }); }); - it('should add a machine', () => { - cy.get('[data-e2e="action-key-add"]').parents('[data-e2e="create-user-button"]').click(); - cy.url().should('contain', 'users/create-machine'); + it("should add a machine", () => { + cy.get('[data-e2e="action-key-add"]') + .parents('[data-e2e="create-user-button"]') + .click(); + cy.url().should("contain", "users/create-machine"); //force needed due to the prefilled username prefix - cy.get('[formcontrolname="userName"]').type(testMachineUserNameAdd, { force: true }); - cy.get('[formcontrolname="name"]').type('e2emachinename'); - cy.get('[formcontrolname="description"]').type('e2emachinedescription'); + cy.get('[formcontrolname="userName"]').type(testMachineUserNameAdd, { + force: true, + }); + cy.get('[formcontrolname="name"]').type("e2emachinename"); + cy.get('[formcontrolname="description"]').type("e2emachinedescription"); cy.get('[data-e2e="create-button"]').click(); - cy.get('.data-e2e-success'); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); - describe('remove', () => { - before('ensure it exists', () => { + describe("remove", () => { + before("ensure it exists", () => { apiAuth().then((api) => { - ensureMachineUserExists(api, testMachineUserNameRemove).then(()=>{ + ensureMachineUserExists(api, testMachineUserNameRemove).then(() => { cy.visit(machinesPath); }); }); }); - it('should delete a machine', () => { - cy.contains('tr', testMachineUserNameRemove, { timeout: 1000 }) + it("should delete a machine", () => { + cy.contains("tr", testMachineUserNameRemove, { timeout: 1000 }) // doesn't work, need to force click. // .trigger('mouseover') - .find('[e2e-data="enabled-delete-button"]') - .click({force: true}); - cy.get('[e2e-data="confirm-dialog-input"]').click().type(loginname(testMachineUserNameRemove, Cypress.env('org'))); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); + .find('[data-e2e="enabled-delete-button"]') + .click({ force: true }); + cy.get('[data-e2e="confirm-dialog-input"]') + .click() + .type(loginname(testMachineUserNameRemove, Cypress.env("org"))); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); }); diff --git a/e2e/cypress/e2e/projects/projects.cy.ts b/e2e/cypress/e2e/projects/projects.cy.ts index c21f4b1b84..e9806badac 100644 --- a/e2e/cypress/e2e/projects/projects.cy.ts +++ b/e2e/cypress/e2e/projects/projects.cy.ts @@ -1,12 +1,15 @@ -import { apiAuth } from '../../support/api/apiauth'; -import { ensureProjectDoesntExist, ensureProjectExists } from '../../support/api/projects'; +import { apiAuth } from "../../support/api/apiauth"; +import { + ensureProjectDoesntExist, + ensureProjectExists, +} from "../../support/api/projects"; -describe('projects', () => { - const testProjectNameCreate = 'e2eprojectcreate'; - const testProjectNameDeleteList = 'e2eprojectdeletelist'; - const testProjectNameDeleteGrid = 'e2eprojectdeletegrid'; +describe("projects", () => { + const testProjectNameCreate = "e2eprojectcreate"; + const testProjectNameDeleteList = "e2eprojectdeletelist"; + const testProjectNameDeleteGrid = "e2eprojectdeletegrid"; - describe('add project', () => { + describe("add project", () => { beforeEach(`ensure it doesn't exist already`, () => { apiAuth().then((api) => { ensureProjectDoesntExist(api, testProjectNameCreate); @@ -14,57 +17,61 @@ describe('projects', () => { cy.visit(`/ui/console/projects`); }); - it('should add a project', () => { - cy.get('.add-project-button').click({ force: true }); - cy.get('input').type(testProjectNameCreate); + it("should add a project", () => { + cy.get(".add-project-button").click({ force: true }); + cy.get("input").type(testProjectNameCreate); cy.get('[data-e2e="continue-button"]').click(); - cy.get('.data-e2e-success'); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); - describe.skip('remove project', () => { - describe('list view', () => { - beforeEach('ensure it exists', () => { + describe.skip("remove project", () => { + describe("list view", () => { + beforeEach("ensure it exists", () => { apiAuth().then((api) => { ensureProjectExists(api, testProjectNameDeleteList); }); cy.visit(`/ui/console/projects`); }); - it('removes the project', () => { - cy.get('[data-e2e=toggle-grid]').click(); - cy.get('[data-e2e=timestamp]'); - cy.contains('tr', testProjectNameDeleteList, { timeout: 1000 }) - .find('[data-e2e=delete-project-button]') - .click({force: true}); - cy.get('[e2e-data="confirm-dialog-input"]').type(testProjectNameDeleteList); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); + it("removes the project", () => { + cy.get('[data-e2e="toggle-grid"]').click(); + cy.get('[data-e2e="timestamp"]'); + cy.contains("tr", testProjectNameDeleteList, { timeout: 1000 }) + .find('[data-e2e="delete-project-button"]') + .click({ force: true }); + cy.get('[data-e2e="confirm-dialog-input"]').type( + testProjectNameDeleteList + ); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); - describe('grid view', () => { - beforeEach('ensure it exists', () => { + describe("grid view", () => { + beforeEach("ensure it exists", () => { apiAuth().then((api) => { ensureProjectExists(api, testProjectNameDeleteGrid); }); cy.visit(`/ui/console/projects`); }); - it('removes the project', () => { - cy.contains('[data-e2e=grid-card]', testProjectNameDeleteGrid) - .find('[data-e2e=delete-project-button]') - .trigger('mouseover') + it("removes the project", () => { + cy.contains('[data-e2e="grid-card"]', testProjectNameDeleteGrid) + .find('[data-e2e="delete-project-button"]') + .trigger("mouseover") .click(); - cy.get('[e2e-data="confirm-dialog-input"]').type(testProjectNameDeleteGrid); - cy.get('[e2e-data="confirm-dialog-button"]').click(); - cy.get('.data-e2e-success'); + cy.get('[data-e2e="confirm-dialog-input"]').type( + testProjectNameDeleteGrid + ); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.get(".data-e2e-success"); cy.wait(200); - cy.get('.data-e2e-failure', { timeout: 0 }).should('not.exist'); + cy.get(".data-e2e-failure", { timeout: 0 }).should("not.exist"); }); }); }); diff --git a/e2e/cypress/e2e/settings/login-policy.cy.ts b/e2e/cypress/e2e/settings/login-policy.cy.ts index 327476d715..b04a8c06b8 100644 --- a/e2e/cypress/e2e/settings/login-policy.cy.ts +++ b/e2e/cypress/e2e/settings/login-policy.cy.ts @@ -14,7 +14,7 @@ describe("login policy", ()=> { login(user) cy.visit(orgPath) // TODO: Why force? - cy.contains('[data-e2e=policy-card]', 'Login Policy').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e + cy.contains('[data-e2e="policy-card"]', 'Login Policy').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e apiAuth().then(api => { ensureHumanUserExists(api, User.LoginPolicyUser) }) diff --git a/e2e/cypress/e2e/settings/password-complexity.cy.ts b/e2e/cypress/e2e/settings/password-complexity.cy.ts index 48e95ec87c..5518aa7d5a 100644 --- a/e2e/cypress/e2e/settings/password-complexity.cy.ts +++ b/e2e/cypress/e2e/settings/password-complexity.cy.ts @@ -13,7 +13,7 @@ describe("password complexity", ()=> { login(user) cy.visit(orgPath) // TODO: Why force? - cy.contains('[data-e2e=policy-card]', 'Password Complexity').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e + cy.contains('[data-e2e="policy-card"]', 'Password Complexity').contains('button', 'Modify').click({force: true}) // TODO: select data-e2e }) // TODO: fix saving password complexity policy bug diff --git a/e2e/cypress/e2e/settings/private-labeling.cy.ts b/e2e/cypress/e2e/settings/private-labeling.cy.ts index 4fdcd922fa..8094e39e10 100644 --- a/e2e/cypress/e2e/settings/private-labeling.cy.ts +++ b/e2e/cypress/e2e/settings/private-labeling.cy.ts @@ -13,7 +13,7 @@ describe('private labeling', () => { login(user); cy.visit(orgPath); // TODO: Why force? - cy.contains('[data-e2e=policy-card]', 'Private Labeling').contains('button', 'Modify').click({ force: true }); // TODO: select data-e2e + cy.contains('[data-e2e="policy-card"]', 'Private Labeling').contains('button', 'Modify').click({ force: true }); // TODO: select data-e2e }); customize('white', user); @@ -32,12 +32,12 @@ function customize(theme: string, user: User) { describe.skip('logo', () => { beforeEach('expand logo category', () => { - cy.contains('[data-e2e=policy-category]', 'Logo').click(); // TODO: select data-e2e + cy.contains('[data-e2e="policy-category"]', 'Logo').click(); // TODO: select data-e2e cy.fixture('logo.png').as('logo'); }); it('should update a logo', () => { - cy.get('[data-e2e=image-part-logo]') + cy.get('[data-e2e="image-part-logo"]') .find('input') .then(function (el) { const blob = Cypress.Blob.base64StringToBlob(this.logo, 'image/png'); @@ -56,10 +56,10 @@ function customize(theme: string, user: User) { it('should update an icon'); it('should delete an icon'); it.skip('should update the background color', () => { - cy.contains('[data-e2e=color]', 'Background Color').find('button').click(); // TODO: select data-e2e + cy.contains('[data-e2e="color"]', 'Background Color').find('button').click(); // TODO: select data-e2e cy.get('color-editable-input').find('input').clear().type('#ae44dc'); - cy.get('[data-e2e=save-colors-button]').click(); - cy.get('[data-e2e=header-user-avatar]').click(); + cy.get('[data-e2e="save-colors-button"]').click(); + cy.get('[data-e2e="header-user-avatar"]').click(); cy.contains('Logout All Users').click(); // TODO: select data-e2e login(User.LoginPolicyUser, undefined, true, null, () => { cy.pause(); From 9c37f39d43bbb6c8c9ca01c79409f59b43335259 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 16 Aug 2022 14:49:37 +0200 Subject: [PATCH 107/116] docs: better distinct JWT Profile grant and assertion (#4201) docs: update JWT Profile grant --- docs/docs/apis/openidoauth/authn-methods.md | 16 +++++----- docs/docs/apis/openidoauth/endpoints.md | 30 +++++++++---------- .../guides/integrate/access-zitadel-apis.md | 2 +- docs/docs/guides/integrate/serviceusers.md | 2 +- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/docs/apis/openidoauth/authn-methods.md b/docs/docs/apis/openidoauth/authn-methods.md index 7defdfba75..fdcd0ce71e 100644 --- a/docs/docs/apis/openidoauth/authn-methods.md +++ b/docs/docs/apis/openidoauth/authn-methods.md @@ -15,7 +15,7 @@ Given the client_id `78366401571920522@amce` and client_secret `veryweaksecret!` ## JWT with Private Key -When using `private_key_jwt` for token or introspection endpoints, provide a JWT as assertion generated with the following structure and signed with a downloaded key: +When using `private_key_jwt` (`urn:ietf:params:oauth:client-assertion-type:jwt-bearer`) for token or introspection endpoints, provide a JWT as assertion generated with the following structure and signed with a downloaded key: --- @@ -43,13 +43,13 @@ Key JSON JWT -| Claim | Example | Description | -|:------|:------------------------------|:----------------------------------------------------------------------------------------------------------------| -| aud | `"{your_domain}"` | String or Array of intended audiences MUST include ZITADEL's issuing domain | -| exp | `1605183582` | Unix timestamp of the expiry | -| iat | `1605179982` | Unix timestamp of the creation singing time of the JWT, MUST NOT be older than 1h | -| iss | `"78366401571920522@acme"` | String which represents the requesting party (owner of the key), normally the `clientID` from the json key file | -| sub | `"78366401571920522@acme"` | The subject ID of the application, normally the `clientID` from the json key file | +| Claim | Example | Description | +|:------|:---------------------------|:----------------------------------------------------------------------------------------------------------------| +| aud | `"{your_domain}"` | String or Array of intended audiences MUST include ZITADEL's issuing domain | +| exp | `1605183582` | Unix timestamp of the expiry | +| iat | `1605179982` | Unix timestamp of the creation singing time of the JWT, MUST NOT be older than 1h | +| iss | `"78366401571920522@acme"` | String which represents the requesting party (owner of the key), normally the `clientID` from the json key file | +| sub | `"78366401571920522@acme"` | The subject ID of the application, normally the `clientID` from the json key file | ```JSON { diff --git a/docs/docs/apis/openidoauth/endpoints.md b/docs/docs/apis/openidoauth/endpoints.md index 11fb875df4..d23aa46c15 100644 --- a/docs/docs/apis/openidoauth/endpoints.md +++ b/docs/docs/apis/openidoauth/endpoints.md @@ -86,7 +86,7 @@ no additional parameters required | Parameter | Description | | ------------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | id_token_hint | Valid `id_token` (of an existing session) used to identity the subject. **SHOULD** be provided when using prompt `none`. | -| login_hint | A valid logon name of a user. Will be used for username inputs or preselecting a user on `select_account`. Be sure to encode the hint correctly using url encoding (especially when using `+` or alike in the loginname) | +| login_hint | A valid logon name of a user. Will be used for username inputs or preselecting a user on `select_account`. Be sure to encode the hint correctly using url encoding (especially when using `+` or alike in the loginname) | | max_age | Seconds since the last active successful authentication of the user | | nonce | Random string value to associate the client session with the ID Token and for replay attacks mitigation. **MUST** be provided when using **implicit flow**. | | prompt | If the Auth Server prompts the user for (re)authentication.
    no prompt: the user will have to choose a session if more than one session exists
    `none`: user must be authenticated without interaction, an error is returned otherwise
    `login`: user must reauthenticate / provide a user name
    `select_account`: user is prompted to select one of the existing sessions or create a new one
    `create`: the registration form will be displayed to the user directly | @@ -200,10 +200,10 @@ Send your `code_verifier` for us to recompute the `code_challenge` of the author Send a client assertion as JWT for us to validate the signature against the registered public key. -| Parameter | Description | -| --------------------- | --------------------------------------------------------------------------------------------------------------- | +| Parameter | Description | +| --------------------- |--------------------------------------------------------------------------------------------------------------| | client_assertion | JWT built and signed according to [Using JWTs for Client Authentication](authn-methods#jwt-with-private-key) | -| client_assertion_type | Must be `urn:ietf:params:oauth:client-assertion-type:jwt-bearer` | +| client_assertion_type | Must be `urn:ietf:params:oauth:client-assertion-type:jwt-bearer` | @@ -223,11 +223,11 @@ Send a client assertion as JWT for us to validate the signature against the regi #### Required request Parameters -| Parameter | Description | -| ---------- | ----------------------------------------------------------------------------------------------------------------------------- | -| grant_type | Must be `urn:ietf:params:oauth:grant-type:jwt-bearer` | -| assertion | JWT built and signed according to [Using JWTs for Authorization Grants](grant-types#using-jwts-as-authorization-grants) | -| scope | [Scopes](scopes) you would like to request from ZITADEL. Scopes are space delimited, e.g. `openid email profile` | +| Parameter | Description | +| ---------- |-------------------------------------------------------------------------------------------------------------------------| +| grant_type | Must be `urn:ietf:params:oauth:grant-type:jwt-bearer` | +| assertion | JWT built and signed according to [Using JWTs for Authorization Grants](grant-types#using-jwts-as-authorization-grants) | +| scope | [Scopes](scopes) you would like to request from ZITADEL. Scopes are space delimited, e.g. `openid email profile` | ```BASH curl --request POST \ @@ -296,10 +296,10 @@ Send your `client_id` as parameter in the body. No authentication is required. Send a `client_assertion` as JWT for us to validate the signature against the registered public key. -| Parameter | Description | -| --------------------- | --------------------------------------------------------------------------------------------------------------- | +| Parameter | Description | +| --------------------- |--------------------------------------------------------------------------------------------------------------| | client_assertion | JWT built and signed according to [Using JWTs for Client Authentication](authn-methods#jwt-with-private-key) | -| client_assertion_type | Must be `urn:ietf:params:oauth:client-assertion-type:jwt-bearer` | +| client_assertion_type | Must be `urn:ietf:params:oauth:client-assertion-type:jwt-bearer` | @@ -480,10 +480,10 @@ Send your `client_id` as parameters in the body: Send a `client_assertion` as JWT for ZITADEL to verify the signature against the registered public key. -| Parameter | Description | -| --------------------- | ----------------------------------------------------------------------------------------------------------- | +| Parameter | Description | +| --------------------- |---------------------------------------------------------------------------------------------------------------| | client_assertion | JWT created and signed according to [Using JWTs for Client Authentication](authn-methods#client-secret-basic) | -| client_assertion_type | must be `urn:ietf:params:oauth:client-assertion-type:jwt-bearer` | +| client_assertion_type | must be `urn:ietf:params:oauth:client-assertion-type:jwt-bearer` | ```BASH curl --request POST \ diff --git a/docs/docs/guides/integrate/access-zitadel-apis.md b/docs/docs/guides/integrate/access-zitadel-apis.md index 7689efd55b..8ce854806b 100644 --- a/docs/docs/guides/integrate/access-zitadel-apis.md +++ b/docs/docs/guides/integrate/access-zitadel-apis.md @@ -31,7 +31,7 @@ Make sure you have a Service User with a Key. (For more detailed informations ab ## Authenticating a service user -In ZITADEL we use the `private_jwt` (**“JWT bearer token with private key”**, [RFC7523](https://tools.ietf.org/html/rfc7523)) authorization grant for this non-interactive authentication. +In ZITADEL we use the `urn:ietf:params:oauth:grant-type:jwt-bearer` (**“JWT bearer token with private key”**, [RFC7523](https://tools.ietf.org/html/rfc7523)) authorization grant for this non-interactive authentication. This is already described in the [Service User](serviceusers.md), so make sure you follow this guide. ### Request an OAuth token, with audience for ZITADEL diff --git a/docs/docs/guides/integrate/serviceusers.md b/docs/docs/guides/integrate/serviceusers.md index c0a28408b5..e778d859bf 100644 --- a/docs/docs/guides/integrate/serviceusers.md +++ b/docs/docs/guides/integrate/serviceusers.md @@ -16,7 +16,7 @@ import UserDescription from '../../concepts/structure/_user_description.mdx'; ## Authenticating a service user -In ZITADEL we use the `private_jwt` (**“JWT bearer token with private key”**, [RFC7523](https://tools.ietf.org/html/rfc7523)) authorization grant for this non-interactive authentication. +In ZITADEL we use the `urn:ietf:params:oauth:grant-type:jwt-bearer` (**“JWT bearer token with private key”**, [RFC7523](https://tools.ietf.org/html/rfc7523)) authorization grant for this non-interactive authentication. You need to follow these steps to authenticate a service user and receive a access token: From cd4c61a6bb0409a9d9da0fd304539764cff5ca53 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 16 Aug 2022 15:13:15 +0200 Subject: [PATCH 108/116] docs: fixing incomplete sentence and old aud scope (#4202) * docs: fixing incomplete sentence and old aud scope * Update docs/docs/examples/secure-api/go.md --- docs/docs/examples/secure-api/go.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/examples/secure-api/go.md b/docs/docs/examples/secure-api/go.md index 670a1452b6..5663cdfb6f 100644 --- a/docs/docs/examples/secure-api/go.md +++ b/docs/docs/examples/secure-api/go.md @@ -11,7 +11,7 @@ At the end of the guide you should have an API with a protected endpoint. The client [SDK](https://github.com/zitadel/zitadel-go) will provides an interceptor for both GRPC and HTTP. This will handle the OAuth 2.0 introspection request including authentication using JWT with Private Key using our [OIDC client library](https://github.com/zitadel/oidc). -All that is required, is an API and its key JSON. But for complete +All that is required, is to create your API and download the private key file later called `Key JSON` for the service user. ## Go Setup @@ -147,4 +147,4 @@ Content-Length: 59 Content-Type: text/plain; charset=utf-8 OK 2021-08-24 13:13:33.131943 +0200 CEST m=+30840.911149251 -``` \ No newline at end of file +``` From d0733b3185e9187900d7dcfbeefd0a9a6d424b38 Mon Sep 17 00:00:00 2001 From: Alloys Mila Date: Tue, 16 Aug 2022 17:13:24 +0300 Subject: [PATCH 109/116] docs: fix minor typo (#4203) --- docs/docs/concepts/structure/_user_description.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/concepts/structure/_user_description.mdx b/docs/docs/concepts/structure/_user_description.mdx index 5d20b2b7ee..fb1cec9015 100644 --- a/docs/docs/concepts/structure/_user_description.mdx +++ b/docs/docs/concepts/structure/_user_description.mdx @@ -1,5 +1,5 @@ ## Human vs. Machine -ZITADEL supports human an machine users. We call human users simply "Users" and machine users "Service Users". +ZITADEL supports human and machine users. We call human users simply "Users" and machine users "Service Users". With Service Users you would typically secure backend services. For example in ZITADEL you would require an authenticated Service User to access the Management API. The main difference between human and machine users is the type of credentials that can be used for authentication: Human users typically logon via an login prompt, but Machine users require a non-interactive logon process. From d656b3f3c97d4ba46b97ef5a7ab45aa3989b98e0 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 17 Aug 2022 08:07:41 +0200 Subject: [PATCH 110/116] fix: instance interceptors return NotFound (404) error for unknown hosts (#4184) * fix: instance interceptors return "NotFound" (404) error for unknown hosts * fix tests --- .../server/middleware/instance_interceptor.go | 19 ++++-- .../middleware/instance_interceptor_test.go | 2 +- .../http/middleware/instance_interceptor.go | 62 ++++++++++++------- .../middleware/instance_interceptor_test.go | 8 +-- internal/api/ui/console/console.go | 14 ++--- internal/query/instance.go | 6 +- internal/static/i18n/de.yaml | 1 + internal/static/i18n/en.yaml | 1 + internal/static/i18n/fr.yaml | 1 + internal/static/i18n/it.yaml | 1 + internal/static/mock/storage_mock.go | 2 +- 11 files changed, 71 insertions(+), 46 deletions(-) diff --git a/internal/api/grpc/server/middleware/instance_interceptor.go b/internal/api/grpc/server/middleware/instance_interceptor.go index 73a417fcb1..3fd1727c04 100644 --- a/internal/api/grpc/server/middleware/instance_interceptor.go +++ b/internal/api/grpc/server/middleware/instance_interceptor.go @@ -2,15 +2,20 @@ package middleware import ( "context" + "errors" "fmt" "strings" + "github.com/zitadel/logging" + "golang.org/x/text/language" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" "github.com/zitadel/zitadel/internal/api/authz" + caos_errors "github.com/zitadel/zitadel/internal/errors" + "github.com/zitadel/zitadel/internal/i18n" "github.com/zitadel/zitadel/internal/telemetry/tracing" ) @@ -23,12 +28,14 @@ type InstanceVerifier interface { } func InstanceInterceptor(verifier authz.InstanceVerifier, headerName string, ignoredServices ...string) grpc.UnaryServerInterceptor { + translator, err := newZitadelTranslator(language.English) + logging.OnError(err).Panic("unable to get translator") return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - return setInstance(ctx, req, info, handler, verifier, headerName, ignoredServices...) + return setInstance(ctx, req, info, handler, verifier, headerName, translator, ignoredServices...) } } -func setInstance(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, verifier authz.InstanceVerifier, headerName string, ignoredServices ...string) (_ interface{}, err error) { +func setInstance(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler, verifier authz.InstanceVerifier, headerName string, translator *i18n.Translator, ignoredServices ...string) (_ interface{}, err error) { interceptorCtx, span := tracing.NewServerInterceptorSpan(ctx) defer func() { span.EndWithError(err) }() for _, service := range ignoredServices { @@ -42,11 +49,15 @@ func setInstance(ctx context.Context, req interface{}, info *grpc.UnaryServerInf host, err := hostFromContext(interceptorCtx, headerName) if err != nil { - return nil, status.Error(codes.PermissionDenied, err.Error()) + return nil, status.Error(codes.NotFound, err.Error()) } instance, err := verifier.InstanceByHost(interceptorCtx, host) if err != nil { - return nil, status.Error(codes.PermissionDenied, err.Error()) + caosErr := new(caos_errors.NotFoundError) + if errors.As(err, &caosErr) { + caosErr.Message = translator.LocalizeFromCtx(ctx, caosErr.GetMessage(), nil) + } + return nil, status.Error(codes.NotFound, err.Error()) } span.End() return handler(authz.WithInstance(ctx, instance), req) diff --git a/internal/api/grpc/server/middleware/instance_interceptor_test.go b/internal/api/grpc/server/middleware/instance_interceptor_test.go index b8a9342a01..96da6cffb3 100644 --- a/internal/api/grpc/server/middleware/instance_interceptor_test.go +++ b/internal/api/grpc/server/middleware/instance_interceptor_test.go @@ -135,7 +135,7 @@ func Test_setInstance(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - got, err := setInstance(tt.args.ctx, tt.args.req, tt.args.info, tt.args.handler, tt.args.verifier, tt.args.headerName) + got, err := setInstance(tt.args.ctx, tt.args.req, tt.args.info, tt.args.handler, tt.args.verifier, tt.args.headerName, nil) if (err != nil) != tt.res.err { t.Errorf("setInstance() error = %v, wantErr %v", err, tt.res.err) return diff --git a/internal/api/http/middleware/instance_interceptor.go b/internal/api/http/middleware/instance_interceptor.go index 17e08e64ad..70edd7b5c1 100644 --- a/internal/api/http/middleware/instance_interceptor.go +++ b/internal/api/http/middleware/instance_interceptor.go @@ -2,11 +2,18 @@ package middleware import ( "context" + "errors" "fmt" "net/http" "strings" + "github.com/rakyll/statik/fs" + "github.com/zitadel/logging" + "golang.org/x/text/language" + "github.com/zitadel/zitadel/internal/api/authz" + caos_errors "github.com/zitadel/zitadel/internal/errors" + "github.com/zitadel/zitadel/internal/i18n" "github.com/zitadel/zitadel/internal/telemetry/tracing" ) @@ -14,6 +21,7 @@ type instanceInterceptor struct { verifier authz.InstanceVerifier headerName string ignoredPrefixes []string + translator *i18n.Translator } func InstanceInterceptor(verifier authz.InstanceVerifier, headerName string, ignoredPrefixes ...string) *instanceInterceptor { @@ -21,43 +29,40 @@ func InstanceInterceptor(verifier authz.InstanceVerifier, headerName string, ign verifier: verifier, headerName: headerName, ignoredPrefixes: ignoredPrefixes, + translator: newZitadelTranslator(), } } func (a *instanceInterceptor) Handler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - for _, prefix := range a.ignoredPrefixes { - if strings.HasPrefix(r.URL.Path, prefix) { - next.ServeHTTP(w, r) - return - } - } - ctx, err := setInstance(r, a.verifier, a.headerName) - if err != nil { - http.Error(w, err.Error(), http.StatusUnauthorized) - return - } - r = r.WithContext(ctx) - next.ServeHTTP(w, r) + a.handleInstance(w, r, next) }) } func (a *instanceInterceptor) HandlerFunc(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - for _, prefix := range a.ignoredPrefixes { - if strings.HasPrefix(r.URL.Path, prefix) { - next.ServeHTTP(w, r) - return - } - } - ctx, err := setInstance(r, a.verifier, a.headerName) - if err != nil { - http.Error(w, err.Error(), http.StatusForbidden) + a.handleInstance(w, r, next) + } +} + +func (a *instanceInterceptor) handleInstance(w http.ResponseWriter, r *http.Request, next http.Handler) { + for _, prefix := range a.ignoredPrefixes { + if strings.HasPrefix(r.URL.Path, prefix) { + next.ServeHTTP(w, r) return } - r = r.WithContext(ctx) - next.ServeHTTP(w, r) } + ctx, err := setInstance(r, a.verifier, a.headerName) + if err != nil { + caosErr := new(caos_errors.NotFoundError) + if errors.As(err, &caosErr) { + caosErr.Message = a.translator.LocalizeFromRequest(r, caosErr.GetMessage(), nil) + } + http.Error(w, err.Error(), http.StatusNotFound) + return + } + r = r.WithContext(ctx) + next.ServeHTTP(w, r) } func setInstance(r *http.Request, verifier authz.InstanceVerifier, headerName string) (_ context.Context, err error) { @@ -89,3 +94,12 @@ func HostFromRequest(r *http.Request, headerName string) (string, error) { } return host, nil } + +func newZitadelTranslator() *i18n.Translator { + dir, err := fs.NewWithNamespace("zitadel") + logging.WithFields("namespace", "zitadel").OnError(err).Panic("unable to get namespace") + + translator, err := i18n.NewTranslator(dir, language.English, "") + logging.OnError(err).Panic("unable to get translator") + return translator +} diff --git a/internal/api/http/middleware/instance_interceptor_test.go b/internal/api/http/middleware/instance_interceptor_test.go index bc5b55bba6..6780b3841f 100644 --- a/internal/api/http/middleware/instance_interceptor_test.go +++ b/internal/api/http/middleware/instance_interceptor_test.go @@ -42,7 +42,7 @@ func Test_instanceInterceptor_Handler(t *testing.T) { request: httptest.NewRequest("", "/url", nil), }, res{ - statusCode: 403, + statusCode: 404, context: nil, }, }, @@ -109,7 +109,7 @@ func Test_instanceInterceptor_HandlerFunc(t *testing.T) { request: httptest.NewRequest("", "/url", nil), }, res{ - statusCode: 403, + statusCode: 404, context: nil, }, }, @@ -229,7 +229,7 @@ type testHandler struct { context context.Context } -func (t *testHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { +func (t *testHandler) ServeHTTP(_ http.ResponseWriter, r *http.Request) { t.context = r.Context() } @@ -237,7 +237,7 @@ type mockInstanceVerifier struct { host string } -func (m *mockInstanceVerifier) InstanceByHost(ctx context.Context, host string) (authz.Instance, error) { +func (m *mockInstanceVerifier) InstanceByHost(_ context.Context, host string) (authz.Instance, error) { if host != m.host { return nil, fmt.Errorf("invalid host") } diff --git a/internal/api/ui/console/console.go b/internal/api/ui/console/console.go index 04785576fe..5b299f166b 100644 --- a/internal/api/ui/console/console.go +++ b/internal/api/ui/console/console.go @@ -98,22 +98,18 @@ func Start(config Config, externalSecure bool, issuer op.IssuerFromRequest, inst security := middleware.SecurityHeaders(csp(), nil) handler := mux.NewRouter() - handler.Use(security) - handler.Handle(envRequestPath, middleware.TelemetryHandler()(instanceHandler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - instance := authz.GetInstance(r.Context()) - if instance.InstanceID() == "" { - http.Error(w, "empty instanceID", http.StatusInternalServerError) - return - } + + handler.Use(security, instanceHandler) + handler.Handle(envRequestPath, middleware.TelemetryHandler()(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { url := http_util.BuildOrigin(r.Host, externalSecure) - environmentJSON, err := createEnvironmentJSON(url, issuer(r), instance.ConsoleClientID(), customerPortal) + environmentJSON, err := createEnvironmentJSON(url, issuer(r), authz.GetInstance(r.Context()).ConsoleClientID(), customerPortal) if err != nil { http.Error(w, fmt.Sprintf("unable to marshal env for console: %v", err), http.StatusInternalServerError) return } _, err = w.Write(environmentJSON) logging.OnError(err).Error("error serving environment.json") - })))) + }))) handler.SkipClean(true).PathPrefix("").Handler(cache(http.FileServer(&spaHandler{http.FS(fSys)}))) return handler, nil } diff --git a/internal/query/instance.go b/internal/query/instance.go index ced139aed8..2ff17a05c1 100644 --- a/internal/query/instance.go +++ b/internal/query/instance.go @@ -400,9 +400,6 @@ func prepareInstanceDomainQuery(host string) (sq.SelectBuilder, func(*sql.Rows) &sequence, ) if err != nil { - if errs.Is(err, sql.ErrNoRows) { - return nil, errors.ThrowNotFound(err, "QUERY-n0wng", "Errors.IAM.NotFound") - } return nil, errors.ThrowInternal(err, "QUERY-d9nw", "Errors.Internal") } if !domain.Valid { @@ -418,6 +415,9 @@ func prepareInstanceDomainQuery(host string) (sq.SelectBuilder, func(*sql.Rows) InstanceID: instance.ID, }) } + if instance.ID == "" { + return nil, errors.ThrowNotFound(nil, "QUERY-n0wng", "Errors.IAM.NotFound") + } instance.DefaultLang = language.Make(lang) if err := rows.Close(); err != nil { return nil, errors.ThrowInternal(err, "QUERY-Dfbe2", "Errors.Query.CloseRows") diff --git a/internal/static/i18n/de.yaml b/internal/static/i18n/de.yaml index d9a8eb7749..2f6ad67f40 100644 --- a/internal/static/i18n/de.yaml +++ b/internal/static/i18n/de.yaml @@ -265,6 +265,7 @@ Errors: NotActive: Projekt Grant ist nicht aktiv NotInactive: Projekt Grant ist nicht inaktiv IAM: + NotFound: Instanz nicht gefunden Member: RolesNotChanged: Rollen wurden nicht verändert MemberInvalid: Member ist ungültig diff --git a/internal/static/i18n/en.yaml b/internal/static/i18n/en.yaml index 01a0bac691..4058bd401b 100644 --- a/internal/static/i18n/en.yaml +++ b/internal/static/i18n/en.yaml @@ -265,6 +265,7 @@ Errors: NotActive: Project grant is not active NotInactive: Project grant is not inactive IAM: + NotFound: Instance not found Member: RolesNotChanged: Roles have not been changed MemberInvalid: Member is invalid diff --git a/internal/static/i18n/fr.yaml b/internal/static/i18n/fr.yaml index efab49a8f6..4492e0a135 100644 --- a/internal/static/i18n/fr.yaml +++ b/internal/static/i18n/fr.yaml @@ -265,6 +265,7 @@ Errors: NotActive: La subvention de projet n'est pas active NotInactive: La subvention du projet n'est pas inactive IAM: + NotFound: Instance non trouvée Member: RolesNotChanged: Les rôles n'ont pas été modifiés MemberInvalid: Le membre n'est pas valide diff --git a/internal/static/i18n/it.yaml b/internal/static/i18n/it.yaml index b8223a2494..e7ef4751d9 100644 --- a/internal/static/i18n/it.yaml +++ b/internal/static/i18n/it.yaml @@ -265,6 +265,7 @@ Errors: NotActive: Grant del progetto non è attivo NotInactive: Grant del progetto non è inattivo IAM: + NotFound: Istanza non trovata Member: RolesNotChanged: I ruoli non sono stati cambiati MemberInvalid: Il membro non è valido diff --git a/internal/static/mock/storage_mock.go b/internal/static/mock/storage_mock.go index c6d35d2596..e0d5156a53 100644 --- a/internal/static/mock/storage_mock.go +++ b/internal/static/mock/storage_mock.go @@ -9,8 +9,8 @@ import ( io "io" reflect "reflect" - static "github.com/zitadel/zitadel/internal/static" gomock "github.com/golang/mock/gomock" + static "github.com/zitadel/zitadel/internal/static" ) // MockStorage is a mock of Storage interface. From cc612fed07de3acece5f93cb4ae6122340550680 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Fri, 19 Aug 2022 15:00:14 +0200 Subject: [PATCH 111/116] fix: trim spaces for usernames and organization names (#4217) --- .../eventsourcing/eventstore/auth_request.go | 4 +- internal/command/org.go | 5 +- internal/command/org_test.go | 135 +++++++++++++++++- internal/command/user.go | 2 + internal/command/user_human.go | 7 +- internal/command/user_human_test.go | 70 +++++++++ internal/command/user_test.go | 110 ++++++++++++++ internal/domain/org.go | 8 +- 8 files changed, 334 insertions(+), 7 deletions(-) diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go index 3bbc75078b..568fac2a09 100644 --- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go +++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go @@ -2,6 +2,7 @@ package eventstore import ( "context" + "strings" "time" "github.com/zitadel/logging" @@ -628,6 +629,7 @@ func (repo *AuthRequestRepo) tryUsingOnlyUserSession(request *domain.AuthRequest func (repo *AuthRequestRepo) checkLoginName(ctx context.Context, request *domain.AuthRequest, loginName string) (err error) { var user *user_view_model.UserView + loginName = strings.TrimSpace(loginName) preferredLoginName := loginName if request.RequestedOrgID != "" { if request.RequestedOrgID != "" { @@ -662,7 +664,7 @@ func (repo *AuthRequestRepo) checkLoginName(ctx context.Context, request *domain return nil } -func (repo AuthRequestRepo) checkLoginPolicyWithResourceOwner(ctx context.Context, request *domain.AuthRequest, user *user_view_model.UserView) error { +func (repo *AuthRequestRepo) checkLoginPolicyWithResourceOwner(ctx context.Context, request *domain.AuthRequest, user *user_view_model.UserView) error { loginPolicy, idpProviders, err := repo.getLoginPolicyAndIDPProviders(ctx, user.ResourceOwner) if err != nil { return err diff --git a/internal/command/org.go b/internal/command/org.go index d40c7eec36..76d60c1c4f 100644 --- a/internal/command/org.go +++ b/internal/command/org.go @@ -135,7 +135,7 @@ func (c *Commands) AddOrgWithID(ctx context.Context, name, userID, resourceOwner } func (c *Commands) AddOrg(ctx context.Context, name, userID, resourceOwner string, claimedUserIDs []string) (*domain.Org, error) { - if name == "" { + if name = strings.TrimSpace(name); name == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "EVENT-Mf9sd", "Errors.Org.Invalid") } @@ -174,6 +174,7 @@ func (c *Commands) addOrgWithIDAndMember(ctx context.Context, name, userID, reso } func (c *Commands) ChangeOrg(ctx context.Context, orgID, name string) (*domain.ObjectDetails, error) { + name = strings.TrimSpace(name) if orgID == "" || name == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "EVENT-Mf9sd", "Errors.Org.Invalid") } @@ -186,7 +187,7 @@ func (c *Commands) ChangeOrg(ctx context.Context, orgID, name string) (*domain.O return nil, caos_errs.ThrowNotFound(nil, "ORG-1MRds", "Errors.Org.NotFound") } if orgWriteModel.Name == name { - return nil, caos_errs.ThrowNotFound(nil, "ORG-4VSdf", "Errors.Org.NotChanged") + return nil, caos_errs.ThrowPreconditionFailed(nil, "ORG-4VSdf", "Errors.Org.NotChanged") } orgAgg := OrgAggregateFromWriteModel(&orgWriteModel.WriteModel) events := make([]eventstore.Command, 0) diff --git a/internal/command/org_test.go b/internal/command/org_test.go index ab9f90f8eb..1f7e04f4b3 100644 --- a/internal/command/org_test.go +++ b/internal/command/org_test.go @@ -106,6 +106,23 @@ func TestCommandSide_AddOrg(t *testing.T) { err: errors.IsErrorInvalidArgument, }, }, + { + name: "invalid org (spaces), error", + fields: fields{ + eventstore: eventstoreExpect( + t, + ), + }, + args: args{ + ctx: context.Background(), + userID: "user1", + resourceOwner: "org1", + name: " ", + }, + res: res{ + err: errors.IsErrorInvalidArgument, + }, + }, { name: "user removed, error", fields: fields{ @@ -362,6 +379,82 @@ func TestCommandSide_AddOrg(t *testing.T) { }, }, }, + { + name: "add org (remove spaces), no error", + fields: fields{ + eventstore: eventstoreExpect( + t, + expectFilterOrgDomainNotFound(), + expectFilter( + eventFromEventPusher( + user.NewHumanAddedEvent(context.Background(), + &user.NewAggregate("user1", "org1").Aggregate, + "username1", + "firstname1", + "lastname1", + "nickname1", + "displayname1", + language.German, + domain.GenderMale, + "email1", + true, + ), + ), + ), + expectFilterOrgMemberNotFound(), + expectPush( + []*repository.Event{ + eventFromEventPusher(org.NewOrgAddedEvent(context.Background(), + &org.NewAggregate("org2").Aggregate, + "Org", + )), + eventFromEventPusher(org.NewDomainAddedEvent(context.Background(), + &org.NewAggregate("org2").Aggregate, "org.iam-domain", + )), + eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(), + &org.NewAggregate("org2").Aggregate, + "org.iam-domain", + )), + eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(), + &org.NewAggregate("org2").Aggregate, + "org.iam-domain", + )), + eventFromEventPusher(org.NewMemberAddedEvent(context.Background(), + &org.NewAggregate("org2").Aggregate, + "user1", + domain.RoleOrgOwner, + )), + }, + uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")), + uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")), + uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org2", "user1")), + ), + ), + idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "org2"), + zitadelRoles: []authz.RoleMapping{ + { + Role: "ORG_OWNER", + }, + }, + }, + args: args{ + ctx: authz.WithRequestedDomain(context.Background(), "iam-domain"), + name: " Org ", + userID: "user1", + resourceOwner: "org1", + }, + res: res{ + want: &domain.Org{ + ObjectRoot: models.ObjectRoot{ + AggregateID: "org2", + ResourceOwner: "org2", + }, + Name: "Org", + State: domain.OrgStateActive, + PrimaryDomain: "org.iam-domain", + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -394,8 +487,7 @@ func TestCommandSide_ChangeOrg(t *testing.T) { name string } type res struct { - want *domain.Org - err func(error) bool + err func(error) bool } tests := []struct { name string @@ -418,6 +510,22 @@ func TestCommandSide_ChangeOrg(t *testing.T) { err: errors.IsErrorInvalidArgument, }, }, + { + name: "empty name (spaces), invalid argument error", + fields: fields{ + eventstore: eventstoreExpect( + t, + ), + }, + args: args{ + ctx: context.Background(), + orgID: "org1", + name: " ", + }, + res: res{ + err: errors.IsErrorInvalidArgument, + }, + }, { name: "org not found, error", fields: fields{ @@ -435,6 +543,29 @@ func TestCommandSide_ChangeOrg(t *testing.T) { err: errors.IsNotFound, }, }, + { + name: "no change (spaces), error", + fields: fields{ + eventstore: eventstoreExpect( + t, + expectFilter( + eventFromEventPusher( + org.NewOrgAddedEvent(context.Background(), + &org.NewAggregate("org1").Aggregate, + "org"), + ), + ), + ), + }, + args: args{ + ctx: authz.WithRequestedDomain(context.Background(), "zitadel.ch"), + orgID: "org1", + name: " org ", + }, + res: res{ + err: errors.IsPreconditionFailed, + }, + }, { name: "push failed, error", fields: fields{ diff --git a/internal/command/user.go b/internal/command/user.go index d31727f150..a956138f97 100644 --- a/internal/command/user.go +++ b/internal/command/user.go @@ -3,6 +3,7 @@ package command import ( "context" "fmt" + "strings" "time" "github.com/zitadel/logging" @@ -19,6 +20,7 @@ import ( ) func (c *Commands) ChangeUsername(ctx context.Context, orgID, userID, userName string) (*domain.ObjectDetails, error) { + userName = strings.TrimSpace(userName) if orgID == "" || userID == "" || userName == "" { return nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-2N9fs", "Errors.IDMissing") } diff --git a/internal/command/user_human.go b/internal/command/user_human.go index b2efd78d42..fa7c985b5f 100644 --- a/internal/command/user_human.go +++ b/internal/command/user_human.go @@ -416,7 +416,10 @@ func (c *Commands) importHuman(ctx context.Context, orgID string, human *domain. } func (c *Commands) registerHuman(ctx context.Context, orgID string, human *domain.Human, link *domain.UserIDPLink, domainPolicy *domain.DomainPolicy, pwPolicy *domain.PasswordComplexityPolicy, initCodeGenerator crypto.Generator, phoneCodeGenerator crypto.Generator) ([]eventstore.Command, *HumanWriteModel, error) { - if human != nil && human.Username == "" { + if human == nil { + return nil, nil, errors.ThrowInvalidArgument(nil, "COMMAND-JKefw", "Errors.User.Invalid") + } + if human.Username = strings.TrimSpace(human.Username); human.Username == "" { human.Username = human.EmailAddress } if orgID == "" || !human.IsValid() || link == nil && (human.Password == nil || human.Password.SecretString == "") { @@ -432,6 +435,8 @@ func (c *Commands) createHuman(ctx context.Context, orgID string, human *domain. if err := human.CheckDomainPolicy(domainPolicy); err != nil { return nil, nil, err } + human.Username = strings.TrimSpace(human.Username) + human.EmailAddress = strings.TrimSpace(human.EmailAddress) if !domainPolicy.UserLoginMustBeDomain { usernameSplit := strings.Split(human.Username, "@") if len(usernameSplit) != 2 { diff --git a/internal/command/user_human_test.go b/internal/command/user_human_test.go index f618ba58c0..a84a09fa03 100644 --- a/internal/command/user_human_test.go +++ b/internal/command/user_human_test.go @@ -410,6 +410,76 @@ func TestCommandSide_AddHuman(t *testing.T) { }, }, }, + { + name: "add human email verified, trim spaces, ok", + fields: fields{ + eventstore: eventstoreExpect( + t, + expectFilter( + eventFromEventPusher( + org.NewDomainPolicyAddedEvent(context.Background(), + &userAgg.Aggregate, + true, + true, + true, + ), + ), + ), + expectFilter( + eventFromEventPusher( + org.NewPasswordComplexityPolicyAddedEvent(context.Background(), + &userAgg.Aggregate, + 1, + false, + false, + false, + false, + ), + ), + ), + expectPush( + []*repository.Event{ + eventFromEventPusher( + newAddHumanEvent("password", true, ""), + ), + eventFromEventPusher( + user.NewHumanEmailVerifiedEvent(context.Background(), + &userAgg.Aggregate), + ), + }, + uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)), + ), + ), + idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"), + userPasswordAlg: crypto.CreateMockHashAlg(gomock.NewController(t)), + codeAlg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)), + }, + args: args{ + ctx: context.Background(), + orgID: "org1", + human: &AddHuman{ + Username: " username ", + Password: "password", + FirstName: "firstname", + LastName: "lastname", + Email: Email{ + Address: "email@test.ch", + Verified: true, + }, + PreferredLanguage: language.English, + PasswordChangeRequired: true, + }, + secretGenerator: GetMockSecretGenerator(t), + }, + res: res{ + want: &domain.HumanDetails{ + ID: "user1", + ObjectDetails: domain.ObjectDetails{ + ResourceOwner: "org1", + }, + }, + }, + }, { name: "add human (with phone), ok", fields: fields{ diff --git a/internal/command/user_test.go b/internal/command/user_test.go index 383d7205df..aa43a5a0c6 100644 --- a/internal/command/user_test.go +++ b/internal/command/user_test.go @@ -96,6 +96,23 @@ func TestCommandSide_UsernameChange(t *testing.T) { err: caos_errs.IsErrorInvalidArgument, }, }, + { + name: "username only spaces, invalid argument error", + fields: fields{ + eventstore: eventstoreExpect( + t, + ), + }, + args: args{ + ctx: context.Background(), + orgID: "org1", + userID: "user1", + username: " ", + }, + res: res{ + err: caos_errs.IsErrorInvalidArgument, + }, + }, { name: "user removed, not found error", fields: fields{ @@ -147,6 +164,39 @@ func TestCommandSide_UsernameChange(t *testing.T) { err: caos_errs.IsPreconditionFailed, }, }, + { + name: "username not changed (spaces), precondition error", + fields: fields{ + eventstore: eventstoreExpect( + t, + expectFilter( + eventFromEventPusher( + user.NewHumanAddedEvent(context.Background(), + &user.NewAggregate("user1", "org1").Aggregate, + "username", + "firstname", + "lastname", + "nickname", + "displayname", + language.German, + domain.GenderUnspecified, + "email@test.ch", + true, + ), + ), + ), + ), + }, + args: args{ + ctx: context.Background(), + orgID: "org1", + userID: "user1", + username: "username ", + }, + res: res{ + err: caos_errs.IsPreconditionFailed, + }, + }, { name: "org iam policy not found, precondition error", fields: fields{ @@ -284,6 +334,66 @@ func TestCommandSide_UsernameChange(t *testing.T) { }, }, }, + { + name: "change username (remove spaces), ok", + fields: fields{ + eventstore: eventstoreExpect( + t, + expectFilter( + eventFromEventPusher( + user.NewHumanAddedEvent(context.Background(), + &user.NewAggregate("user1", "org1").Aggregate, + "username", + "firstname", + "lastname", + "nickname", + "displayname", + language.German, + domain.GenderUnspecified, + "email@test.ch", + true, + ), + ), + ), + expectFilter(), + expectFilter( + eventFromEventPusher( + instance.NewDomainPolicyAddedEvent(context.Background(), + &user.NewAggregate("user1", "org1").Aggregate, + true, + true, + true, + ), + ), + ), + expectPush( + []*repository.Event{ + eventFromEventPusher( + user.NewUsernameChangedEvent(context.Background(), + &user.NewAggregate("user1", "org1").Aggregate, + "username", + "username1", + true, + ), + ), + }, + uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)), + uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username1", "org1", true)), + ), + ), + }, + args: args{ + ctx: context.Background(), + orgID: "org1", + userID: "user1", + username: "username1 ", + }, + res: res{ + want: &domain.ObjectDetails{ + ResourceOwner: "org1", + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/internal/domain/org.go b/internal/domain/org.go index e45143ba2f..c5375e83cd 100644 --- a/internal/domain/org.go +++ b/internal/domain/org.go @@ -1,6 +1,8 @@ package domain import ( + "strings" + "github.com/zitadel/zitadel/internal/eventstore/v1/models" ) @@ -15,7 +17,11 @@ type Org struct { } func (o *Org) IsValid() bool { - return o != nil && o.Name != "" + if o == nil { + return false + } + o.Name = strings.TrimSpace(o.Name) + return o.Name != "" } func (o *Org) AddIAMDomain(iamDomain string) { From 2ece8ffaa77673ff8fae21bce65eff98048bf0cb Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Mon, 22 Aug 2022 09:08:01 +0200 Subject: [PATCH 112/116] fix(console): membership role deletion (#4230) --- .../app/modules/members-table/members-table.component.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/console/src/app/modules/members-table/members-table.component.ts b/console/src/app/modules/members-table/members-table.component.ts index 87fdc8e6f6..a5f48f6c9f 100644 --- a/console/src/app/modules/members-table/members-table.component.ts +++ b/console/src/app/modules/members-table/members-table.component.ts @@ -6,9 +6,7 @@ import { Observable, Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; import { InstanceMembersDataSource } from 'src/app/pages/instance/instance-members/instance-members-datasource'; import { OrgMembersDataSource } from 'src/app/pages/orgs/org-members/org-members-datasource'; -import { - ProjectGrantMembersDataSource, -} from 'src/app/pages/projects/owned-projects/project-grant-detail/project-grant-members-datasource'; +import { ProjectGrantMembersDataSource } from 'src/app/pages/projects/owned-projects/project-grant-detail/project-grant-members-datasource'; import { Member } from 'src/app/proto/generated/zitadel/member_pb'; import { getMembershipColor } from 'src/app/utils/color'; @@ -86,7 +84,7 @@ export class MembersTableComponent implements OnInit, OnDestroy { const newRoles = Object.assign([], member.rolesList); const index = newRoles.findIndex((r) => r === role); if (index > -1) { - newRoles.splice(index); + newRoles.splice(index, 1); member.rolesList = newRoles; this.updateRoles.emit({ member: member, change: newRoles }); } From f2c603523bbe97337f9d6d4fa875a3fbc98cd831 Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Mon, 22 Aug 2022 18:59:56 +0200 Subject: [PATCH 113/116] chore: fix broken links with redirect (#4231) --- docs/netlify.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/netlify.toml b/docs/netlify.toml index 5a8c5cd91c..939f53f66b 100644 --- a/docs/netlify.toml +++ b/docs/netlify.toml @@ -21,3 +21,7 @@ includeSubDomains; preload''' +[[redirects]] + from = "/docs/quickstarts/introduction" + to = "/docs/examples/introduction" + status = 301 From 69534a2f7aa625eef613ac43e3388f28514de885 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Tue, 23 Aug 2022 08:02:36 +0200 Subject: [PATCH 114/116] feat: allow JWT for ZITADEL APIs (#4206) * feat: allow JWT for ZITADEL APIs * improve getTokenIDAndSubject * comment Co-authored-by: Silvan --- cmd/start/start.go | 2 +- internal/authz/authz.go | 4 +- .../eventstore/token_verifier.go | 98 ++++++++++++++++--- .../repository/eventsourcing/repository.go | 3 +- 4 files changed, 88 insertions(+), 19 deletions(-) diff --git a/cmd/start/start.go b/cmd/start/start.go index 6df8501bd6..f5418a81d6 100644 --- a/cmd/start/start.go +++ b/cmd/start/start.go @@ -105,7 +105,7 @@ func startZitadel(config *Config, masterKey string) error { return fmt.Errorf("cannot start queries: %w", err) } - authZRepo, err := authz.Start(queries, dbClient, keys.OIDC) + authZRepo, err := authz.Start(queries, dbClient, keys.OIDC, config.ExternalSecure) if err != nil { return fmt.Errorf("error starting authz repo: %w", err) } diff --git a/internal/authz/authz.go b/internal/authz/authz.go index d5c0b8300a..268ea3aec1 100644 --- a/internal/authz/authz.go +++ b/internal/authz/authz.go @@ -9,6 +9,6 @@ import ( "github.com/zitadel/zitadel/internal/query" ) -func Start(queries *query.Queries, dbClient *sql.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm) (repository.Repository, error) { - return eventsourcing.Start(queries, dbClient, keyEncryptionAlgorithm) +func Start(queries *query.Queries, dbClient *sql.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, externalSecure bool) (repository.Repository, error) { + return eventsourcing.Start(queries, dbClient, keyEncryptionAlgorithm, externalSecure) } diff --git a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go index 650be34bae..6c856640ef 100644 --- a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go +++ b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go @@ -3,12 +3,17 @@ package eventstore import ( "context" "encoding/base64" + "fmt" "strings" "time" "github.com/zitadel/logging" + "github.com/zitadel/oidc/v2/pkg/oidc" + "github.com/zitadel/oidc/v2/pkg/op" + "gopkg.in/square/go-jose.v2" "github.com/zitadel/zitadel/internal/api/authz" + http_util "github.com/zitadel/zitadel/internal/api/http" "github.com/zitadel/zitadel/internal/authz/repository/eventsourcing/view" "github.com/zitadel/zitadel/internal/crypto" caos_errs "github.com/zitadel/zitadel/internal/errors" @@ -27,6 +32,7 @@ type TokenVerifierRepo struct { Eventstore v1.Eventstore View *view.View Query *query.Queries + ExternalSecure bool } func (repo *TokenVerifierRepo) Health() error { @@ -52,7 +58,7 @@ func (repo *TokenVerifierRepo) tokenByID(ctx context.Context, tokenID, userID st } if esErr != nil { - logging.Log("EVENT-5Nm9s").WithError(viewErr).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") + logging.WithError(viewErr).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("error retrieving new events") return model.TokenViewToModel(token), nil } viewToken := *token @@ -71,21 +77,13 @@ func (repo *TokenVerifierRepo) tokenByID(ctx context.Context, tokenID, userID st func (repo *TokenVerifierRepo) VerifyAccessToken(ctx context.Context, tokenString, verifierClientID, projectID string) (userID string, agentID string, clientID, prefLang, resourceOwner string, err error) { ctx, span := tracing.NewSpan(ctx) defer func() { span.EndWithError(err) }() - tokenData, err := base64.RawURLEncoding.DecodeString(tokenString) - if err != nil { - return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-ASdgg", "invalid token") - } - tokenIDSubject, err := repo.TokenVerificationKey.DecryptString(tokenData, repo.TokenVerificationKey.EncryptionKeyID()) - if err != nil { - return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-8EF0zZ", "invalid token") - } - splittedToken := strings.Split(tokenIDSubject, ":") - if len(splittedToken) != 2 { - return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-GDg3a", "invalid token") + tokenID, subject, ok := repo.getTokenIDAndSubject(ctx, tokenString) + if !ok { + return "", "", "", "", "", caos_errs.ThrowUnauthenticated(nil, "APP-Reb32", "invalid token") } _, tokenSpan := tracing.NewNamedSpan(ctx, "token") - token, err := repo.tokenByID(ctx, splittedToken[0], splittedToken[1]) + token, err := repo.tokenByID(ctx, tokenID, subject) tokenSpan.EndWithError(err) if err != nil { return "", "", "", "", "", caos_errs.ThrowUnauthenticated(err, "APP-BxUSiL", "invalid token") @@ -128,12 +126,82 @@ func (repo *TokenVerifierRepo) VerifierClientID(ctx context.Context, appName str return clientID, app.ProjectID, nil } -func (r *TokenVerifierRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64) (_ []*models.Event, err error) { +func (repo *TokenVerifierRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64) (_ []*models.Event, err error) { ctx, span := tracing.NewSpan(ctx) defer func() { span.EndWithError(err) }() query, err := usr_view.UserByIDQuery(userID, instanceID, sequence) if err != nil { return nil, err } - return r.Eventstore.FilterEvents(ctx, query) + return repo.Eventstore.FilterEvents(ctx, query) +} + +//getTokenIDAndSubject returns the TokenID and Subject of both opaque tokens and JWTs +func (repo *TokenVerifierRepo) getTokenIDAndSubject(ctx context.Context, accessToken string) (tokenID string, subject string, valid bool) { + // accessToken can be either opaque or JWT + // let's try opaque first: + tokenIDSubject, err := repo.decryptAccessToken(accessToken) + if err != nil { + // if decryption did not work, it might be a JWT + accessTokenClaims, err := op.VerifyAccessToken(ctx, accessToken, repo.jwtTokenVerifier(ctx)) + if err != nil { + return "", "", false + } + return accessTokenClaims.GetTokenID(), accessTokenClaims.GetSubject(), true + } + splitToken := strings.Split(tokenIDSubject, ":") + if len(splitToken) != 2 { + return "", "", false + } + return splitToken[0], splitToken[1], true +} + +func (repo *TokenVerifierRepo) jwtTokenVerifier(ctx context.Context) op.AccessTokenVerifier { + keySet := &openIDKeySet{repo.Query} + issuer := http_util.BuildOrigin(authz.GetInstance(ctx).RequestedHost(), repo.ExternalSecure) + return op.NewAccessTokenVerifier(issuer, keySet) +} + +func (repo *TokenVerifierRepo) decryptAccessToken(token string) (string, error) { + tokenData, err := base64.RawURLEncoding.DecodeString(token) + if err != nil { + return "", caos_errs.ThrowUnauthenticated(nil, "APP-ASdgg", "invalid token") + } + tokenIDSubject, err := repo.TokenVerificationKey.DecryptString(tokenData, repo.TokenVerificationKey.EncryptionKeyID()) + if err != nil { + return "", caos_errs.ThrowUnauthenticated(nil, "APP-8EF0zZ", "invalid token") + } + return tokenIDSubject, nil +} + +type openIDKeySet struct { + *query.Queries +} + +//VerifySignature implements the oidc.KeySet interface +//providing an implementation for the keys retrieved directly from Queries +func (o *openIDKeySet) VerifySignature(ctx context.Context, jws *jose.JSONWebSignature) ([]byte, error) { + keySet, err := o.Queries.ActivePublicKeys(ctx, time.Now()) + if err != nil { + return nil, fmt.Errorf("error fetching keys: %w", err) + } + keyID, alg := oidc.GetKeyIDAndAlg(jws) + key, err := oidc.FindMatchingKey(keyID, oidc.KeyUseSignature, alg, jsonWebKeys(keySet.Keys)...) + if err != nil { + return nil, fmt.Errorf("invalid signature: %w", err) + } + return jws.Verify(&key) +} + +func jsonWebKeys(keys []query.PublicKey) []jose.JSONWebKey { + webKeys := make([]jose.JSONWebKey, len(keys)) + for i, key := range keys { + webKeys[i] = jose.JSONWebKey{ + KeyID: key.ID(), + Algorithm: key.Algorithm(), + Use: key.Use().String(), + Key: key.Key(), + } + } + return webKeys } diff --git a/internal/authz/repository/eventsourcing/repository.go b/internal/authz/repository/eventsourcing/repository.go index 71af744bf9..3e8f8200f3 100644 --- a/internal/authz/repository/eventsourcing/repository.go +++ b/internal/authz/repository/eventsourcing/repository.go @@ -18,7 +18,7 @@ type EsRepository struct { eventstore.TokenVerifierRepo } -func Start(queries *query.Queries, dbClient *sql.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm) (repository.Repository, error) { +func Start(queries *query.Queries, dbClient *sql.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, externalSecure bool) (repository.Repository, error) { es, err := v1.Start(dbClient) if err != nil { return nil, err @@ -39,6 +39,7 @@ func Start(queries *query.Queries, dbClient *sql.DB, keyEncryptionAlgorithm cryp Eventstore: es, View: view, Query: queries, + ExternalSecure: externalSecure, }, }, nil } From e09c7af49f74de5552d3cef07f86b8467e11cbb4 Mon Sep 17 00:00:00 2001 From: Christian Jakob <47860090+thesephirot@users.noreply.github.com> Date: Tue, 23 Aug 2022 17:03:23 +0200 Subject: [PATCH 115/116] chore: adding conditions for upload for dockers and brews (#4212) * chore: removing unneeded channel * fix: enabled tag push Co-authored-by: Livio Spring --- .goreleaser.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index fba26ac35c..32dfa8f9db 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -5,6 +5,10 @@ release: owner: zitadel name: zitadel draft: false + # If set to auto, will mark the release as not ready for production + # in case there is an indicator for this in the tag e.g. v1.0.0-rc1 + # If set to true, will mark the release as not ready for production. + # Default is false. prerelease: auto before: @@ -43,6 +47,14 @@ dockers: dockerfile: build/Dockerfile build_flag_templates: - "--platform=linux/amd64" + # Skips the docker push. + # Could be useful if you also do draft releases. + # + # If set to auto, the release will not be pushed to the Docker repository + # in case there is an indicator of a prerelease in the tag, e.g. v1.0.0-rc1. + # + # Defaults to false. + skip_push: auto - image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-arm64 @@ -51,6 +63,7 @@ dockers: dockerfile: build/Dockerfile build_flag_templates: - "--platform=linux/arm64" + skip_push: auto docker_manifests: - id: zitadel-latest @@ -58,6 +71,8 @@ docker_manifests: image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-amd64 - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 + # Skips can and shall be set for individual manifests same as in dockers + skip_push: auto - id: zitadel-Tag name_template: ghcr.io/zitadel/zitadel:{{ .Tag }} image_templates: @@ -111,6 +126,10 @@ brews: - name: git install: |- bin.install "zitadel" + # If set to auto, the release will not be uploaded to the homebrew tap + # in case there is an indicator for prerelease in the tag e.g. v1.0.0-rc1 + # Default is false. + skip_upload: auto announce: discord: From 06fd70d4578c0d1120bdf7c38f650daf2dc03ecd Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Wed, 24 Aug 2022 09:53:14 +0200 Subject: [PATCH 116/116] chore: always push docker image (#4236) (only skip latest manifest on prereleases) --- .goreleaser.yaml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 32dfa8f9db..f772c5da1a 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -47,14 +47,6 @@ dockers: dockerfile: build/Dockerfile build_flag_templates: - "--platform=linux/amd64" - # Skips the docker push. - # Could be useful if you also do draft releases. - # - # If set to auto, the release will not be pushed to the Docker repository - # in case there is an indicator of a prerelease in the tag, e.g. v1.0.0-rc1. - # - # Defaults to false. - skip_push: auto - image_templates: - ghcr.io/zitadel/zitadel:{{ .Tag }}-arm64 - ghcr.io/zitadel/zitadel:{{ .ShortCommit }}-arm64 @@ -63,7 +55,6 @@ dockers: dockerfile: build/Dockerfile build_flag_templates: - "--platform=linux/arm64" - skip_push: auto docker_manifests: - id: zitadel-latest