From fd66380082b990df3f2d81518a8d8bfe6ea42b11 Mon Sep 17 00:00:00 2001 From: "A.Unger" Date: Tue, 22 Sep 2020 14:49:48 +0200 Subject: [PATCH] delete accounts --- accounts/.codacy.yml | 10 - accounts/.dockerignore | 2 - accounts/.drone.star | 904 --- accounts/.editorconfig | 35 - accounts/.eslintrc.json | 17 - accounts/.github/config.yml | 12 - accounts/.github/issue_template.md | 0 accounts/.github/pull_request_template.md | 0 accounts/.github/settings.yml | 98 - accounts/.gitignore | 11 - accounts/CHANGELOG.md | 444 -- accounts/LICENSE | 202 - accounts/Makefile | 205 - accounts/README.md | 45 - accounts/babel.config.js | 25 - .../changelog/0.1.0_2020-03-18/inital-release | 5 - .../changelog/0.1.0_2020-03-18/self-config.md | 5 - .../0.1.1_2020-04-29/configurable-log.md | 5 - .../add-cli-user-management.md | 17 - .../0.2.0_2020-08-19/add-write-mutexes.md | 5 - .../align-project-structure.md | 5 - .../change-grpc-error-messages.md | 6 - .../0.2.0_2020-08-19/enable_accounts.md | 6 - .../0.2.0_2020-08-19/fix-account-group-id.md | 8 - .../0.2.0_2020-08-19/fix-index-mapping.md | 5 - .../0.2.0_2020-08-19/fix-indexing.md | 6 - .../0.2.0_2020-08-19/fix-int-queries.md | 7 - .../0.2.0_2020-08-19/fix-segfault.md | 5 - .../changelog/0.2.0_2020-08-19/fix-update.md | 5 - .../0.2.0_2020-08-19/pass-correct-logger.md | 6 - .../remove-timezone-setting.md | 7 - .../0.2.0_2020-08-19/tighten-screws.md | 5 - .../0.2.0_2020-08-19/update-accounts-api.md | 5 - .../0.2.0_2020-08-19/use-alpine-latest.md | 5 - .../0.2.0_2020-08-19/user-listing-ui.md | 5 - .../adapt-to-settings-data-model.md | 6 - ...d-language-permissions-to-default-roles.md | 6 - .../0.3.0_2020-08-20/atomic-requests.md | 5 - .../0.3.0_2020-08-20/fix-prefix-query.md | 5 - .../0.4.0_2020-08-20/select-role-in-ui.md | 7 - .../changelog/0.4.1_2020-08-27/assign_role.md | 5 - .../0.4.1_2020-08-27/new-settings-api | 5 - accounts/changelog/CHANGELOG.tmpl | 53 - accounts/changelog/README.md | 6 - accounts/changelog/TEMPLATE | 11 - accounts/changelog/unreleased/.keep | 0 .../changelog/unreleased/add-create-form.md | 6 - .../changelog/unreleased/add-delete-action.md | 6 - .../unreleased/add-enable-disable-ui.md | 6 - .../unreleased/builtin-regular-users.md | 5 - .../unreleased/change-hashing-algorithm.md | 7 - .../unreleased/fix-role-service-grpc.md | 6 - .../unreleased/improve-accounts-ui.md | 6 - .../changelog/unreleased/new-admin-user.md | 5 - .../unreleased/single-service-handler.md | 10 - .../unreleased/unique-account-fields | 5 - .../changelog/unreleased/use-roles-cache.md | 5 - .../changelog/unreleased/use-roles-manager.md | 7 - accounts/cmd/ocis-accounts/main.go | 13 - accounts/docker/Dockerfile.linux.amd64 | 19 - accounts/docker/Dockerfile.linux.arm | 19 - accounts/docker/Dockerfile.linux.arm64 | 19 - accounts/docker/manifest.tmpl | 22 - accounts/docs/_index.md | 21 - accounts/docs/building.md | 28 - accounts/docs/configuration.md | 84 - accounts/docs/getting-started.md | 61 - accounts/go.mod | 33 - accounts/go.sum | 2129 ------ accounts/nightwatch.conf.js | 11 - accounts/package.json | 83 - accounts/pkg/assets/assets.go | 66 - accounts/pkg/assets/embed.go | 173 - accounts/pkg/assets/embed.yml | 17 - accounts/pkg/assets/option.go | 40 - accounts/pkg/command/add_account.go | 56 - accounts/pkg/command/inspect_account.go | 76 - accounts/pkg/command/list_accounts.go | 50 - accounts/pkg/command/remove_account.go | 39 - accounts/pkg/command/root.go | 117 - accounts/pkg/command/server.go | 114 - accounts/pkg/command/update_account.go | 87 - accounts/pkg/config/config.go | 77 - accounts/pkg/flagset/flagset.go | 335 - accounts/pkg/metrics/metrics.go | 22 - accounts/pkg/proto/v0/accounts.mock.go | 89 - accounts/pkg/proto/v0/accounts.pb.go | 1821 ----- accounts/pkg/proto/v0/accounts.pb.micro.go | 553 -- .../pkg/proto/v0/accounts.pb.micro_test.go | 1162 --- accounts/pkg/proto/v0/accounts.pb.web.go | 1129 --- accounts/pkg/proto/v0/accounts.proto | 654 -- accounts/pkg/proto/v0/accounts.swagger.json | 941 --- accounts/pkg/proto/v0/bleve.go | 13 - accounts/pkg/proto/v0/staticcheck.conf | 1 - accounts/pkg/provider/bleve.go | 128 - accounts/pkg/provider/tokenizer.go | 38 - accounts/pkg/server/grpc/option.go | 85 - accounts/pkg/server/grpc/server.go | 31 - accounts/pkg/server/http/option.go | 85 - accounts/pkg/server/http/server.go | 71 - accounts/pkg/service/v0/accounts.go | 676 -- .../service/v0/accounts_permission_test.go | 366 - accounts/pkg/service/v0/groups.go | 431 -- accounts/pkg/service/v0/option.go | 57 - accounts/pkg/service/v0/permissions.go | 82 - accounts/pkg/service/v0/service.go | 416 -- accounts/pkg/service/v0/settings.go | 196 - accounts/pkg/version/version.go | 19 - accounts/reflex.conf | 5 - accounts/rollup.config.js | 52 - accounts/sonar-project.properties | 37 - .../third_party/google/api/annotations.proto | 31 - .../google/api/field_behavior.proto | 79 - accounts/third_party/google/api/http.proto | 376 - .../google/protobuf/descriptor.proto | 909 --- .../third_party/google/protobuf/empty.proto | 52 - .../google/protobuf/field_mask.proto | 245 - .../google/protobuf/timestamp.proto | 138 - accounts/tools.go | 7 - accounts/ui/app.js | 39 - accounts/ui/client/accounts/index.js | 723 -- accounts/ui/client/settings/index.js | 627 -- accounts/ui/components/App.vue | 65 - .../accounts/AccountsBatchActions.vue | 132 - .../ui/components/accounts/AccountsCreate.vue | 193 - .../ui/components/accounts/AccountsList.vue | 59 - .../components/accounts/AccountsListRow.vue | 161 - accounts/ui/components/accounts/Avatar.vue | 130 - accounts/ui/helpers/auth.js | 12 - accounts/ui/helpers/utils.js | 8 - accounts/ui/store/index.js | 257 - .../acceptance/features/accounts.feature | 73 - .../acceptance/pageobjects/accountsPage.js | 170 - .../stepDefinitions/accountsContext.js | 61 - .../config/drone/identifier-registration.yml | 16 - .../ui/tests/config/drone/ocis-config.json | 28 - accounts/ui/tests/run-acceptance-test.sh | 59 - accounts/yarn.lock | 6627 ----------------- 138 files changed, 26542 deletions(-) delete mode 100644 accounts/.codacy.yml delete mode 100644 accounts/.dockerignore delete mode 100644 accounts/.drone.star delete mode 100644 accounts/.editorconfig delete mode 100644 accounts/.eslintrc.json delete mode 100644 accounts/.github/config.yml delete mode 100644 accounts/.github/issue_template.md delete mode 100644 accounts/.github/pull_request_template.md delete mode 100644 accounts/.github/settings.yml delete mode 100644 accounts/.gitignore delete mode 100644 accounts/CHANGELOG.md delete mode 100644 accounts/LICENSE delete mode 100644 accounts/Makefile delete mode 100644 accounts/README.md delete mode 100644 accounts/babel.config.js delete mode 100644 accounts/changelog/0.1.0_2020-03-18/inital-release delete mode 100644 accounts/changelog/0.1.0_2020-03-18/self-config.md delete mode 100644 accounts/changelog/0.1.1_2020-04-29/configurable-log.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/add-cli-user-management.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/add-write-mutexes.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/align-project-structure.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/change-grpc-error-messages.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/enable_accounts.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/fix-account-group-id.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/fix-index-mapping.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/fix-indexing.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/fix-int-queries.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/fix-segfault.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/fix-update.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/pass-correct-logger.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/remove-timezone-setting.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/tighten-screws.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/update-accounts-api.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/use-alpine-latest.md delete mode 100644 accounts/changelog/0.2.0_2020-08-19/user-listing-ui.md delete mode 100644 accounts/changelog/0.3.0_2020-08-20/adapt-to-settings-data-model.md delete mode 100644 accounts/changelog/0.3.0_2020-08-20/add-language-permissions-to-default-roles.md delete mode 100644 accounts/changelog/0.3.0_2020-08-20/atomic-requests.md delete mode 100644 accounts/changelog/0.3.0_2020-08-20/fix-prefix-query.md delete mode 100644 accounts/changelog/0.4.0_2020-08-20/select-role-in-ui.md delete mode 100644 accounts/changelog/0.4.1_2020-08-27/assign_role.md delete mode 100644 accounts/changelog/0.4.1_2020-08-27/new-settings-api delete mode 100644 accounts/changelog/CHANGELOG.tmpl delete mode 100644 accounts/changelog/README.md delete mode 100644 accounts/changelog/TEMPLATE delete mode 100644 accounts/changelog/unreleased/.keep delete mode 100644 accounts/changelog/unreleased/add-create-form.md delete mode 100644 accounts/changelog/unreleased/add-delete-action.md delete mode 100644 accounts/changelog/unreleased/add-enable-disable-ui.md delete mode 100644 accounts/changelog/unreleased/builtin-regular-users.md delete mode 100644 accounts/changelog/unreleased/change-hashing-algorithm.md delete mode 100644 accounts/changelog/unreleased/fix-role-service-grpc.md delete mode 100644 accounts/changelog/unreleased/improve-accounts-ui.md delete mode 100644 accounts/changelog/unreleased/new-admin-user.md delete mode 100644 accounts/changelog/unreleased/single-service-handler.md delete mode 100644 accounts/changelog/unreleased/unique-account-fields delete mode 100644 accounts/changelog/unreleased/use-roles-cache.md delete mode 100644 accounts/changelog/unreleased/use-roles-manager.md delete mode 100644 accounts/cmd/ocis-accounts/main.go delete mode 100644 accounts/docker/Dockerfile.linux.amd64 delete mode 100644 accounts/docker/Dockerfile.linux.arm delete mode 100644 accounts/docker/Dockerfile.linux.arm64 delete mode 100644 accounts/docker/manifest.tmpl delete mode 100644 accounts/docs/_index.md delete mode 100644 accounts/docs/building.md delete mode 100644 accounts/docs/configuration.md delete mode 100644 accounts/docs/getting-started.md delete mode 100644 accounts/go.mod delete mode 100644 accounts/go.sum delete mode 100644 accounts/nightwatch.conf.js delete mode 100644 accounts/package.json delete mode 100644 accounts/pkg/assets/assets.go delete mode 100644 accounts/pkg/assets/embed.go delete mode 100644 accounts/pkg/assets/embed.yml delete mode 100644 accounts/pkg/assets/option.go delete mode 100644 accounts/pkg/command/add_account.go delete mode 100644 accounts/pkg/command/inspect_account.go delete mode 100644 accounts/pkg/command/list_accounts.go delete mode 100644 accounts/pkg/command/remove_account.go delete mode 100644 accounts/pkg/command/root.go delete mode 100644 accounts/pkg/command/server.go delete mode 100644 accounts/pkg/command/update_account.go delete mode 100644 accounts/pkg/config/config.go delete mode 100644 accounts/pkg/flagset/flagset.go delete mode 100644 accounts/pkg/metrics/metrics.go delete mode 100644 accounts/pkg/proto/v0/accounts.mock.go delete mode 100644 accounts/pkg/proto/v0/accounts.pb.go delete mode 100644 accounts/pkg/proto/v0/accounts.pb.micro.go delete mode 100644 accounts/pkg/proto/v0/accounts.pb.micro_test.go delete mode 100644 accounts/pkg/proto/v0/accounts.pb.web.go delete mode 100644 accounts/pkg/proto/v0/accounts.proto delete mode 100644 accounts/pkg/proto/v0/accounts.swagger.json delete mode 100644 accounts/pkg/proto/v0/bleve.go delete mode 100644 accounts/pkg/proto/v0/staticcheck.conf delete mode 100644 accounts/pkg/provider/bleve.go delete mode 100644 accounts/pkg/provider/tokenizer.go delete mode 100644 accounts/pkg/server/grpc/option.go delete mode 100644 accounts/pkg/server/grpc/server.go delete mode 100644 accounts/pkg/server/http/option.go delete mode 100644 accounts/pkg/server/http/server.go delete mode 100644 accounts/pkg/service/v0/accounts.go delete mode 100644 accounts/pkg/service/v0/accounts_permission_test.go delete mode 100644 accounts/pkg/service/v0/groups.go delete mode 100644 accounts/pkg/service/v0/option.go delete mode 100644 accounts/pkg/service/v0/permissions.go delete mode 100644 accounts/pkg/service/v0/service.go delete mode 100644 accounts/pkg/service/v0/settings.go delete mode 100644 accounts/pkg/version/version.go delete mode 100644 accounts/reflex.conf delete mode 100644 accounts/rollup.config.js delete mode 100644 accounts/sonar-project.properties delete mode 100644 accounts/third_party/google/api/annotations.proto delete mode 100644 accounts/third_party/google/api/field_behavior.proto delete mode 100644 accounts/third_party/google/api/http.proto delete mode 100644 accounts/third_party/google/protobuf/descriptor.proto delete mode 100644 accounts/third_party/google/protobuf/empty.proto delete mode 100644 accounts/third_party/google/protobuf/field_mask.proto delete mode 100644 accounts/third_party/google/protobuf/timestamp.proto delete mode 100644 accounts/tools.go delete mode 100644 accounts/ui/app.js delete mode 100644 accounts/ui/client/accounts/index.js delete mode 100644 accounts/ui/client/settings/index.js delete mode 100644 accounts/ui/components/App.vue delete mode 100644 accounts/ui/components/accounts/AccountsBatchActions.vue delete mode 100644 accounts/ui/components/accounts/AccountsCreate.vue delete mode 100644 accounts/ui/components/accounts/AccountsList.vue delete mode 100644 accounts/ui/components/accounts/AccountsListRow.vue delete mode 100644 accounts/ui/components/accounts/Avatar.vue delete mode 100644 accounts/ui/helpers/auth.js delete mode 100644 accounts/ui/helpers/utils.js delete mode 100644 accounts/ui/store/index.js delete mode 100644 accounts/ui/tests/acceptance/features/accounts.feature delete mode 100644 accounts/ui/tests/acceptance/pageobjects/accountsPage.js delete mode 100644 accounts/ui/tests/acceptance/stepDefinitions/accountsContext.js delete mode 100644 accounts/ui/tests/config/drone/identifier-registration.yml delete mode 100644 accounts/ui/tests/config/drone/ocis-config.json delete mode 100755 accounts/ui/tests/run-acceptance-test.sh delete mode 100644 accounts/yarn.lock diff --git a/accounts/.codacy.yml b/accounts/.codacy.yml deleted file mode 100644 index 98fa739209..0000000000 --- a/accounts/.codacy.yml +++ /dev/null @@ -1,10 +0,0 @@ ---- -exclude_paths: - - CHANGELOG.md - - changelog/** - - docs/** - - pkg/proto/** - - package.json - - rollup.config.js - -... diff --git a/accounts/.dockerignore b/accounts/.dockerignore deleted file mode 100644 index 4ec85b5e4f..0000000000 --- a/accounts/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!bin/ diff --git a/accounts/.drone.star b/accounts/.drone.star deleted file mode 100644 index 8aed252cb1..0000000000 --- a/accounts/.drone.star +++ /dev/null @@ -1,904 +0,0 @@ -def main(ctx): - before = [ - testing(ctx), - UITests(ctx, 'master', '1840e805bd1bef2e8ee2935de47076a3f2ca3788', 'master', 'e0746d8d3a5879d2c0cd4aaf30c07ee98ab2b945') - ] - - stages = [ - docker(ctx, 'amd64'), - docker(ctx, 'arm64'), - docker(ctx, 'arm'), - binary(ctx, 'linux'), - binary(ctx, 'darwin'), - binary(ctx, 'windows'), - ] - - after = [ - manifest(ctx), - changelog(ctx), - readme(ctx), - badges(ctx), - website(ctx), - ] - - return before + stages + after - -def testing(ctx): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'testing', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'frontend', - 'image': 'webhippie/nodejs:latest', - 'pull': 'always', - 'commands': [ - 'yarn install --frozen-lockfile', - 'yarn lint', - 'yarn test', - 'yarn build', - ], - }, - { - 'name': 'generate', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make generate', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'vet', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make vet', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'staticcheck', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make staticcheck', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'lint', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make lint', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'build', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make protobuf build', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'test', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make test', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'codacy', - 'image': 'plugins/codacy:1', - 'pull': 'always', - 'settings': { - 'token': { - 'from_secret': 'codacy_token', - }, - }, - }, - { - 'name': 'sonarcloud', - 'image': 'sonarsource/sonar-scanner-cli', - 'pull': 'always', - 'environment': { - 'SONAR_TOKEN': { - 'from_secret': 'sonar_token', - }, - 'SONAR_PULL_REQUEST_BASE': 'master' if ctx.build.event == 'pull_request' else None, - 'SONAR_PULL_REQUEST_BRANCH': ctx.build.source if ctx.build.event == 'pull_request' else None, - 'SONAR_PULL_REQUEST_KEY': ctx.build.ref.replace("refs/pull/", "").split("/")[0] if ctx.build.event == 'pull_request' else None, - }, - }, - ], - 'volumes': [ - { - 'name': 'gopath', - 'temp': {}, - }, - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - 'refs/pull/**', - ], - }, - } - -def docker(ctx, arch): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': arch, - 'platform': { - 'os': 'linux', - 'arch': arch, - }, - 'steps': [ - { - 'name': 'frontend', - 'image': 'webhippie/nodejs:latest', - 'pull': 'always', - 'commands': [ - 'yarn install --frozen-lockfile', - 'yarn build', - ], - }, - { - 'name': 'generate', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make generate', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'build', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make protobuf build', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'dryrun', - 'image': 'plugins/docker:18.09', - 'pull': 'always', - 'settings': { - 'dry_run': True, - 'tags': 'linux-%s' % (arch), - 'dockerfile': 'docker/Dockerfile.linux.%s' % (arch), - 'repo': ctx.repo.slug, - }, - 'when': { - 'ref': { - 'include': [ - 'refs/pull/**', - ], - }, - }, - }, - { - 'name': 'docker', - 'image': 'plugins/docker:18.09', - 'pull': 'always', - 'settings': { - 'username': { - 'from_secret': 'docker_username', - }, - 'password': { - 'from_secret': 'docker_password', - }, - 'auto_tag': True, - 'auto_tag_suffix': 'linux-%s' % (arch), - 'dockerfile': 'docker/Dockerfile.linux.%s' % (arch), - 'repo': ctx.repo.slug, - }, - 'when': { - 'ref': { - 'exclude': [ - 'refs/pull/**', - ], - }, - }, - }, - ], - 'volumes': [ - { - 'name': 'gopath', - 'temp': {}, - }, - ], - 'depends_on': [ - 'testing', - 'UiTests', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - 'refs/pull/**', - ], - }, - } - -def UITests(ctx, ocisBranch, ocisCommitId, phoenixBranch, phoenixCommitId): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'UiTests', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'build', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make protobuf build', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'build-ocis', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'git clone -b %s --single-branch --no-tags https://github.com/owncloud/ocis /srv/app/ocis' % (ocisBranch), - 'cd /srv/app/ocis', - 'git checkout %s' % (ocisCommitId), - 'make build', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app' - }, - ] - }, - { - 'name': 'ocis-server', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'detach': True, - 'environment' : { - 'REVA_STORAGE_HOME_DATA_TEMP_FOLDER': '/srv/app/tmp/', - 'REVA_STORAGE_LOCAL_ROOT': '/srv/app/tmp/reva/root', - 'REVA_STORAGE_OWNCLOUD_DATADIR': '/srv/app/tmp/reva/data', - 'REVA_STORAGE_OC_DATA_TEMP_FOLDER': '/srv/app/tmp/', - 'REVA_STORAGE_OWNCLOUD_REDIS_ADDR': 'redis:6379', - 'REVA_OIDC_ISSUER': 'https://ocis-server:9200', - 'PROXY_OIDC_ISSUER': 'https://ocis-server:9200', - 'REVA_STORAGE_OC_DATA_SERVER_URL': 'http://ocis-server:9164/data', - 'REVA_DATAGATEWAY_URL': 'https://ocis-server:9200/data', - 'REVA_FRONTEND_URL': 'https://ocis-server:9200', - 'REVA_LDAP_IDP': 'https://ocis-server:9200', - 'PHOENIX_WEB_CONFIG': '/drone/src/ui/tests/config/drone/ocis-config.json', - 'KONNECTD_IDENTIFIER_REGISTRATION_CONF': '/drone/src/ui/tests/config/drone/identifier-registration.yml', - 'KONNECTD_ISS': 'https://ocis-server:9200', - }, - 'commands': [ - 'mkdir -p /srv/app/tmp/reva', - # First run settings service because accounts need it to register the settings bundles - '/srv/app/ocis/bin/ocis settings &', - - # Wait for the settings service to start - "while [[ \"$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9190)\" != \"404\" ]]; do sleep 2; done", - - # Now start the accounts service - 'bin/ocis-accounts server &', - - # Wait for the accounts service to start - "while [[ \"$(curl -s -o /dev/null -w ''%{http_code}'' localhost:9181)\" != \"404\" ]]; do sleep 2; done", - - # Now run all the ocis services except the accounts and settings because they are already running - '/srv/app/ocis/bin/ocis server', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app' - }, - ] - }, - { - 'name': 'WebUIAcceptanceTests', - 'image': 'owncloudci/nodejs:10', - 'pull': 'always', - 'environment': { - 'SERVER_HOST': 'https://ocis-server:9200', - 'BACKEND_HOST': 'https://ocis-server:9200', - 'RUN_ON_OCIS': 'true', - 'OCIS_REVA_DATA_ROOT': '/srv/app/tmp/reva', - 'OCIS_SKELETON_DIR': '/srv/app/testing/data/webUISkeleton', - 'PHOENIX_CONFIG': '/drone/src/ui/tests/config/drone/ocis-config.json', - 'TEST_TAGS': 'not @skipOnOCIS and not @skip', - 'LOCAL_UPLOAD_DIR': '/uploads', - 'PHOENIX_PATH': '/srv/app/phoenix', - 'FEATURE_PATH': 'ui/tests/acceptance/features', - 'NODE_TLS_REJECT_UNAUTHORIZED': '0' - }, - 'commands': [ - 'git clone --depth=1 https://github.com/owncloud/testing.git /srv/app/testing', - 'git clone -b %s --single-branch https://github.com/owncloud/phoenix /srv/app/phoenix' % (phoenixBranch), - 'cd /srv/app/phoenix', - 'git checkout %s' % (phoenixCommitId), - 'cp -r /srv/app/phoenix/tests/acceptance/filesForUpload/* /uploads', - 'yarn install-all', - 'cd /drone/src', - 'yarn install --all', - 'make test-acceptance-webui' - ], - 'volumes': [{ - 'name': 'gopath', - 'path': '/srv/app', - }, - { - 'name': 'uploads', - 'path': '/uploads' - }] - }, - ], - 'services': [ - { - 'name': 'redis', - 'image': 'webhippie/redis', - 'pull': 'always', - 'environment': { - 'REDIS_DATABASES': 1 - }, - }, - { - 'name': 'selenium', - 'image': 'selenium/standalone-chrome-debug:3.141.59-20200326', - 'pull': 'always', - 'volumes': [{ - 'name': 'uploads', - 'path': '/uploads' - }], - }, - ], - 'volumes': [ - { - 'name': 'gopath', - 'temp': {}, - }, - { - 'name': 'uploads', - 'temp': {} - } - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - 'refs/pull/**', - ], - }, - } - -def binary(ctx, name): - if ctx.build.event == "tag": - settings = { - 'endpoint': { - 'from_secret': 's3_endpoint', - }, - 'access_key': { - 'from_secret': 'aws_access_key_id', - }, - 'secret_key': { - 'from_secret': 'aws_secret_access_key', - }, - 'bucket': { - 'from_secret': 's3_bucket', - }, - 'path_style': True, - 'strip_prefix': 'dist/release/', - 'source': 'dist/release/*', - 'target': '/ocis/%s/%s' % (ctx.repo.name.replace("ocis-", ""), ctx.build.ref.replace("refs/tags/v", "")), - } - else: - settings = { - 'endpoint': { - 'from_secret': 's3_endpoint', - }, - 'access_key': { - 'from_secret': 'aws_access_key_id', - }, - 'secret_key': { - 'from_secret': 'aws_secret_access_key', - }, - 'bucket': { - 'from_secret': 's3_bucket', - }, - 'path_style': True, - 'strip_prefix': 'dist/release/', - 'source': 'dist/release/*', - 'target': '/ocis/%s/testing' % (ctx.repo.name.replace("ocis-", "")), - } - - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': name, - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'frontend', - 'image': 'webhippie/nodejs:latest', - 'pull': 'always', - 'commands': [ - 'yarn install --frozen-lockfile', - 'yarn build', - ], - }, - { - 'name': 'generate', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make generate', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'build', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make release-%s' % (name), - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'finish', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make release-finish', - ], - 'volumes': [ - { - 'name': 'gopath', - 'path': '/srv/app', - }, - ], - }, - { - 'name': 'upload', - 'image': 'plugins/s3:1', - 'pull': 'always', - 'settings': settings, - 'when': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - ], - }, - }, - { - 'name': 'changelog', - 'image': 'toolhippie/calens:latest', - 'pull': 'always', - 'commands': [ - 'calens --version %s -o dist/CHANGELOG.md' % ctx.build.ref.replace("refs/tags/v", "").split("-")[0], - ], - 'when': { - 'ref': [ - 'refs/tags/**', - ], - }, - }, - { - 'name': 'release', - 'image': 'plugins/github-release:1', - 'pull': 'always', - 'settings': { - 'api_key': { - 'from_secret': 'github_token', - }, - 'files': [ - 'dist/release/*', - ], - 'title': ctx.build.ref.replace("refs/tags/v", ""), - 'note': 'dist/CHANGELOG.md', - 'overwrite': True, - 'prerelease': len(ctx.build.ref.split("-")) > 1, - }, - 'when': { - 'ref': [ - 'refs/tags/**', - ], - }, - }, - ], - 'volumes': [ - { - 'name': 'gopath', - 'temp': {}, - }, - ], - 'depends_on': [ - 'testing', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - 'refs/pull/**', - ], - }, - } - -def manifest(ctx): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'manifest', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'execute', - 'image': 'plugins/manifest:1', - 'pull': 'always', - 'settings': { - 'username': { - 'from_secret': 'docker_username', - }, - 'password': { - 'from_secret': 'docker_password', - }, - 'spec': 'docker/manifest.tmpl', - 'auto_tag': True, - 'ignore_missing': True, - }, - }, - ], - 'depends_on': [ - 'amd64', - 'arm64', - 'arm', - 'linux', - 'darwin', - 'windows', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - ], - }, - } - -def changelog(ctx): - repo_slug = ctx.build.source_repo if ctx.build.source_repo else ctx.repo.slug - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'changelog', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'clone': { - 'disable': True, - }, - 'steps': [ - { - 'name': 'clone', - 'image': 'plugins/git-action:1', - 'pull': 'always', - 'settings': { - 'actions': [ - 'clone', - ], - 'remote': 'https://github.com/%s' % (repo_slug), - 'branch': ctx.build.source if ctx.build.event == 'pull_request' else 'master', - 'path': '/drone/src', - 'netrc_machine': 'github.com', - 'netrc_username': { - 'from_secret': 'github_username', - }, - 'netrc_password': { - 'from_secret': 'github_token', - }, - }, - }, - { - 'name': 'generate', - 'image': 'webhippie/golang:1.13', - 'pull': 'always', - 'commands': [ - 'make changelog', - ], - }, - { - 'name': 'diff', - 'image': 'owncloud/alpine:latest', - 'pull': 'always', - 'commands': [ - 'git diff', - ], - }, - { - 'name': 'output', - 'image': 'owncloud/alpine:latest', - 'pull': 'always', - 'commands': [ - 'cat CHANGELOG.md', - ], - }, - { - 'name': 'publish', - 'image': 'plugins/git-action:1', - 'pull': 'always', - 'settings': { - 'actions': [ - 'commit', - 'push', - ], - 'message': 'Automated changelog update [skip ci]', - 'branch': 'master', - 'author_email': 'devops@owncloud.com', - 'author_name': 'ownClouders', - 'netrc_machine': 'github.com', - 'netrc_username': { - 'from_secret': 'github_username', - }, - 'netrc_password': { - 'from_secret': 'github_token', - }, - }, - 'when': { - 'ref': { - 'exclude': [ - 'refs/pull/**', - ], - }, - }, - }, - ], - 'depends_on': [ - 'manifest', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/pull/**', - ], - }, - } - -def readme(ctx): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'readme', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'execute', - 'image': 'sheogorath/readme-to-dockerhub:latest', - 'pull': 'always', - 'environment': { - 'DOCKERHUB_USERNAME': { - 'from_secret': 'docker_username', - }, - 'DOCKERHUB_PASSWORD': { - 'from_secret': 'docker_password', - }, - 'DOCKERHUB_REPO_PREFIX': ctx.repo.namespace, - 'DOCKERHUB_REPO_NAME': ctx.repo.name, - 'SHORT_DESCRIPTION': 'Docker images for %s' % (ctx.repo.name), - 'README_PATH': 'README.md', - }, - }, - ], - 'depends_on': [ - 'changelog', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - ], - }, - } - -def badges(ctx): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'badges', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'execute', - 'image': 'plugins/webhook:1', - 'pull': 'always', - 'settings': { - 'urls': { - 'from_secret': 'microbadger_url', - }, - }, - }, - ], - 'depends_on': [ - 'readme', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/tags/**', - ], - }, - } - -def website(ctx): - return { - 'kind': 'pipeline', - 'type': 'docker', - 'name': 'website', - 'platform': { - 'os': 'linux', - 'arch': 'amd64', - }, - 'steps': [ - { - 'name': 'prepare', - 'image': 'owncloudci/alpine:latest', - 'commands': [ - 'make docs-copy' - ], - }, - { - 'name': 'test', - 'image': 'webhippie/hugo:latest', - 'commands': [ - 'cd hugo', - 'hugo', - ], - }, - { - 'name': 'list', - 'image': 'owncloudci/alpine:latest', - 'commands': [ - 'tree hugo/public', - ], - }, - { - 'name': 'publish', - 'image': 'plugins/gh-pages:1', - 'pull': 'always', - 'settings': { - 'username': { - 'from_secret': 'github_username', - }, - 'password': { - 'from_secret': 'github_token', - }, - 'pages_directory': 'docs/', - 'target_branch': 'docs', - }, - 'when': { - 'ref': { - 'exclude': [ - 'refs/pull/**', - ], - }, - }, - }, - { - 'name': 'downstream', - 'image': 'plugins/downstream', - 'settings': { - 'server': 'https://cloud.drone.io/', - 'token': { - 'from_secret': 'drone_token', - }, - 'repositories': [ - 'owncloud/owncloud.github.io@source', - ], - }, - 'when': { - 'ref': { - 'exclude': [ - 'refs/pull/**', - ], - }, - }, - }, - ], - 'depends_on': [ - 'badges', - ], - 'trigger': { - 'ref': [ - 'refs/heads/master', - 'refs/pull/**', - ], - }, - } diff --git a/accounts/.editorconfig b/accounts/.editorconfig deleted file mode 100644 index 7b368379e8..0000000000 --- a/accounts/.editorconfig +++ /dev/null @@ -1,35 +0,0 @@ -# http://editorconfig.org - -root = true - -[*] -charset = utf-8 -insert_final_newline = true -trim_trailing_whitespace = true - -[Makefile] -indent_style = tab -indent_size = 4 - -[*.go] -indent_style = tab -indent_size = 4 - -[*.starlark] -indent_style = space -indent_size = 2 - -[*.{yml,json}] -indent_style = space -indent_size = 2 - -[*.{js,vue}] -indent_style = space -indent_size = 2 - -[*.{css,less}] -indent_style = space -indent_size = 2 - -[*.md] -trim_trailing_whitespace = true \ No newline at end of file diff --git a/accounts/.eslintrc.json b/accounts/.eslintrc.json deleted file mode 100644 index 5e35a3432c..0000000000 --- a/accounts/.eslintrc.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "env": { - "browser": true, - "es6": true, - "amd": true - }, - "extends": [ - "standard", - "plugin:vue/essential" - ], - "parserOptions": { - "sourceType": "module" - }, - "rules": { - - } -} diff --git a/accounts/.github/config.yml b/accounts/.github/config.yml deleted file mode 100644 index d39920e20c..0000000000 --- a/accounts/.github/config.yml +++ /dev/null @@ -1,12 +0,0 @@ -# Configuration for update-docs - https://github.com/behaviorbot/update-docs - -# Comment to be posted to on PRs that don't update documentation -updateDocsComment: > - Thanks for opening this pull request! The maintainers of this repository would appreciate it if you would create a [changelog](https://github.com/owncloud/ocis/accounts/blob/master/changelog/README.md) item based on your changes. -updateDocsWhiteList: - - Tests-only - - tests-only - - Tests-Only - -updateDocsTargetFiles: - - changelog/unreleased/ diff --git a/accounts/.github/issue_template.md b/accounts/.github/issue_template.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/accounts/.github/pull_request_template.md b/accounts/.github/pull_request_template.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/accounts/.github/settings.yml b/accounts/.github/settings.yml deleted file mode 100644 index 0668e8885b..0000000000 --- a/accounts/.github/settings.yml +++ /dev/null @@ -1,98 +0,0 @@ ---- -repository: - name: ocis-accounts - description: ':busts_in_silhouette: Serve Accounts for oCIS' - homepage: https://owncloud.github.io/extensions/ocis_accounts/ - topics: reva, ocis - - private: false - has_issues: true - has_projects: false - has_wiki: false - has_downloads: false - - default_branch: master - - allow_squash_merge: true - allow_merge_commit: true - allow_rebase_merge: true - -labels: - - name: bug - color: d73a4a - description: Something isn't working - - name: documentation - color: 0075ca - description: Improvements or additions to documentation - - name: duplicate - color: cfd3d7 - description: This issue or pull request already exists - - name: enhancement - color: a2eeef - description: New feature or request - - name: good first issue - color: 7057ff - description: Good for newcomers - - name: help wanted - color: 008672 - description: Extra attention is needed - - name: invalid - color: e4e669 - description: This doesn't seem right - - name: question - color: d876e3 - description: Further information is requested - - name: wontfix - color: ffffff - description: This will not be worked on - - name: effort/trivial - color: c2e0c6 - description: Required effort to finish task - - name: effort/0.25d - color: c2e0c6 - description: Required effort to finish task - - name: effort/0.5d - color: c2e0c6 - description: Required effort to finish task - - name: effort/1d - color: c2e0c6 - description: Required effort to finish task - - name: effort/2d - color: c2e0c6 - description: Required effort to finish task - - name: effort/4d - color: c2e0c6 - description: Required effort to finish task - - name: effort/5d - color: c2e0c6 - description: Required effort to finish task - - name: effort/10d - color: c2e0c6 - description: Required effort to finish task - -teams: - - name: ci - permission: admin - - name: employees - permission: push - -branches: - - name: master - protection: - required_pull_request_reviews: - required_approving_review_count: 1 - dismiss_stale_reviews: false - require_code_owner_reviews: false - dismissal_restrictions: {} - required_status_checks: - strict: true - contexts: - - continuous-integration/drone/pr - enforce_admins: false - restrictions: - users: [] - teams: - - ci - - employees - -... diff --git a/accounts/.gitignore b/accounts/.gitignore deleted file mode 100644 index 6a7077affe..0000000000 --- a/accounts/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -coverage.out - -.idea -/bin -/dist -/hugo - -/pkg/proto/v0/accounts-store/ - -/node_modules -/assets diff --git a/accounts/CHANGELOG.md b/accounts/CHANGELOG.md deleted file mode 100644 index fa6d2cf795..0000000000 --- a/accounts/CHANGELOG.md +++ /dev/null @@ -1,444 +0,0 @@ -# Changelog for [unreleased] (UNRELEASED) - -The following sections list the changes in ocis-accounts unreleased. - -[unreleased]: https://github.com/owncloud/ocis/accounts/compare/v0.4.1...master - -## Summary - -* Bugfix - Initialize roleService client in GRPC server: [#114](https://github.com/owncloud/ocis/accounts/pull/114) -* Bugfix - Cleanup separated indices in memory: [#224](https://github.com/owncloud/product/issues/224) -* Bugfix - Don't create account if id/mail/username already taken: [#123](https://github.com/owncloud/ocis/accounts/pull/123) -* Change - Set user role on builtin users: [#102](https://github.com/owncloud/ocis/accounts/pull/102) -* Change - Add new builtin admin user: [#102](https://github.com/owncloud/ocis/accounts/pull/102) -* Change - We make use of the roles cache to enforce permission checks: [#100](https://github.com/owncloud/ocis/accounts/pull/100) -* Change - We make use of the roles manager to enforce permission checks: [#108](https://github.com/owncloud/ocis/accounts/pull/108) -* Enhancement - Add create account form: [#148](https://github.com/owncloud/product/issues/148) -* Enhancement - Add delete accounts action: [#148](https://github.com/owncloud/product/issues/148) -* Enhancement - Add enable/disable capabilities to the WebUI: [#118](https://github.com/owncloud/product/issues/118) -* Enhancement - Improve visual appearance of accounts UI: [#222](https://github.com/owncloud/product/issues/222) - -## Details - -* Bugfix - Initialize roleService client in GRPC server: [#114](https://github.com/owncloud/ocis/accounts/pull/114) - - We fixed the initialization of the GRPC server by also providing a roleService client and a - roleManager instance. - - https://github.com/owncloud/ocis/accounts/pull/114 - - -* Bugfix - Cleanup separated indices in memory: [#224](https://github.com/owncloud/product/issues/224) - - The accounts service was creating a bleve index instance in the service handler, thus creating - separate in memory indices for the http and grpc servers. We moved the service handler creation - out of the server creation so that the service handler, thus also the bleve index, is a shared - instance of the servers. - - This fixes a bug that accounts created through the web ui were not able to sign in until a service - restart. - - https://github.com/owncloud/product/issues/224 - https://github.com/owncloud/ocis/accounts/pull/117 - https://github.com/owncloud/ocis/accounts/pull/118 - - -* Bugfix - Don't create account if id/mail/username already taken: [#123](https://github.com/owncloud/ocis/accounts/pull/123) - - We don't allow anymore to create a new account if the provided id/mail/username is already - taken. - - https://github.com/owncloud/ocis/accounts/pull/123 - - -* Change - Set user role on builtin users: [#102](https://github.com/owncloud/ocis/accounts/pull/102) - - We now set the default `user` role on our builtin users. - - https://github.com/owncloud/ocis/accounts/pull/102 - - -* Change - Add new builtin admin user: [#102](https://github.com/owncloud/ocis/accounts/pull/102) - - We added a new builtin user `moss` and assigned the admin role. - - https://github.com/owncloud/ocis/accounts/pull/102 - - -* Change - We make use of the roles cache to enforce permission checks: [#100](https://github.com/owncloud/ocis/accounts/pull/100) - - The roles cache and its cache update middleware are used to make permission checks possible. - The permission checks take place in the accounts handler. - - https://github.com/owncloud/ocis/accounts/pull/100 - - -* Change - We make use of the roles manager to enforce permission checks: [#108](https://github.com/owncloud/ocis/accounts/pull/108) - - The roles cache and its cache update middleware have been replaced with a roles manager in - ocis-pkg/v2. We've switched over to the new roles manager implementation, to prepare for - permission checks on grpc requests as well. - - https://github.com/owncloud/ocis/accounts/pull/108 - https://github.com/owncloud/ocis-pkg/pull/60 - - -* Enhancement - Add create account form: [#148](https://github.com/owncloud/product/issues/148) - - We've added a form to create new users above the accounts list. - - https://github.com/owncloud/product/issues/148 - https://github.com/owncloud/ocis/accounts/pull/115 - - -* Enhancement - Add delete accounts action: [#148](https://github.com/owncloud/product/issues/148) - - We've added an action into the actions dropdown to enable admins to delete users. - - https://github.com/owncloud/product/issues/148 - https://github.com/owncloud/ocis/accounts/pull/115 - - -* Enhancement - Add enable/disable capabilities to the WebUI: [#118](https://github.com/owncloud/product/issues/118) - - We've added batch actions into the accounts listing to provide options to enable and disable - accounts. - - https://github.com/owncloud/product/issues/118 - https://github.com/owncloud/ocis/accounts/pull/109 - - -* Enhancement - Improve visual appearance of accounts UI: [#222](https://github.com/owncloud/product/issues/222) - - We aligned the visual appearance of the accounts UI with default ocis-web apps (full width, - style of batch actions), added icons to buttons, extracted the buttons from the batch actions - dropdown into individual buttons, improved the wording added a confirmation widget for the - user deletion and removed the uid and gid columns. - - https://github.com/owncloud/product/issues/222 - https://github.com/owncloud/ocis/accounts/pull/116 - -# Changelog for [0.4.1] (2020-08-27) - -The following sections list the changes in ocis-accounts 0.4.1. - -[0.4.1]: https://github.com/owncloud/ocis/accounts/compare/v0.3.0...v0.4.1 - -## Summary - -* Bugfix - Adapting to new settings API for fetching roles: [#96](https://github.com/owncloud/ocis/accounts/pull/96) -* Change - Create account api-call implicitly adds "default-user" role: [#173](https://github.com/owncloud/product/issues/173) - -## Details - -* Bugfix - Adapting to new settings API for fetching roles: [#96](https://github.com/owncloud/ocis/accounts/pull/96) - - We fixed the usage of the ocis-settings endpoint for fetching roles. - - https://github.com/owncloud/ocis/accounts/pull/96 - - -* Change - Create account api-call implicitly adds "default-user" role: [#173](https://github.com/owncloud/product/issues/173) - - When calling CreateAccount default-user-role is implicitly added. - - https://github.com/owncloud/product/issues/173 - -# Changelog for [0.3.0] (2020-08-20) - -The following sections list the changes in ocis-accounts 0.3.0. - -[0.3.0]: https://github.com/owncloud/ocis/accounts/compare/v0.4.0...v0.3.0 - -## Summary - -* Bugfix - Atomic Requests: [#82](https://github.com/owncloud/ocis/accounts/pull/82) -* Bugfix - Unescape value for prefix query: [#76](https://github.com/owncloud/ocis/accounts/pull/76) -* Change - Adapt to new ocis-settings data model: [#87](https://github.com/owncloud/ocis/accounts/pull/87) -* Change - Add permissions for language to default roles: [#88](https://github.com/owncloud/ocis/accounts/pull/88) - -## Details - -* Bugfix - Atomic Requests: [#82](https://github.com/owncloud/ocis/accounts/pull/82) - - Operations on the file system level are now atomic. This happens only on the provisioning API. - - https://github.com/owncloud/ocis/accounts/pull/82 - - -* Bugfix - Unescape value for prefix query: [#76](https://github.com/owncloud/ocis/accounts/pull/76) - - Prefix queries also need to unescape token values like `'some ''ol string'` to `some 'ol - string` before using it in a prefix query - - https://github.com/owncloud/ocis/accounts/pull/76 - - -* Change - Adapt to new ocis-settings data model: [#87](https://github.com/owncloud/ocis/accounts/pull/87) - - Ocis-settings introduced UUIDs and less verbose endpoint and message type names. This PR - adjusts ocis-accounts accordingly. - - https://github.com/owncloud/ocis/accounts/pull/87 - https://github.com/owncloud/ocis/settings/pull/46 - - -* Change - Add permissions for language to default roles: [#88](https://github.com/owncloud/ocis/accounts/pull/88) - - Ocis-settings has default roles and exposes the respective bundle uuids. We now added - permissions for reading/writing the preferred language to the default roles. - - https://github.com/owncloud/ocis/accounts/pull/88 - -# Changelog for [0.4.0] (2020-08-20) - -The following sections list the changes in ocis-accounts 0.4.0. - -[0.4.0]: https://github.com/owncloud/ocis/accounts/compare/v0.2.0...v0.4.0 - -## Summary - -* Change - Add role selection to accounts UI: [#103](https://github.com/owncloud/product/issues/103) - -## Details - -* Change - Add role selection to accounts UI: [#103](https://github.com/owncloud/product/issues/103) - - We added a role selection dropdown for each account in the accounts UI. As a first iteration, - this doesn't require account management permissions. - - https://github.com/owncloud/product/issues/103 - https://github.com/owncloud/ocis/accounts/pull/89 - -# Changelog for [0.2.0] (2020-08-19) - -The following sections list the changes in ocis-accounts 0.2.0. - -[0.2.0]: https://github.com/owncloud/ocis/accounts/compare/v0.1.1...v0.2.0 - -## Summary - -* Bugfix - Add write mutexes: [#71](https://github.com/owncloud/ocis/accounts/pull/71) -* Bugfix - Fix the accountId and groupId mismatch in DeleteGroup Method: [#60](https://github.com/owncloud/ocis/accounts/pull/60) -* Bugfix - Fix index mapping: [#73](https://github.com/owncloud/ocis/accounts/issues/73) -* Bugfix - Use NewNumericRangeInclusiveQuery for numeric literals: [#28](https://github.com/owncloud/ocis-glauth/issues/28) -* Bugfix - Prevent segfault when no password is set: [#65](https://github.com/owncloud/ocis/accounts/pull/65) -* Bugfix - Update account return value not used: [#70](https://github.com/owncloud/ocis/accounts/pull/70) -* Bugfix - Build docker images with alpine:latest instead of alpine:edge: [#64](https://github.com/owncloud/ocis/accounts/pull/64) -* Change - Align structure of this extension with other extensions: [#51](https://github.com/owncloud/ocis/accounts/pull/51) -* Change - Change api errors: [#11](https://github.com/owncloud/ocis/accounts/issues/11) -* Change - Enable accounts on creation: [#43](https://github.com/owncloud/ocis/accounts/issues/43) -* Change - Fix index update on create/update: [#57](https://github.com/owncloud/ocis/accounts/issues/57) -* Change - Pass around the correct logger throughout the code: [#41](https://github.com/owncloud/ocis/accounts/issues/41) -* Change - Remove timezone setting: [#33](https://github.com/owncloud/ocis/accounts/pull/33) -* Change - Tighten screws on usernames and email addresses: [#65](https://github.com/owncloud/ocis/accounts/pull/65) -* Enhancement - Add early version of cli tools for user-management: [#69](https://github.com/owncloud/ocis/accounts/pull/69) -* Enhancement - Update accounts API: [#30](https://github.com/owncloud/ocis/accounts/pull/30) -* Enhancement - Add simple user listing UI: [#51](https://github.com/owncloud/ocis/accounts/pull/51) - -## Details - -* Bugfix - Add write mutexes: [#71](https://github.com/owncloud/ocis/accounts/pull/71) - - Concurrent account or groups writes would corrupt the json file on disk, because the different - goroutines would be treated as a single thread from the os. We introduce a mutex for account and - group file writes each. This locks the update frequency for all accounts/groups and could be - further improved by using a concurrent map of mutexes with a mutex per account / group. PR - welcome. - - https://github.com/owncloud/ocis/accounts/pull/71 - - -* Bugfix - Fix the accountId and groupId mismatch in DeleteGroup Method: [#60](https://github.com/owncloud/ocis/accounts/pull/60) - - We've fixed a bug in deleting the groups. - - The accountId and GroupId were swapped when removing the member from a group after deleting the - group. - - https://github.com/owncloud/ocis/accounts/pull/60 - - -* Bugfix - Fix index mapping: [#73](https://github.com/owncloud/ocis/accounts/issues/73) - - The index mapping was not being used because we were not using the right blevesearch TypeField, - leading to username like properties like `preferred_name` and - `on_premises_sam_account_name` to be case sensitive. - - https://github.com/owncloud/ocis/accounts/issues/73 - - -* Bugfix - Use NewNumericRangeInclusiveQuery for numeric literals: [#28](https://github.com/owncloud/ocis-glauth/issues/28) - - Some LDAP properties like `uidnumber` and `gidnumber` are numeric. When an OS tries to look up a - user it will not only try to lookup the user by username, but also by the `uidnumber`: - `(&(objectclass=posixAccount)(uidnumber=20000))`. The accounts backend for glauth was - sending that as a string query `uid_number eq '20000'` and has been changed to send it as - `uid_number eq 20000`. The removed quotes allow the parser in ocis-accounts to identify the - numeric literal and use the NewNumericRangeInclusiveQuery instead of a TermQuery. - - https://github.com/owncloud/ocis-glauth/issues/28 - https://github.com/owncloud/ocis/accounts/pull/68 - https://github.com/owncloud/ocis-glauth/pull/29 - - -* Bugfix - Prevent segfault when no password is set: [#65](https://github.com/owncloud/ocis/accounts/pull/65) - - Passwords are stored in a dedicated child struct of an account. We fixed several segfault - conditions where the methods would try to unset a password when that child struct was not - existing. - - https://github.com/owncloud/ocis/accounts/pull/65 - - -* Bugfix - Update account return value not used: [#70](https://github.com/owncloud/ocis/accounts/pull/70) - - In order to return a value using the micro go code we need to override the `out` value. - - https://github.com/owncloud/ocis/accounts/pull/70 - - -* Bugfix - Build docker images with alpine:latest instead of alpine:edge: [#64](https://github.com/owncloud/ocis/accounts/pull/64) - - ARM builds were failing when built on alpine:edge, so we switched to alpine:latest instead. - - https://github.com/owncloud/ocis/accounts/pull/64 - - -* Change - Align structure of this extension with other extensions: [#51](https://github.com/owncloud/ocis/accounts/pull/51) - - We aim to have a similar project structure for all our ocis extensions. This extension was - different with regard to the structure of the server command and naming of some flag names. - - https://github.com/owncloud/ocis/accounts/pull/51 - - -* Change - Change api errors: [#11](https://github.com/owncloud/ocis/accounts/issues/11) - - Replaced the plain golang errors with the error model from the micro framework. - - https://github.com/owncloud/ocis/accounts/issues/11 - - -* Change - Enable accounts on creation: [#43](https://github.com/owncloud/ocis/accounts/issues/43) - - Accounts have been created with the account_enabled flag set to false. Now when they are - created accounts will be enabled per default. - - https://github.com/owncloud/ocis/accounts/issues/43 - - -* Change - Fix index update on create/update: [#57](https://github.com/owncloud/ocis/accounts/issues/57) - - We fixed a bug in creating/updating accounts and groups, that caused new entities not to show up - in list queries. - - https://github.com/owncloud/ocis/accounts/issues/57 - https://github.com/owncloud/ocis/accounts/pull/59 - - -* Change - Pass around the correct logger throughout the code: [#41](https://github.com/owncloud/ocis/accounts/issues/41) - - Pass around the logger to have consistent log formatting, log level, etc. - - https://github.com/owncloud/ocis/accounts/issues/41 - https://github.com/owncloud/ocis/accounts/pull/48 - - -* Change - Remove timezone setting: [#33](https://github.com/owncloud/ocis/accounts/pull/33) - - We had a timezone setting in our profile settings bundle. As we're not dealing with a timezone - yet it would be confusing for the user to have a timezone setting available. We removed it, until - we have a timezone implementation available in ocis-web. - - https://github.com/owncloud/ocis/accounts/pull/33 - - -* Change - Tighten screws on usernames and email addresses: [#65](https://github.com/owncloud/ocis/accounts/pull/65) - - In order to match accounts to the OIDC claims we currently rely on the email address or username - to be present. We force both to match the [W3C recommended - regex](https://www.w3.org/TR/2016/REC-html51-20161101/sec-forms.html#valid-e-mail-address) - with usernames having to start with a character or `_`. This allows the username to be presented - and used in ACLs when integrating the os with the glauth LDAP service of ocis. - - https://github.com/owncloud/ocis/accounts/pull/65 - - -* Enhancement - Add early version of cli tools for user-management: [#69](https://github.com/owncloud/ocis/accounts/pull/69) - - Following commands are available: - - List, ls List existing accounts add, create, Create a new account update Make changes to an - existing account remove, rm Removes an existing account inspect Show detailed data on an - existing account - - See --help for details. - - Note that not all account-attributes have an effect yet. This is due to ocis being in an early - development stage. - - https://github.com/owncloud/product/issues/115 - https://github.com/owncloud/ocis/accounts/pull/69 - - -* Enhancement - Update accounts API: [#30](https://github.com/owncloud/ocis/accounts/pull/30) - - We updated the api to allow fetching users not onyl by UUID, but also by identity (OpenID issuer - and subject) email, username and optionally a password. - - https://github.com/owncloud/ocis/accounts/pull/30 - - -* Enhancement - Add simple user listing UI: [#51](https://github.com/owncloud/ocis/accounts/pull/51) - - We added an extension for ocis-web that shows a simple list of all existing users. - - https://github.com/owncloud/ocis/accounts/pull/51 - -# Changelog for [0.1.1] (2020-04-29) - -The following sections list the changes in ocis-accounts 0.1.1. - -[0.1.1]: https://github.com/owncloud/ocis/accounts/compare/v0.1.0...v0.1.1 - -## Summary - -* Enhancement - Logging is configurable: [#24](https://github.com/owncloud/ocis/accounts/pull/24) - -## Details - -* Enhancement - Logging is configurable: [#24](https://github.com/owncloud/ocis/accounts/pull/24) - - ACCOUNTS_LOG_* env-vars or cli-flags can be used for logging configuration. See --help for - more details. - - https://github.com/owncloud/ocis/accounts/pull/24 - -# Changelog for [0.1.0] (2020-03-18) - -The following sections list the changes in ocis-accounts 0.1.0. - -[0.1.0]: https://github.com/owncloud/ocis/accounts/compare/500e303cb544ed93d84153f01219d77eeee44929...v0.1.0 - -## Summary - -* Change - Initial release of basic version: [#1](https://github.com/owncloud/ocis/accounts/issues/1) -* Enhancement - Configuration: [#15](https://github.com/owncloud/ocis/accounts/pull/15) - -## Details - -* Change - Initial release of basic version: [#1](https://github.com/owncloud/ocis/accounts/issues/1) - - Just prepared an initial basic version. - - https://github.com/owncloud/ocis/accounts/issues/1 - - -* Enhancement - Configuration: [#15](https://github.com/owncloud/ocis/accounts/pull/15) - - Extensions should be responsible of configuring themselves. We use Viper for config loading - from default paths. Environment variables **WILL** take precedence over config files. - - https://github.com/owncloud/ocis/accounts/pull/15 - diff --git a/accounts/LICENSE b/accounts/LICENSE deleted file mode 100644 index d645695673..0000000000 --- a/accounts/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/accounts/Makefile b/accounts/Makefile deleted file mode 100644 index c4250c3209..0000000000 --- a/accounts/Makefile +++ /dev/null @@ -1,205 +0,0 @@ -SHELL := bash -NAME := ocis-accounts -IMPORT := github.com/owncloud/$(NAME) -BIN := bin -DIST := dist -HUGO := hugo -PROTO_VERSION := v0 -PROTO_SRC := pkg/proto/$(PROTO_VERSION) - -ifeq ($(OS), Windows_NT) - EXECUTABLE := $(NAME).exe - UNAME := Windows -else - EXECUTABLE := $(NAME) - UNAME := $(shell uname -s) -endif - -ifeq ($(UNAME), Darwin) - GOBUILD ?= go build -i -else - GOBUILD ?= go build -endif - -PACKAGES ?= $(shell go list ./...) -SOURCES ?= $(shell find . -name "*.go" -type f -not -path "./node_modules/*") -GENERATE ?= $(IMPORT)/pkg/assets - -FEATURE_PATH ?= "ui/tests/acceptance/features" - -TAGS ?= - -ifndef OUTPUT - ifneq ($(DRONE_TAG),) - OUTPUT ?= $(subst v,,$(DRONE_TAG)) - else - OUTPUT ?= testing - endif -endif - -ifndef VERSION - ifneq ($(DRONE_TAG),) - VERSION ?= $(subst v,,$(DRONE_TAG)) - else - VERSION ?= $(shell git rev-parse --short HEAD) - endif -endif - -ifndef DATE - DATE := $(shell date -u '+%Y%m%d') -endif - -LDFLAGS += -s -w -X "$(IMPORT)/pkg/version.String=$(VERSION)" -X "$(IMPORT)/pkg/version.Date=$(DATE)" -GCFLAGS += all=-N -l - -.PHONY: all -all: build - -.PHONY: sync -sync: - go mod download - -.PHONY: clean -clean: - go clean -i ./... - rm -rf $(BIN) $(DIST) $(HUGO) - -.PHONY: fmt -fmt: - gofmt -s -w $(SOURCES) - -.PHONY: vet -vet: - go vet $(PACKAGES) - -.PHONY: staticcheck -staticcheck: - go run honnef.co/go/tools/cmd/staticcheck -tags '$(TAGS)' $(PACKAGES) - -.PHONY: lint -lint: - for PKG in $(PACKAGES); do go run golang.org/x/lint/golint -set_exit_status $$PKG || exit 1; done; - -.PHONY: generate -generate: protobuf - go generate $(GENERATE) - -.PHONY: changelog -changelog: - go run github.com/restic/calens >| CHANGELOG.md - -.PHONY: test -test: - go run github.com/haya14busa/goverage -v -coverprofile coverage.out $(PACKAGES) - -.PHONY: install -install: $(SOURCES) - go install -v -tags '$(TAGS)' -ldflags '$(LDFLAGS)' ./cmd/$(NAME) - -.PHONY: build -build: $(BIN)/$(EXECUTABLE) $(BIN)/$(EXECUTABLE)-debug - -$(BIN)/$(EXECUTABLE): $(SOURCES) - $(GOBUILD) -v -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -o $@ ./cmd/$(NAME) - -$(BIN)/$(EXECUTABLE)-debug: $(SOURCES) - $(GOBUILD) -v -tags '$(TAGS)' -ldflags '$(LDFLAGS)' -gcflags '$(GCFLAGS)' -o $@ ./cmd/$(NAME) - -.PHONY: release -release: release-dirs release-linux release-windows release-darwin release-copy release-check - -.PHONY: release-dirs -release-dirs: - mkdir -p $(DIST)/binaries $(DIST)/release - -.PHONY: release-linux -release-linux: release-dirs - go run github.com/mitchellh/gox -tags 'netgo $(TAGS)' -ldflags '-extldflags "-static" $(LDFLAGS)' -os 'linux' -arch 'amd64 386 arm64 arm' -output '$(DIST)/binaries/$(EXECUTABLE)-$(OUTPUT)-{{.OS}}-{{.Arch}}' ./cmd/$(NAME) - -.PHONY: release-windows -release-windows: release-dirs - go run github.com/mitchellh/gox -tags 'netgo $(TAGS)' -ldflags '-extldflags "-static" $(LDFLAGS)' -os 'windows' -arch 'amd64' -output '$(DIST)/binaries/$(EXECUTABLE)-$(OUTPUT)-{{.OS}}-{{.Arch}}' ./cmd/$(NAME) - -.PHONY: release-darwin -release-darwin: release-dirs - go run github.com/mitchellh/gox -tags 'netgo $(TAGS)' -ldflags '$(LDFLAGS)' -os 'darwin' -arch 'amd64' -output '$(DIST)/binaries/$(EXECUTABLE)-$(OUTPUT)-{{.OS}}-{{.Arch}}' ./cmd/$(NAME) - -.PHONY: release-copy -release-copy: - $(foreach file,$(wildcard $(DIST)/binaries/$(EXECUTABLE)-*),cp $(file) $(DIST)/release/$(notdir $(file));) - -.PHONY: release-check -release-check: - cd $(DIST)/release; $(foreach file,$(wildcard $(DIST)/release/$(EXECUTABLE)-*),sha256sum $(notdir $(file)) > $(notdir $(file)).sha256;) - -.PHONY: release-finish -release-finish: release-copy release-check - -.PHONY: docs-copy -docs-copy: - mkdir -p $(HUGO); \ - mkdir -p $(HUGO)/content/extensions; \ - cd $(HUGO); \ - git init; \ - git remote rm origin; \ - git remote add origin https://github.com/owncloud/owncloud.github.io; \ - git fetch; \ - git checkout origin/source -f; \ - rsync --delete -ax ../docs/ content/extensions/$(NAME) - -.PHONY: docs-build -docs-build: - cd $(HUGO); hugo - -.PHONY: docs -docs: docs-copy docs-build - -.PHONY: test-acceptance-webui -test-acceptance-webui: - ./ui/tests/run-acceptance-test.sh $(FEATURE_PATH) - -.PHONY: watch -watch: - go run github.com/cespare/reflex -c reflex.conf - -$(GOPATH)/bin/protoc-gen-go: - GO111MODULE=off go get -v google.golang.org/protobuf/cmd/protoc-gen-go - -$(GOPATH)/bin/protoc-gen-micro: - GO111MODULE=on go get -v github.com/micro/protoc-gen-micro/v2 - -$(GOPATH)/bin/protoc-gen-microweb: - GO111MODULE=off go get -v github.com/owncloud/protoc-gen-microweb - -$(GOPATH)/bin/protoc-gen-swagger: - GO111MODULE=off go get -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger - -$(PROTO_SRC)/accounts.pb.go: $(PROTO_SRC)/accounts.proto - protoc \ - -I=third_party/ \ - -I=$(PROTO_SRC)/ \ - --go_out=. accounts.proto - -$(PROTO_SRC)/accounts.pb.micro.go: $(PROTO_SRC)/accounts.proto - protoc \ - -I=third_party/ \ - -I=$(PROTO_SRC)/ \ - --micro_out=. accounts.proto - -$(PROTO_SRC)/accounts.pb.web.go: $(PROTO_SRC)/accounts.proto - protoc \ - -I=third_party/ \ - -I=$(PROTO_SRC)/ \ - --microweb_out=. accounts.proto - -$(PROTO_SRC)/accounts.swagger.json: $(PROTO_SRC)/accounts.proto - # the other commands above respect the declared package in the .proto file for placement of the resulting file. - # `swagger_out` doesn't, so we have to specify the output path as `$(PROTO_SRC)` instead of `.` - protoc \ - -I=third_party/ \ - -I=$(PROTO_SRC)/ \ - --swagger_out=$(PROTO_SRC) accounts.proto - -.PHONY: protobuf -protobuf: $(GOPATH)/bin/protoc-gen-go $(GOPATH)/bin/protoc-gen-micro $(GOPATH)/bin/protoc-gen-microweb $(GOPATH)/bin/protoc-gen-swagger \ - $(PROTO_SRC)/accounts.pb.go $(PROTO_SRC)/accounts.pb.micro.go $(PROTO_SRC)/accounts.pb.web.go $(PROTO_SRC)/accounts.swagger.json diff --git a/accounts/README.md b/accounts/README.md deleted file mode 100644 index e8c889b384..0000000000 --- a/accounts/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# ownCloud Infinite Scale: Accounts - -[![Build Status](https://cloud.drone.io/api/badges/owncloud/ocis-accounts/status.svg)](https://cloud.drone.io/owncloud/ocis-accounts) -[![Gitter chat](https://badges.gitter.im/cs3org/reva.svg)](https://gitter.im/cs3org/reva) -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/d005a4722c1b463b9b95060479018e99)](https://www.codacy.com/gh/owncloud/ocis-accounts?utm_source=github.com&utm_medium=referral&utm_content=owncloud/ocis-accounts&utm_campaign=Badge_Grade) -[![Go Doc](https://godoc.org/github.com/owncloud/ocis-accounts?status.svg)](http://godoc.org/github.com/owncloud/ocis-accounts) -[![Go Report](http://goreportcard.com/badge/github.com/owncloud/ocis-accounts)](http://goreportcard.com/report/github.com/owncloud/ocis-accounts) -[![](https://images.microbadger.com/badges/image/owncloud/ocis-accounts.svg)](http://microbadger.com/images/owncloud/ocis-accounts "Get your own image badge on microbadger.com") - -**This project is under heavy development, it's not in a working state yet!** - -## Install - -You can download prebuilt binaries from the GitHub releases or from our [download mirrors](http://download.owncloud.com/ocis/accounts/). For instructions how to install this on your platform you should take a look at our [documentation](https://owncloud.github.io/extensions/ocis_accounts/) -**** -## Development - -Make sure you have a working Go environment, for further reference or a guide take a look at the [install instructions](http://golang.org/doc/install.html). This project requires Go >= v1.13. - -```console -git clone https://github.com/owncloud/ocis-accounts.git -cd ocis-accounts - -make generate build - -./bin/ocis-accounts -h -``` - -## Security - -If you find a security issue please contact security@owncloud.com first. - -## Contributing - -Fork -> Patch -> Push -> Pull Request - -## License - -Apache-2.0 - -## Copyright - -```console -Copyright (c) 2019 ownCloud GmbH -``` diff --git a/accounts/babel.config.js b/accounts/babel.config.js deleted file mode 100644 index d1065d2ff8..0000000000 --- a/accounts/babel.config.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = function (api) { - api.cache(true) - - const presets = [ - [ - '@babel/preset-env', - { - useBuiltIns: 'usage', - corejs: '3' - } - ] - ] - const plugins = [ - '@babel/plugin-syntax-dynamic-import', - '@babel/plugin-proposal-class-properties', - '@babel/plugin-proposal-object-rest-spread', - '@babel/plugin-transform-runtime', - '@babel/plugin-proposal-export-default-from' - ] - - return { - presets, - plugins - } -} diff --git a/accounts/changelog/0.1.0_2020-03-18/inital-release b/accounts/changelog/0.1.0_2020-03-18/inital-release deleted file mode 100644 index 62ae19da3e..0000000000 --- a/accounts/changelog/0.1.0_2020-03-18/inital-release +++ /dev/null @@ -1,5 +0,0 @@ -Change: Initial release of basic version - -Just prepared an initial basic version. - -https://github.com/owncloud/ocis/accounts/issues/1 diff --git a/accounts/changelog/0.1.0_2020-03-18/self-config.md b/accounts/changelog/0.1.0_2020-03-18/self-config.md deleted file mode 100644 index 2363b7b357..0000000000 --- a/accounts/changelog/0.1.0_2020-03-18/self-config.md +++ /dev/null @@ -1,5 +0,0 @@ -Enhancement: Configuration - -Extensions should be responsible of configuring themselves. We use Viper for config loading from default paths. Environment variables **WILL** take precedence over config files. - -https://github.com/owncloud/ocis/accounts/pull/15 diff --git a/accounts/changelog/0.1.1_2020-04-29/configurable-log.md b/accounts/changelog/0.1.1_2020-04-29/configurable-log.md deleted file mode 100644 index bd51052a16..0000000000 --- a/accounts/changelog/0.1.1_2020-04-29/configurable-log.md +++ /dev/null @@ -1,5 +0,0 @@ -Enhancement: Logging is configurable - -ACCOUNTS_LOG_* env-vars or cli-flags can be used for logging configuration. See --help for more details. - -https://github.com/owncloud/ocis/accounts/pull/24 diff --git a/accounts/changelog/0.2.0_2020-08-19/add-cli-user-management.md b/accounts/changelog/0.2.0_2020-08-19/add-cli-user-management.md deleted file mode 100644 index 19b4fca564..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/add-cli-user-management.md +++ /dev/null @@ -1,17 +0,0 @@ -Enhancement: Add early version of cli tools for user-management - -Following commands are available: - -list, ls List existing accounts -add, create, Create a new account -update Make changes to an existing account -remove, rm Removes an existing account -inspect Show detailed data on an existing account - -See --help for details. - -Note that not all account-attributes have an effect yet. This is due to ocis -being in an early development stage. - -https://github.com/owncloud/ocis/accounts/pull/69 -https://github.com/owncloud/product/issues/115 diff --git a/accounts/changelog/0.2.0_2020-08-19/add-write-mutexes.md b/accounts/changelog/0.2.0_2020-08-19/add-write-mutexes.md deleted file mode 100644 index 86a53127c3..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/add-write-mutexes.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Add write mutexes - -Concurrent account or groups writes would corrupt the json file on disk, because the different goroutines would be treated as a single thread from the os. We introduce a mutex for account and group file writes each. This locks the update frequency for all accounts/groups and could be further improved by using a concurrent map of mutexes with a mutex per account / group. PR welcome. - -https://github.com/owncloud/ocis/accounts/pull/71 diff --git a/accounts/changelog/0.2.0_2020-08-19/align-project-structure.md b/accounts/changelog/0.2.0_2020-08-19/align-project-structure.md deleted file mode 100644 index db1f6a86a1..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/align-project-structure.md +++ /dev/null @@ -1,5 +0,0 @@ -Change: Align structure of this extension with other extensions - -We aim to have a similar project structure for all our ocis extensions. This extension was different with regard to the structure of the server command and naming of some flag names. - -https://github.com/owncloud/ocis/accounts/pull/51 diff --git a/accounts/changelog/0.2.0_2020-08-19/change-grpc-error-messages.md b/accounts/changelog/0.2.0_2020-08-19/change-grpc-error-messages.md deleted file mode 100644 index 6d42a79fc1..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/change-grpc-error-messages.md +++ /dev/null @@ -1,6 +0,0 @@ -Change: change api errors - -Replaced the plain golang errors with the error model from the micro framework. - - -https://github.com/owncloud/ocis/accounts/issues/11 diff --git a/accounts/changelog/0.2.0_2020-08-19/enable_accounts.md b/accounts/changelog/0.2.0_2020-08-19/enable_accounts.md deleted file mode 100644 index 67eee43dc1..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/enable_accounts.md +++ /dev/null @@ -1,6 +0,0 @@ -Change: Enable accounts on creation - -Accounts have been created with the account_enabled flag set to false. -Now when they are created accounts will be enabled per default. - -https://github.com/owncloud/ocis/accounts/issues/43 diff --git a/accounts/changelog/0.2.0_2020-08-19/fix-account-group-id.md b/accounts/changelog/0.2.0_2020-08-19/fix-account-group-id.md deleted file mode 100644 index 379f6917fe..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/fix-account-group-id.md +++ /dev/null @@ -1,8 +0,0 @@ -Bugfix: Fix the accountId and groupId mismatch in DeleteGroup Method - -We've fixed a bug in deleting the groups. - -The accountId and GroupId were swapped when removing the member from a group after deleting -the group. - -https://github.com/owncloud/ocis/accounts/pull/60 diff --git a/accounts/changelog/0.2.0_2020-08-19/fix-index-mapping.md b/accounts/changelog/0.2.0_2020-08-19/fix-index-mapping.md deleted file mode 100644 index 816dd1af44..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/fix-index-mapping.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Fix index mapping - -The index mapping was not being used because we were not using the right blevesearch TypeField, leading to username like properties like `preferred_name` and `on_premises_sam_account_name` to be case sensitive. - -https://github.com/owncloud/ocis/accounts/issues/73 diff --git a/accounts/changelog/0.2.0_2020-08-19/fix-indexing.md b/accounts/changelog/0.2.0_2020-08-19/fix-indexing.md deleted file mode 100644 index 1407166369..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/fix-indexing.md +++ /dev/null @@ -1,6 +0,0 @@ -Change: Fix index update on create/update - -We fixed a bug in creating/updating accounts and groups, that caused new entities not to show up in list queries. - -https://github.com/owncloud/ocis/accounts/issues/57 -https://github.com/owncloud/ocis/accounts/pull/59 diff --git a/accounts/changelog/0.2.0_2020-08-19/fix-int-queries.md b/accounts/changelog/0.2.0_2020-08-19/fix-int-queries.md deleted file mode 100644 index ae8b7c5202..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/fix-int-queries.md +++ /dev/null @@ -1,7 +0,0 @@ -Bugfix: use NewNumericRangeInclusiveQuery for numeric literals - -Some LDAP properties like `uidnumber` and `gidnumber` are numeric. When an OS tries to look up a user it will not only try to lookup the user by username, but also by the `uidnumber`: `(&(objectclass=posixAccount)(uidnumber=20000))`. The accounts backend for glauth was sending that as a string query `uid_number eq '20000'` and has been changed to send it as `uid_number eq 20000`. The removed quotes allow the parser in ocis-accounts to identify the numeric literal and use the NewNumericRangeInclusiveQuery instead of a TermQuery. - -https://github.com/owncloud/ocis-glauth/issues/28 -https://github.com/owncloud/ocis/accounts/pull/68 -https://github.com/owncloud/ocis-glauth/pull/29 diff --git a/accounts/changelog/0.2.0_2020-08-19/fix-segfault.md b/accounts/changelog/0.2.0_2020-08-19/fix-segfault.md deleted file mode 100644 index 57b224a601..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/fix-segfault.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Prevent segfault when no password is set - -Passwords are stored in a dedicated child struct of an account. We fixed several segfault conditions where the methods would try to unset a password when that child struct was not existing. - -https://github.com/owncloud/ocis/accounts/pull/65 diff --git a/accounts/changelog/0.2.0_2020-08-19/fix-update.md b/accounts/changelog/0.2.0_2020-08-19/fix-update.md deleted file mode 100644 index b35978b626..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/fix-update.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Update account return value not used - -In order to return a value using the micro go code we need to override the `out` value. - -https://github.com/owncloud/ocis/accounts/pull/70 diff --git a/accounts/changelog/0.2.0_2020-08-19/pass-correct-logger.md b/accounts/changelog/0.2.0_2020-08-19/pass-correct-logger.md deleted file mode 100644 index 114b8e7a71..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/pass-correct-logger.md +++ /dev/null @@ -1,6 +0,0 @@ -Change: pass around the correct logger throughout the code - -Pass around the logger to have consistent log formatting, log level, etc. - -https://github.com/owncloud/ocis/accounts/issues/41 -https://github.com/owncloud/ocis/accounts/pull/48 diff --git a/accounts/changelog/0.2.0_2020-08-19/remove-timezone-setting.md b/accounts/changelog/0.2.0_2020-08-19/remove-timezone-setting.md deleted file mode 100644 index 25483afcad..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/remove-timezone-setting.md +++ /dev/null @@ -1,7 +0,0 @@ -Change: Remove timezone setting - -We had a timezone setting in our profile settings bundle. As we're not dealing with a timezone yet -it would be confusing for the user to have a timezone setting available. We removed it, until we -have a timezone implementation available in ocis-web. - -https://github.com/owncloud/ocis/accounts/pull/33 diff --git a/accounts/changelog/0.2.0_2020-08-19/tighten-screws.md b/accounts/changelog/0.2.0_2020-08-19/tighten-screws.md deleted file mode 100644 index 90171b04d0..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/tighten-screws.md +++ /dev/null @@ -1,5 +0,0 @@ -Change: Tighten screws on usernames and email addresses - -In order to match accounts to the OIDC claims we currently rely on the email address or username to be present. We force both to match the [W3C recommended regex](https://www.w3.org/TR/2016/REC-html51-20161101/sec-forms.html#valid-e-mail-address) with usernames having to start with a character or `_`. This allows the username to be presented and used in ACLs when integrating the os with the glauth LDAP service of ocis. - -https://github.com/owncloud/ocis/accounts/pull/65 diff --git a/accounts/changelog/0.2.0_2020-08-19/update-accounts-api.md b/accounts/changelog/0.2.0_2020-08-19/update-accounts-api.md deleted file mode 100644 index d3cc3a1544..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/update-accounts-api.md +++ /dev/null @@ -1,5 +0,0 @@ -Enhancement: Update accounts API - -We updated the api to allow fetching users not onyl by UUID, but also by identity (OpenID issuer and subject) email, username and optionally a password. - -https://github.com/owncloud/ocis/accounts/pull/30 diff --git a/accounts/changelog/0.2.0_2020-08-19/use-alpine-latest.md b/accounts/changelog/0.2.0_2020-08-19/use-alpine-latest.md deleted file mode 100644 index 7ea076b61e..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/use-alpine-latest.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: build docker images with alpine:latest instead of alpine:edge - -ARM builds were failing when built on alpine:edge, so we switched to alpine:latest instead. - -https://github.com/owncloud/ocis/accounts/pull/64 diff --git a/accounts/changelog/0.2.0_2020-08-19/user-listing-ui.md b/accounts/changelog/0.2.0_2020-08-19/user-listing-ui.md deleted file mode 100644 index 51e6e98f1e..0000000000 --- a/accounts/changelog/0.2.0_2020-08-19/user-listing-ui.md +++ /dev/null @@ -1,5 +0,0 @@ -Enhancement: Add simple user listing UI - -We added an extension for ocis-web that shows a simple list of all existing users. - -https://github.com/owncloud/ocis/accounts/pull/51 diff --git a/accounts/changelog/0.3.0_2020-08-20/adapt-to-settings-data-model.md b/accounts/changelog/0.3.0_2020-08-20/adapt-to-settings-data-model.md deleted file mode 100644 index ee57d37816..0000000000 --- a/accounts/changelog/0.3.0_2020-08-20/adapt-to-settings-data-model.md +++ /dev/null @@ -1,6 +0,0 @@ -Change: Adapt to new ocis-settings data model - -ocis-settings introduced UUIDs and less verbose endpoint and message type names. This PR adjusts ocis-accounts accordingly. - -https://github.com/owncloud/ocis/accounts/pull/87 -https://github.com/owncloud/ocis/settings/pull/46 diff --git a/accounts/changelog/0.3.0_2020-08-20/add-language-permissions-to-default-roles.md b/accounts/changelog/0.3.0_2020-08-20/add-language-permissions-to-default-roles.md deleted file mode 100644 index f937e30f22..0000000000 --- a/accounts/changelog/0.3.0_2020-08-20/add-language-permissions-to-default-roles.md +++ /dev/null @@ -1,6 +0,0 @@ -Change: Add permissions for language to default roles - -ocis-settings has default roles and exposes the respective bundle uuids. We now added -permissions for reading/writing the preferred language to the default roles. - -https://github.com/owncloud/ocis/accounts/pull/88 diff --git a/accounts/changelog/0.3.0_2020-08-20/atomic-requests.md b/accounts/changelog/0.3.0_2020-08-20/atomic-requests.md deleted file mode 100644 index cc6dd3b72a..0000000000 --- a/accounts/changelog/0.3.0_2020-08-20/atomic-requests.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Atomic Requests - -Operations on the file system level are now atomic. This happens only on the provisioning API. - -https://github.com/owncloud/ocis/accounts/pull/82 diff --git a/accounts/changelog/0.3.0_2020-08-20/fix-prefix-query.md b/accounts/changelog/0.3.0_2020-08-20/fix-prefix-query.md deleted file mode 100644 index b2a7509ffd..0000000000 --- a/accounts/changelog/0.3.0_2020-08-20/fix-prefix-query.md +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Unescape value for prefix query - -Prefix queries also need to unescape token values like `'some ''ol string'` to `some 'ol string` before using it in a prefix query - -https://github.com/owncloud/ocis/accounts/pull/76 diff --git a/accounts/changelog/0.4.0_2020-08-20/select-role-in-ui.md b/accounts/changelog/0.4.0_2020-08-20/select-role-in-ui.md deleted file mode 100644 index 82530b726f..0000000000 --- a/accounts/changelog/0.4.0_2020-08-20/select-role-in-ui.md +++ /dev/null @@ -1,7 +0,0 @@ -Change: Add role selection to accounts UI - -We added a role selection dropdown for each account in the accounts UI. As a first iteration, this doesn't -require account management permissions. - -https://github.com/owncloud/product/issues/103 -https://github.com/owncloud/ocis/accounts/pull/89 diff --git a/accounts/changelog/0.4.1_2020-08-27/assign_role.md b/accounts/changelog/0.4.1_2020-08-27/assign_role.md deleted file mode 100644 index 5ad8c3fb8c..0000000000 --- a/accounts/changelog/0.4.1_2020-08-27/assign_role.md +++ /dev/null @@ -1,5 +0,0 @@ -Change: Create account api-call implicitly adds "default-user" role - -When calling CreateAccount default-user-role is implicitly added. - -https://github.com/owncloud/product/issues/173 diff --git a/accounts/changelog/0.4.1_2020-08-27/new-settings-api b/accounts/changelog/0.4.1_2020-08-27/new-settings-api deleted file mode 100644 index d635f39de6..0000000000 --- a/accounts/changelog/0.4.1_2020-08-27/new-settings-api +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Adapting to new settings API for fetching roles - -We fixed the usage of the ocis-settings endpoint for fetching roles. - -https://github.com/owncloud/ocis/accounts/pull/96 diff --git a/accounts/changelog/CHANGELOG.tmpl b/accounts/changelog/CHANGELOG.tmpl deleted file mode 100644 index 82ee41018c..0000000000 --- a/accounts/changelog/CHANGELOG.tmpl +++ /dev/null @@ -1,53 +0,0 @@ -{{ $allVersions := . }} -{{- range $index, $changes := . }}{{ with $changes -}} -{{ if gt (len $allVersions) 1 -}} -# Changelog for [{{ .Version }}] ({{ .Date }}) - -The following sections list the changes in ocis-accounts {{ .Version }}. - -{{/* creating version compare links */ -}} -{{ $next := add1 $index -}} -{{ if ne (len $allVersions) $next -}} -{{ $previousVersion := (index $allVersions $next).Version -}} -{{ if eq .Version "unreleased" -}} -[{{ .Version }}]: https://github.com/owncloud/ocis/accounts/compare/v{{ $previousVersion }}...master - -{{ else -}} -[{{ .Version }}]: https://github.com/owncloud/ocis/accounts/compare/v{{ $previousVersion }}...v{{ .Version }} - -{{ end -}} -{{ end -}} - -{{- /* last version managed by calens, end of the loop */ -}} -{{ if eq .Version "0.1.0" -}} -[{{ .Version }}]: https://github.com/owncloud/ocis/accounts/compare/500e303cb544ed93d84153f01219d77eeee44929...v{{ .Version }} - -{{ end -}} -{{ else -}} -# Changes in {{ .Version }} - -{{ end -}} - -## Summary -{{ range $entry := .Entries }}{{ with $entry }} -* {{ .Type }} - {{ .Title }}: [#{{ .PrimaryID }}]({{ .PrimaryURL }}) -{{- end }}{{ end }} - -## Details -{{ range $entry := .Entries }}{{ with $entry }} -* {{ .Type }} - {{ .Title }}: [#{{ .PrimaryID }}]({{ .PrimaryURL }}) -{{ range $par := .Paragraphs }} - {{ wrapIndent $par 80 3 }} -{{ end -}} -{{ range $url := .IssueURLs }} - {{ $url -}} -{{ end -}} -{{ range $url := .PRURLs }} - {{ $url -}} -{{ end -}} -{{ range $url := .OtherURLs }} - {{ $url -}} -{{ end }} - -{{ end }}{{ end -}} -{{ end }}{{ end -}} diff --git a/accounts/changelog/README.md b/accounts/changelog/README.md deleted file mode 100644 index 0ae5d5b3e2..0000000000 --- a/accounts/changelog/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Changelog - -We are using [calens](https://github.com/restic/calens) to properly generate a -changelog before we are tagging a new release. To get an idea how this could -look like would be the -best reference. diff --git a/accounts/changelog/TEMPLATE b/accounts/changelog/TEMPLATE deleted file mode 100644 index d7ddb6100e..0000000000 --- a/accounts/changelog/TEMPLATE +++ /dev/null @@ -1,11 +0,0 @@ -Bugfix: Fix behavior for foobar (in present tense) - -We've fixed the behavior for foobar, a long-standing annoyance for users. The -text should be wrapped at 80 characters length. - -The text in the paragraphs is written in past tense. The last section is a list -of issue URLs, PR URLs and other URLs. The first issue ID (or the first PR ID, -in case there aren't any issue links) is used as the primary ID. - -https://github.com/owncloud/ocis/accounts/issues/1234 -https://github.com/owncloud/ocis/accounts/pull/55555 diff --git a/accounts/changelog/unreleased/.keep b/accounts/changelog/unreleased/.keep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/accounts/changelog/unreleased/add-create-form.md b/accounts/changelog/unreleased/add-create-form.md deleted file mode 100644 index 790e4af9ab..0000000000 --- a/accounts/changelog/unreleased/add-create-form.md +++ /dev/null @@ -1,6 +0,0 @@ -Enhancement: Add create account form - -We've added a form to create new users above the accounts list. - -https://github.com/owncloud/product/issues/148 -https://github.com/owncloud/ocis/accounts/pull/115 diff --git a/accounts/changelog/unreleased/add-delete-action.md b/accounts/changelog/unreleased/add-delete-action.md deleted file mode 100644 index 5069753465..0000000000 --- a/accounts/changelog/unreleased/add-delete-action.md +++ /dev/null @@ -1,6 +0,0 @@ -Enhancement: Add delete accounts action - -We've added an action into the actions dropdown to enable admins to delete users. - -https://github.com/owncloud/product/issues/148 -https://github.com/owncloud/ocis/accounts/pull/115 diff --git a/accounts/changelog/unreleased/add-enable-disable-ui.md b/accounts/changelog/unreleased/add-enable-disable-ui.md deleted file mode 100644 index 135be12425..0000000000 --- a/accounts/changelog/unreleased/add-enable-disable-ui.md +++ /dev/null @@ -1,6 +0,0 @@ -Enhancement: Add enable/disable capabilities to the WebUI - -We've added batch actions into the accounts listing to provide options to enable and disable accounts. - -https://github.com/owncloud/product/issues/118 -https://github.com/owncloud/ocis/accounts/pull/109 diff --git a/accounts/changelog/unreleased/builtin-regular-users.md b/accounts/changelog/unreleased/builtin-regular-users.md deleted file mode 100644 index 35451c76ec..0000000000 --- a/accounts/changelog/unreleased/builtin-regular-users.md +++ /dev/null @@ -1,5 +0,0 @@ -Change: Set user role on builtin users - -We now set the default `user` role on our builtin users. - -https://github.com/owncloud/ocis/accounts/pull/102 diff --git a/accounts/changelog/unreleased/change-hashing-algorithm.md b/accounts/changelog/unreleased/change-hashing-algorithm.md deleted file mode 100644 index b9a0f8ffef..0000000000 --- a/accounts/changelog/unreleased/change-hashing-algorithm.md +++ /dev/null @@ -1,7 +0,0 @@ -Change: Use bcrypt to hash the user passwords - -Change the hashing algorithm from SHA-512 to bcrypt since the latter is better suitable for password hashing. -This is a breaking change. Existing deployments need to regenerate the accounts folder. - - -https://github.com/owncloud/ocis/issues/510 diff --git a/accounts/changelog/unreleased/fix-role-service-grpc.md b/accounts/changelog/unreleased/fix-role-service-grpc.md deleted file mode 100644 index 8cba20fe28..0000000000 --- a/accounts/changelog/unreleased/fix-role-service-grpc.md +++ /dev/null @@ -1,6 +0,0 @@ -Bugfix: initialize roleService client in GRPC server - -We fixed the initialization of the GRPC server by also providing a roleService client and a roleManager instance. - -https://github.com/owncloud/ocis/accounts/pull/114 - diff --git a/accounts/changelog/unreleased/improve-accounts-ui.md b/accounts/changelog/unreleased/improve-accounts-ui.md deleted file mode 100644 index 75831a7f0c..0000000000 --- a/accounts/changelog/unreleased/improve-accounts-ui.md +++ /dev/null @@ -1,6 +0,0 @@ -Enhancement: Improve visual appearance of accounts UI - -We aligned the visual appearance of the accounts UI with default ocis-web apps (full width, style of batch actions), added icons to buttons, extracted the buttons from the batch actions dropdown into individual buttons, improved the wording added a confirmation widget for the user deletion and removed the uid and gid columns. - -https://github.com/owncloud/product/issues/222 -https://github.com/owncloud/ocis/accounts/pull/116 diff --git a/accounts/changelog/unreleased/new-admin-user.md b/accounts/changelog/unreleased/new-admin-user.md deleted file mode 100644 index d012f0e527..0000000000 --- a/accounts/changelog/unreleased/new-admin-user.md +++ /dev/null @@ -1,5 +0,0 @@ -Change: Add new builtin admin user - -We added a new builtin user `moss` and assigned the admin role. - -https://github.com/owncloud/ocis/accounts/pull/102 diff --git a/accounts/changelog/unreleased/single-service-handler.md b/accounts/changelog/unreleased/single-service-handler.md deleted file mode 100644 index 3478dfd7e1..0000000000 --- a/accounts/changelog/unreleased/single-service-handler.md +++ /dev/null @@ -1,10 +0,0 @@ -Bugfix: Cleanup separated indices in memory - -The accounts service was creating a bleve index instance in the service handler, thus creating separate in memory indices for the http and grpc servers. We moved the service handler creation out of the server creation so that the service handler, thus also the bleve index, is a shared instance of the servers. - -This fixes a bug that accounts created through the web ui were not able to sign in until a service restart. - -https://github.com/owncloud/product/issues/224 -https://github.com/owncloud/ocis/accounts/pull/117 -https://github.com/owncloud/ocis/accounts/pull/118 - diff --git a/accounts/changelog/unreleased/unique-account-fields b/accounts/changelog/unreleased/unique-account-fields deleted file mode 100644 index 85adaa181f..0000000000 --- a/accounts/changelog/unreleased/unique-account-fields +++ /dev/null @@ -1,5 +0,0 @@ -Bugfix: Don't create account if id/mail/username already taken - -We don't allow anymore to create a new account if the provided id/mail/username is already taken. - -https://github.com/owncloud/ocis/accounts/pull/123 diff --git a/accounts/changelog/unreleased/use-roles-cache.md b/accounts/changelog/unreleased/use-roles-cache.md deleted file mode 100644 index 973fb90de1..0000000000 --- a/accounts/changelog/unreleased/use-roles-cache.md +++ /dev/null @@ -1,5 +0,0 @@ -Change: We make use of the roles cache to enforce permission checks - -The roles cache and its cache update middleware are used to make permission checks possible. The permission checks take place in the accounts handler. - -https://github.com/owncloud/ocis/accounts/pull/100 diff --git a/accounts/changelog/unreleased/use-roles-manager.md b/accounts/changelog/unreleased/use-roles-manager.md deleted file mode 100644 index 4db8736cf3..0000000000 --- a/accounts/changelog/unreleased/use-roles-manager.md +++ /dev/null @@ -1,7 +0,0 @@ -Change: We make use of the roles manager to enforce permission checks - -The roles cache and its cache update middleware have been replaced with a roles manager in ocis-pkg/v2. We've switched -over to the new roles manager implementation, to prepare for permission checks on grpc requests as well. - -https://github.com/owncloud/ocis/accounts/pull/108 -https://github.com/owncloud/ocis-pkg/pull/60 diff --git a/accounts/cmd/ocis-accounts/main.go b/accounts/cmd/ocis-accounts/main.go deleted file mode 100644 index 6fa3f4128c..0000000000 --- a/accounts/cmd/ocis-accounts/main.go +++ /dev/null @@ -1,13 +0,0 @@ -package main - -import ( - "os" - - "github.com/owncloud/ocis/accounts/pkg/command" -) - -func main() { - if err := command.Execute(); err != nil { - os.Exit(1) - } -} diff --git a/accounts/docker/Dockerfile.linux.amd64 b/accounts/docker/Dockerfile.linux.amd64 deleted file mode 100644 index a7195e2c5c..0000000000 --- a/accounts/docker/Dockerfile.linux.amd64 +++ /dev/null @@ -1,19 +0,0 @@ -FROM amd64/alpine:latest - -RUN apk update && \ - apk upgrade && \ - apk add ca-certificates mailcap && \ - rm -rf /var/cache/apk/* && \ - echo 'hosts: files dns' >| /etc/nsswitch.conf - -LABEL maintainer="ownCloud GmbH " \ - org.label-schema.name="oCIS Accounts" \ - org.label-schema.vendor="ownCloud GmbH" \ - org.label-schema.schema-version="1.0" - -EXPOSE 9180 - -ENTRYPOINT ["/usr/bin/ocis-accounts"] -CMD ["server"] - -COPY bin/ocis-accounts /usr/bin/ocis-accounts diff --git a/accounts/docker/Dockerfile.linux.arm b/accounts/docker/Dockerfile.linux.arm deleted file mode 100644 index b8a1375dbc..0000000000 --- a/accounts/docker/Dockerfile.linux.arm +++ /dev/null @@ -1,19 +0,0 @@ -FROM arm32v6/alpine:latest - -RUN apk update && \ - apk upgrade && \ - apk add ca-certificates mailcap && \ - rm -rf /var/cache/apk/* && \ - echo 'hosts: files dns' >| /etc/nsswitch.conf - -LABEL maintainer="ownCloud GmbH " \ - org.label-schema.name="oCIS Accounts" \ - org.label-schema.vendor="ownCloud GmbH" \ - org.label-schema.schema-version="1.0" - -EXPOSE 9180 - -ENTRYPOINT ["/usr/bin/ocis-accounts"] -CMD ["server"] - -COPY bin/ocis-accounts /usr/bin/ocis-accounts diff --git a/accounts/docker/Dockerfile.linux.arm64 b/accounts/docker/Dockerfile.linux.arm64 deleted file mode 100644 index daab5ecee8..0000000000 --- a/accounts/docker/Dockerfile.linux.arm64 +++ /dev/null @@ -1,19 +0,0 @@ -FROM arm64v8/alpine:latest - -RUN apk update && \ - apk upgrade && \ - apk add ca-certificates mailcap && \ - rm -rf /var/cache/apk/* && \ - echo 'hosts: files dns' >| /etc/nsswitch.conf - -LABEL maintainer="ownCloud GmbH " \ - org.label-schema.name="oCIS Accounts" \ - org.label-schema.vendor="ownCloud GmbH" \ - org.label-schema.schema-version="1.0" - -EXPOSE 9180 - -ENTRYPOINT ["/usr/bin/ocis-accounts"] -CMD ["server"] - -COPY bin/ocis-accounts /usr/bin/ocis-accounts diff --git a/accounts/docker/manifest.tmpl b/accounts/docker/manifest.tmpl deleted file mode 100644 index c879450c5a..0000000000 --- a/accounts/docker/manifest.tmpl +++ /dev/null @@ -1,22 +0,0 @@ -image: owncloud/ocis-accounts:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} -{{#if build.tags}} -tags: -{{#each build.tags}} - - {{this}} -{{/each}} -{{/if}} -manifests: - - image: owncloud/ocis-accounts:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64 - platform: - architecture: amd64 - os: linux - - image: owncloud/ocis-accounts:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64 - platform: - architecture: arm64 - variant: v8 - os: linux - - image: owncloud/ocis-accounts:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm - platform: - architecture: arm - variant: v6 - os: linux diff --git a/accounts/docs/_index.md b/accounts/docs/_index.md deleted file mode 100644 index 3249c0241d..0000000000 --- a/accounts/docs/_index.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: Accounts -date: 2018-05-02T00:00:00+00:00 -weight: 10 -geekdocRepo: https://github.com/owncloud/ocis-accounts -geekdocEditPath: edit/master/docs -geekdocFilePath: _index.md ---- - -[![GitHub](https://img.shields.io/github/license/owncloud/ocis-hello)](https://github.com/owncloud/ocis-hello/blob/master/LICENSE) - -## Abstract -OCIS needs to be able to identify users. Whithout a non reassignable and persistend account ID share metadata cannot be reliably persisted. `ocis-accounts` allows exchanging oidc claims for a uuid. Using a uuid allows users to change the login, mail or even openid connect provider without breaking any persisted metadata that might have been attached to it. - -- persists accounts -- uses graph api properties - -ldap can be synced using the onpremise* attributes - -## Table of Contents - -{{< toc-tree >}} \ No newline at end of file diff --git a/accounts/docs/building.md b/accounts/docs/building.md deleted file mode 100644 index 2d96c7ceb3..0000000000 --- a/accounts/docs/building.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: "Building" -date: 2018-05-02T00:00:00+00:00 -weight: 30 -geekdocRepo: https://github.com/owncloud/ocis-accounts -geekdocEditPath: edit/master/docs -geekdocFilePath: building.md ---- - -{{< toc >}} - -As this project is built with Go, so you need to install that first. The installation of Go is out of the scope of this document, please follow the official documentation for [Go](https://golang.org/doc/install), to build this project you have to install Go >= v1.13. After the installation of the required tools you need to get the sources: - -{{< highlight txt >}} -git clone https://github.com/owncloud/ocis-accounts.git -cd ocis-accounts -{{< / highlight >}} - -All required tool besides Go itself and make are bundled or getting automatically installed within the `GOPATH`. All commands to build this project are part of our `Makefile`. - -## Backend - -{{< highlight txt >}} -make generate -make build -{{< / highlight >}} - -Finally you should have the binary within the `bin/` folder now, give it a try with `./bin/ocis-accounts -h` to see all available options and subcommands. diff --git a/accounts/docs/configuration.md b/accounts/docs/configuration.md deleted file mode 100644 index f6c3830234..0000000000 --- a/accounts/docs/configuration.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -title: "Configuration" -date: "2020-07-01T11:10:52+0200" -weight: 20 -geekdocRepo: https://github.com/owncloud/ocis-reva -geekdocEditPath: edit/master/docs -geekdocFilePath: configuration.md ---- - -{{< toc >}} - -## Configuration - -oCIS Single Binary is not responsible for configuring extensions. Instead, each extension could either be configured by environment variables, cli flags or config files. - -Each extension has its dedicated documentation page (e.g. https://owncloud.github.io/extensions/ocis_proxy/configuration) which lists all possible configurations. Config files and environment variables are picked up if you use the `./bin/ocis server` command within the oCIS single binary. Command line flags must be set explicitly on the extensions subcommands. - -### Configuration using config files - -Out of the box extensions will attempt to read configuration details from: - -```console -/etc/ocis -$HOME/.ocis -./config -``` - -For this configuration to be picked up, have a look at your extension `root` command and look for which default config name it has assigned. *i.e: ocis-proxy reads `proxy.json | yaml | toml ...`*. - -So far we support the file formats `JSON` and `YAML`, if you want to get a full example configuration just take a look at [our repository](https://github.com/owncloud/ocis/tree/master/config), there you can always see the latest configuration format. These example configurations include all available options and the default values. The configuration file will be automatically loaded if it's placed at `/etc/ocis/ocis.yml`, `${HOME}/.ocis/ocis.yml` or `$(pwd)/config/ocis.yml`. - -### Envrionment variables - -If you prefer to configure the service with environment variables you can see the available variables below. - -### Commandline flags - -If you prefer to configure the service with commandline flags you can see the available variables below. Command line flags are only working when calling the subcommand directly. - -### ocis-reva server - -Start ocis accounts service - -Usage: `ocis-reva server [command options] [arguments...]` - ---http-namespace | $ACCOUNTS_HTTP_NAMESPACE -: Set the base namespace for the http namespace. Default: `com.owncloud.web`. - ---http-addr | $ACCOUNTS_HTTP_ADDR -: Address to bind http server. Default: `localhost:9181`. - ---http-root | $ACCOUNTS_HTTP_ROOT -: Root path of http server. Default: `/`. - ---grpc-namespace | $ACCOUNTS_GRPC_NAMESPACE -: Set the base namespace for the grpc namespace. Default: `com.owncloud.api`. - ---grpc-addr | $ACCOUNTS_GRPC_ADDR -: Address to bind grpc server. Default: `localhost:9180`. - ---name | $ACCOUNTS_NAME -: service name. Default: `accounts`. - ---accounts-data-path | $ACCOUNTS_DATA_PATH -: accounts folder. Default: `/var/tmp/ocis-accounts`. - ---asset-path | $HELLO_ASSET_PATH -: Path to custom assets. - -### ocis-reva ocis-accounts - -Provide accounts and groups for oCIS - -Usage: `ocis-reva ocis-accounts [command options] [arguments...]` - ---log-level | $ACCOUNTS_LOG_LEVEL -: Set logging level. Default: `info`. - ---log-pretty | $ACCOUNTS_LOG_PRETTY -: Enable pretty logging. Default: `true`. - ---log-color | $ACCOUNTS_LOG_COLOR -: Enable colored logging. Default: `true`. - diff --git a/accounts/docs/getting-started.md b/accounts/docs/getting-started.md deleted file mode 100644 index d389b843ca..0000000000 --- a/accounts/docs/getting-started.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "Getting Started" -date: 2018-05-02T00:00:00+00:00 -weight: 20 -geekdocRepo: https://github.com/owncloud/ocis-accounts -geekdocEditPath: edit/master/docs -geekdocFilePath: getting-started.md ---- - -{{< toc >}} - -## Installation - -So far we are offering two different variants for the installation. You can choose between [Docker](https://www.docker.com/) or pre-built binaries which are stored on our download mirrors and GitHub releases. Maybe we will also provide system packages for the major distributions later if we see the need for it. - -### Docker - -TBD - -### Binaries - -TBD - -## Configuration - -We provide overall three different variants of configuration. The variant based on environment variables and commandline flags are split up into global values and command-specific values. - -### Envrionment variables - -If you prefer to configure the service with environment variables you can see the available variables below. - -#### Server - -OCIS_ACCOUNTS_NAME -: Name of the accounts service. It will be part of the namespace. - -OCIS_ACCOUNTS_NAMESPACE -: Namespace of the accounts service. - -OCIS_ACCOUNTS_ADDRESS -: Endpoint for the grpc service endpoint. - -### Commandline flags - -If you prefer to configure the service with commandline flags you can see the available variables below. - -### Configuration file - -So far we support the file formats `JSON` and `YAML`, if you want to get a full example configuration just take a look at [our repository](https://github.com/owncloud/ocis/accounts/tree/master/pkg/config), there you can always see the latest configuration format. These example configurations include all available options and the default values. The configuration file will be automatically loaded if it's placed at `/etc/ocis/accounts.yml`, `${HOME}/.ocis/accounts.yml` or `$(pwd)/config/accounts.yml`. - -## Usage - -The program provides a few sub-commands on execution. The available configuration methods have already been mentioned above. Generally you can always see a formated help output if you execute the binary via `ocis-accounts --help`. - -### Server - -The server command is used to start the grpc server. For further help please execute: - -{{< highlight txt >}} -ocis-accounts server --help -{{< / highlight >}} diff --git a/accounts/go.mod b/accounts/go.mod deleted file mode 100644 index b202053fa6..0000000000 --- a/accounts/go.mod +++ /dev/null @@ -1,33 +0,0 @@ -module github.com/owncloud/ocis/accounts - -go 1.13 - -require ( - github.com/CiscoM31/godata v0.0.0-20191007193734-c2c4ebb1b415 - github.com/blevesearch/bleve v1.0.9 - github.com/go-chi/chi v4.1.2+incompatible - github.com/go-chi/render v1.0.1 - github.com/gofrs/uuid v3.3.0+incompatible - github.com/golang/protobuf v1.4.2 - github.com/mennanov/fieldmask-utils v0.3.2 - github.com/micro/cli/v2 v2.1.2 - github.com/micro/go-micro/v2 v2.9.1 - github.com/oklog/run v1.1.0 - github.com/olekukonko/tablewriter v0.0.4 - github.com/owncloud/ocis/ocis-pkg v0.0.0-20200918114005-1a0ddd2190ee - github.com/owncloud/ocis/settings v0.0.0-20200918114005-1a0ddd2190ee - github.com/restic/calens v0.2.0 - github.com/rs/zerolog v1.19.0 - github.com/spf13/viper v1.7.0 - github.com/stretchr/testify v1.6.1 - golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a - golang.org/x/net v0.0.0-20200822124328-c89045814202 - google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad - google.golang.org/protobuf v1.25.0 -) - -replace ( - github.com/owncloud/ocis/ocis-pkg => ../ocis-pkg - github.com/owncloud/ocis/settings => ../settings - google.golang.org/grpc => google.golang.org/grpc v1.26.0 -) diff --git a/accounts/go.sum b/accounts/go.sum deleted file mode 100644 index 0f000e6677..0000000000 --- a/accounts/go.sum +++ /dev/null @@ -1,2129 +0,0 @@ -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.39.0/go.mod h1:rVLT6fkc8chs9sfPtFc1SBH6em7n+ZoXaG+87tDISts= -cloud.google.com/go v0.40.0/go.mod h1:Tk58MuI9rbLMKlAjeO/bDnteAx7tX2gJIXw4T5Jwlro= -cloud.google.com/go v0.41.0/go.mod h1:OauMR7DV8fzvZIl2qg6rkaIhD/vmgk4iwEw/h6ercmg= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= -contrib.go.opencensus.io/exporter/jaeger v0.2.0/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM= -contrib.go.opencensus.io/exporter/jaeger v0.2.1 h1:yGBYzYMewVL0yO9qqJv3Z5+IRhPdU7e9o/2oKpX4YvI= -contrib.go.opencensus.io/exporter/jaeger v0.2.1/go.mod h1:Y8IsLgdxqh1QxYxPC5IgXVmBaeLUeQFfBeBi9PbeZd0= -contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA= -contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= -contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs= -contrib.go.opencensus.io/exporter/ocagent v0.7.0 h1:BEfdCTXfMV30tLZD8c9n64V/tIZX5+9sXiuFLnrr1k8= -contrib.go.opencensus.io/exporter/ocagent v0.7.0/go.mod h1:IshRmMJBhDfFj5Y67nVhMYTTIze91RUeT73ipWKs/GY= -contrib.go.opencensus.io/exporter/prometheus v0.1.0/go.mod h1:cGFniUXGZlKRjzOyuZJ6mgB+PgBcCIa79kEKR8YCW+A= -contrib.go.opencensus.io/exporter/prometheus v0.2.0 h1:9PUk0/8V0LGoPqVCrf8fQZJkFGBxudu8jOjQSMwoD6w= -contrib.go.opencensus.io/exporter/prometheus v0.2.0/go.mod h1:TYmVAyE8Tn1lyPcltF5IYYfWp2KHu7lQGIZnj8iZMys= -contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= -contrib.go.opencensus.io/exporter/zipkin v0.1.1 h1:PR+1zWqY8ceXs1qDQQIlgXe+sdiwCf0n32bH4+Epk8g= -contrib.go.opencensus.io/exporter/zipkin v0.1.1/go.mod h1:GMvdSl3eJ2gapOaLKzTKE3qDgUkJ86k9k3yY2eqwkzc= -contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= -contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= -github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= -github.com/Azure/azure-pipeline-go v0.1.9/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg= -github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= -github.com/Azure/azure-storage-blob-go v0.6.0/go.mod h1:oGfmITT1V6x//CswqY2gtAHND+xIP64/qL7a5QJix0Y= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.1.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg= -github.com/Azure/go-autorest/autorest v0.5.0/go.mod h1:9HLKlQjVBH6U3oDfsXOeVc56THsLPw1L03yban4xThw= -github.com/Azure/go-autorest/autorest/adal v0.1.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E= -github.com/Azure/go-autorest/autorest/adal v0.2.0/go.mod h1:MeS4XhScH55IST095THyTxElntu7WqB7pNbZo8Q5G3E= -github.com/Azure/go-autorest/autorest/azure/auth v0.1.0/go.mod h1:Gf7/i2FUpyb/sGBLIFxTBzrNzBo7aPXXE3ZVeDRwdpM= -github.com/Azure/go-autorest/autorest/azure/cli v0.1.0/go.mod h1:Dk8CUAt/b/PzkfeRsWzVG9Yj3ps8mS8ECztu43rdU8U= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= -github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= -github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvdeRAgDr0izn4z5Ij88= -github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c h1:/IBSNwUN8+eKzUzbJPqhK839ygXJ82sde8x3ogr6R28= -github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/CiscoM31/godata v0.0.0-20191007193734-c2c4ebb1b415 h1:rATYsVSP89BOyS9/o+cdGZ8qU7AHh4frtS59nFPoX8k= -github.com/CiscoM31/godata v0.0.0-20191007193734-c2c4ebb1b415/go.mod h1:tjaihnMBH6p5DVnGBksDQQHpErbrLvb9ek6cEWuyc7E= -github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/GeertJohan/yubigo v0.0.0-20190917122436-175bc097e60e h1:Bqtt5C+uVk+vH/t5dmB47uDCTwxw16EYHqvJnmY2aQc= -github.com/GeertJohan/yubigo v0.0.0-20190917122436-175bc097e60e/go.mod h1:njRCDrl+1RQ/A/+KVU8Ho2EWAxUSkohOWczdW3dzDG0= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190605020000-c4ba1fdf4d36/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= -github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.0.2/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/semver/v3 v3.1.0 h1:Y2lUDsFKVRSYGojLJ1yLxSXdMmMYTYls0rCvoqmMUQk= -github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig/v3 v3.0.1/go.mod h1:Cp7HwZjmqKrC+Y7XqSJOU2yRvAJRGLiohfgz5ZJj8+4= -github.com/Masterminds/sprig/v3 v3.1.0 h1:j7GpgZ7PdFqNsmncycTHsLmVPf5/3wJtlgW9TNDYD9Y= -github.com/Masterminds/sprig/v3 v3.1.0/go.mod h1:ONGMf7UfYGAbMXCZmQLy8x3lCDIPrEZE/rU8pmrbihA= -github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= -github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= -github.com/Microsoft/hcsshim v0.8.7-0.20191101173118-65519b62243c/go.mod h1:7xhjOwRV2+0HXGmM0jxaEu+ZiXJFoVZOTfL/dmqbrD8= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w= -github.com/RoaringBitmap/roaring v0.4.21 h1:WJ/zIlNX4wQZ9x8Ey33O1UaD9TCTakYsdLFSBcTwH+8= -github.com/RoaringBitmap/roaring v0.4.21/go.mod h1:D0gp8kJQgE1A4LQ5wFLggQEyvDi06Mq5mKs52e1TwOo= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/sarama v1.24.1/go.mod h1:fGP8eQ6PugKEI0iUETYYtnP6d1pH/bdDMTel1X5ajsU= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/UnnoTed/fileb0x v1.1.4 h1:IUgFzgBipF/ujNx9wZgkrKOF3oltUuXMSoaejrBws+A= -github.com/UnnoTed/fileb0x v1.1.4/go.mod h1:X59xXT18tdNk/D6j+KZySratBsuKJauMtVuJ9cgOiZs= -github.com/abbot/go-http-auth v0.4.1-0.20181019201920-860ed7f246ff/go.mod h1:Cz6ARTIzApMJDzh5bRMSUou6UMSp0IEXg9km/ci7TJM= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajg/form v0.0.0-20160822230020-523a5da1a92f/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k= -github.com/alangpierce/go-forceexport v0.0.0-20160317203124-8f1d6941cd75/go.mod h1:uAXEEpARkRhCZfEvy/y0Jcc888f9tHCc1W7/UeEtreE= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 h1:Hs82Z41s6SdL1CELW+XaDYmOH4hkBN4/N9og/AsOv7E= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190808125512-07798873deee/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= -github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= -github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= -github.com/anacrolix/envpprof v1.0.0/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c= -github.com/anacrolix/missinggo v1.1.2-0.20190815015349-b888af804467/go.mod h1:MBJu3Sk/k3ZfGYcS7z18gwfu72Ey/xopPFJJbTi5yIo= -github.com/anacrolix/missinggo v1.2.1/go.mod h1:J5cMhif8jPmFoC3+Uvob3OXXNIhOUikzMt+uUjeM21Y= -github.com/anacrolix/missinggo/perf v1.0.0/go.mod h1:ljAFWkBuzkO12MQclXzZrosP5urunoLS0Cbvb4V0uMQ= -github.com/anacrolix/sync v0.2.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DCOj/I0g= -github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= -github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.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-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496 h1:zV3ejI06GQ59hwDQAvmK1qxOQGB3WuVTRoY0okPTAv0= -github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/ascarter/requestid v0.0.0-20170313220838-5b76ab3d4aee h1:3T/l+vMotQ7cDSLWNAn2Vg1SAQ3mdyLgBWWBitSS3uU= -github.com/ascarter/requestid v0.0.0-20170313220838-5b76ab3d4aee/go.mod h1:u7Wtt4WATGGgae9mURNGQQqxAudPKrxfsbSDSGOso+g= -github.com/asim/go-awsxray v0.0.0-20161209120537-0d8a60b6e205/go.mod h1:frVmN4PtXUuL1EbZn0uL4PHSTKNKFnbMpBIhngqMuNQ= -github.com/asim/go-bson v0.0.0-20160318195205-84522947cabd/go.mod h1:L59ZX7HuzTbNzFBt8g3SJkRraj+GBOgvLAfJYJUcQ5w= -github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.19.45/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.20.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.23.19/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.31/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.28.2/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.29.26/go.mod h1:1KvfttTE3SPKMpo8g2c6jL3ZKfXtFvKscTgahTma5Xg= -github.com/aws/aws-sdk-go v1.33.19/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.34.2 h1:9vCknCdTAmmV4ht7lPuda7aJXzllXwEQyCMZKJHjBrM= -github.com/aws/aws-sdk-go v1.34.2/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-xray-sdk-go v0.9.4/go.mod h1:XtMKdBQfpVut+tJEwI7+dJFRxxRdxHDyVNp2tHXRq04= -github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= -github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs= -github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= -github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blevesearch/bleve v1.0.9 h1:kqw/Ank/61UV9/Bx9kCcnfH6qWPgmS8O5LNfpsgzASg= -github.com/blevesearch/bleve v1.0.9/go.mod h1:tb04/rbU29clbtNgorgFd8XdJea4x3ybYaOjWKr+UBU= -github.com/blevesearch/blevex v0.0.0-20190916190636-152f0fe5c040 h1:SjYVcfJVZoCfBlg+fkaq2eoZHTf5HaJfaTeTkOtyfHQ= -github.com/blevesearch/blevex v0.0.0-20190916190636-152f0fe5c040/go.mod h1:WH+MU2F4T0VmSdaPX+Wu5GYoZBrYWdOZWSjzvYcDmqQ= -github.com/blevesearch/cld2 v0.0.0-20200327141045-8b5f551d37f5/go.mod h1:PN0QNTLs9+j1bKy3d/GB/59wsNBFC4sWLWG3k69lWbc= -github.com/blevesearch/go-porterstemmer v1.0.3 h1:GtmsqID0aZdCSNiY8SkuPJ12pD4jI+DdXTAn4YRcHCo= -github.com/blevesearch/go-porterstemmer v1.0.3/go.mod h1:angGc5Ht+k2xhJdZi511LtmxuEf0OVpvUUNrwmM1P7M= -github.com/blevesearch/mmap-go v1.0.2 h1:JtMHb+FgQCTTYIhtMvimw15dJwu1Y5lrZDMOFXVWPk0= -github.com/blevesearch/mmap-go v1.0.2/go.mod h1:ol2qBqYaOUsGdm7aRMRrYGgPvnwLe6Y+7LMvAB5IbSA= -github.com/blevesearch/segment v0.9.0 h1:5lG7yBCx98or7gK2cHMKPukPZ/31Kag7nONpoBt22Ac= -github.com/blevesearch/segment v0.9.0/go.mod h1:9PfHYUdQCgHktBgvtUOF4x+pc4/l8rdH0u5spnW85UQ= -github.com/blevesearch/snowballstem v0.9.0 h1:lMQ189YspGP6sXvZQ4WZ+MLawfV8wOmPoD/iWeNXm8s= -github.com/blevesearch/snowballstem v0.9.0/go.mod h1:PivSj3JMc8WuaFkTSRDW2SlrulNWPl4ABg1tC/hlgLs= -github.com/blevesearch/zap/v11 v11.0.9 h1:wlSrDBeGN1G4M51NQHIXca23ttwUfQpWaK7uhO5lRSo= -github.com/blevesearch/zap/v11 v11.0.9/go.mod h1:47hzinvmY2EvvJruzsSCJpro7so8L1neseaGjrtXHOY= -github.com/blevesearch/zap/v12 v12.0.9 h1:PpatkY+BLVFZf0Ok3/fwgI/I4RU0z5blXFGuQANmqXk= -github.com/blevesearch/zap/v12 v12.0.9/go.mod h1:paQuvxy7yXor+0Mx8p2KNmJgygQbQNN+W6HRfL5Hvwc= -github.com/blevesearch/zap/v13 v13.0.1 h1:NSCM6uKu77Vn/x9nlPp4pE1o/bftqcOWZEHSyZVpGBQ= -github.com/blevesearch/zap/v13 v13.0.1/go.mod h1:XmyNLMvMf8Z5FjLANXwUeDW3e1+o77TTGUWrth7T9WI= -github.com/blevesearch/zap/v14 v14.0.0 h1:HF8Ysjm13qxB0jTGaKLlatNXmJbQD8bY+PrPxm5v4hE= -github.com/blevesearch/zap/v14 v14.0.0/go.mod h1:sUc/gPGJlFbSQ2ZUh/wGRYwkKx+Dg/5p+dd+eq6QMXk= -github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ= -github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= -github.com/bmatcuk/doublestar v1.3.2 h1:mzUncgFmpzNUhIITFqGdZ8nUU0O7JTJzRO8VdkeLCSo= -github.com/bmatcuk/doublestar v1.3.2/go.mod h1:wiQtGV+rzVYxB7WIlirSN++5HPtPlXEo9MEoZQC/PmE= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40 h1:y4B3+GPxKlrigF1ha5FFErxK+sr6sWxQovRMzwMhejo= -github.com/bmizerany/pat v0.0.0-20170815010413-6226ea591a40/go.mod h1:8rLXio+WjiTceGBHIoTvn60HIbs7Hm7bcHjyrSqYB9c= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI= -github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= -github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo= -github.com/bradfitz/iter v0.0.0-20190303215204-33e6a9893b0c/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo= -github.com/bwmarrin/discordgo v0.19.0/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= -github.com/bwmarrin/discordgo v0.20.1/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= -github.com/bwmarrin/discordgo v0.20.2/go.mod h1:O9S4p+ofTFwB02em7jkpkV8M3R0/PUVOwN61zSZ0r4Q= -github.com/c-bata/go-prompt v0.2.3/go.mod h1:VzqtzE2ksDBcdln8G7mk2RX9QyGjH+OVqOCSiVIqS34= -github.com/caddyserver/certmagic v0.10.6 h1:sCya6FmfaN74oZE46kqfaFOVoROD/mF36rTQfjN7TZc= -github.com/caddyserver/certmagic v0.10.6/go.mod h1:Y8jcUBctgk/IhpAzlHKfimZNyXCkfGgRTC0orl8gROQ= -github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= -github.com/cenkalti/backoff/v4 v4.0.0 h1:6VeaLF9aI+MAUQ95106HwWzYZgJJpZ4stumjj6RFYAU= -github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= -github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/reflex v0.2.0 h1:6d9WpWJseKjJvZEevKP7Pk42nPx2+BUTqmhNk8wZPwM= -github.com/cespare/reflex v0.2.0/go.mod h1:ooqOLJ4algvHP/oYvKWfWJ9tFUzCLDk5qkIJduMYrgI= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/cheggaaa/pb v1.0.28/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY= -github.com/cloudflare/cloudflare-go v0.10.6/go.mod h1:dcRl7AXBH5Bf7QFTBVc3TRzwvotSeO4AlnMhuxORAX8= -github.com/cloudflare/cloudflare-go v0.10.9 h1:d8KOgLpYiC+Xq3T4tuO+/goM+RZvuO+T4pojuv8giL8= -github.com/cloudflare/cloudflare-go v0.10.9/go.mod h1:5TrsWH+3f4NV6WjtS5QFp+DifH81rph40gU374Sh0dQ= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= -github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/continuity v0.0.0-20181203112020-004b46473808/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY= -github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.17+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.18+incompatible h1:Zz1aXgDrFFi1nadh58tA9ktt06cmPTwNNP3dXwIq1lE= -github.com/coreos/etcd v3.3.18+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.21+incompatible h1:Iet6HVi3LQHl7E4cwJUi+Iurd05SYRfEWKjNALzYx2c= -github.com/coreos/etcd v3.3.21+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= -github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f h1:JOrtw2xFKzlg+cbHpyrpLDmnN1HqhBfnX7WDiW7eG2c= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU= -github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/couchbase/ghistogram v0.1.0/go.mod h1:s1Jhy76zqfEecpNWJfWUiKZookAFaiGOEoyzgHt9i7k= -github.com/couchbase/moss v0.1.0/go.mod h1:9MaHIaRuy9pvLPUJxB8sh8OrLfyDczECVL37grCIubs= -github.com/couchbase/vellum v1.0.1 h1:qrj9ohvZedvc51S5KzPfJ6P6z0Vqzv7Lx7k3mVc2WOk= -github.com/couchbase/vellum v1.0.1/go.mod h1:FcwrEivFpNi24R3jLOs3n+fs5RnuQnQqCLBJ1uAg1W4= -github.com/cpu/goacmedns v0.0.1/go.mod h1:sesf/pNnCYwUevQEQfEwY0Y3DydlQWSGZbaMElOWxok= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -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.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/crewjam/httperr v0.0.0-20190612203328-a946449404da h1:WXnT88cFG2davqSFqvaFfzkSMC0lqh/8/rKZ+z7tYvI= -github.com/crewjam/httperr v0.0.0-20190612203328-a946449404da/go.mod h1:+rmNIXRvYMqLQeR4DHyTvs6y0MEMymTz4vyFpFkKTPs= -github.com/crewjam/saml v0.4.0 h1:gvSlboe4BO1APaU2eDdsbql3itRat310Q5qs2Seim2k= -github.com/crewjam/saml v0.4.0/go.mod h1:geQUbAAwmTKNJFDzoXaTssZHY26O89PHIm3K3YWjWnI= -github.com/cs3org/cato v0.0.0-20200626150132-28a40e643719/go.mod h1:XJEZ3/EQuI3BXTp/6DUzFr850vlxq11I6satRtz0YQ4= -github.com/cs3org/go-cs3apis v0.0.0-20191128165347-19746c015c83/go.mod h1:IsVGyZrOLUQD48JIhlM/xb3Vz6He5o2+W0ZTfUGY+IU= -github.com/cs3org/go-cs3apis v0.0.0-20200306065539-29abc33f5be0/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/go-cs3apis v0.0.0-20200408065125-6e23f3ecec0a/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/go-cs3apis v0.0.0-20200730121022-c4f3d4f7ddfd h1:uMaudkC7znaiIKT9rxIhoRYzrhTg1Nc78X7XEqhmjSk= -github.com/cs3org/go-cs3apis v0.0.0-20200730121022-c4f3d4f7ddfd/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/go-cs3apis v0.0.0-20200810113633-b00aca449666 h1:E7VsSSN/2YZLSwrDMJJdAWU11lP7W1qkcXbrslb0PM0= -github.com/cs3org/go-cs3apis v0.0.0-20200810113633-b00aca449666/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/reva v0.0.2-0.20200115110931-4c7513415ec5/go.mod h1:Hk3eCcdhtv4eIhKvRK736fQuOyS1HuHnUcz0Dq6NK1A= -github.com/cs3org/reva v0.1.0/go.mod h1:8j6QyyAq9Kjj7RPfJb7M1aEmw5DmsuCJKUULXxYOyRo= -github.com/cs3org/reva v1.1.0 h1:Gih6ECHvMMGSx523SFluFlDmNMuhYelXYShdWvjvW38= -github.com/cs3org/reva v1.1.0/go.mod h1:fBzTrNuAKdQ62ybjpdu8nyhBin90/3/3s6DGQDCdBp4= -github.com/cs3org/reva v1.2.1-0.20200826162318-c0f54e1f37ea h1:xVyJvR+GoaBrRJV6GnDflgm9bzkmjchCBBg0nMiHu6M= -github.com/cs3org/reva v1.2.1-0.20200826162318-c0f54e1f37ea/go.mod h1:FvYB+UPpuPCw0hH42qHVR1R2atZyy69METZI/zEaST8= -github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d h1:SwD98825d6bdB+pEuTxWOXiSjBrHdOl/UVp75eI7JT8= -github.com/cznic/b v0.0.0-20181122101859-a26611c4d92d/go.mod h1:URriBxXwVq5ijiJ12C7iIZqlA69nTlI+LgI6/pwftG8= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548 h1:iwZdTE0PVqJCos1vaoKsclOGD3ADKpshg3SRtYBbwso= -github.com/cznic/mathutil v0.0.0-20181122101859-297441e03548/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537 h1:MZRmHqDBd0vxNwenEbKSQqRVT24d3C05ft8kduSwlqM= -github.com/cznic/strutil v0.0.0-20181122101858-275e90344537/go.mod h1:AHHPPPXTw0h6pVabbcbyGRK1DckRn7r/STdZEeIDzZc= -github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dchest/uniuri v0.0.0-20160212164326-8902c56451e9/go.mod h1:GgB8SF9nRG+GqaDtLcwJZsQFhcogVCJ79j4EdT0c2V4= -github.com/deckarep/golang-set v1.7.1 h1:SCQV0S6gTtp6itiFrTqI+pfmJ4LN85S1YzhDf9rTHJQ= -github.com/deckarep/golang-set v1.7.1/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= -github.com/decker502/dnspod-go v0.2.0/go.mod h1:qsurYu1FgxcDwfSwXJdLt4kRsBLZeosEb9uq4Sy+08g= -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/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= -github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/dnsimple/dnsimple-go v0.30.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v1.4.2-0.20190710153559-aa8249ae1b8b/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v1.4.2-0.20191101170500-ac7306503d23/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v0.0.0-20180713052910-9f541cc9db5d/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -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/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts= -github.com/ef-ds/deque v1.0.4-0.20190904040645-54cb57c252a1/go.mod h1:HvODWzv6Y6kBf3Ah2WzN1bHjDUezGLaAhwuWVwfpEJs= -github.com/eknkc/basex v1.0.0/go.mod h1:k/F/exNEHFdbs3ZHuasoP2E7zeWwZblG84Y7Z59vQRo= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20181003060214-f58a169a71a5/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/eternnoir/gncp v0.0.0-20170707042257-c70df2d0cd68 h1:DHBMBKJK69xBWnD/jNkTN0sOT7nT7I5If9VMsk9Jj5Y= -github.com/eternnoir/gncp v0.0.0-20170707042257-c70df2d0cd68/go.mod h1:8FuQ7lU9ZvIJGvc04F/qblkjqIfBahAoEFV+XPxByGw= -github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.0.0 h1:dKTrUeykyQwKb/kx7Z+4ukDs6l+4L41HqG1XHnhX7WE= -github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/eventials/go-tus v0.0.0-20200718001131-45c7ec8f5d59 h1:t2+zxJPT/jq/YOx/JRsoByAZI/GHOxYJ7MKeillEX4U= -github.com/eventials/go-tus v0.0.0-20200718001131-45c7ec8f5d59/go.mod h1:XYuK1S5+kS6FGhlIUFuZFPvWiSrOIoLk6+ro33Xce3Y= -github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -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/structs v1.0.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/forestgiant/sliceutil v0.0.0-20160425183142-94783f95db6c/go.mod h1:pFdJbAhRf7rh6YYMUdIQGyzne6zYL1tCUW8QV2B3UfY= -github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.4.1/go.mod h1:36zfPVQyHxymz4cH7wlDmVwDrJuljRB60qkgn7rorfQ= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsouza/go-dockerclient v1.4.4/go.mod h1:PrwszSL5fbmsESocROrOGq/NULMXRw+bajY0ltzD6MA= -github.com/fsouza/go-dockerclient v1.6.0/go.mod h1:YWwtNPuL4XTX1SKJQk86cWPmmqwx+4np9qfPbb+znGc= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gizak/termui/v3 v3.1.0 h1:ZZmVDgwHl7gR7elfKf1xc4IudXZ5qqfDh4wExk4Iajc= -github.com/gizak/termui/v3 v3.1.0/go.mod h1:bXQEBkJpzxUAKf0+xq9MSWAvWZlE7c+aidmyFlkYTrY= -github.com/glauth/glauth v1.1.3-0.20200228160118-2d4f5d547682 h1:8qan0vNLF7i9Wq07mhTn/60hXEPdGTYJnR82P4X818s= -github.com/glauth/glauth v1.1.3-0.20200228160118-2d4f5d547682/go.mod h1:ygO1z1pcp79iBrjbA6vqrsUxIonStjBncosl2a9/Dx8= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 h1:Ujru1hufTHVb++eG6OuNDKMxZnGIvF6o/u8q/8h2+I4= -github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE= -github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31 h1:gclg6gY70GLy3PbkQ1AERPfmLMMagS60DKF78eWwLn8= -github.com/glycerine/goconvey v0.0.0-20190410193231-58a59202ab31/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24= -github.com/go-acme/lego/v3 v3.1.0/go.mod h1:074uqt+JS6plx+c9Xaiz6+L+GBb+7itGtzfcDM2AhEE= -github.com/go-acme/lego/v3 v3.3.0/go.mod h1:iGSY2vQrvQs3WezicSB/oVbO2eCrD88dpWPwb1qLqu0= -github.com/go-acme/lego/v3 v3.4.0 h1:deB9NkelA+TfjGHVw8J7iKl/rMtffcGMWSMmptvMv0A= -github.com/go-acme/lego/v3 v3.4.0/go.mod h1:xYbLDuxq3Hy4bMUT1t9JIuz6GWIWb3m5X+TeTHYaT7M= -github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-asn1-ber/asn1-ber v1.4.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-asn1-ber/asn1-ber v1.5.1 h1:pDbRAunXzIUXfx4CB2QJFv5IuPiuoW+sWvr/Us009o8= -github.com/go-asn1-ber/asn1-ber v1.5.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-bindata/go-bindata v3.1.1+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo= -github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/chi v4.1.0+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= -github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= -github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= -github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= -github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp/pqnefH+Bc= -github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= -github.com/go-git/go-git/v5 v5.0.0/go.mod h1:oYD8y9kWsGINPFJoLdaScGCN6dlKg23blmClfZwtUVA= -github.com/go-git/go-git/v5 v5.1.0 h1:HxJn9g/E7eYvKW3Fm7Jt4ee8LXfPOm/H1cdDu8vEssk= -github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-ini/ini v1.44.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-ldap/ldap v3.0.2+incompatible h1:kD5HQcAzlQ7yrhfn+h+MSABeAy/jAJhvIJ/QDllP44g= -github.com/go-ldap/ldap v3.0.2+incompatible/go.mod h1:qfd9rJvER9Q0/D/Sqn1DfHRoBp40uXYvFoEVrNEPqRc= -github.com/go-ldap/ldap/v3 v3.1.7/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= -github.com/go-ldap/ldap/v3 v3.2.3 h1:FBt+5w3q/vPVPb4eYMQSn+pOiz4zewPamYhlGMmc7yM= -github.com/go-ldap/ldap/v3 v3.2.3/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg= -github.com/go-log/log v0.1.0/go.mod h1:4mBwpdRMFLiuXZDCwU2lKQFsoSCo72j3HqBK9d81N2M= -github.com/go-log/log v0.2.0 h1:z8i91GBudxD5L3RmF0KVpetCbcGWAV7q1Tw1eRwQM9Q= -github.com/go-log/log v0.2.0/go.mod h1:xzCnwajcues/6w7lne3yK2QU7DBPW7kqbgPGG5AF65U= -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-logr/logr v0.1.0 h1:M1Tv3VzNlEHg6uyACnRdtrploV2P7wZqH8BoQMtz0cg= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/errors v0.19.6/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/strfmt v0.19.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-ozzo/ozzo-validation/v4 v4.2.1 h1:XALUNshPYumA7UShB7iM3ZVlqIBn0jfwjqAMIoyE1N0= -github.com/go-ozzo/ozzo-validation/v4 v4.2.1/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= -github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM= -github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= -github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY= -github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-redsync/redsync v1.3.1/go.mod h1:qxZwM5JOimfq8y98Wk2+c8dKtxJgG5/yIl2ODz2E5Dk= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-stomp/stomp v2.0.3+incompatible/go.mod h1:VqCtqNZv1226A1/79yh+rMiFUcfY3R109np+7ke4n0c= -github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM= -github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/go-test/deep v1.0.6 h1:UHSEyLZUwX9Qoi99vVwvewiMC8mM2bf7XEM2nqvzEn8= -github.com/go-test/deep v1.0.6/go.mod h1:QV8Hv/iy04NyLBxAdO9njL0iVPN1S4d/A3NVv1V36o8= -github.com/gobuffalo/buffalo v0.12.8-0.20181004233540-fac9bb505aa8/go.mod h1:sLyT7/dceRXJUxSsE813JTQtA3Eb1vjxWfo/N//vXIY= -github.com/gobuffalo/buffalo v0.13.0/go.mod h1:Mjn1Ba9wpIbpbrD+lIDMy99pQ0H0LiddMIIDGse7qT4= -github.com/gobuffalo/buffalo-plugins v1.0.2/go.mod h1:pOp/uF7X3IShFHyobahTkTLZaeUXwb0GrUTb9ngJWTs= -github.com/gobuffalo/buffalo-plugins v1.0.4/go.mod h1:pWS1vjtQ6uD17MVFWf7i3zfThrEKWlI5+PYLw/NaDB4= -github.com/gobuffalo/buffalo-plugins v1.4.3/go.mod h1:uCzTY0woez4nDMdQjkcOYKanngeUVRO2HZi7ezmAjWY= -github.com/gobuffalo/buffalo-plugins v1.5.1/go.mod h1:jbmwSZK5+PiAP9cC09VQOrGMZFCa/P0UMlIS3O12r5w= -github.com/gobuffalo/buffalo-plugins v1.6.4/go.mod h1:/+N1aophkA2jZ1ifB2O3Y9yGwu6gKOVMtUmJnbg+OZI= -github.com/gobuffalo/buffalo-plugins v1.6.5/go.mod h1:0HVkbgrVs/MnPZ/FOseDMVanCTm2RNcdM0PuXcL1NNI= -github.com/gobuffalo/buffalo-plugins v1.6.7/go.mod h1:ZGZRkzz2PiKWHs0z7QsPBOTo2EpcGRArMEym6ghKYgk= -github.com/gobuffalo/buffalo-plugins v1.6.9/go.mod h1:yYlYTrPdMCz+6/+UaXg5Jm4gN3xhsvsQ2ygVatZV5vw= -github.com/gobuffalo/buffalo-plugins v1.6.11/go.mod h1:eAA6xJIL8OuynJZ8amXjRmHND6YiusVAaJdHDN1Lu8Q= -github.com/gobuffalo/buffalo-plugins v1.8.2/go.mod h1:9te6/VjEQ7pKp7lXlDIMqzxgGpjlKoAcAANdCgoR960= -github.com/gobuffalo/buffalo-plugins v1.8.3/go.mod h1:IAWq6vjZJVXebIq2qGTLOdlXzmpyTZ5iJG5b59fza5U= -github.com/gobuffalo/buffalo-plugins v1.9.4/go.mod h1:grCV6DGsQlVzQwk6XdgcL3ZPgLm9BVxlBmXPMF8oBHI= -github.com/gobuffalo/buffalo-plugins v1.10.0/go.mod h1:4osg8d9s60txLuGwXnqH+RCjPHj9K466cDFRl3PErHI= -github.com/gobuffalo/buffalo-plugins v1.11.0/go.mod h1:rtIvAYRjYibgmWhnjKmo7OadtnxuMG5ZQLr25ozAzjg= -github.com/gobuffalo/buffalo-pop v1.0.5/go.mod h1:Fw/LfFDnSmB/vvQXPvcXEjzP98Tc+AudyNWUBWKCwQ8= -github.com/gobuffalo/envy v1.6.4/go.mod h1:Abh+Jfw475/NWtYMEt+hnJWRiC8INKWibIMyNt1w2Mc= -github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.6/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.7/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.8/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.9/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ= -github.com/gobuffalo/envy v1.6.10/go.mod h1:X0CFllQjTV5ogsnUrg+Oks2yTI+PU2dGYBJOEI2D1Uo= -github.com/gobuffalo/envy v1.6.11/go.mod h1:Fiq52W7nrHGDggFPhn2ZCcHw4u/rqXkqo+i7FB6EAcg= -github.com/gobuffalo/envy v1.6.12/go.mod h1:qJNrJhKkZpEW0glh5xP2syQHH5kgdmgsKss2Kk8PTP0= -github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/events v1.0.3/go.mod h1:Txo8WmqScapa7zimEQIwgiJBvMECMe9gJjsKNPN3uZw= -github.com/gobuffalo/events v1.0.7/go.mod h1:z8txf6H9jWhQ5Scr7YPLWg/cgXBRj8Q4uYI+rsVCCSQ= -github.com/gobuffalo/events v1.0.8/go.mod h1:A5KyqT1sA+3GJiBE4QKZibse9mtOcI9nw8gGrDdqYGs= -github.com/gobuffalo/events v1.1.3/go.mod h1:9yPGWYv11GENtzrIRApwQRMYSbUgCsZ1w6R503fCfrk= -github.com/gobuffalo/events v1.1.4/go.mod h1:09/YRRgZHEOts5Isov+g9X2xajxdvOAcUuAHIX/O//A= -github.com/gobuffalo/events v1.1.5/go.mod h1:3YUSzgHfYctSjEjLCWbkXP6djH2M+MLaVRzb4ymbAK0= -github.com/gobuffalo/events v1.1.7/go.mod h1:6fGqxH2ing5XMb3EYRq9LEkVlyPGs4oO/eLzh+S8CxY= -github.com/gobuffalo/events v1.1.8/go.mod h1:UFy+W6X6VbCWS8k2iT81HYX65dMtiuVycMy04cplt/8= -github.com/gobuffalo/events v1.1.9/go.mod h1:/0nf8lMtP5TkgNbzYxR6Bl4GzBy5s5TebgNTdRfRbPM= -github.com/gobuffalo/fizz v1.0.12/go.mod h1:C0sltPxpYK8Ftvf64kbsQa2yiCZY4RZviurNxXdAKwc= -github.com/gobuffalo/flect v0.0.0-20180907193754-dc14d8acaf9f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181002182613-4571df4b1daf/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181007231023-ae7ed6bfe683/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181018182602-fd24a256709f/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181019110701-3d6f0b585514/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181024204909-8f6be1a8c6c2/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181104133451-1f6e9779237a/go.mod h1:rCiQgmAE4axgBNl3jZWzS5rETRYTGOsrixTRaCPzNdA= -github.com/gobuffalo/flect v0.0.0-20181114183036-47375f6d8328/go.mod h1:0HvNbHdfh+WOvDSIASqJOSxTOWSxCCUF++k/Y53v9rI= -github.com/gobuffalo/flect v0.0.0-20181210151238-24a2b68e0316/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= -github.com/gobuffalo/flect v0.0.0-20190104192022-4af577e09bf2/go.mod h1:en58vff74S9b99Eg42Dr+/9yPu437QjlNsO/hBYPuOk= -github.com/gobuffalo/flect v0.0.0-20190117212819-a62e61d96794/go.mod h1:397QT6v05LkZkn07oJXXT6y9FCfwC8Pug0WA2/2mE9k= -github.com/gobuffalo/genny v0.0.0-20180924032338-7af3a40f2252/go.mod h1:tUTQOogrr7tAQnhajMSH6rv1BVev34H2sa1xNHMy94g= -github.com/gobuffalo/genny v0.0.0-20181003150629-3786a0744c5d/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= -github.com/gobuffalo/genny v0.0.0-20181005145118-318a41a134cc/go.mod h1:WAd8HmjMVrnkAZbmfgH5dLBUchsZfqzp/WS5sQz+uTM= -github.com/gobuffalo/genny v0.0.0-20181007153042-b8de7d566757/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181012161047-33e5f43d83a6/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181017160347-90a774534246/go.mod h1:+oG5Ljrw04czAHbPXREwaFojJbpUvcIy4DiOnbEJFTA= -github.com/gobuffalo/genny v0.0.0-20181024195656-51392254bf53/go.mod h1:o9GEH5gn5sCKLVB5rHFC4tq40rQ3VRUzmx6WwmaqISE= -github.com/gobuffalo/genny v0.0.0-20181025145300-af3f81d526b8/go.mod h1:uZ1fFYvdcP8mu0B/Ynarf6dsGvp7QFIpk/QACUuFUVI= -github.com/gobuffalo/genny v0.0.0-20181027191429-94d6cfb5c7fc/go.mod h1:x7SkrQQBx204Y+O9EwRXeszLJDTaWN0GnEasxgLrQTA= -github.com/gobuffalo/genny v0.0.0-20181027195209-3887b7171c4f/go.mod h1:JbKx8HSWICu5zyqWOa0dVV1pbbXOHusrSzQUprW6g+w= -github.com/gobuffalo/genny v0.0.0-20181106193839-7dcb0924caf1/go.mod h1:x61yHxvbDCgQ/7cOAbJCacZQuHgB0KMSzoYcw5debjU= -github.com/gobuffalo/genny v0.0.0-20181107223128-f18346459dbe/go.mod h1:utQD3aKKEsdb03oR+Vi/6ztQb1j7pO10N3OBoowRcSU= -github.com/gobuffalo/genny v0.0.0-20181114215459-0a4decd77f5d/go.mod h1:kN2KZ8VgXF9VIIOj/GM0Eo7YK+un4Q3tTreKOf0q1ng= -github.com/gobuffalo/genny v0.0.0-20181119162812-e8ff4adce8bb/go.mod h1:BA9htSe4bZwBDJLe8CUkoqkypq3hn3+CkoHqVOW718E= -github.com/gobuffalo/genny v0.0.0-20181127225641-2d959acc795b/go.mod h1:l54xLXNkteX/PdZ+HlgPk1qtcrgeOr3XUBBPDbH+7CQ= -github.com/gobuffalo/genny v0.0.0-20181128191930-77e34f71ba2a/go.mod h1:FW/D9p7cEEOqxYA71/hnrkOWm62JZ5ZNxcNIVJEaWBU= -github.com/gobuffalo/genny v0.0.0-20181203165245-fda8bcce96b1/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181203201232-849d2c9534ea/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181206121324-d6fb8a0dbe36/go.mod h1:wpNSANu9UErftfiaAlz1pDZclrYzLtO5lALifODyjuM= -github.com/gobuffalo/genny v0.0.0-20181207164119-84844398a37d/go.mod h1:y0ysCHGGQf2T3vOhCrGHheYN54Y/REj0ayd0Suf4C/8= -github.com/gobuffalo/genny v0.0.0-20181211165820-e26c8466f14d/go.mod h1:sHnK+ZSU4e2feXP3PA29ouij6PUEiN+RCwECjCTB3yM= -github.com/gobuffalo/genny v0.0.0-20190104222617-a71664fc38e7/go.mod h1:QPsQ1FnhEsiU8f+O0qKWXz2RE4TiDqLVChWkBuh1WaY= -github.com/gobuffalo/genny v0.0.0-20190112155932-f31a84fcacf5/go.mod h1:CIaHCrSIuJ4il6ka3Hub4DR4adDrGoXGEEt2FbBxoIo= -github.com/gobuffalo/github_flavored_markdown v1.0.4/go.mod h1:uRowCdK+q8d/RF0Kt3/DSalaIXbb0De/dmTqMQdkQ4I= -github.com/gobuffalo/github_flavored_markdown v1.0.5/go.mod h1:U0643QShPF+OF2tJvYNiYDLDGDuQmJZXsf/bHOJPsMY= -github.com/gobuffalo/github_flavored_markdown v1.0.7/go.mod h1:w93Pd9Lz6LvyQXEG6DktTPHkOtCbr+arAD5mkwMzXLI= -github.com/gobuffalo/httptest v1.0.2/go.mod h1:7T1IbSrg60ankme0aDLVnEY0h056g9M1/ZvpVThtB7E= -github.com/gobuffalo/licenser v0.0.0-20180924033006-eae28e638a42/go.mod h1:Ubo90Np8gpsSZqNScZZkVXXAo5DGhTb+WYFIjlnog8w= -github.com/gobuffalo/licenser v0.0.0-20181025145548-437d89de4f75/go.mod h1:x3lEpYxkRG/XtGCUNkio+6RZ/dlOvLzTI9M1auIwFcw= -github.com/gobuffalo/licenser v0.0.0-20181027200154-58051a75da95/go.mod h1:BzhaaxGd1tq1+OLKObzgdCV9kqVhbTulxOpYbvMQWS0= -github.com/gobuffalo/licenser v0.0.0-20181109171355-91a2a7aac9a7/go.mod h1:m+Ygox92pi9bdg+gVaycvqE8RVSjZp7mWw75+K5NPHk= -github.com/gobuffalo/licenser v0.0.0-20181128165715-cc7305f8abed/go.mod h1:oU9F9UCE+AzI/MueCKZamsezGOOHfSirltllOVeRTAE= -github.com/gobuffalo/licenser v0.0.0-20181203160806-fe900bbede07/go.mod h1:ph6VDNvOzt1CdfaWC+9XwcBnlSTBz2j49PBwum6RFaU= -github.com/gobuffalo/licenser v0.0.0-20181211173111-f8a311c51159/go.mod h1:ve/Ue99DRuvnTaLq2zKa6F4KtHiYf7W046tDjuGYPfM= -github.com/gobuffalo/logger v0.0.0-20181022175615-46cfb361fc27/go.mod h1:8sQkgyhWipz1mIctHF4jTxmJh1Vxhp7mP8IqbljgJZo= -github.com/gobuffalo/logger v0.0.0-20181027144941-73d08d2bb969/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= -github.com/gobuffalo/logger v0.0.0-20181027193913-9cf4dd0efe46/go.mod h1:7uGg2duHKpWnN4+YmyKBdLXfhopkAdVM6H3nKbyFbz8= -github.com/gobuffalo/logger v0.0.0-20181109185836-3feeab578c17/go.mod h1:oNErH0xLe+utO+OW8ptXMSA5DkiSEDW1u3zGIt8F9Ew= -github.com/gobuffalo/logger v0.0.0-20181117211126-8e9b89b7c264/go.mod h1:5etB91IE0uBlw9k756fVKZJdS+7M7ejVhmpXXiSFj0I= -github.com/gobuffalo/logger v0.0.0-20181127160119-5b956e21995c/go.mod h1:+HxKANrR9VGw9yN3aOAppJKvhO05ctDi63w4mDnKv2U= -github.com/gobuffalo/makr v1.1.5/go.mod h1:Y+o0btAH1kYAMDJW/TX3+oAXEu0bmSLLoC9mIFxtzOw= -github.com/gobuffalo/mapi v1.0.0/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= -github.com/gobuffalo/meta v0.0.0-20181018155829-df62557efcd3/go.mod h1:XTTOhwMNryif3x9LkTTBO/Llrveezd71u3quLd0u7CM= -github.com/gobuffalo/meta v0.0.0-20181018192820-8c6cef77dab3/go.mod h1:E94EPzx9NERGCY69UWlcj6Hipf2uK/vnfrF4QD0plVE= -github.com/gobuffalo/meta v0.0.0-20181025145500-3a985a084b0a/go.mod h1:YDAKBud2FP7NZdruCSlmTmDOZbVSa6bpK7LJ/A/nlKg= -github.com/gobuffalo/meta v0.0.0-20181114191255-b130ebedd2f7/go.mod h1:K6cRZ29ozr4Btvsqkjvg5nDFTLOgTqf03KA70Ks0ypE= -github.com/gobuffalo/meta v0.0.0-20181127070345-0d7e59dd540b/go.mod h1:RLO7tMvE0IAKAM8wny1aN12pvEKn7EtkBLkUZR00Qf8= -github.com/gobuffalo/meta v0.0.0-20190120163247-50bbb1fa260d/go.mod h1:KKsH44nIK2gA8p0PJmRT9GvWJUdphkDUA8AJEvFWiqM= -github.com/gobuffalo/mw-basicauth v1.0.3/go.mod h1:dg7+ilMZOKnQFHDefUzUHufNyTswVUviCBgF244C1+0= -github.com/gobuffalo/mw-contenttype v0.0.0-20180802152300-74f5a47f4d56/go.mod h1:7EvcmzBbeCvFtQm5GqF9ys6QnCxz2UM1x0moiWLq1No= -github.com/gobuffalo/mw-csrf v0.0.0-20180802151833-446ff26e108b/go.mod h1:sbGtb8DmDZuDUQoxjr8hG1ZbLtZboD9xsn6p77ppcHo= -github.com/gobuffalo/mw-forcessl v0.0.0-20180802152810-73921ae7a130/go.mod h1:JvNHRj7bYNAMUr/5XMkZaDcw3jZhUZpsmzhd//FFWmQ= -github.com/gobuffalo/mw-i18n v0.0.0-20180802152014-e3060b7e13d6/go.mod h1:91AQfukc52A6hdfIfkxzyr+kpVYDodgAeT5cjX1UIj4= -github.com/gobuffalo/mw-paramlogger v0.0.0-20181005191442-d6ee392ec72e/go.mod h1:6OJr6VwSzgJMqWMj7TYmRUqzNe2LXu/W1rRW4MAz/ME= -github.com/gobuffalo/mw-tokenauth v0.0.0-20181001105134-8545f626c189/go.mod h1:UqBF00IfKvd39ni5+yI5MLMjAf4gX7cDKN/26zDOD6c= -github.com/gobuffalo/packd v0.0.0-20181027182251-01ad393492c8/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181027190505-aafc0d02c411/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181027194105-7ae579e6d213/go.mod h1:SmdBdhj6uhOsg1Ui4SFAyrhuc7U4VCildosO5IDJ3lc= -github.com/gobuffalo/packd v0.0.0-20181031195726-c82734870264/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181104210303-d376b15f8e96/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181111195323-b2e760a5f0ff/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181114190715-f25c5d2471d7/go.mod h1:Yf2toFaISlyQrr5TfO3h6DB9pl9mZRmyvBGQb/aQ/pI= -github.com/gobuffalo/packd v0.0.0-20181124090624-311c6248e5fb/go.mod h1:Foenia9ZvITEvG05ab6XpiD5EfBHPL8A6hush8SJ0o8= -github.com/gobuffalo/packd v0.0.0-20181207120301-c49825f8f6f4/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packd v0.0.0-20181212173646-eca3b8fd6687/go.mod h1:LYc0TGKFBBFTRC9dg2pcRcMqGCTMD7T2BIMP7OBuQAA= -github.com/gobuffalo/packr v1.13.7/go.mod h1:KkinLIn/n6+3tVXMwg6KkNvWwVsrRAz4ph+jgpk3Z24= -github.com/gobuffalo/packr v1.15.0/go.mod h1:t5gXzEhIviQwVlNx/+3SfS07GS+cZ2hn76WLzPp6MGI= -github.com/gobuffalo/packr v1.15.1/go.mod h1:IeqicJ7jm8182yrVmNbM6PR4g79SjN9tZLH8KduZZwE= -github.com/gobuffalo/packr v1.19.0/go.mod h1:MstrNkfCQhd5o+Ct4IJ0skWlxN8emOq8DsoT1G98VIU= -github.com/gobuffalo/packr v1.20.0/go.mod h1:JDytk1t2gP+my1ig7iI4NcVaXr886+N0ecUga6884zw= -github.com/gobuffalo/packr v1.21.0/go.mod h1:H00jGfj1qFKxscFJSw8wcL4hpQtPe1PfU2wa6sg/SR0= -github.com/gobuffalo/packr v1.22.0/go.mod h1:Qr3Wtxr3+HuQEwWqlLnNW4t1oTvK+7Gc/Rnoi/lDFvA= -github.com/gobuffalo/packr/v2 v2.0.0-rc.8/go.mod h1:y60QCdzwuMwO2R49fdQhsjCPv7tLQFR0ayzxxla9zes= -github.com/gobuffalo/packr/v2 v2.0.0-rc.9/go.mod h1:fQqADRfZpEsgkc7c/K7aMew3n4aF1Kji7+lIZeR98Fc= -github.com/gobuffalo/packr/v2 v2.0.0-rc.10/go.mod h1:4CWWn4I5T3v4c1OsJ55HbHlUEKNWMITG5iIkdr4Px4w= -github.com/gobuffalo/packr/v2 v2.0.0-rc.11/go.mod h1:JoieH/3h3U4UmatmV93QmqyPUdf4wVM9HELaHEu+3fk= -github.com/gobuffalo/packr/v2 v2.0.0-rc.12/go.mod h1:FV1zZTsVFi1DSCboO36Xgs4pzCZBjB/tDV9Cz/lSaR8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.13/go.mod h1:2Mp7GhBFMdJlOK8vGfl7SYtfMP3+5roE39ejlfjw0rA= -github.com/gobuffalo/packr/v2 v2.0.0-rc.14/go.mod h1:06otbrNvDKO1eNQ3b8hst+1010UooI2MFg+B2Ze4MV8= -github.com/gobuffalo/packr/v2 v2.0.0-rc.15/go.mod h1:IMe7H2nJvcKXSF90y4X1rjYIRlNMJYCxEhssBXNZwWs= -github.com/gobuffalo/plush v3.7.16+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.20+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.21+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.22+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.23+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.30+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.31+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plush v3.7.32+incompatible/go.mod h1:rQ4zdtUUyZNqULlc6bqd5scsPfLKfT0+TGMChgduDvI= -github.com/gobuffalo/plushgen v0.0.0-20181128164830-d29dcb966cb2/go.mod h1:r9QwptTFnuvSaSRjpSp4S2/4e2D3tJhARYbvEBcKSb4= -github.com/gobuffalo/plushgen v0.0.0-20181203163832-9fc4964505c2/go.mod h1:opEdT33AA2HdrIwK1aibqnTJDVVKXC02Bar/GT1YRVs= -github.com/gobuffalo/plushgen v0.0.0-20181207152837-eedb135bd51b/go.mod h1:Lcw7HQbEVm09sAQrCLzIxuhFbB3nAgp4c55E+UlynR0= -github.com/gobuffalo/plushgen v0.0.0-20190104222512-177cd2b872b3/go.mod h1:tYxCozi8X62bpZyKXYHw1ncx2ZtT2nFvG42kuLwYjoc= -github.com/gobuffalo/pop v4.8.2+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.3+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/pop v4.8.4+incompatible/go.mod h1:DwBz3SD5SsHpTZiTubcsFWcVDpJWGsxjVjMPnkiThWg= -github.com/gobuffalo/release v1.0.35/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= -github.com/gobuffalo/release v1.0.38/go.mod h1:VtHFAKs61vO3wboCec5xr9JPTjYyWYcvaM3lclkc4x4= -github.com/gobuffalo/release v1.0.42/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.52/go.mod h1:RPs7EtafH4oylgetOJpGP0yCZZUiO4vqHfTHJjSdpug= -github.com/gobuffalo/release v1.0.53/go.mod h1:FdF257nd8rqhNaqtDWFGhxdJ/Ig4J7VcS3KL7n/a+aA= -github.com/gobuffalo/release v1.0.54/go.mod h1:Pe5/RxRa/BE8whDpGfRqSI7D1a0evGK1T4JDm339tJc= -github.com/gobuffalo/release v1.0.61/go.mod h1:mfIO38ujUNVDlBziIYqXquYfBF+8FDHUjKZgYC1Hj24= -github.com/gobuffalo/release v1.0.72/go.mod h1:NP5NXgg/IX3M5XmHmWR99D687/3Dt9qZtTK/Lbwc1hU= -github.com/gobuffalo/release v1.1.1/go.mod h1:Sluak1Xd6kcp6snkluR1jeXAogdJZpFFRzTYRs/2uwg= -github.com/gobuffalo/release v1.1.3/go.mod h1:CuXc5/m+4zuq8idoDt1l4va0AXAn/OSs08uHOfMVr8E= -github.com/gobuffalo/release v1.1.6/go.mod h1:18naWa3kBsqO0cItXZNJuefCKOENpbbUIqRL1g+p6z0= -github.com/gobuffalo/shoulders v1.0.1/go.mod h1:V33CcVmaQ4gRUmHKwq1fiTXuf8Gp/qjQBUL5tHPmvbA= -github.com/gobuffalo/syncx v0.0.0-20181120191700-98333ab04150/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/syncx v0.0.0-20181120194010-558ac7de985f/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/gobuffalo/tags v2.0.11+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.14+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/tags v2.0.15+incompatible/go.mod h1:9XmhOkyaB7UzvuY4UoZO4s67q8/xRMVJEaakauVQYeY= -github.com/gobuffalo/uuid v2.0.3+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/uuid v2.0.4+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/uuid v2.0.5+incompatible/go.mod h1:ErhIzkRhm0FtRuiE/PeORqcw4cVi1RtSpnwYrxuvkfE= -github.com/gobuffalo/validate v2.0.3+incompatible/go.mod h1:N+EtDe0J8252BgfzQUChBgfd6L93m9weay53EWFVsMM= -github.com/gobuffalo/x v0.0.0-20181003152136-452098b06085/go.mod h1:WevpGD+5YOreDJznWevcn8NTmQEW5STSBgIkpkjzqXc= -github.com/gobuffalo/x v0.0.0-20181007152206-913e47c59ca7/go.mod h1:9rDPXaB3kXdKWzMc4odGQQdG2e2DIEmANy5aSJ9yesY= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= -github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= -github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= -github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= -github.com/gobwas/ws v1.0.3 h1:ZOigqf7iBxkA4jdQ3am7ATzdlOFp9YzA6NmuvEEZc9g= -github.com/gobwas/ws v1.0.3/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= -github.com/gofrs/uuid v3.1.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= -github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= -github.com/golang/gddo v0.0.0-20180828051604-96d2a289f41e/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= -github.com/golang/gddo v0.0.0-20190904175337-72a348e765d2/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191002201903-404acd9df4cc/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191027212112-611e8accdfc9/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v0.0.0-20170622202551-6a1fa9404c0a/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= -github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= -github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= -github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= -github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= -github.com/googleapis/gax-go v2.0.2+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= -github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= -github.com/gopherjs/gopherjs v0.0.0-20181004151105-1babbf986f6f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0= -github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= -github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/pat v0.0.0-20180118222023-199c85a7f6d1/go.mod h1:YeAe0gNeiNT5hoiZRI4yiOky6jVdNvfO2N6Kav/HmxY= -github.com/gorilla/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY= -github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU= -github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.1.2/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= -github.com/gorilla/sessions v1.1.3/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= -github.com/gorilla/websocket v1.2.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.0 h1:0IKlLyQ3Hs9nDaiK5cSHAGmcQEIC8l2Ts1u6x5Dfrqg= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.1 h1:V59tBiPuMkySHwJkuq/OYkK0WnOLwCwD3UkTbEMr12U= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.1/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.14.4/go.mod h1:6CwZWGDSPRJidgKAtJVvND6soZe6fT7iteq8wDPdhb0= -github.com/grpc-ecosystem/grpc-gateway v1.14.6 h1:8ERzHx8aj1Sc47mu9n/AksaKCSWrMchFtkdrS4BIj5o= -github.com/grpc-ecosystem/grpc-gateway v1.14.6/go.mod h1:zdiPV4Yse/1gnckTHtghG4GkDEdKCRJduHpTxT3/jcw= -github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= -github.com/hako/branca v0.0.0-20180808000428-10b799466ada/go.mod h1:tOPn4gvKEUWqIJNE+zpTeTALaRAXnrRqqSnPlO3VpEo= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.2.0/go.mod h1:1SIkFYi2ZTXUE5Kgt179+4hH33djo11+0Eo2XgTAtkw= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.2.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= -github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= -github.com/hashicorp/go-retryablehttp v0.5.4/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.0.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.1.0 h1:bPIoEKD27tNdebFGGxxYwcL4nepeY4j1QP23PFRGzg0= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= -github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/memberlist v0.1.5/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/vault/api v1.0.4/go.mod h1:gDcqh3WGcR1cpF5AJz/B1UFheUEneMoIospckxBxk6Q= -github.com/hashicorp/vault/sdk v0.1.13/go.mod h1:B+hVj7TpuQY1Y/GPbCpffmgd+tSEwvhkWnjtSYCaS2M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5 h1:FdBGmSkD2QpQzRWup//SGObvWf2nq89zj9+ta9OvI3A= -github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5/go.mod h1:0YZ2wQSuwviXXXGUiK6zXzskyBLAbLXhamxzcFHSLoM= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= -github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= -github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4= -github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd/go.mod h1:3LVOLeyx9XVvwPgrt2be44XgSqndprz1G18rSk8KD84= -github.com/ikawaha/kagome.ipadic v1.1.2/go.mod h1:DPSBbU0czaJhAb/5uKQZHMc9MTVRpDugJfX+HddPHHg= -github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= -github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= -github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jackc/fake v0.0.0-20150926172116-812a484cc733/go.mod h1:WrMFNQdiFJ80sQsxDoMokWK1W5TQtxBFNpzWTD84ibQ= -github.com/jackc/pgx v3.2.0+incompatible/go.mod h1:0ZGrqGqkRlliWnWB4zKnWtjbSWbGkVEFm4TeybAXq+I= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/UM3ncEo0o= -github.com/jedib0t/go-pretty v4.3.0+incompatible/go.mod h1:XemHduiw8R651AF9Pt4FwCTKeG3oo7hrHJAoznj9nag= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jinzhu/copier v0.0.0-20190924061706-b57f9002281a/go.mod h1:yL958EeXv8Ylng6IfnvG4oflryUi3vgA3xPs9hmII1s= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v0.0.0-20180614180643-0dae4fefe7c0/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/joho/godotenv v1.2.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/joncalhoun/qson v0.0.0-20170526102502-8a9cab3a62b1/go.mod h1:DFXrEwSRX0p/aSvxE21319menCBFeQO0jXpRj7LEZUA= -github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/justinas/alice v1.2.0 h1:+MHSA/vccVCF4Uq37S42jwlkvI2Xzl7zTPCN5BnZNVo= -github.com/justinas/alice v1.2.0/go.mod h1:fN5HRH/reO/zrUflLfTN43t3vXvKzvZIENsNEe7i7qA= -github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.7.7/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.7.8 h1:VfG72pyIxgtC7+3X9CMHI0AOl4LwyRAg98WAgsvffi8= -github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= -github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw= -github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= -github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -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/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.3 h1:CCtW0xUnWGVINKvE/WWOYKdsPV6mawAtvQuSl8guwQs= -github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kljensen/snowball v0.6.0/go.mod h1:27N7E8fVU5H68RlUmnWwZCfxgt4POBJfENGMvNRhldw= -github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ= -github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= -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/labbsr0x/bindman-dns-webhook v1.0.2/go.mod h1:p6b+VCXIR8NYKpDr8/dg1HKfQoRHCdcsROXKvmoehKA= -github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c027w= -github.com/labstack/echo v3.2.1+incompatible h1:J2M7YArHx4gi8p/3fDw8tX19SXhBCoRpviyAZSN3I88= -github.com/labstack/echo v3.2.1+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= -github.com/labstack/echo v3.3.10+incompatible h1:pGRcYk231ExFAyoAjAfD85kQzRJCRI8bbnE7CX5OEgg= -github.com/labstack/echo v3.3.10+incompatible/go.mod h1:0INS7j/VjnFxD4E2wkz67b8cVwCLbBmJyDaka6Cmk1s= -github.com/labstack/gommon v0.2.7 h1:2qOPq/twXDrQ6ooBGrn3mrmVOC+biLlatwgIu8lbzRM= -github.com/labstack/gommon v0.2.7/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4= -github.com/labstack/gommon v0.3.0 h1:JEeO0bvc78PKdyHxloTKiF8BD5iGrH8T6MSeGvSgob0= -github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw= -github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA= -github.com/liquidweb/liquidweb-go v1.6.0/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ= -github.com/longsleep/go-metrics v0.0.0-20170706183227-c1943bcf9047/go.mod h1:Eq9KjddJTZCHG0ja+SEJNp739Um4URrcBuccq3Ih/NI= -github.com/longsleep/go-metrics v0.0.0-20191013204616-cddea569b0ea h1:Q5nKuCPF/m8xXz9oGchzSZJbGpJbb9Rm3SGBBHbBWiQ= -github.com/longsleep/go-metrics v0.0.0-20191013204616-cddea569b0ea/go.mod h1:w6QO1LBkVla70FZrrF6XcB0YN+jTEYugjkn3+6RYTSM= -github.com/lucas-clemente/quic-go v0.12.1/go.mod h1:UXJJPE4RfFef/xPO5wQm0tITK8gNfqwTxjbE7s3Vb8s= -github.com/lucas-clemente/quic-go v0.13.1/go.mod h1:Vn3/Fb0/77b02SGhQk36KzOUmXgVpFfizUfW5WMaqyU= -github.com/lucas-clemente/quic-go v0.14.1/go.mod h1:Vn3/Fb0/77b02SGhQk36KzOUmXgVpFfizUfW5WMaqyU= -github.com/luna-duclos/instrumentedsql v1.1.2/go.mod h1:4LGbEqDnopzNAiyxPPDXhLspyunZxgPTMJBKtC6U0BQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180730094502-03f2033d19d5/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/markbates/deplist v1.0.4/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= -github.com/markbates/deplist v1.0.5/go.mod h1:gRRbPbbuA8TmMiRvaOzUlRfzfjeCCBqX2A6arxN01MM= -github.com/markbates/going v1.0.2/go.mod h1:UWCk3zm0UKefHZ7l8BNqi26UyiEMniznk8naLdTcy6c= -github.com/markbates/grift v1.0.4/go.mod h1:wbmtW74veyx+cgfwFhlnnMWqhoz55rnHR47oMXzsyVs= -github.com/markbates/hmax v1.0.0/go.mod h1:cOkR9dktiESxIMu+65oc/r/bdY4bE8zZw3OLhLx0X2c= -github.com/markbates/inflect v1.0.0/go.mod h1:oTeZL2KHA7CUX6X+fovmK9OvIOFuqu0TwdQrZjLTh88= -github.com/markbates/inflect v1.0.1/go.mod h1:uv3UVNBe5qBIfCm8O8Q+DW+S1EopeyINj+Ikhc7rnCk= -github.com/markbates/inflect v1.0.3/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= -github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs= -github.com/markbates/oncer v0.0.0-20180924031910-e862a676800b/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20180924034138-723ad0170a46/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20181014194634-05fccaae8fc4/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= -github.com/markbates/refresh v1.4.10/go.mod h1:NDPHvotuZmTmesXxr95C9bjlw1/0frJwtME2dzcVKhc= -github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc= -github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w= -github.com/marten-seemann/chacha20 v0.2.0/go.mod h1:HSdjFau7GzYRj+ahFNwsO3ouVJr1HFkWoEwNDb4TMtE= -github.com/marten-seemann/qpack v0.1.0/go.mod h1:LFt1NU/Ptjip0C2CPkhimBz5CGE3WGDAUWqna+CNTrI= -github.com/marten-seemann/qtls v0.3.2/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk= -github.com/marten-seemann/qtls v0.4.1/go.mod h1:pxVXcHHw1pNIt8Qo0pwSYQEoZ8yYOOPXTCZLQQunvRc= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= -github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -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/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= -github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= -github.com/mattn/goveralls v0.0.5/go.mod h1:Xg2LHi51faXLyKXwsndxiW6uxEEQT9+3sjGzzwU4xy0= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103 h1:Z/i1e+gTZrmcGeZyWckaLfucYG6KYOXLWo4co8pZYNY= -github.com/mendsley/gojwk v0.0.0-20141217222730-4d5ec6e58103/go.mod h1:o9YPB5aGP8ob35Vy6+vyq3P3bWe7NQWzf+JLiXCiMaE= -github.com/mennanov/fieldmask-utils v0.3.2 h1:AkHXYBEOoyvocl8YhzoStATRnto5OH1PY4Rj78I5Cuc= -github.com/mennanov/fieldmask-utils v0.3.2/go.mod h1:JpaanSp6Ql5A8dGktEFxTmA9uBXmz3F+2LAXDZwiimU= -github.com/mholt/certmagic v0.7.5/go.mod h1:91uJzK5K8IWtYQqTi5R2tsxV1pCde+wdGfaRaOZi6aQ= -github.com/mholt/certmagic v0.8.3/go.mod h1:91uJzK5K8IWtYQqTi5R2tsxV1pCde+wdGfaRaOZi6aQ= -github.com/mholt/certmagic v0.9.1/go.mod h1:nu8jbsbtwK4205EDH/ZUMTKsfYpJA1Q7MKXHfgTihNw= -github.com/mholt/certmagic v0.9.3/go.mod h1:nu8jbsbtwK4205EDH/ZUMTKsfYpJA1Q7MKXHfgTihNw= -github.com/micro/cli v0.2.0 h1:ut3rV5JWqZjsXIa2MvGF+qMUP8DAUTvHX9Br5gO4afA= -github.com/micro/cli v0.2.0/go.mod h1:jRT9gmfVKWSS6pkKcXQ8YhUyj6bzwxK8Fp5b0Y7qNnk= -github.com/micro/cli/v2 v2.1.1/go.mod h1:EguNh6DAoWKm9nmk+k/Rg0H3lQnDxqzu5x5srOtGtYg= -github.com/micro/cli/v2 v2.1.2-0.20200203150404-894195727d9c/go.mod h1:EguNh6DAoWKm9nmk+k/Rg0H3lQnDxqzu5x5srOtGtYg= -github.com/micro/cli/v2 v2.1.2 h1:43J1lChg/rZCC1rvdqZNFSQDrGT7qfMrtp6/ztpIkEM= -github.com/micro/cli/v2 v2.1.2/go.mod h1:EguNh6DAoWKm9nmk+k/Rg0H3lQnDxqzu5x5srOtGtYg= -github.com/micro/go-micro v1.16.0/go.mod h1:A0F58bHLh2m0LAI9QyhvmbN8c1cxhAZo3cM6s+iDsrM= -github.com/micro/go-micro v1.17.1/go.mod h1:klwUJL1gkdY1MHFyz+fFJXn52dKcty4hoe95Mp571AA= -github.com/micro/go-micro v1.18.0 h1:gP70EZVHpJuUIT0YWth192JmlIci+qMOEByHm83XE9E= -github.com/micro/go-micro v1.18.0/go.mod h1:klwUJL1gkdY1MHFyz+fFJXn52dKcty4hoe95Mp571AA= -github.com/micro/go-micro/v2 v2.0.0/go.mod h1:v7QP5UhKRt37ixjJe8DouWmg0/eE6dltr5h0idJ9BpE= -github.com/micro/go-micro/v2 v2.0.1-0.20200207205803-ef537270add3/go.mod h1:CDPVByZzOp1RNrJfNxEGgNOJ11wEw8NoHfADo8M3+LM= -github.com/micro/go-micro/v2 v2.5.1-0.20200417165434-16db76bee2fb/go.mod h1:qz2UT4UFdFVs+qUGMuDK3xuHgude1BgntqQ29sbpPlE= -github.com/micro/go-micro/v2 v2.6.0/go.mod h1:60HMKlDN4ShZDJRrlgdcAmkCWNhQbYv+CDG3r7iLE34= -github.com/micro/go-micro/v2 v2.8.0/go.mod h1:hSdOM6jb6aGswjBpCeB9wJ0yVH+CugevRm/CX7NlSrQ= -github.com/micro/go-micro/v2 v2.9.1 h1:+S9koIrNWARjpP6k2TZ7kt0uC9zUJtNXzIdZTZRms7Q= -github.com/micro/go-micro/v2 v2.9.1/go.mod h1:x55ZM3Puy0FyvvkR3e0ha0xsE9DFwfPSUMWAIbFY0SY= -github.com/micro/go-plugins v1.5.1 h1:swcFD7ynCTUo98APqIEIbPu2XMd6yVGTnI8PqdnCwOQ= -github.com/micro/go-plugins v1.5.1/go.mod h1:jcxejzJCAMH731cQHbS/hncyKe0rxAbzKkibj8glad4= -github.com/micro/go-plugins/wrapper/trace/opencensus/v2 v2.0.1/go.mod h1:QrkcwcDtIs2hIJpIEhozekyf6Rfz5C36kFI8+zzCpX0= -github.com/micro/go-plugins/wrapper/trace/opencensus/v2 v2.9.1 h1:IaZUsLp0Omb/ozDnRKEvVY56C0UocBdPxxg2S2Pk2j0= -github.com/micro/go-plugins/wrapper/trace/opencensus/v2 v2.9.1/go.mod h1:26UmOLM/I487NqTg3n6zJiBrYmIb684M2Zp4WH98XzU= -github.com/micro/mdns v0.3.0 h1:bYycYe+98AXR3s8Nq5qvt6C573uFTDPIYzJemWON0QE= -github.com/micro/mdns v0.3.0/go.mod h1:KJ0dW7KmicXU2BV++qkLlmHYcVv7/hHnbtguSWt9Aoc= -github.com/micro/micro v1.16.0 h1:qCZV20WoTOtJ1IyLU/a0A0BMSertfu+iOj/2AJ4Uvrk= -github.com/micro/micro v1.16.0/go.mod h1:TO5Ng0KidbfRYIxVM4Q3deZ0A+qwRyP9WeXp+k2fWNA= -github.com/micro/micro/v2 v2.0.1-0.20200210100719-f38a1d8d5348/go.mod h1:MQBt/cBC7vKP6JMebU5982Umd5GIrVdhPbOGieXowyY= -github.com/micro/micro/v2 v2.5.1-0.20200418121137-24e9b206767c/go.mod h1:fqqaYbJGYzSBi7Ms2Adly7Xzw9+WIRBAucUjwGmYeFY= -github.com/micro/micro/v2 v2.8.0 h1:AMqpnKsOBnuGHjU0jVmTL17BRdsOx0FbvI/Gkl2uLrA= -github.com/micro/micro/v2 v2.8.0/go.mod h1:VTIGqEBLAMh22q72DnGd95iJSQY/3yvXd9GIIooQ69c= -github.com/micro/protoc-gen-micro v1.0.0 h1:qKh5S3I1RfenhIs5mqDFJLwRlRDlgin7XWiUKZbpwLM= -github.com/micro/protoc-gen-micro v1.0.0/go.mod h1:C8ij4DJhapBmypcT00AXdb0cZ675/3PqUO02buWWqbE= -github.com/micro/protoc-gen-micro/v2 v2.3.0 h1:PBbGeNh4BOy1w4eRdeo4yWJJNWGLnaJX6/h55I74EXE= -github.com/micro/protoc-gen-micro/v2 v2.3.0/go.mod h1:gcsUvKSTTTalq+pqdUbFS40OTsURpYgL5+yUguR1djk= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -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.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.15/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.27 h1:aEH/kqUzUxGJ/UHcEKdJY+ugH6WEzsEBBSPa8zuy1aM= -github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/minio/highwayhash v1.0.0/go.mod h1:xQboMTeM9nY9v/LlAOxFctujiv5+Aq2hR5dxBpaMbdc= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-vnc v0.0.0-20150629162542-723ed9867aed/go.mod h1:3rdaFaCv4AyBgu5ALFM0+tSuHrBh6v692nyQe3ikrq0= -github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/gox v1.0.1 h1:x0jD3dcHk9a9xPSDN6YEL4xL6Qz0dvNYm8yZqui5chI= -github.com/mitchellh/gox v1.0.1/go.mod h1:ED6BioOGXMswlXa2zxfh/xdd5QhwYliBFn9V18Ap4z4= -github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= -github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= -github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/monoculum/formam v0.0.0-20180901015400-4e68be1d79ba/go.mod h1:RKgILGEJq24YyJ2ban8EO0RUVSJlF1pGsEvoLEACr/Q= -github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/moul/http2curl v0.0.0-20170919181001-9ac6cf4d929b/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= -github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg= -github.com/mschoch/smat v0.2.0 h1:8imxQsjDm8yFEAVBe7azKmKSgzSkZXDuKkSq9374khM= -github.com/mschoch/smat v0.2.0/go.mod h1:kc9mz7DoBKqDyiRL7VZN8KvXQMWeTaVnttLRXOlotKw= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.0/go.mod h1:r5y0WgCag0dTj/qiHkHrXAcKQ/f5GMOZaEGdoxxnJ4I= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats-server/v2 v2.1.6 h1:qAaHZaS8pRRNQLFaiBA1rq5WynyEGp9DFgmMfoaiXGY= -github.com/nats-io/nats-server/v2 v2.1.6/go.mod h1:BL1NOtaBQ5/y97djERRVWNouMW7GT3gxnmbE/eC8u8A= -github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nats.go v1.9.2 h1:oDeERm3NcZVrPpdR/JpGdWHMv3oJ8yY30YwxKq+DU2s= -github.com/nats-io/nats.go v1.9.2/go.mod h1:AjGArbfyR50+afOUotNX2Xs5SYHf+CoOa5HH1eEl2HE= -github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.4 h1:aEsHIssIk6ETN5m2/MD8Y4B2X7FfXrBAUdkyRvbVYzA= -github.com/nats-io/nkeys v0.1.4/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nats-io/stan.go v0.5.0/go.mod h1:dYqB+vMN3C2F9pT1FRQpg9eHbjPj6mP0yYuyBNuXHZE= -github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= -github.com/netdata/go-orchestrator v0.0.0-20190905093727-c793edba0e8f/go.mod h1:ECF8anFVCt/TfTIWVPgPrNaYJXtAtpAOF62ugDbw41A= -github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= -github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/nicksnyder/go-i18n v1.10.0/go.mod h1:HrK7VCrbOvQoUAQ7Vpy7i87N7JZZZ7R2xBGjv0j365Q= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nlopes/slack v0.6.0/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk= -github.com/nlopes/slack v0.6.1-0.20191106133607-d06c2a2b3249/go.mod h1:JzQ9m3PMAqcpeCam7UaHSuBuupz7CmpjehYMayT6YOk= -github.com/nmcclain/asn1-ber v0.0.0-20170104154839-2661553a0484 h1:D9EvfGQvlkKaDr2CRKN++7HbSXbefUNDrPq60T+g24s= -github.com/nmcclain/asn1-ber v0.0.0-20170104154839-2661553a0484/go.mod h1:O1EljZ+oHprtxDDPHiMWVo/5dBT6PlvWX5PSwj80aBA= -github.com/nmcclain/ldap v0.0.0-20191021200707-3b3b69a7e9e3 h1:NNis9uuNpG5h97Dvxxo53Scg02qBg+3Nfabg6zjFGu8= -github.com/nmcclain/ldap v0.0.0-20191021200707-3b3b69a7e9e3/go.mod h1:YtrVB1/v9Td9SyjXpjYVmbdKgj9B0nPTBsdGUxy0i8U= -github.com/nrdcg/auroradns v1.0.0/go.mod h1:6JPXKzIRzZzMqtTDgueIhTi6rFf1QvYE/HzqidhOhjw= -github.com/nrdcg/dnspod-go v0.3.0/go.mod h1:vZSoFSFeQVm2gWLMkyX61LZ8HI3BaqtHZWgPTGKr6KQ= -github.com/nrdcg/dnspod-go v0.4.0/go.mod h1:vZSoFSFeQVm2gWLMkyX61LZ8HI3BaqtHZWgPTGKr6KQ= -github.com/nrdcg/goinwx v0.6.1/go.mod h1:XPiut7enlbEdntAqalBIqcYcTEVhpv/dKWgDCX2SwKQ= -github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw= -github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d h1:x3S6kxmy49zXVVyhcnrFqxvNVCBPb2KZ9hV2RBdS840= -github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= -github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1 h1:lh3PyZvY+B9nFliSGTn5uFuqQQJGuNrD0MLCokv09ag= -github.com/nsf/termbox-go v0.0.0-20200418040025-38ba6e5628f1/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ= -github.com/nsqio/go-nsq v1.0.7/go.mod h1:XP5zaUs3pqf+Q71EqUJs3HYfBIqfK6G83WQMdNN+Ito= -github.com/ogier/pflag v0.0.1 h1:RW6JSWSu/RkSatfcLtogGfFgpim5p7ARQ10ECk5O750= -github.com/ogier/pflag v0.0.1/go.mod h1:zkFki7tvTa0tafRvTBIZTvzYyAu6kQhPZFnshFFPE+g= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= -github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/oleiade/reflections v1.0.0/go.mod h1:RbATFBbKYkVdqmSFtx13Bb/tVhR0lgOBXunWTZKeL4w= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.3/go.mod h1:YZeBtGzYYEsCHp2LST/u/0NDwGkRoBtmn1cIWCJiS6M= -github.com/olekukonko/tablewriter v0.0.4 h1:vHD/YYe1Wolo78koG299f7V/VAS08c6IpCLn+Ejf/w8= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -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.1 h1:q/mM8GF/n0shIN8SaAZ0V+jnLPzen6WIVZdiwrRlMlo= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3 h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ= -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/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888= -github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6 h1:lNCW6THrCKBiJBpz8kbVGjC7MgdCGKwuvBgc7LoD6sw= -github.com/orcaman/concurrent-map v0.0.0-20190826125027-8c72a8bb44f6/go.mod h1:Lu3tH6HLW3feq74c2GC+jIMS/K2CFcDWnWD9XkenwhI= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/fosite v0.29.0/go.mod h1:0atSZmXO7CAcs6NPMI/Qtot8tmZYj04Nddoold4S2h0= -github.com/ory/fosite v0.30.2/go.mod h1:Lq9qQ9Sl6mcea2Tt8J7PU+wUeFYPZ+vg7N3zPVKGbN8= -github.com/ory/fosite v0.30.4/go.mod h1:Lq9qQ9Sl6mcea2Tt8J7PU+wUeFYPZ+vg7N3zPVKGbN8= -github.com/ory/fosite v0.32.2 h1:iRV495P/9EyoYQ8qEHYxFQeeYCdDFawqjAML+qiMF9s= -github.com/ory/fosite v0.32.2/go.mod h1:UeBhRgW6nAjTcd8S7kAo0IFsY/rTPyOXPq/t8N20Q8I= -github.com/ory/go-acc v0.0.0-20181118080137-ddc355013f90/go.mod h1:sxnvPCxChFuSmTJGj8FdMupeq1BezCiEpDjTUXQ4hf4= -github.com/ory/go-acc v0.2.1/go.mod h1:0omgy2aa3nDBJ45VAKeLHH8ccPBudxLeic4xiDRtug0= -github.com/ory/go-convenience v0.1.0 h1:zouLKfF2GoSGnJwGq+PE/nJAE6dj2Zj5QlTgmMTsTS8= -github.com/ory/go-convenience v0.1.0/go.mod h1:uEY/a60PL5c12nYz4V5cHY03IBmwIAEm8TWB0yn9KNs= -github.com/ory/gojsonreference v0.0.0-20190720135523-6b606c2d8ee8/go.mod h1:wsH1C4nIeeQClDtD5AH7kF1uTS6zWyqfjVDTmB0Em7A= -github.com/ory/gojsonschema v1.1.1-0.20190919112458-f254ca73d5e9/go.mod h1:BNZpdJgB74KOLSsWFvzw6roXg1I6O51WO8roMmW+T7Y= -github.com/ory/herodot v0.6.2/go.mod h1:3BOneqcyBsVybCPAJoi92KN2BpJHcmDqAMcAAaJiJow= -github.com/ory/viper v1.5.6/go.mod h1:TYmpFpKLxjQwvT4f0QPpkOn4sDXU1kDgAwJpgLYiQ28= -github.com/ory/x v0.0.85/go.mod h1:s44V8t3xyjWZREcU+mWlp4h302rTuM4aLXcW+y5FbQ8= -github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ= -github.com/owncloud/flaex v0.0.0-20200411150708-dce59891a203/go.mod h1:jip86t4OVURJTf8CM/0e2qcji/Y4NG3l2lR8kex4JWw= -github.com/owncloud/flaex v0.2.0 h1:3FLf8oyMgA6HLK7w4+VJ5N1oVA8G7MptLCVjfxxIaww= -github.com/owncloud/flaex v0.2.0/go.mod h1:jip86t4OVURJTf8CM/0e2qcji/Y4NG3l2lR8kex4JWw= -github.com/owncloud/ocis v1.0.0-rc1 h1:5pxFes3myh5cwfvyZ0l6akN9wneSc9UxB5Veg2Xr1Rc= -github.com/owncloud/ocis v1.0.0-rc1/go.mod h1:TmghyYp0UgfxWlJobYshsOzJ3i99+OaTYxmbiHPIxDo= -github.com/owncloud/ocis v1.0.0-rc1.0.20200918114005-1a0ddd2190ee h1:EXT7AIO8bc6HEcnvybGQUkzRXin2KagJBpuv12oZksM= -github.com/owncloud/ocis-accounts v0.1.2-0.20200618163128-aa8ae58dd95e/go.mod h1:ohb58AUSUgq+kPOFAjy1s1k5Bi33YtPg45qOOPsepeM= -github.com/owncloud/ocis-accounts v0.1.2-0.20200710152724-fa35a81beb2f/go.mod h1:wxo2B5EoTQlf3ryDeOTR/RAs3z6IHkllu1CvBxrLf1A= -github.com/owncloud/ocis-accounts v0.4.2-0.20200828150703-2ca83cf4ac20/go.mod h1:R2mNcvDvma7D7n1yxpLHIJR9dHUx4As7QfiJlD8e9DE= -github.com/owncloud/ocis-accounts v0.4.2-0.20200901074457-6a27781a2741/go.mod h1:ermjPwC2b3Tsh8YF3oUl6cOHMvFPN6MY8ZlkmO6w0xw= -github.com/owncloud/ocis-glauth v0.5.1-0.20200731165959-1081de7c60f1 h1:YA7tS4VFSUmjeZBt4Wa+fSoreH1VJYCFlHvoRey3ngM= -github.com/owncloud/ocis-glauth v0.5.1-0.20200731165959-1081de7c60f1/go.mod h1:lZkoEjBuEi0QZUlBG+XgVvWC4GzbWCTnmZQcIhC2kMg= -github.com/owncloud/ocis-graph v0.0.0-20200318175820-9a5a6e029db7 h1:gT0GyIOoR7XtpZ7sIxVJSckcz/nueGB1Cm1xNaflXQ0= -github.com/owncloud/ocis-graph v0.0.0-20200318175820-9a5a6e029db7/go.mod h1:IRm6BBJqyPhYI+3fm5bWkhgFL/yh63ASUznFqN4yXgs= -github.com/owncloud/ocis-graph-explorer v0.0.0-20200210111049-017eeb40dc0c h1:8g3u2JwOMP/UE+0B+YjV7UWEQzyCPbnZzwIto6lNc0I= -github.com/owncloud/ocis-graph-explorer v0.0.0-20200210111049-017eeb40dc0c/go.mod h1:zspcodmHIzGmB6Py8Ve+oO6wXFKRra5bEx1Q9HdJlrY= -github.com/owncloud/ocis-hello v0.1.0-alpha1/go.mod h1:tU2bOB7DjuXZ+ju+5A+7pUHmTfPIYUk3tMflqHTBTpE= -github.com/owncloud/ocis-hello v0.1.0-alpha1.0.20200828085053-37fcf3c8f853 h1:ei0C5Wmppw+9oiSB0XpAdwymD8+ZnmewNdVVzYE3UvQ= -github.com/owncloud/ocis-hello v0.1.0-alpha1.0.20200828085053-37fcf3c8f853/go.mod h1:vnpYlDkhVoiuUAuTnY4Ajz2d5Alz0c/49AxptOLTpYA= -github.com/owncloud/ocis-konnectd v0.3.2 h1:lKXpiE44xd/yvRmnTC2UA9qE+xP/6VT3QLQp3lKnmbc= -github.com/owncloud/ocis-konnectd v0.3.2/go.mod h1:pyxlwCsLY/j54w5QVOSW8owARj6JfjH01b4hFz8XtAY= -github.com/owncloud/ocis-migration v0.2.0 h1:AmfXKIRlGDNkqhC4AetZ0RNNgcH3cHRl8iKXA83ta7A= -github.com/owncloud/ocis-migration v0.2.0/go.mod h1:U6DCcHLuogHvAXg1aAyIlzJPtERIqyuigXU1BjUpu5g= -github.com/owncloud/ocis-ocs v0.3.1 h1:ieY/5BTC5LxNz+/S2UN55vn5iOVJviFxpDAxW1ny31A= -github.com/owncloud/ocis-ocs v0.3.1/go.mod h1:TpBlVYnJcZp0Bl+bZRtoQx/NrcNGXv2TUMXq7IWMULQ= -github.com/owncloud/ocis-phoenix v0.13.0 h1:OIvOnW5tvciMNuE4sz9xyA8ZGve6QeUt+VpLthyAkms= -github.com/owncloud/ocis-phoenix v0.13.0/go.mod h1:eAsLc7yO2seKsLVWHfvlObtGEyOxxOH1V9aEMeuR7RU= -github.com/owncloud/ocis-pkg v1.2.1-0.20191217084055-eab942498596/go.mod h1:Wo0QfOmhadh2vNcUoQIsw2yaOT3zeftk+xaOOwP3y88= -github.com/owncloud/ocis-pkg v1.3.0 h1:2fkgvfd/spTjschuulYMHRuzxkCGGXae9ocebVYkm74= -github.com/owncloud/ocis-pkg v1.3.0/go.mod h1:Wo0QfOmhadh2vNcUoQIsw2yaOT3zeftk+xaOOwP3y88= -github.com/owncloud/ocis-pkg/v2 v2.0.1/go.mod h1:7bVnn3VUaqdmvpMkXF0QVEF1fRugs35hSkuVTAq9yjk= -github.com/owncloud/ocis-pkg/v2 v2.0.3-0.20200309150924-5c659fd4b0ad/go.mod h1:TrBRa+D8mUTsl+qvQiIksJbUvxdE/Qq9jEHUcERPQ60= -github.com/owncloud/ocis-pkg/v2 v2.2.1/go.mod h1:MXv7QzsYsu4YWuyJxhq1kLLmJa/r5gbqHe1FXulMHaw= -github.com/owncloud/ocis-pkg/v2 v2.2.2-0.20200527082518-5641fa4a4c8c/go.mod h1:s894msGwDsULmsROHkbsXFCP/eSqDcteDFUntZOiJdc= -github.com/owncloud/ocis-pkg/v2 v2.2.2-0.20200602070144-cd0620668170/go.mod h1:s894msGwDsULmsROHkbsXFCP/eSqDcteDFUntZOiJdc= -github.com/owncloud/ocis-pkg/v2 v2.3.0/go.mod h1:FSzIvhx9HcZcq4jgNaDowNvM7PTX/XCyoMvyfzidUpE= -github.com/owncloud/ocis-pkg/v2 v2.4.0/go.mod h1:FSzIvhx9HcZcq4jgNaDowNvM7PTX/XCyoMvyfzidUpE= -github.com/owncloud/ocis-pkg/v2 v2.4.1-0.20200828095914-d3b859484b2b h1:PRw0b4abdrDKloh417qPsS5lkB/bjJ3Rc4txzHx/hBg= -github.com/owncloud/ocis-pkg/v2 v2.4.1-0.20200828095914-d3b859484b2b/go.mod h1:WdcVM54z0X7aQzS8eyGl7S5sjEMVBtLpfpzsPX3Z+Pw= -github.com/owncloud/ocis-pkg/v2 v2.4.1-0.20200902134813-1e87c6173ada h1:iVknnuT/z8QCAeBpHEcbI/AiQ9FOBvF5aOAFT3TIM+I= -github.com/owncloud/ocis-pkg/v2 v2.4.1-0.20200902134813-1e87c6173ada/go.mod h1:WdcVM54z0X7aQzS8eyGl7S5sjEMVBtLpfpzsPX3Z+Pw= -github.com/owncloud/ocis-proxy v0.7.1-0.20200904132806-fcceec602fcb h1:m2eijSU1GXKK1wKQ9Xr2MThqtA3ic641z5Nml5p0uXU= -github.com/owncloud/ocis-proxy v0.7.1-0.20200904132806-fcceec602fcb/go.mod h1:zFwhh9GFzPCiHBPM4zyWzxA7d78fYMbLOPB977mGUzk= -github.com/owncloud/ocis-reva v0.13.0 h1:np4Xk/hBWSOIsahimP6tnwiEl1YKj8okJ7M5IAaNfBY= -github.com/owncloud/ocis-reva v0.13.0/go.mod h1:cTcLFOO/tg4/GyYygi/VVXFjZAQWE3YxlyfhZ/vcAj4= -github.com/owncloud/ocis-settings v0.0.0-20200522101320-46ea31026363/go.mod h1:/h0ceztOoFc3KAnm8nqZI4zwsaaZK9q4MTgtintwsXc= -github.com/owncloud/ocis-settings v0.0.0-20200629120229-69693c5f8f43/go.mod h1:AeXZVHKEU+9Xt4+/lkHE5rx+sJH2if9dIrUGLhe+JOY= -github.com/owncloud/ocis-settings v0.3.2-0.20200827193534-8caf098e6537/go.mod h1:vRge9QDkOsc6j76gPBmZs1Z5uOPrV4DIkZCgZCEFwBA= -github.com/owncloud/ocis-settings v0.3.2-0.20200828091056-47af10a0e872/go.mod h1:vRge9QDkOsc6j76gPBmZs1Z5uOPrV4DIkZCgZCEFwBA= -github.com/owncloud/ocis-settings v0.3.2-0.20200828130413-0cc0f5bf26fe h1:kiU5lz12R0LNJE1/zI2vxesZPWm6BvSO7hvZC8yOoAc= -github.com/owncloud/ocis-settings v0.3.2-0.20200828130413-0cc0f5bf26fe/go.mod h1:vRge9QDkOsc6j76gPBmZs1Z5uOPrV4DIkZCgZCEFwBA= -github.com/owncloud/ocis-settings v0.3.2-0.20200902094647-35dc3aeaba78 h1:mCP/1U+mI70dQugeSsTKqf1O2a/GQLInl1KMPXaU2yQ= -github.com/owncloud/ocis-settings v0.3.2-0.20200902094647-35dc3aeaba78/go.mod h1:J2m9TM5FqYDTvrr2zH78JsC1Xv8hXmd+0dntHCWYYoc= -github.com/owncloud/ocis-settings v0.3.2-0.20200903035407-ad5de8264f91 h1:fiCEaM9Ysc9Tw7dhZk9mTjdHB8grrx2TEiEfRd4yYNo= -github.com/owncloud/ocis-settings v0.3.2-0.20200903035407-ad5de8264f91/go.mod h1:KGNSgqec5Kv4tgD4rLbo7Z5vrEYTnxd5g2NHmpUJ3O8= -github.com/owncloud/ocis-store v0.0.0-20200716140351-f9670592fb7b/go.mod h1:7WRMnx4ffwtckNl4qD2Gj/d5fvl84jyydOV2FbUUu3A= -github.com/owncloud/ocis-store v0.1.1 h1:lPvWjjPqbVqDW0sfgQdfY3dOOvXK0wC87eTL2fWxRBg= -github.com/owncloud/ocis-store v0.1.1/go.mod h1:Rav5iw0fZXYFqJl81IbyTVa/FidaBhgVPtp0XqkgviM= -github.com/owncloud/ocis-thumbnails v0.2.0/go.mod h1:97QGLawjcpbhSIscbPXJAytE6vAQi5Y+Ov55h8/mq+0= -github.com/owncloud/ocis-thumbnails v0.3.0 h1:As0wiSXwDp9JgK/FPY5h1J9HXEow9EFefgOdgEIgdP0= -github.com/owncloud/ocis-thumbnails v0.3.0/go.mod h1:97QGLawjcpbhSIscbPXJAytE6vAQi5Y+Ov55h8/mq+0= -github.com/owncloud/ocis-webdav v0.1.1 h1:4UN9GefQiH6RGgq2+tiYFLNw8ql6luXYH0NdCJg2n/U= -github.com/owncloud/ocis-webdav v0.1.1/go.mod h1:E9OlGfvlxf1NHFOvFgbHWBe7/pw4Gqy/JaSJFEHQSzg= -github.com/owncloud/ocis/settings v0.0.0-20200918114005-1a0ddd2190ee h1:LaKP3hCTJ6WwB3W40m5UhddvokMRIbOXrjogxON4jAI= -github.com/owncloud/ocis/settings v0.0.0-20200918114005-1a0ddd2190ee/go.mod h1:5w91idmyOd8LgYK3eGuqsFBOfVJnSDeEp7S6dHheW14= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= -github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= -github.com/parnurzeal/gorequest v0.2.15/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE= -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/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= -github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg= -github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= -github.com/pelletier/go-toml v1.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4= -github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys= -github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ= -github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -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/pierrec/lz4 v2.2.6+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/term v0.0.0-20200520122047-c3ffed290a03/go.mod h1:Z9+Ul5bCbBKnbCvdOWbLqTHhJiYV414CURZJba6L8qA= -github.com/pkg/xattr v0.4.1 h1:dhclzL6EqOXNaPDWqoeb9tIxATfBSmjqL0b4DpSjwRw= -github.com/pkg/xattr v0.4.1/go.mod h1:W2cGD0TBEus7MkUgv0tNZ9JutLtVO3cXu+IBRuHqnFs= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35 h1:J9b7z+QKAmPf4YLrFg6oQUotqHQeUNWwkvo7jZp1GLU= -github.com/pquerna/cachecontrol v0.0.0-20180517163645-1555304b9b35/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok= -github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U= -github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20170706130215-fb369f752a7f/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20170703101242-e645f4e5aaa8/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.0.6/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3 h1:F0+tqvhOksq22sc6iCHF5WGlWjdwj92p0udFh1VFBS8= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/statsd_exporter v0.15.0 h1:UiwC1L5HkxEPeapXdm2Ye0u1vUJfTj7uwT5yydYpa1E= -github.com/prometheus/statsd_exporter v0.15.0/go.mod h1:Dv8HnkoLQkeEjkIE4/2ndAA7WL1zHKK7WMqFQqu72rw= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/refs/pman v0.0.0-20200701173654-f05b8833071a h1:GCYFb7layULUl1HvZG97ur0zyqtEPo3VHcJCcBSvk7M= -github.com/refs/pman v0.0.0-20200701173654-f05b8833071a/go.mod h1:fp4xg8dOs/XaZfB3abn1pxvclh10MtG4tdCc61lrmCo= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= -github.com/restic/calens v0.1.0/go.mod h1:u67f5msOjCTDYNzOf/NoAUSdmXP03YXPCwIQLYADy5M= -github.com/restic/calens v0.2.0 h1:LVNAtmFc+Pb4ODX66qdX1T3Di1P0OTLyUsVyvM/xD7E= -github.com/restic/calens v0.2.0/go.mod h1:UXwyAKS4wsgUZGEc7NrzzygJbLsQZIo3wl+62Q1wvmU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.0.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= -github.com/rs/zerolog v1.17.2/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= -github.com/rs/zerolog v1.18.0/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= -github.com/rs/zerolog v1.19.0 h1:hYz4ZVdUgjXTBUmrkrw55j1nHx68LfOKIQk5IYtyScg= -github.com/rs/zerolog v1.19.0/go.mod h1:IzD0RJ65iWH0w97OQQebJEvTZYvsCUm9WVLWBQrJRjo= -github.com/rubenv/sql-migrate v0.0.0-20190212093014-1007f53448d7/go.mod h1:WS0rl9eEliYI8DPnr3TOwz4439pay+qNgzJoVya/DmY= -github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7 h1:J4AOUcOh/t1XbQcJfkEqhzgvMJ2tDxdCVvmHxW5QXao= -github.com/russellhaering/goxmldsig v0.0.0-20180430223755-7acd5e4a6ef7/go.mod h1:Oz4y6ImuOQZxynhbSXk7btjEfNBtGlj2dcaOvXl2FSM= -github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/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/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= -github.com/sacloud/libsacloud v1.26.1/go.mod h1:79ZwATmHLIFZIMd7sxA3LwzVy/B77uj3LDoToVTxDoQ= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= -github.com/santhosh-tekuri/jsonschema/v2 v2.1.0/go.mod h1:yzJzKUGV4RbWqWIBBP4wSOBqavX5saE02yirLS0OTyg= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/segmentio/analytics-go v3.0.1+incompatible/go.mod h1:C7CYBtQWk4vRk2RyLu0qOcbHJ18E3F1HV2C/8JvKN48= -github.com/segmentio/backo-go v0.0.0-20160424052352-204274ad699c/go.mod h1:kJ9mm9YmoWSkk+oQ+5Cj8DEoRCX2JT6As4kEtIIOp1M= -github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516 h1:ofR1ZdrNSkiWcMsRrubK9tb2/SlZVWttAfqUjJi6QYc= -github.com/serenize/snaker v0.0.0-20171204205717-a683aaf2d516/go.mod h1:Yow6lPLSAXx2ifx470yD/nUe22Dv5vBvxK/UK9UUTVs= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/sethgrid/pester v0.0.0-20190127155807-68a33a018ad0/go.mod h1:Ad7IjTpvzZO8Fl0vh9AzQ+j/jYZfyp2diGwI8m5q+ns= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20170515013102-78fb10f4a5f8/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/octicon v0.0.0-20180602230221-c42b0e3b24d9/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.0.3/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.1.0/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= -github.com/sirupsen/logrus v1.1.1/go.mod h1:zrgwTnHtNr00buQ1vSptGe8m1f/BbgsPukg8qsT7A+A= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/skratchdot/open-golang v0.0.0-20160302144031-75fb7ed4208c/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= -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/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= -github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s= -github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -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.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -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.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -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 v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.0/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.2/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.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/spf13/viper v1.3.1/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.5.0/go.mod h1:AkYRkVJF8TkSG/xet6PzXX+l39KhhXa2pdqVSxnTcn4= -github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= -github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw= -github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/steveyen/gtreap v0.1.0 h1:CjhzTa274PyJLJuMZwIzCO1PfC00oRa8d1Kc78bFXJM= -github.com/steveyen/gtreap v0.1.0/go.mod h1:kl/5J7XbrOmlIbYIXdRHDDE5QxHqpk0cmkT7Z4dM9/Y= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/studio-b12/gowebdav v0.0.0-20200303150724-9380631c29a1 h1:TPyHV/OgChqNcnYqCoCvIFjR9TU60gFXXBKnhOBzVEI= -github.com/studio-b12/gowebdav v0.0.0-20200303150724-9380631c29a1/go.mod h1:gCcfDlA1Y7GqOaeEKw5l9dOGx1VLdc/HuQSlQAaZ30s= -github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8= -github.com/subosito/gotenv v1.1.1/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tebeka/snowball v0.4.2/go.mod h1:4IfL14h1lvwZcp1sfXuuc7/7yCsvVffTWxWxCLfFpYg= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog= -github.com/tidwall/gjson v1.3.2/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= -github.com/tidwall/match v1.0.1/go.mod h1:LujAq0jyVjBy028G1WhWfIzbpQfMO8bBZ6Tyb0+pL9E= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/sjson v1.0.4/go.mod h1:bURseu1nuBkFpIES5cz6zBtjmYeOQmEESshn7VpF15Y= -github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY= -github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tinylib/msgp v1.1.0 h1:9fQd+ICuRIu/ue4vxJZu6/LzxN0HwMds2nq/0cFvxHU= -github.com/tinylib/msgp v1.1.0/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc h1:yUaosFVTJwnltaHbSNC3i82I92quFs+OFPRl8kNMVwo= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200122045848-3419fae592fc/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce h1:fb190+cK2Xz/dvi9Hv8eCYJYvIGUTN2/KLq1pT6CjEc= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/transip/gotransip v0.0.0-20190812104329-6d8d9179b66f/go.mod h1:i0f4R4o2HM0m3DZYQWsj6/MEowD57VzoH0v3d7igeFY= -github.com/tredoe/fileutil v1.0.0/go.mod h1:PBayWPFCURwkmW0u6E8E8C6Jtd9ZzWq/U1iMa6BLRPg= -github.com/tredoe/goutil v0.0.0-20200111155331-68cefb6d3cdc/go.mod h1:dp4VPOLeEFYbsf1ikgd+uytWDnpCdMiTHMg6mh7hHuQ= -github.com/tredoe/osutil v1.0.5 h1:mfXjHBJU46GoJDOUcHyV895fauUuVikR9U8yRbGBrqw= -github.com/tredoe/osutil v1.0.5/go.mod h1:DDO4G4Mwys6NJi5JmEVLnfFbQWIfVVri8L6HuXb/v98= -github.com/tus/tusd v1.1.0/go.mod h1:3DWPOdeCnjBwKtv98y5dSws3itPqfce5TVa0s59LRiA= -github.com/tus/tusd v1.1.1-0.20200416115059-9deabf9d80c2 h1:rcji4q9wMuSrz0tZt3kgIr/3WsB5kUqFja6RrgeCGEo= -github.com/tus/tusd v1.1.1-0.20200416115059-9deabf9d80c2/go.mod h1:ygrT4B9ZSb27dx3uTnobX5nOFDnutBL6iWKLH4+KpA0= -github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g= -github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= -github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= -github.com/uber/jaeger-lib v1.5.0/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/unrolled/secure v0.0.0-20180918153822-f340ee86eb8b/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/unrolled/secure v0.0.0-20181005190816-ff9db2ff917f/go.mod h1:mnPT77IAdsi/kV7+Es7y+pXALeV3h7G6dQF6mNYjcLA= -github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/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 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4 h1:gKMu1Bf6QINDnvyZuTaACm9ofY+PRh+5vFz4oxBZeF8= -github.com/valyala/fasttemplate v0.0.0-20170224212429-dcecefd839c4/go.mod h1:50wTf68f99/Zt14pr046Tgt3Lp2vLyFZKzbFXTOabXw= -github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= -github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vimeo/go-util v1.2.0/go.mod h1:s13SMDTSO7AjH1nbgp707mfN5JFIWUFDU5MDDuRRtKs= -github.com/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA= -github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/willf/bitset v1.1.10 h1:NotGKqX0KwQ72NUzqrjZq5ipPNDQex9lo3WpaS8L2sc= -github.com/willf/bitset v1.1.10/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= -github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= -github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= -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 v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xeipuuv/gojsonschema v1.1.0/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/xtgo/uuid v0.0.0-20140804021211-a0b114877d4c/go.mod h1:UrdRz5enIKZ63MEE3IF9l2/ebyx59GyGgPi+tICQdmM= -github.com/yaegashi/msgraph.go v0.0.0-20191104022859-3f9096c750b2/go.mod h1:tso14hwzqX4VbnWTNsxiL0DvMb2OwbGISFA7jDibdWc= -github.com/yaegashi/msgraph.go v0.1.1-0.20200221123608-2d438cf2a7cc h1:ejaC8rvIvCWmsaFrvmGOxhBuMxxhBB1xRshuM98XQ7M= -github.com/yaegashi/msgraph.go v0.1.1-0.20200221123608-2d438cf2a7cc/go.mod h1:tso14hwzqX4VbnWTNsxiL0DvMb2OwbGISFA7jDibdWc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -github.com/zenazn/goji v0.9.1-0.20160507202103-64eb34159fe5/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.1/go.mod h1:Ap50jQcDJrx6rB6VgeeFPtuPIf3wMRvRfrfYDO6+BmA= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0 h1:OI5t8sDa1Or+q8AeE+yKeB/SDYioSHAgcVljj9JIETY= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM= -go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.2.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0 h1:sFPn2GLc3poCkfrpIXGhBD2X0CMIo4Q/zSULXrj/+uc= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0 h1:f3WCSC2KzAcBXGATIxAB1E2XuCpNU255wNKZ505qi3E= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y= -go.uber.org/ratelimit v0.1.0/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.12.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.13.0 h1:nR6NoDBgAf67s68NhaXbsojM+2gxp3S1hWkHDl27pVU= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -gocloud.dev v0.17.0/go.mod h1:tIHTRdR1V5dlD8sTkzYdTGizBJ314BDykJ8KmadEXwo= -gocloud.dev/pubsub/rabbitpubsub v0.17.0/go.mod h1:7o1XYDiIC+b0mmcwJuofsDg08t0DtU2ubfn7C/Uz7Y0= -golang.org/x/crypto v0.0.0-20170711145318-dd85ac7e6a88/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180830192347-182538f80094/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180910181607-0e37d006457b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181015023909-0c41d7ab0a0e/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181024171144-74cb1d3d52f4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181025113841-85e1b3f9139a/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181106171534-e4dc69e5b2fd/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181112202954-3d3f9f413869/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190404164418-38d8ce5564a5/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20190927123631-a832865fa7ad/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191108234033-bd318be0434a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20191128160524-b544559bb6d1/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200210222208-86ce3cb69678/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200320181102-891825fb96df/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de h1:ikNHVSjEfnvz6sxdSPCaPt572qowuyMDMJLLm3Db3ig= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= -golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180816102801-aaf60122140d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180921000356-2f5d2388922f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181017193950-04a2e542c03f/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181102091132-c10e9556a7bc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181207154023-610586996380/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-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-20190228165749-92fc7df08ae7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -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-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-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191011234655-491137f69257/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191014212845-da9a3fd4c582/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191027093000-83d349e8ac1a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191109021931-daa7c04131f5/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191207000613-e7e4b65ae663/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= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181003184128-c57b0facaced/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180831094639-fa5fdf94c789/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180921163948-d47a0f339242/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180927150500-dad3d9fb7b6e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181005133103-4497e2df6f9e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181011152604-fa43e7bc11ba/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181019160139-8e24a49d80f8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181021155630-eda9bb28ed51/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181022134430-8a28ead16f52/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181024145615-5cd93ef61a7c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181025063200-d989b31c8746/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026064943-731415f00dce/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181106135930-3a76605856fd/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-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-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190102155601-82a175fd1598/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190116161447-11f53e031339/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190221075227-b4e8571b14e0/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-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190415081028-16da32be82c5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190620070143-6f217b454f45/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190710143415-6ec70d6a5542/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/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= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191110163157-d32e6e3b99c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191113165036-4c7a9d0fe056/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200219091948-cb0a6d8edb6c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 h1:ogLJMz+qpzav7lGMh10LMvAkM/fAoGlaiiHYiFYdm80= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6 h1:DvY3Zkh7KabQE/kfzMvYvKirSiguP9Q/veMtkYyf0o8= -golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181003024731-2f84ea8ef872/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181006002542-f60d9635b16a/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181008205924-a2b3f7f249e9/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181013182035-5e66757b835f/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181017214349-06f26fdaaa28/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181024171208-a2dc47679d30/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181026183834-f60e5f99f081/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181105230042-78dc5bac0cac/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181107215632-34b416bd17b3/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181114190951-94339b83286c/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181119130350-139d099f6620/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181127195227-b4e97c0ed882/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181127232545-e782529d0ddd/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181203210056-e5f3ab76ea4b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181205224935-3576414c54a4/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181206194817-bcd4e47d0288/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181207183836-8bc39b988060/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181212172921-837e80568c09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190102213336-ca9055ed7d04/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190104182027-498d95493402/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190111214448-fc1d57b08d7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190118193359-16909d206f00/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-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624190245-7f2218787638/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190711191110-9a621aea19f8/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200113040837-eac381796e91/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200421042724-cfa8b22178d2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200427214658-4697a2867c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200526224456-8b020aee10d2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200811215021-48a8ffc5b207 h1:8Kg+JssU1jBZs8GIrL5pl4nVyaqyyhdmHAR4D1zGErg= -golang.org/x/tools v0.0.0-20200811215021-48a8ffc5b207/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200817023811-d00afeaade8f h1:33yHANSyO/TeglgY9rBhUpX43wtonTXoFOsMRtNB6qE= -golang.org/x/tools v0.0.0-20200817023811-d00afeaade8f/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.5.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.6.0/go.mod h1:btoxGiFvQNVUZQ8W08zLtrVS08CNpINPEfxXxgJL1Q4= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190508193815-b515fa19cec8/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190620144150-6af8c5fc6601/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190626174449-989357319d63/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190708153700-3bdd9d9f5532/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200420144010-e5e8543f8aeb/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece h1:1YM0uhfumvoDu9sx8+RyWwTI63zoCQvI23IYFRlvte0= -google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad h1:uAwc13+y0Y8QZLTYhLCu6lHhnG99ecQU5FYTj8zxAng= -google.golang.org/genproto v0.0.0-20200624020401-64a14ca9d1ad/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc/examples v0.0.0-20200824180931-410880dd7d91 h1:eUaF7ghTaPu2Ivm9aqGW31Zr9aVB8k1KO1m3lo7lbj8= -google.golang.org/grpc/examples v0.0.0-20200824180931-410880dd7d91/go.mod h1:wQWkdCkP0Pl3MzFPvfqTNUnXA2eIVY4eakDiKJvniKc= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/Acconut/lockfile.v1 v1.1.0/go.mod h1:6UCz3wJ8tSFUsPR6uP/j8uegEtDuEEqFxlpi0JI4Umw= -gopkg.in/DataDog/dd-trace-go.v1 v1.19.0/go.mod h1:DVp8HmDh8PuTu2Z0fVVlBsyWaC++fzwVCaGWylTe3tg= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= -gopkg.in/amz.v1 v1.0.0-20150111123259-ad23e96a31d2/go.mod h1:F0YaN4yi2XekmElKkPYfybh7pReQE9Ph48lSgeCkzyc= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d h1:TxyelI5cVkbREznMhfzycHdkp5cLA7DpE+GKjSslYhM= -gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw= -gopkg.in/bsm/ratelimit.v1 v1.0.0-20160220154919-db14e161995a/go.mod h1:KF9sEfUPAXdG8Oev9e99iLGnl2uJMjc5B+4y3O7x610= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -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/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= -gopkg.in/go-playground/validator.v9 v9.30.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= -gopkg.in/go-playground/validator.v9 v9.31.0/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= -gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw= -gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= -gopkg.in/h2non/gock.v1 v1.0.14/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= -gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.51.1 h1:GyboHr4UqMiLUybYjd22ZjQIKEJEpgtLXtuGbR21Oho= -gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= -gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= -gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= -gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM= -gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8= -gopkg.in/ldap.v2 v2.5.1/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk= -gopkg.in/ldap.v3 v3.1.0 h1:DIDWEjI7vQWREh0S8X5/NFPCZ3MCVd55LmXKPW4XLGE= -gopkg.in/ldap.v3 v3.1.0/go.mod h1:dQjCc0R0kfyFjIlWNMH1DORwUASZyDxo2Ry1B51dXaQ= -gopkg.in/mail.v2 v2.0.0-20180731213649-a0242b2233b4/go.mod h1:htwXN1Qh09vZJ1NVKxQqHPBaCBbzKhp5GzuJEA4VJWw= -gopkg.in/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc/go.mod h1:VV+3haRsgDiVLxyifmMBrBIuCWFBPYKbRssXB9z67Hw= -gopkg.in/olivere/elastic.v5 v5.0.82/go.mod h1:uhHoB4o3bvX5sorxBU29rPcmBQdV2Qfg0FBrx5D6pV0= -gopkg.in/olivere/elastic.v5 v5.0.83/go.mod h1:LXF6q9XNBxpMqrcgax95C6xyARXWbbCXUrtTxrNrxJI= -gopkg.in/redis.v3 v3.6.4/go.mod h1:6XeGv/CrsUFDU9aVbUdNykN7k1zVmoeg83KC9RbQfiU= -gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.1.9/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.4.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.5.0 h1:OZ4sdq+Y+SHfYB7vfthi1Ei8b0vkP8ZPQgUfUwdUSqo= -gopkg.in/square/go-jose.v2 v2.5.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= -gopkg.in/telegram-bot-api.v4 v4.6.4/go.mod h1:5DpGO5dbumb40px+dXcwCpcjmeHNYLpk0bp3XRNvWDM= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c h1:grhR+C34yXImVGp7EzNk+DTIk+323eIUWOmEevy6bDo= -gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.0.20200427215036-cd1ad299aeab/go.mod h1:NELv708mC2Q9lQf29l+sO/v7NIOAQzEXu7jcugNzwvM= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= -honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.0.0-20191109101513-0171b7c15da1/go.mod h1:VJq7+38rpM4TSUbRiZX4P5UVAKK2UQpNQLZClkFQkpE= -k8s.io/apimachinery v0.0.0-20191109100837-dffb012825f2/go.mod h1:+6CX7hP4aLfX2sb91JYDMIp0VqDSog2kZu0BHe+lP+s= -k8s.io/apimachinery v0.0.0-20191111054156-6eb29fdf75dc/go.mod h1:+6CX7hP4aLfX2sb91JYDMIp0VqDSog2kZu0BHe+lP+s= -k8s.io/client-go v11.0.0+incompatible/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= -k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= -k8s.io/utils v0.0.0-20191030222137-2b95a09bc58d/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= -sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -stash.kopano.io/kc/konnect v0.30.0 h1:jsdL6CeaKyMumpcojdf5IdZIBUpTne6dwU9KpJ32Sz0= -stash.kopano.io/kc/konnect v0.30.0/go.mod h1:mybKKR/PiP/yvjpJI/d1MSTTzirLOrI0sN1C6Wlezmg= -stash.kopano.io/kgol/kcc-go/v5 v5.0.1 h1:urR9hOR6TnTKjGkzZKac/a9cA8ws1WecWLTgiYubLQw= -stash.kopano.io/kgol/kcc-go/v5 v5.0.1/go.mod h1:0ZmjWapy3zp+TAjZI6iCrcfh+BthZbB2WM1VfhDgNB4= -stash.kopano.io/kgol/ksurveyclient-go v0.6.0/go.mod h1:LJMDQBROS2oXxBN04eSI6j1KhgWlqMFd8xKjXV4Irtw= -stash.kopano.io/kgol/oidc-go v0.3.1 h1:tIEZV4WMFFlUe2AS06GrG3qrS6uSfJFFGJSkV+jGJP8= -stash.kopano.io/kgol/oidc-go v0.3.1/go.mod h1:roVKz8FVmPcdL4pUu+Gzk+GH2kOhz1UvnuMNTkjHyH8= -stash.kopano.io/kgol/rndm v1.1.0 h1:Yyr92qtm3NENoCru56phnGv9z5mgFxiNKxzNZahm0w4= -stash.kopano.io/kgol/rndm v1.1.0/go.mod h1:CBvpAHlOwyu/XipxfLGk02UN3K3P6hQ8E2JoTbNWfJU= diff --git a/accounts/nightwatch.conf.js b/accounts/nightwatch.conf.js deleted file mode 100644 index 39988add62..0000000000 --- a/accounts/nightwatch.conf.js +++ /dev/null @@ -1,11 +0,0 @@ -const path = require('path') -const PHOENIX_PATH = process.env.PHOENIX_PATH - -const config = require(path.join(PHOENIX_PATH, 'nightwatch.conf.js')) - -config.page_objects_path = [PHOENIX_PATH + '/tests/acceptance/pageObjects', 'ui/tests/acceptance/pageobjects'] -config.custom_commands_path = PHOENIX_PATH + '/tests/acceptance/customCommands' - -module.exports = { - ...config -} diff --git a/accounts/package.json b/accounts/package.json deleted file mode 100644 index 14963cb992..0000000000 --- a/accounts/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "private": true, - "name": "ocis-accounts", - "version": "0.0.0", - "description": "", - "homepage": "https://github.com/owncloud/ocis-accounts#readme", - "license": "Apache-2.0", - "author": "ownCloud GmbH ", - "repository": "https://github.com/owncloud/ocis-accounts.git", - "bugs": { - "url": "https://github.com/owncloud/ocis/accounts/issues", - "email": "support@owncloud.com" - }, - "scripts": { - "lint": "eslint ui/**/*.vue ui/**/*.js --color --global requirejs --global require", - "build": "rollup -c", - "watch": "rollup -c -w", - "test": "echo 'Not implemented'", - "generate-api": "node node_modules/swagger-vue-generator/bin/generate-api.js --package-version v0 --source pkg/proto/v0/accounts.swagger.json --moduleName accounts --destination ui/client/accounts/index.js", - "acceptance-tests": "cucumber-js --require-module @babel/register --require-module @babel/polyfill --require ${TEST_INFRA_DIRECTORY}/acceptance/setup.js --require ui/tests/acceptance/stepDefinitions --require ${TEST_INFRA_DIRECTORY}/acceptance/stepDefinitions --format node_modules/cucumber-pretty -t \"${TEST_TAGS:-not @skip and not @skipOnOC10}\"" - }, - "devDependencies": { - "@babel/core": "^7.7.7", - "@babel/plugin-proposal-class-properties": "^7.7.4", - "@babel/plugin-proposal-export-default-from": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.7", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-transform-runtime": "^7.8.0", - "@babel/polyfill": "^7.10.1", - "@babel/preset-env": "^7.7.7", - "@babel/register": "7.10.1", - "@erquhart/rollup-plugin-node-builtins": "^2.1.5", - "@rollup/plugin-commonjs": "^11.0.1", - "@rollup/plugin-json": "^4.0.1", - "@rollup/plugin-replace": "^2.3.0", - "archiver": "^4.0.1", - "axios": "^0.19.0", - "core-js": "3", - "cross-env": "^6.0.3", - "cucumber": "^6.0.5", - "cucumber-pretty": ">=6.0.0", - "debounce": "^1.2.0", - "easygettext": "^2.7.0", - "eslint": "6.8.0", - "eslint-config-standard": "^14.1.0", - "eslint-plugin-import": "^2.17.3", - "eslint-plugin-node": "11.0.0", - "eslint-plugin-promise": "^4.1.1", - "eslint-plugin-standard": "^4.0.0", - "eslint-plugin-vue": "^6.1.2", - "fs-extra": "^9.0.1", - "join-path": "^1.1.1", - "ldap": "^0.7.1", - "nightwatch": "^1.3.6", - "nightwatch-api": "^3.0.1", - "node-fetch": "^2.6.1", - "qs": "^6.9.1", - "rimraf": "^3.0.0", - "rollup": "^1.28.0", - "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-eslint": "^7.0.0", - "rollup-plugin-filesize": "^6.2.1", - "rollup-plugin-node-globals": "^1.4.0", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-terser": "^5.1.3", - "rollup-plugin-vue": "^5.1.4", - "swagger-vue-generator": "^1.0.6", - "url-search-params-polyfill": "^8.1.0", - "vue-template-compiler": "^2.6.11", - "vuex": "^3.5.1", - "xml-js": "^1.6.11" - }, - "browserslist": [ - "> 1%", - "not dead" - ], - "peerDependencies": { - "owncloud-design-system": "^1.7.0" - }, - "dependencies": { - "validator": "^13.1.1" - } -} diff --git a/accounts/pkg/assets/assets.go b/accounts/pkg/assets/assets.go deleted file mode 100644 index aaf0dfdcc6..0000000000 --- a/accounts/pkg/assets/assets.go +++ /dev/null @@ -1,66 +0,0 @@ -package assets - -import ( - "net/http" - "os" - "path" - - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/ocis-pkg/log" - - // Fake the import to make the dep tree happy. - _ "golang.org/x/net/context" - - // Fake the import to make the dep tree happy. - _ "golang.org/x/net/webdav" -) - -//go:generate go run github.com/UnnoTed/fileb0x embed.yml - -// assets gets initialized by New and provides the handler. -type assets struct { - logger log.Logger - config *config.Config -} - -// Open just implements the HTTP filesystem interface. -func (a assets) Open(original string) (http.File, error) { - if a.config.Asset.Path != "" { - if stat, err := os.Stat(a.config.Asset.Path); err == nil && stat.IsDir() { - custom := path.Join( - a.config.Asset.Path, - original, - ) - - if _, err := os.Stat(custom); !os.IsNotExist(err) { - f, err := os.Open(custom) - - if err != nil { - return nil, err - } - - return f, nil - } - } else { - a.logger.Warn(). - Str("path", a.config.Asset.Path). - Msg("Assets directory doesn't exist") - } - } - - return FS.OpenFile( - CTX, - original, - os.O_RDONLY, - 0644, - ) -} - -// New returns a new http filesystem to serve assets. -func New(opts ...Option) http.FileSystem { - options := newOptions(opts...) - - return assets{ - config: options.Config, - } -} diff --git a/accounts/pkg/assets/embed.go b/accounts/pkg/assets/embed.go deleted file mode 100644 index 4f43087b2e..0000000000 --- a/accounts/pkg/assets/embed.go +++ /dev/null @@ -1,173 +0,0 @@ -// Code generated by fileb0x at "2020-09-10 19:02:11.499271 +0200 CEST m=+0.008645034" from config file "embed.yml" DO NOT EDIT. -// modification hash(5bcfa76f998fba84f7455648d6bf9bf2.8058aec596c5fb73022d09bb97af796e) - -package assets - -import ( - "bytes" - "compress/gzip" - "context" - "io" - "net/http" - "os" - "path" - - "golang.org/x/net/webdav" -) - -var ( - // CTX is a context for webdav vfs - CTX = context.Background() - - // FS is a virtual memory file system - FS = webdav.NewMemFS() - - // Handler is used to server files through a http handler - Handler *webdav.Handler - - // HTTP is the http file system - HTTP http.FileSystem = new(HTTPFS) -) - -// HTTPFS implements http.FileSystem -type HTTPFS struct { - // Prefix allows to limit the path of all requests. F.e. a prefix "css" would allow only calls to /css/* - Prefix string -} - -// FileAccountsJs is "accounts.js" -var FileAccountsJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xd4\xbd\xe9\x76\x1b\xb7\xb2\x30\xfa\xfb\x7e\x4f\x41\xf6\xf1\xee\x03\x84\x25\x9a\x74\x86\x9d\x34\x8d\xf0\x78\xb6\x13\x5b\x76\x2c\xd9\x4e\xc2\xf0\x68\xb5\x48\x50\x42\x44\x02\x34\x1a\xd4\x60\xb2\xef\xfb\xdc\xd7\xb8\x4f\x76\x17\x0a\x40\x4f\x6c\xd9\xde\xfb\x1b\xd6\xba\x7f\xc8\x6e\x34\xc6\x02\x50\x13\xaa\x0a\x73\xbe\x10\x92\x13\xb2\xd8\xc8\x99\x11\x4a\x12\xba\x8d\x36\x19\xef\x64\x46\x8b\x99\x89\x46\x97\xa9\xee\x18\x16\x6d\xa4\xcb\x38\x8f\xba\xcc\xdc\xac\xb9\x5a\x74\xce\x96\xea\x34\x5d\x1e\x9f\x8b\x6c\x5c\x3e\x26\x6d\x39\xaf\x84\x9c\xab\xab\xb1\xfb\x6b\xcd\xe1\x2a\xf0\xf5\xb4\xe6\xc8\xf8\x72\x31\xb6\x3f\xc9\x36\x1f\x85\xce\x76\x38\x31\xc0\xe9\x56\x73\xb3\xd1\xb2\x63\x08\x67\x5b\x7e\xbd\x56\xda\x64\xc9\x36\xcf\x81\xf7\xfd\x1b\x2d\x1f\x73\x3b\x22\xc9\xaa\x43\x36\x74\x6b\x13\x39\xdb\x4f\x79\x7d\xfa\x37\x9f\x99\xfe\x5a\x2b\xa3\x6c\x4f\x40\x32\xde\x3f\x4f\xb3\xd7\x57\xf2\x8d\x56\x6b\xae\xcd\x0d\x68\x16\x85\x82\x11\x0b\xfd\x3d\xba\x59\x9d\xaa\xe5\xd8\xfd\x25\xdb\x1c\x14\xd3\x7d\x61\xb8\x4e\x8d\xd2\xbb\x5d\xf4\x5f\xff\x15\x5e\x22\x10\x4c\xf7\xd3\xec\x46\xce\x5e\x54\xbf\xd7\x52\x22\x48\x99\xee\x1b\x75\x64\xb4\x90\x67\xc7\xe9\x19\x66\xa9\xbc\x47\x25\x50\x66\x16\x28\x20\x41\xbb\x41\x28\xc6\xe3\x98\x97\x43\xe8\x08\x99\x99\x54\xce\x6c\x2f\x97\x63\x9e\x2c\x41\x84\x61\xce\x34\x4f\x0d\x27\xaa\xcc\x4c\x21\x65\x92\x5f\x75\xae\x89\xde\xed\x26\x53\x3a\xf2\xa0\x16\xfd\x13\x21\x2f\xd5\x45\x15\x66\xb6\x51\xd7\xa4\x66\x51\xb6\xc9\xd6\x5c\xce\xf9\xfc\xc8\xa4\xda\x44\xa1\x5c\x91\x5b\x81\xa0\x5b\xb1\x20\x11\xbf\xe6\xb3\x8d\x11\xf2\x2c\x62\x8c\x69\x6a\xce\xb5\xba\xea\xd8\x26\x9f\x68\xad\x34\x89\x9e\x71\xe9\x40\xd0\x11\x59\x27\x5d\x6a\x9e\xce\x6f\x3a\x7a\x23\xa5\x2d\x42\x47\xb6\x8a\x99\x5a\xad\x97\xdc\xf0\xb9\xab\x02\xab\xc5\x7a\xec\xbb\xf2\x55\x8a\xd0\x85\xd7\x84\xe6\x0b\xa5\x89\xec\xaf\xb8\x39\x57\x73\xa6\x40\xf6\x53\x7d\xc6\xc4\x68\xe4\xba\x9f\x32\xd9\x9f\xf3\x25\x3f\x4b\x0d\xb7\x0d\xa4\x2e\x79\xc6\x4e\x49\x0a\x12\xdb\x9c\x61\x2b\x33\xc6\xd8\x86\xce\x94\x34\x42\x6e\x78\x68\x60\x96\xe7\xb6\x07\x92\x5f\x1b\xdb\x81\xd0\x0e\x95\xfd\x8c\x4b\xc3\x64\xff\xc4\xff\xa7\xfa\x6c\xc4\x97\x19\xef\xd4\x3a\x5c\xe4\xc7\x71\x34\xe0\x58\x81\x91\x66\x95\x81\xbb\x21\x8c\x64\x7f\x2e\xb2\x75\x6a\x66\xe7\x4f\xae\x67\x7c\x8d\x90\xc6\x2f\x34\xb7\x0d\x45\xae\x87\xd5\x56\xe2\x58\xf6\xd3\x53\xbd\x59\x1b\x12\xbe\xba\xba\xe8\x48\xb3\xca\xe4\x20\x22\x58\xb2\xcc\x4f\x33\xc2\x5d\x2a\xbd\x4a\x97\xb6\xb6\x65\x1f\x17\x8b\xed\xb1\xb6\xc0\x53\x92\x8f\x2b\xbd\x4b\xca\x61\xfc\x21\xf8\x72\x1e\xc1\x12\x21\xde\x02\xbd\xed\x65\xba\xdc\xf0\x04\xbf\x83\xad\x27\x71\xd5\xe5\x79\x09\x21\xd7\x5a\x1c\x93\x26\x08\xfc\x84\xfa\x9c\x7e\x5a\x97\x6e\xfc\x79\x4e\x0c\x48\x48\x29\x88\xbc\xd8\x2a\x61\x38\x5b\xa3\x6f\x3c\x16\xd9\xda\xba\x93\x30\x36\x48\xf5\x59\x62\xfa\xb3\x74\xb9\x24\x36\x63\x9e\xcf\x2c\x74\x2d\x82\xa8\x65\xf7\x2d\x62\xee\x3c\xcf\x4d\xff\x4a\xa7\x6b\x36\x43\xa8\x6d\x58\x15\x65\x2d\x09\xdd\x96\x1d\x58\xd4\xde\xe6\xf6\xcd\x16\x59\xdb\x22\xeb\x89\x9a\xb2\x0a\x5e\x0e\x58\xee\x5c\x64\x39\x56\x7c\x1e\xf6\xed\x19\x37\x6f\xc2\x8e\x7d\xbd\x80\x15\x3b\x8f\xe3\x73\x72\x4e\x9e\x90\xc9\x94\x52\x3a\x5a\xc5\xf1\xaa\xcb\x2c\x1e\x90\x6e\x28\x2b\x50\x34\x8e\xc9\x9a\xad\x28\xd6\x74\xc9\xe6\xe5\x9e\x67\xcb\xca\x73\x1d\x33\xac\x69\x39\x90\x33\x0b\x84\x89\x5b\xe6\x10\x00\x10\xd6\xd0\xb4\xbf\x50\xfa\x49\x3a\x3b\xaf\xa0\x59\x4e\xb7\x66\xc2\xa7\x35\x2c\x5b\x19\x53\xc0\x28\x84\x83\xa1\x79\x4e\x69\x09\x97\x1b\x87\xe6\x11\xb5\x8c\xaa\x79\x59\x1d\x9f\x14\x05\xd2\x12\x5c\x16\x95\x54\x91\xbd\x86\x94\x6e\xbb\x45\x4e\x6d\x4b\x42\x0a\x33\x57\xfd\xc6\xae\xf0\x89\x9a\x82\x01\xe1\x16\xb9\x1b\x58\x97\xb1\x8d\x5f\xe3\x6e\x23\x6c\x70\x81\x2e\xd8\xb2\x8f\x0b\xb6\xc0\x6f\x71\x1c\x29\x04\x59\x49\x0a\x16\x05\xd8\x17\x10\x9d\x9c\xa4\x57\xa9\x30\x11\x1d\xf3\xbe\xe6\x99\x5a\x5e\x72\xb2\xe8\xfb\x54\xda\x37\xe7\x5c\xd6\x29\x93\xf6\x98\x04\x0c\xf6\x32\xa7\xd0\xfc\xec\x41\x1f\xbe\xd3\xa4\x52\x73\x5b\x8d\xbe\xcb\xcc\x40\x4a\x96\xfb\x15\xba\x81\xb4\xd4\x9b\xcf\xc8\xc6\xed\x25\x84\x99\x05\xa4\x4d\x0d\x05\x98\x1e\x6b\xd7\x5a\x0a\x29\x4d\x52\x42\xf3\x72\x06\x4f\xcb\x19\x94\xcc\x14\x84\x70\xc2\xfd\x9e\x9d\x5a\x58\x5f\x2a\x31\xef\x0c\x2c\x72\x42\x4c\xc2\x0b\x24\xcc\xe4\x66\xb9\x84\x12\x01\xf0\x2a\x8a\x2c\x6b\xeb\xbb\xae\xc4\x31\xe1\x05\x2a\x08\x38\x8d\x23\x2e\x70\x2d\x80\xeb\x4d\x5b\x85\xd4\x8f\x66\x33\xe2\x4d\x6c\xe2\x6a\xb0\xcb\xe9\xf8\x66\xcd\x3d\x75\x3a\x3e\xe7\x9d\xd0\x7c\x67\xae\x78\xd6\x91\xca\x74\xd6\x5a\x5d\x8a\x39\xef\xa4\x9d\xff\xc4\xc2\xff\xd9\x71\x75\x45\x05\xb4\x36\xb9\xa3\x93\x19\x91\x50\x0e\xc0\xb5\x51\x5d\x77\x16\xdf\xbb\x75\xe7\x0b\xde\xd2\x2d\x8d\xcb\xb1\x09\xb1\xcd\xc8\x31\x00\xf8\x35\x2c\x51\x35\x56\x0e\x41\x13\x3e\x31\x76\xa5\x6c\x96\xe6\x30\x5d\xf1\x29\x53\x6e\x61\x00\xef\xdb\x15\xc7\x0c\xfe\xbd\x54\xb3\x62\x57\x77\x4b\x48\xd5\x80\xec\x16\x68\x15\xc4\x74\xbf\x2f\x34\x51\x09\xf9\x3a\xa8\x16\x10\x75\xbd\xb3\x94\xdf\x82\x35\x95\x1d\xbf\xb7\xda\xaa\x2f\x17\xdb\x55\xc9\xbf\x59\xc4\xfe\x52\xcd\x12\x33\x19\x4c\xf3\xd1\xb0\x23\x64\xc7\x60\xd7\x11\x8d\xbf\x54\x33\x66\x26\xc3\x29\x85\x7b\xe5\x97\x85\x90\xe9\x72\x79\xe3\xbe\xdd\x9b\xda\x1e\x2e\x0c\xd7\xee\xfd\xdb\x29\x05\x44\x40\x46\xdf\x3c\x91\x46\x0b\x9e\xf5\xd7\x9b\xec\x9c\xf0\x4a\xfb\x0f\xca\xf6\x4d\xdf\x13\x28\xa1\xe4\x6e\xb7\xcd\x47\x1c\x67\x93\x15\xf4\xc5\x8e\xc2\xf0\x0e\x82\x01\xaa\xb9\x19\x2f\x2b\xbc\xb6\x15\x36\x9a\x65\x93\x30\xb6\x48\x2b\x65\xa2\x7c\x0a\xa6\x40\xba\x57\xd8\x49\xdf\x55\xcd\x33\x6e\x48\x77\x50\xe9\xe1\x13\x5b\xa1\xdd\x3b\x45\x3f\x27\x0a\xb7\x60\x65\x9d\x21\xc6\x32\x6e\x31\xee\xf3\xb7\x6e\x71\x84\xdc\xc6\xe6\xea\x8a\xec\x30\x3d\x24\xa6\xbf\xe4\xf2\xcc\x9c\xd3\xc0\x0b\x1e\x0c\x41\xb0\x0a\xcb\x4e\xb7\x96\xfd\x1a\xf5\x7a\xfa\x7e\xc8\x3b\xa2\x62\x41\x3c\x92\x34\xa0\x69\xd9\x0b\x8f\xaa\x26\xda\x4e\x84\x5d\xb6\xac\x3b\x84\x02\xdd\x86\xef\x7e\x5f\x87\x1c\x03\xe0\x79\xc9\xa9\xe2\x62\x16\xb9\xdf\x7a\x5b\xfb\x9a\xbc\xae\xe0\xa6\xd7\x05\xb1\xf0\xcc\x87\xaf\x0d\xb9\x8f\xee\x20\x14\xec\x2c\x2a\x64\xf1\xb2\x3f\x53\x32\x33\x7a\x33\x33\x4a\xb3\x39\xcc\x6b\xef\x0b\x98\x4f\xd2\x29\x5b\x20\x37\xb6\x4c\x6f\xec\xf6\x62\x25\x27\xfb\x34\x40\xd3\x6e\xfd\x6c\x2f\xb9\x45\x0c\x69\x9b\x80\x38\x36\xd5\x46\xfd\x78\xbb\x5d\xcb\x18\x71\xc6\xd8\x62\xb7\x6b\x69\x92\x31\x66\x11\x6b\xd9\xaf\xdd\x8e\xf7\x65\xba\xe2\x94\xe6\x60\xfa\xab\x54\x5f\xb4\x11\x68\xcf\x06\x64\x35\x46\x63\xdc\x9a\x4a\x0c\xcc\x69\x42\x4c\xff\xe4\x04\xe1\x75\x72\xc2\xe6\x90\xe2\xfe\xda\xed\x88\xb1\x80\x69\xe9\x17\xa5\x60\x6e\x65\x3b\x2e\x29\x18\xdb\xbb\x14\xb9\xaa\xfd\xee\x6d\x3d\xfd\xb4\xbc\x17\x9c\x91\x9b\xaa\xfc\x52\x79\x99\x88\x5b\xf9\x29\x30\xfd\x07\x55\x79\x8b\xdd\xd8\xe6\x6c\x4a\x59\x02\x65\x2a\x40\x46\xa3\xa0\x54\x22\x8e\x89\x60\x6f\xb4\x5a\x89\x8c\x3b\x5e\xca\x09\x4c\x37\x64\x16\x0a\x50\xcb\x4a\x84\xc6\xda\x26\x9c\x48\x3a\x4e\x93\x14\x17\x2a\x69\xe5\x01\x42\x61\xc4\xdb\xc6\x2d\xfa\xa2\x80\x25\xc2\x70\x66\x81\x74\x59\x07\x6e\x04\x97\x9f\x61\x21\xe1\xb2\x90\x27\xf7\xb3\x44\x13\x87\x69\x3b\x45\x65\xd3\xc8\x02\xe9\x82\xdf\x64\x2d\xeb\x73\x32\x1d\xd9\x3d\x8d\xe4\x1d\x67\x9a\x72\x87\x16\x25\x2d\xb7\xaa\xe6\x97\x5c\x67\x9c\x50\x28\xb6\x9e\x0c\xc8\x80\x17\x88\xc0\x23\x0d\xde\x5f\xab\x35\x41\xec\xa3\x5d\x8d\x81\x9f\xf3\x5b\x5e\x83\x2c\xf0\x81\xcc\x8b\x8f\x01\x01\xc8\xdc\x76\x17\xb3\x66\xec\x09\x5c\x57\xd6\xd6\xb6\xb2\x6b\x92\x6b\x40\xf4\x98\x54\xc7\x64\x11\xa3\x45\x9c\x6b\xcd\x2f\xd9\xc0\x21\x51\x44\x22\xfe\x19\xc5\x37\xc7\x86\xe2\xa3\xc7\x17\x98\x12\xba\xe4\x5e\x6a\x24\x0a\x93\xea\x24\x13\x93\x2a\x8c\x49\x93\xb4\x04\x7c\xfe\x80\x42\xd7\xd0\x00\x62\x8e\x00\xb1\x08\x3e\x32\x8e\x7b\x99\x9d\xa7\xfa\x81\x21\x03\x5a\xb0\x9a\xf6\x33\x70\x1a\xc7\x1e\x2b\xf7\x78\x3f\x5b\x8a\x19\x27\x43\x6a\x39\x7f\xfb\xd9\xf2\xe2\x9e\x5a\xe7\x90\x19\xb5\x4e\x2a\xcb\xa0\x32\x98\x81\x57\x02\x35\x3a\x37\x19\x4c\x2b\xe4\xaa\xce\xb3\x18\xc7\xb3\x38\x41\xd5\x54\xb9\x0f\x47\x91\x2e\xd3\x65\x0e\x7b\xa2\x6a\xeb\x24\xd8\x3e\x84\x8a\x46\x9e\x58\x9d\x8b\x6c\x54\xe1\xe0\x51\xd5\xe1\xeb\x4f\x3d\x7d\x0d\x02\x19\x42\xd7\x04\x96\x46\x82\xfe\x22\xe3\xd2\xed\xea\x3c\x40\x5a\x35\x07\xed\x97\xe9\xc1\x70\xa4\x7e\x66\x83\xd1\xc1\x81\x72\x0b\x56\xec\x41\x47\x4d\x21\x65\xa2\x09\x21\x24\xd5\x16\x6f\xf4\x1d\xf1\xa6\x25\xbb\xcd\xe5\xdc\xe9\x33\xc2\xb7\xfb\xac\x58\x85\x41\x01\xe1\x27\x57\x40\x14\xf8\x97\x88\x42\x56\x49\x2e\x99\x17\x57\xd7\x2c\x8e\xb3\xfa\x82\xbe\x2f\x0a\xde\xa7\x6c\xbc\x4c\x83\xee\x00\x0b\x56\xf3\x97\x95\x56\x4b\x54\x52\xf3\xa0\xc5\x98\xfd\xcb\x6d\x61\x51\x5b\xa8\x9b\xed\xeb\x7e\x8c\xbe\xe9\x64\x26\x35\x7c\xc5\xa5\xe9\x5c\x09\x73\xae\x36\xa6\x83\xc5\x3b\x4a\x77\x7c\x0f\xa2\x7f\xa3\xc3\x79\x9e\x83\x53\x7b\x24\x55\x05\x96\xc3\x46\x0e\x03\xdd\x3a\xf3\xda\xcd\x7c\xa1\x5e\x6b\xce\xbc\x46\x4e\x4a\xed\xcf\x62\xb1\x39\x55\x7d\xa2\xe2\xb8\xec\xbc\xaa\x76\xd3\x2f\x2d\x35\x3a\xd5\x3c\xbd\xc8\x73\x4b\x6d\x22\x7c\xc6\x4d\xb6\xdb\x45\x41\x7b\x82\xef\x34\x8e\xcb\xb5\xc3\xe3\x98\xdf\x67\xd5\x51\x23\xa9\xb2\x98\x28\xd0\x29\x31\xae\xae\xcf\x64\x5b\xf0\x4c\x7e\x13\x19\xbf\x7d\x38\x88\x31\xb9\x0d\x7b\x39\xee\xaa\xd2\x8c\xe5\xf4\xf1\x4b\x50\xcd\x90\x94\xe6\x10\x5e\x1a\xe0\xfe\x3a\xac\x51\x19\x33\x66\x69\x0e\x1c\x13\xc7\x65\x77\xb0\x6c\x52\xd1\x76\xf9\x1c\xa4\xc0\x3e\xac\xc0\xbc\xc6\x71\xde\xd5\xd1\x05\x99\xb1\xac\xd0\x6d\xce\xa4\xa2\xf1\x32\x5e\x07\xc5\x3d\x32\x75\xf9\x38\x85\x4d\x0e\x0b\x21\x45\x76\x5e\xc3\x66\x05\xea\xbe\x7d\x59\x71\xb7\xac\x4a\x29\xb9\xb1\xac\x38\x2e\x2b\x59\x95\x4f\xec\x9c\x57\xf1\x6a\x01\x71\x59\x99\x57\x90\x85\x00\x43\xe1\x01\x91\xb6\x8b\x39\xe0\x26\xfa\xdf\xd5\x45\xb7\x06\xb1\x7b\x9e\x9c\xcb\x5b\x49\x85\xae\xa8\x55\x82\xa4\x6a\x7b\x19\x48\xba\xca\xf3\x3d\xbc\x20\x96\x96\xae\x2e\x3d\x26\x48\x8d\xe1\xab\xb5\x89\x68\x0e\x81\xe0\xa2\x96\x31\x69\xaa\xa6\xab\xa0\x2a\x48\xf3\x36\x08\x9b\x89\x15\x8a\xa0\x94\x87\x13\x0e\x5e\xfe\x4d\x64\x0e\x85\x3a\xb7\xb2\x52\xc2\xd4\x57\xa9\x87\x85\xad\xc9\x89\x29\x4e\x1e\x46\x4e\xb5\x78\x16\xf8\xa8\xb7\x1b\x69\xc4\x8a\x33\x5e\x6a\x12\x0b\x3e\x30\xd2\xa8\x41\x6b\xe6\xed\xb0\x8e\x8e\xa8\x15\x31\x73\x4a\x41\xb7\x2a\xd0\xac\x34\xf0\x2a\x35\xe7\x8c\xd9\xdf\x38\x36\x78\xe2\x40\xf6\x94\x51\xe5\x51\x4d\x1c\x97\xcf\x74\xb7\x6b\xc9\xeb\x0e\x6c\xe2\xd8\xfd\xb7\xe7\xc9\xf8\x72\x11\xc7\xf6\xb7\xfd\xbb\xed\x18\xdd\xed\x2a\x43\x2c\x27\x21\xa2\x84\x56\x44\x43\x14\x72\x0b\x3d\x6c\xb7\x6b\x59\xdb\x86\xb6\xd5\x4a\x63\x90\xb2\xae\xa8\x1d\x58\xf9\x2a\xff\xd9\x0d\x62\x83\x3b\x3d\x0a\x07\x34\x64\x9b\xc3\x10\xb6\x67\x55\x2e\xaf\x2c\x94\xe7\x74\x32\x9c\x5a\xc0\xce\xd8\x36\xb7\x6c\x22\x16\x7a\x91\x3d\x91\x9b\x15\xd7\xe9\xe9\x92\x43\x56\x51\xb4\x56\x4e\x7e\x1e\xf3\x6c\xa6\xc5\xda\x28\x0d\x1b\xb6\x5d\x24\x59\x1c\x77\x67\x0e\xc3\x6f\x87\xc9\xbd\x1c\x86\x74\xbc\xcf\x2b\x67\x8e\x37\x33\xb4\x2a\xb1\xf1\x3e\x2f\x9a\xcb\x93\x59\x0e\x4b\x56\x47\x94\x5e\xd0\x29\x73\x25\x5d\x32\x8c\x0d\x85\x99\x92\x0b\x71\xb6\x09\x69\xf7\x6c\xda\x95\x16\xc6\xbf\x7f\x67\xdf\x9d\xbc\xc0\xf3\x1c\x16\x76\x8c\x81\xed\x87\x79\xdb\x52\x5a\x04\xc9\xdf\x33\x8c\x3f\xc2\xc1\x90\xe6\xb0\x66\x51\xd4\xcf\xd6\x4b\x61\xe0\x9c\xb5\xc1\xbf\xeb\x60\x44\xa2\x4f\x11\x6d\x05\x23\x19\x58\x51\x65\xbc\xdf\x64\xe4\xba\x13\x31\x36\x27\x86\x8e\xd7\x41\x0f\x10\x45\x34\xf1\x95\x1a\x9a\xfb\x47\x58\xb1\x06\x9b\x68\x49\x9a\x45\x35\x0e\x4d\x54\xd4\x48\x8f\x52\xf9\x9f\x96\x5d\x58\x2e\xbd\xfe\xad\xa3\x64\x27\xea\x99\x52\x1a\xcb\xe1\xb2\x0d\x04\xe7\x64\x45\x0c\x4a\x55\x2d\x5f\xf7\x97\xf8\xd8\xf6\xa0\xcb\x98\x49\xda\xe4\xf4\x1c\x6e\xd8\x1e\xd1\xeb\x9e\xd9\x06\x0a\xed\x09\xa2\x53\xd0\xa8\x81\x89\xe3\xfd\x5a\x88\xb4\x04\xc7\x4f\x9b\x65\xea\xcf\xf0\x9c\xc5\x4f\x54\x51\x91\x6e\x57\xd6\x60\x69\x5c\x03\xaf\x17\x5f\x28\xdc\xfd\x9f\x6b\xfe\xb6\x29\x50\xf2\x92\x6b\xe3\xb5\x77\x1d\xa3\x3a\x6b\x2d\x56\xc2\x88\x4b\xde\xc1\x7e\x59\xdc\x7d\x6a\x97\x66\xe3\x68\xf5\xaa\x75\x17\x74\x4e\xc3\x0a\xe1\x34\x87\x07\x4c\xf5\xe7\x6a\xb6\xb1\x3c\x22\x5c\xb3\x33\xf2\x80\xc6\xf1\x19\x79\xe0\x95\x07\x4f\x96\xc8\x3d\x52\x78\xd2\x36\xd3\xd7\xe3\x46\x3e\x62\x28\x1e\x1d\xbf\x66\xdd\xd4\x0a\x4f\xff\x12\xa2\x79\x42\xa2\xb9\xb8\x8c\x28\x44\x69\xf4\x39\x84\xd3\x4f\x2d\xbe\x39\xfa\x22\x56\x39\xb1\x58\x25\x1d\x1f\xed\x33\x4d\x86\x5d\x5a\x6a\xc5\xd9\x0d\xe1\x96\x8d\x86\xd7\xb4\x44\x9d\x9d\x23\x07\x9a\x02\x79\xe6\x62\x41\xae\x30\x2d\x4c\xd5\x92\x74\x37\xfd\x45\x09\x46\x30\x13\x3e\xa5\x79\x0e\x8f\x9a\xbb\xcb\xad\xd4\xe6\xc4\xba\xa5\x40\x0c\xed\x45\x2d\xda\xd9\xca\xfe\xfa\xbb\x1d\x54\xf0\xc6\x0d\xed\xef\x3d\x22\x2d\x16\xe4\x51\x7d\x68\x8f\x2c\xcf\x52\x1b\xdf\xdf\x3e\x73\x7d\x84\xd1\x19\x37\x91\x90\x1d\xb9\xdb\x45\x99\x7f\xdc\x47\x0a\x0f\x66\x33\x9e\x65\x4a\xbb\x4e\x67\x9b\xb5\x25\xd3\x7c\x5e\x74\x3a\x72\x0b\xd2\x16\xb6\xf4\xdd\x0a\xc9\x5e\xe5\x40\xc1\xe4\x39\x5c\xb0\x74\x7c\x0b\x63\xf1\xa6\xbf\xc0\x94\x25\x19\x82\xa4\x34\xbf\x95\x01\xc1\x4a\xc1\xe4\xf0\xb6\xb1\xbe\xed\x18\x2f\x88\x82\xca\xf4\x49\xba\x55\x13\x33\x65\x3c\x30\x44\x3c\x87\x63\xa6\x26\xd1\xc9\xc9\x4c\x69\x7e\xf0\x77\x76\x92\x9d\xa7\x9a\xcf\x4f\x4e\xa2\xe9\x6e\xf7\x96\xb4\x7d\x80\x6d\x4e\xe1\x05\x0b\x54\xb8\xd8\xcb\xa3\x72\xaf\x17\x96\x16\xc7\x7d\x21\xb3\x35\x9f\x99\x23\xb5\xd1\x33\xcb\xdf\x36\x52\xda\xf6\xd1\x8b\x80\x0c\x72\x27\x5c\xbc\x84\x3b\x70\x08\x8f\x59\xa3\x28\xbc\x63\xaa\xff\x81\xa7\x17\xaf\xd2\x35\x3c\x6d\x53\x6b\xbe\x8b\xe3\xbb\x32\x45\xcc\x30\x53\x73\x7e\xb7\x6f\x78\x66\xc8\x63\xf2\x8e\x52\xf8\xd8\xb4\xda\x28\xd9\xac\x76\x3c\x71\x3c\x31\xd3\xdd\x8e\xd8\x3f\xcf\xa0\x75\x19\xe3\x63\x9e\x6c\x73\x9a\x53\x12\x5d\x72\x9d\x09\x25\xb3\x08\x26\x53\xea\x14\x56\x5b\x9f\x96\x44\xdf\xf6\x7f\xe8\x7f\x1f\xc1\x4a\xcd\x79\x12\x39\x56\x29\x82\x99\x5a\xdf\x68\x71\x76\x6e\x92\xe8\xff\xfd\x7f\x3a\xf7\x06\xf7\x06\x9d\xc7\x5c\x8a\xac\xf3\x66\x93\x9d\x5f\xa4\x9a\x5f\x76\xc8\xa7\xa5\x12\x5a\xcd\x2e\xfa\x7a\x43\x23\xdb\x10\x85\x57\x6c\x00\x0f\x91\x33\xeb\xeb\x54\xce\xd5\x8a\x50\x78\xd6\x46\x5b\x9c\xbd\x08\x89\x7a\x7e\x83\x15\x8a\x46\x33\x8e\xa2\xc4\x6e\x37\x7a\x12\xf5\x48\xaf\xf7\xaa\xf7\x90\x16\xd3\x48\xbe\xfd\x81\xe6\xf0\x9e\x7d\x24\xd1\x05\xbf\xc9\x22\x0a\x9f\xda\x26\xe9\xbd\x03\x87\xfd\x63\xcf\x1c\x81\x7b\xce\xb6\x39\xfc\x5e\x4e\x8a\xa5\x01\x4f\x1d\xa7\xf2\x01\xf5\x98\xbf\xc3\x1f\xec\x83\xc5\x50\xf0\x2b\xfb\x60\xd1\x33\xfc\xc2\x3e\xf4\x33\x6e\x46\x2f\xdb\x61\xfe\x8b\x5b\x09\x1f\x70\x0d\x03\xcf\xe1\x4e\x5b\x57\xfe\x28\x72\xd1\xdd\xce\xe2\xdb\xc3\xb6\x5c\xbf\x96\xb9\x72\xa7\x28\xb0\x1d\xfb\x8d\x7d\x22\x11\xaa\x05\x22\x3a\x7a\x3e\xf9\x6d\xca\xba\x03\xb8\xa5\x37\x17\xc4\xc0\x6f\x9f\xeb\x88\x45\x8b\xbf\xd1\xb1\x99\xfc\x36\x4d\x6e\xed\x87\xcb\x94\xe3\x99\xdd\x9f\x60\x0c\xdb\x66\xdc\x24\x2f\xc1\x62\xf8\x3b\x70\x9e\x66\xc9\x21\x70\xb9\x50\x7a\xc6\x93\x96\xe2\x87\x96\xab\xb9\x63\x29\xcb\x4b\x62\xec\x56\xcc\x6d\x49\xc3\xf5\x53\xa5\xdb\xf2\x57\x4f\xcc\x91\x33\x18\x39\x3c\xcc\xe9\x6e\x47\x24\xbb\x43\x38\xa5\x28\x35\x75\x5b\xd9\x9e\x17\xd2\xca\x5a\xa9\x11\xa7\x4b\xde\xd1\x7c\xc6\xc5\x25\xd7\x60\x19\x9f\x5e\xd4\xd1\xfc\xe3\x46\xe8\x0a\xbe\xeb\xc8\x3c\xcf\x81\x9b\x76\x8b\x28\x83\xd4\x09\xa4\x7d\xf0\x23\x04\xcd\xfc\xaa\xf3\xfc\x80\xe3\x0a\x49\xe0\xe2\xe8\xe8\x96\x6d\x09\x02\x0a\x4b\x9a\x2e\x52\xd7\x6e\xda\xdf\xc8\x2c\x5d\x58\x0e\xbb\x48\x29\x59\x5c\xd8\x94\xa9\x52\x1d\xa7\xfa\x8c\x9b\x67\xdc\x8c\x5a\xd0\x06\x6a\x46\x32\xd7\x81\x02\x93\xf1\xdd\xee\x8a\x08\x88\x64\xba\xe2\x11\xdd\xed\x2e\x8a\x17\xbb\x22\x24\x11\xb4\x9f\x39\x8c\xa6\xfb\x7f\x2b\x21\x8b\x1a\x8a\x6a\x2d\xae\x88\xf0\x6c\xa2\xcb\x98\x1a\x93\xd9\xb8\xbb\x89\x63\x8b\xbf\xe3\x98\x64\xac\x3b\xa0\x89\x3f\xc0\xb3\x69\x90\x8d\x11\xb5\x8b\xe4\xc2\x8d\x97\xd2\xa4\x48\x7a\x4b\x6c\x42\x4e\x49\x81\x84\x4b\xa3\xb2\x28\x6c\xe4\x08\xf6\xd9\x8d\x36\x9e\x12\xc5\x37\x8e\x82\x44\x18\xc3\x6e\xf7\xd8\xbd\xe7\x14\x51\x8e\x34\x4c\x81\x36\x6d\x48\xa6\xa5\xc2\xb1\xf1\xa7\x5e\x39\x28\xd3\xbe\x95\x52\x7d\x86\x3c\x56\xd0\x07\xdc\xbf\x37\xd6\x86\x48\x33\x31\x53\x2b\xfa\x19\x62\xc9\x14\x4d\x30\x21\x8e\xf1\x6f\xc2\xa7\xbb\x9d\xc2\x77\xe5\x5e\x73\x10\xc6\xe1\xc1\x19\x17\x4b\x48\xfd\xcb\x62\xa9\x94\x86\x59\x5b\x6f\x3b\xfe\x54\x91\xf5\x0c\x1d\x0f\x12\x62\x7e\x1e\x8c\x53\x93\x08\x43\x2d\xb5\x81\xcc\xd7\xb0\x12\x12\x36\xad\xe5\x6d\x81\xcc\x10\x14\x22\xe0\xa7\xc1\xe0\x9f\xc3\x9f\x7e\xba\xf7\xfd\x77\xff\xfc\x6e\xf0\xd3\x4f\x43\x9a\x0c\x72\x58\x86\x3a\xd2\x6b\x58\x54\xea\x9b\x37\x21\xe1\xb4\x1e\x58\x53\xb1\x7b\xee\x0f\xc6\x4b\x43\x64\x8f\xc3\x80\x26\x0b\x43\x24\x32\xa5\xeb\xd6\xae\xd4\x8f\x92\xbc\xce\x03\x04\xbb\x24\x68\x68\xb7\x31\x44\x84\xc3\x53\x98\xb1\xb9\x41\x63\x15\x54\x6e\xc6\xb1\xec\x32\xe9\x0f\x4b\xd2\x9f\x67\x78\x60\x4a\x14\x13\x93\x59\xaf\x37\xa5\x5d\xa6\x68\x21\x21\xa3\x32\xb6\xc8\x38\xeb\xf5\x30\xaf\xd9\xed\x66\x1d\x21\x3b\x82\xc6\xb1\x98\xcc\xa6\x68\x66\x11\x40\xb4\xdb\xcd\x76\xbb\x41\x10\x48\x4d\x1c\x1f\x0c\xf3\x1c\xce\x0d\xdb\x0a\x39\x5b\x6e\xe6\x3c\x4b\xd6\x78\x84\x0c\x42\xce\xf9\xf5\xeb\x05\xbe\x5a\xb1\x70\x65\xd8\xb9\xe9\xfb\x54\xb8\x6c\x85\x18\x68\xc7\xad\x2a\x36\x00\x11\xce\x8a\xf0\x9c\x48\xd3\xee\x15\x79\x0e\x92\xc6\xf1\x15\xd1\xf8\x2f\x8a\x83\xa3\xda\xc1\xd0\xcf\x6a\x44\x31\x0b\xe3\x13\x65\x87\x1c\xc7\xe4\xff\x5e\x19\x22\x40\xd2\xdd\xae\x28\x54\x1a\x28\xe6\x70\x66\xd8\x24\xaa\x9c\xf5\x44\x10\xd5\xc5\x8b\x08\x22\x91\x55\x4e\x2e\x23\x88\xda\xe4\xd6\xc8\xee\xcf\x97\x6a\x96\x2e\x79\xd8\xa5\x95\x0d\x1b\x79\xc1\x2a\x9a\xc2\x8d\x61\x67\x78\x26\x3b\x4b\x0d\x89\x5c\xbf\x5d\x9d\xae\x85\x88\xc2\xa9\xb1\x7c\x6f\x2b\xdf\x7f\x98\xae\x78\xb6\xdb\xb5\x2c\x9b\x4b\x43\x0c\xdc\x58\x1a\x08\x57\xb7\x97\x77\xac\x43\x96\xc3\x03\xc3\x94\x21\xd1\x5b\xbe\x58\x5a\x6e\x1c\x22\x75\x25\x7f\x45\xb6\xa0\x5e\xbb\xc3\xf0\xa7\xa6\xef\x38\x6e\x0a\x92\x5d\x99\xfe\xa2\x58\xd9\x63\x1e\xc6\x62\xb3\xd3\x84\xe7\x70\xdd\x9c\xdf\xe2\xd4\x8f\x3d\x30\x76\x11\x6b\xf6\xa6\xbf\x00\xc5\x4e\xfa\x0b\x10\x6c\x30\x12\xf7\x65\x38\xd9\x13\xbd\x5e\x61\x5e\x39\x11\xd3\x91\x25\xaa\x29\x2a\x8d\x0c\xa4\xa0\x08\x87\x94\xda\x21\x3e\x31\xec\xee\x7f\xec\xfe\x2a\xd1\xe3\x5f\xfd\xbb\xf0\xba\x7d\x2b\x9e\x98\xc9\x91\xdd\x8d\xd3\xa2\xd3\x8c\xfd\x6d\x76\x3b\xd9\x65\x8f\x8c\x25\x09\xfb\xa8\x8e\x8f\x05\xe1\x34\xe9\x76\xed\x36\x3d\x32\xec\xb5\xe9\x3b\xad\xae\xf8\xd4\xca\xd9\x16\x92\x4e\x5f\xf3\xf5\x32\x9d\x71\xf2\xc4\x40\xd4\x8f\x2c\xf7\xf5\x52\x5d\x71\xfd\x28\xcd\x38\xa1\x39\x9c\x60\x5d\xf3\xd4\xa4\x96\xa7\x7a\x84\x6f\x87\x0f\x8e\x5f\xbc\x7f\xc2\xa2\xc3\x08\xfe\xc6\x84\x37\xaf\x5f\xfe\xf1\xf4\xc5\xcb\x97\x2c\x7a\x13\xc1\x1b\x9b\x04\x17\x06\xa1\xf5\xf6\x96\xad\xe3\xac\xd3\x20\xb3\x12\x38\x52\x40\xd8\x30\xd3\x77\xfc\x28\x2c\x99\xe9\x5b\x4e\x08\xd5\xae\x6c\x33\x56\xc9\x72\xac\x26\x19\xca\x01\x99\xe5\x34\x12\xe2\x5e\xb7\x39\xad\x1c\x8a\xdb\x59\xc3\x53\x55\x27\x4c\xa6\x8c\x4f\xf4\x14\x04\x33\x55\x32\x3b\x26\x33\x76\x61\xf0\x70\x8d\xc6\xf1\xcc\x1f\x3a\x4b\x9b\xb3\xfb\xc6\x90\xcd\x58\x27\x59\x8f\x2c\xc7\x51\x3f\x4a\xa2\xff\x88\x68\x4f\x3b\x03\x94\x19\x9f\xd3\x38\x2e\xd8\x6d\x67\xe6\xeb\x81\x9f\x96\x04\xbb\x34\xfc\xbc\x36\x24\xb5\xa4\x91\x98\x7e\x76\x9e\xae\x76\x3b\x61\xb1\x80\x7d\xa4\x71\x7c\x41\x52\x88\xec\x73\x84\xb2\x20\xc7\x0e\x41\x8a\x1c\x21\x1c\x1b\xd6\xed\x7e\x6e\x33\xdc\x22\xc1\x77\x03\x03\xe3\xb8\x6d\x47\x30\x5f\x18\x76\x6c\xe2\xb8\xeb\x12\xb1\xfd\x38\x8e\x32\x7c\x6b\xda\x75\x97\x16\x5b\x2f\x0d\x7b\xa0\x75\x7a\xd3\x17\x19\xfe\xb7\x6d\xe0\x08\xbf\x78\xf5\x56\x0e\x77\x5a\x69\x83\x57\x74\x79\xc5\xd3\xa1\x09\x72\xb3\x65\xe8\x6f\xc7\x0a\x67\xb6\xc2\xc7\x86\xa5\xe3\x36\x31\x5b\xf0\xac\xa1\x3a\xb0\x1b\xbd\x3c\xaa\x07\xcd\x0e\x71\xdb\x2a\xa6\xfd\x36\xc5\x5d\xab\x7e\x16\x23\xea\xa4\x59\xc9\xf4\x44\xf4\x7a\x53\xe0\x13\x39\xad\x0a\xf6\xef\x1c\x96\x09\x9a\x97\x08\x8a\x47\xaf\x49\x89\x28\x3c\x35\x96\x55\x7f\xf1\xe4\xe4\xcd\xdb\xd7\xc7\xaf\x23\x0a\x1f\x4d\xd5\xd4\x20\x87\x57\xad\xfc\xc9\x7d\xa7\x00\xf9\x19\x39\xd6\xfb\x7f\xdd\x0d\xaf\x39\x3c\xac\x95\xb7\xd2\xf2\x9f\x2c\x34\xdb\x9f\xab\x55\x2a\x64\x1c\x5b\xb1\xe5\xc1\xcc\x8a\x90\xbf\x07\x95\xe4\xb9\x59\x2d\x17\x62\xc9\xa3\xaa\xca\x00\x4f\xb5\x81\x8f\x1e\x1a\xf6\x67\x4d\x2b\x69\xfa\x57\x5a\x18\x4e\x5e\x19\xe2\x98\xbf\xfe\x6c\xa9\xec\x26\x0f\xe7\xcf\xfd\x75\xaa\xb9\x34\x1f\x50\x2f\xde\x77\x8d\x14\xa0\x71\x87\xfd\x3c\x27\x7f\xd2\x84\x10\xce\x9e\x90\x48\x2c\x34\xb2\xa0\xb4\x9f\x99\x9b\x65\x61\x7e\xc3\x22\xa9\x24\x8f\xe0\x9d\xe9\xa7\xeb\x35\x97\xf3\x47\xe7\x62\x39\xb7\xf3\xc1\xfb\x99\x9e\x05\x36\x3b\xfa\x3b\xbd\x4c\x1d\x0c\x92\x88\x02\x31\x0c\x11\xb3\x29\x7b\x10\x40\x40\xfb\x6a\xcd\x25\xb1\x3d\x2e\x47\x50\xc0\xe7\xa9\x5f\x52\xb5\x21\x81\xe9\x3f\xad\xac\x08\x4b\xc0\x3c\xbe\x96\x07\x07\x23\xea\xb9\xdb\x87\x15\xdb\x9c\xc9\x99\x99\xc8\x69\x81\x71\x1f\x1a\x42\xf3\xd1\xf3\xc9\x53\x33\x0d\xa6\x02\xcf\x4c\xdd\x7e\xa7\xba\x7c\x0b\xcc\x56\x60\x6c\xaf\x3b\x1d\x93\x8f\x55\x03\x20\xd4\x01\x49\x14\x41\x3f\x1a\xa8\x7d\x42\xf8\x4a\x6c\xd0\xd0\x44\x32\xdb\x03\x28\x04\x65\x3e\x96\xc9\xe3\xc0\x86\xbd\x37\x48\xdf\xe0\x93\xa9\xe9\xbd\x9f\x1b\xf6\x85\xc3\x8e\x38\xbe\x9d\x46\x8f\x6f\xff\x44\xfc\x51\x49\x32\x99\xc2\xef\x48\xaa\x5b\x36\xee\x73\x13\xc7\x85\x7d\x8d\x9b\xc1\x69\xc4\xd8\x27\x13\x74\x28\xe3\xf6\x13\x91\xce\x7b\xd4\x83\x37\x8e\x44\x3a\xcf\x8d\x57\xd4\xd3\x3c\xb7\x32\xe6\x7b\x43\x2e\x11\x89\xe4\xf0\xc1\xb0\x8f\x24\xba\xba\xc8\x22\x0a\x7f\x18\xa6\xfa\x0e\x7b\xc1\xaf\x86\xbd\x30\xe3\x3f\x4c\xf2\x87\x89\xe3\x3f\x4c\xdf\x9f\xac\x1f\xa1\x50\xba\xdb\x3d\x83\x5f\x5a\x51\xd4\x15\xf9\x60\x50\x60\x27\x16\x51\x5e\x91\x3f\xec\xdb\xf8\x83\xe5\xf4\xd9\x1f\xf6\x37\x71\xcf\xbf\x5a\x61\xd0\xe1\xc9\xa8\x67\x19\x0b\x4c\xce\xe1\x37\x84\xc8\x2f\x26\x87\x3f\x0d\xf2\x09\xa6\xcd\xe5\x46\x1a\xdf\x4d\x2b\xec\x86\x67\xb6\xcd\xe9\xe8\x0a\x4d\xc3\x77\xbb\x3f\x8d\x7d\x00\x6f\xad\xf7\x9b\x65\x60\x0c\xb5\x52\x35\xe7\x58\xad\xe4\xec\x17\x43\xa2\xaa\x77\x0c\x05\xbd\xef\xaa\x62\xb1\xfd\x15\x31\x4c\x8e\x4d\x52\xf3\xf1\xe1\x34\x8e\x39\xb7\xd8\x8f\xc3\xb6\x7e\xc0\x32\x28\x0e\x53\x68\x0e\x8a\x37\xb5\xa5\x2d\xfa\xb4\x7d\x09\xbd\x4d\x79\x5a\xc8\x06\x35\xed\xa9\xd8\xef\xb4\x58\x10\xc5\xed\xe6\x28\x57\x7c\x79\x8e\x90\x5d\x09\xaf\x33\x9c\xa5\x19\xef\x0c\x92\xa6\xe0\x51\xb1\x25\x73\x3e\x0d\x34\x1f\x61\xd6\xe1\x5e\x56\xb9\x97\x17\x64\xc8\x7d\x6f\x3f\x77\xc5\x06\xa7\xcc\x0f\x3a\x94\xf8\xb6\xad\x04\xa8\xd6\x32\xa0\x68\x69\x74\xd9\xd2\xf3\x74\xbd\x5e\xde\x58\x7e\x31\x48\xa4\x76\xad\xa7\x6e\xd2\xb3\x35\x9f\x09\x6e\x17\xfc\x8c\xb7\x31\x54\x01\xb8\x2f\xed\x5e\xaa\x71\x88\xdd\xea\x61\x47\x45\x6c\xa0\xc8\x4e\x3a\x2a\x1f\xc7\xdd\x97\x86\x54\x44\x77\x3a\x3e\x23\x56\x6a\x71\x67\x50\x8c\x48\x26\x27\x29\x47\xe9\x44\x86\x33\xe1\xa4\x78\x02\xc9\xaf\x2a\x56\xee\x63\xac\x33\x91\x94\x38\xc4\x35\x48\x2c\xce\xca\x38\x9b\x4c\x51\x9e\x81\x4d\xdb\xfe\x18\x32\x66\xc9\xf2\x3d\xfb\xa7\xd9\xb7\xf6\x4f\xb1\xef\xec\x9f\x60\x3f\xd8\xbf\x94\x7d\x8f\xc6\x21\x62\xcf\xe9\x6a\x06\x19\x6c\x60\x59\xb2\xed\x0b\x98\xc3\x9a\xdd\x31\x64\x46\x61\xc5\xce\xc9\x9a\xc2\x25\x13\x9c\xd8\x6c\xdf\x52\x38\xb3\x22\xe9\xaa\x10\x49\x6f\xd8\x00\x4e\xd9\x72\xb7\x9b\x71\xb8\x62\x7c\x7c\x4a\x66\x70\x46\x13\x89\x0f\x03\xea\x35\x08\xa3\xb3\x9f\x6f\x46\x37\x5e\xea\x4c\x77\xbb\x1b\xcb\x68\x5a\x56\x8e\xcc\xd9\x25\x59\xb0\xd5\xe4\x66\x0a\x37\xb0\xa6\x60\x28\x45\x93\xe3\xab\xc9\xcd\x94\xcd\x0b\x57\xa8\x39\xf5\xcb\xd8\xf8\x65\x1c\xd6\x4e\x77\xe0\xd6\xd2\xf7\xc5\x5a\x72\xef\x3f\x84\xf7\x9b\xb0\x3a\x33\x6f\xbe\x7c\x05\x8b\xd2\x38\xa9\x10\x91\x87\x85\x90\x38\x3e\x18\x26\x7a\xb7\x53\x63\x95\x5c\xe5\x39\x2c\x39\xdb\x7a\x93\xbb\x64\xc3\xc9\x80\xc2\x2a\x5d\xdb\xa7\x21\x85\x85\x58\x1a\xae\xed\xcb\x3d\x0a\x99\x5a\x71\xfb\xf8\x2d\x05\x7e\xc9\xf5\x8d\x7d\xfe\xce\xe6\x91\x73\xfb\xf8\xbd\x7b\x7c\x61\xa5\x62\xfb\xfe\x03\xcd\x61\xc1\xd9\x92\x07\x83\x3e\x98\x73\xcb\x19\x9d\x8b\xf9\x9c\xcb\x88\xc2\x3a\x60\xac\x37\xe1\x5c\x2c\xa2\x70\x8e\xea\xb7\x8c\x1b\x58\x05\x45\x9c\xd3\x19\x06\xec\x1a\x51\xb8\x6c\x71\x51\x3c\xe3\x25\xa6\xbf\xe1\xc8\xa5\xfd\x72\xf4\xfa\x30\x02\xaf\xde\x12\x8b\x1b\x2b\x89\x72\x14\x3b\xae\x1c\xca\x7c\xc0\xd9\xef\x96\x50\x5e\x73\xb6\xe9\x2f\xe0\x09\xb7\x84\xc3\xf1\xbe\x76\x2f\xbd\xc6\x77\xb5\x3e\x28\x93\x8e\x5c\x16\xac\xf1\xc0\x28\xff\xe5\x40\xf3\x33\x91\x19\x6d\x5b\x38\xa9\x54\x82\x39\x5c\xde\x4a\x8e\x47\xbc\xa4\x4f\x7f\xdb\x5e\xff\xe6\xcf\x78\xdf\x70\xd6\xfd\x9b\xef\x76\xdd\xbf\x2b\x8e\x8b\x8d\xd7\xbe\x05\x31\x72\x4c\x70\xc1\x59\x1a\xc7\xb7\x9d\xd5\x3d\x33\xe4\x8a\x93\x6d\xfe\xb9\x53\xb9\x2b\xa7\x4c\x73\x59\x1c\x86\xff\x27\x9e\xd3\xe5\xd4\x9d\xd6\xed\x9d\xf9\x38\xbb\x96\x53\x4e\x2e\x39\x70\x3a\xd2\x71\xec\x79\xa5\x4b\x3e\xe1\x53\xb8\xe2\x3e\x23\xe8\x38\x36\x5d\xc6\x2e\x79\x1c\x5f\xb9\xdc\x16\x2b\x26\x57\x1c\xde\xb6\x62\x28\xf6\x84\xa3\x82\xde\x90\xb3\xca\x68\x0b\xaa\x70\xce\x89\x04\xef\x75\xe6\x97\x01\x98\xf4\x2c\x31\x30\xf7\x07\x87\x42\x49\x4b\x9e\x20\xb5\x04\xb4\x5f\x49\x65\x9c\x82\xcc\xe1\x98\x5b\xea\xdf\xc2\x77\x37\x65\x1d\x93\xb7\xb1\x2f\xc5\x89\x7c\xc5\x8f\xf4\x8c\xe7\xf0\xa2\x85\xc0\x32\x37\xee\x17\x9c\xbc\xe6\x0e\x1a\x28\x80\x38\xd8\xf9\xf3\xbd\x30\x30\x3c\xe6\xbb\x22\x4f\x2c\x78\xc6\x44\x56\xf4\xc0\x63\x3c\xbc\x9c\x5b\xaa\x6c\x26\x73\x3e\x9d\xe8\x29\x1e\xcd\xb9\x47\xd6\x1d\x5a\x4e\xf1\x99\xe5\xf9\xaa\xf6\x11\x4b\x32\x80\xee\x10\x1d\xa2\x42\xf9\xdd\x0e\xa7\x65\xee\x8e\xe8\xb6\x56\xea\x2b\x6b\x19\x50\xb8\xb0\x5f\x35\x48\x4a\x93\xab\xf0\x98\xc3\xcb\xe6\x34\x15\x63\x90\x4e\x73\x87\x52\x94\xa4\x41\x5b\xf2\x8e\x57\x15\x51\x0b\x4e\x34\xd4\x9c\xe0\xd2\x38\xee\xde\xf1\x08\xca\xb2\xa9\xbb\xdd\x0b\xbf\x58\xf0\x0c\x96\xa2\xb1\xfb\x9d\x36\xd4\x7f\x43\x0c\x4a\xc1\x92\x5d\xf3\x9a\x99\x6f\xd0\xdc\xe1\xbb\x07\x3a\x82\x12\x2d\x80\xaf\x10\xfa\x68\xf7\xdb\x25\x72\xb7\xb3\x4c\x8f\x2b\x87\xcf\x98\x6d\xb7\xf3\x89\x0e\xcc\xe7\x22\x43\xc0\xf0\xa9\x25\x7f\x56\x20\x6d\x5f\xab\xa8\xd7\x2b\xa7\x52\x2c\x88\xc4\xb5\x1e\x2a\xd6\x58\xf1\x6b\xfb\x10\x4c\xbc\x4e\x39\x32\x0b\xa1\xcb\xaa\x9e\x55\xba\x0e\x48\x3f\x2d\xbb\x1d\x51\x95\x95\x80\xb3\xa4\xf2\x1c\x1e\xb7\x81\xe7\x01\x77\x9c\x2f\x48\x36\x99\x56\xe0\xcf\xeb\x1e\x6e\xd8\x9a\xc1\xd6\x9e\xe3\xbf\x74\xda\x43\xe3\xf4\xe6\x39\xbc\x6b\xab\xdc\xad\x65\x90\xb6\x15\x3e\x7e\xcd\x13\xd7\x94\xae\x37\x25\xeb\x4d\x75\x8b\xb6\x38\xce\xc3\xa5\x7b\xd1\xae\x41\xdc\xe8\xd8\xa8\xce\x2d\xe8\x8e\xcd\x6e\x47\xb8\x21\xe4\x8c\x57\xc5\x5c\x6f\xdc\xda\xa9\xed\xb7\xfd\x63\x1f\x87\x0c\x4a\x86\xb2\xaa\xf9\xa4\xde\x84\xbb\xa9\xc3\xaf\xe8\x69\x8a\x4f\x93\xc1\x74\xec\x39\xd4\x6a\x5a\x20\xef\xc0\xf1\xec\x10\xea\x6e\x2a\x95\x75\xe7\xed\x42\x5e\xdb\xa1\x42\x75\x51\xb9\x67\x3b\xb1\xb8\x2c\x49\x65\x91\xe1\x1e\xbe\xf0\x38\xd8\xed\x4e\x2b\xc1\x14\xf6\xa8\x71\xfc\x86\xc7\xf1\x85\x47\x9f\x7b\x2c\x79\xc6\x4d\x22\x73\x0a\x6f\xbd\xf3\x28\xfd\xda\xb3\x95\xce\x2a\x1c\xa2\x98\xf4\xcc\x4e\x04\xb7\x58\x17\xa2\x9a\x40\x14\xb5\x3a\x48\xbe\xe5\x04\xe1\xe0\x56\xcd\xa6\xbf\x60\x77\x38\xbc\xe9\x2f\xd8\x0b\x0e\x27\xfd\x05\x3b\xe4\x60\x45\x4f\x24\xab\xec\x31\x87\x2b\xfb\xff\x8e\x83\x15\x57\xda\x84\xab\xb7\x9c\xfc\x62\x7c\x85\x90\xc6\xb1\xa5\x59\x55\x02\x00\x51\x05\x93\x47\xfb\x30\x68\xa7\x6b\xc5\xf8\x2a\x85\xf3\x1c\xc7\x79\xc9\x6f\x53\x77\xdf\xe1\xb0\x75\xe7\x72\x49\x77\x90\x53\x4a\xe1\xad\x21\x5b\x1f\x9c\xa1\x3b\x80\x2b\x9d\xae\xed\xbf\x53\xf6\x25\xdd\x63\x03\xd9\x79\xba\xb2\x0f\x39\x6c\x7d\xc8\x83\x33\x4b\x82\x16\x9c\x1c\x1a\xf2\x88\x37\x7c\x4c\x0d\xf7\x9b\xcd\xd6\xeb\xb4\x9a\x25\x31\xcb\x4c\x6a\xea\xb5\xe7\x60\xb9\xb2\x64\x7f\x4f\x16\x82\xd4\x08\x0d\x5c\x8e\x78\xc5\xc2\xe5\xc8\x92\x61\x8f\xa5\xcf\x38\x29\x09\x28\x7e\x60\x12\x4e\xf8\x44\x4e\x19\xb7\x1b\xfe\x82\xdf\x34\x8f\x62\xc5\x82\x74\x8f\x79\x9b\xe9\x8b\xa9\x4a\x6d\x9e\x64\xfa\x0e\x9c\xd8\xd5\x17\x3a\x70\xc2\x51\xe8\xdd\x64\xdc\x2d\xa3\xea\xec\x58\xfe\x66\xe0\xbe\x89\xd5\x7a\xc9\x9b\xdf\x86\x76\x8e\xaa\xc0\xf1\x9a\x9b\x16\xe0\x78\xd0\xa7\x39\x6c\x9d\xb6\x25\x69\x3d\xbd\xab\xe8\x47\x9e\xa1\x91\xd3\x4b\x4e\xf0\x01\xf5\x24\x75\xe3\x9c\xe4\x05\x87\x3d\x3d\xe2\x4b\xcb\x58\xb6\xdb\x29\x25\x87\xfc\xab\xbb\x9b\x23\x07\xd6\xd4\x9b\x24\x8f\x9b\xb5\x7b\x05\x6e\xf2\xee\x2b\xab\xae\x33\x7f\x76\xb3\x91\xa1\xf3\x8c\xda\xb6\x57\xdc\xa6\xdf\xb0\xa5\xee\x18\xa7\x3c\xa1\x70\xe3\xa9\xdc\x53\xce\xba\x16\x35\xd7\x9b\x70\x08\xf5\x8c\x93\xc2\x70\x68\x62\x85\xc0\x69\xd4\x65\x37\x9c\xb8\x43\xd1\x68\x9b\xbb\xd7\x6d\x9a\x98\xbc\x9a\x50\x30\x51\xb6\x8f\xa3\xea\xf8\x1c\xab\xde\x18\xdd\x53\x9e\xc3\xb6\xe0\xde\xf7\xec\x8a\x0a\xa7\x05\x50\x6c\x62\xa6\x20\xd8\x70\xd4\x44\xf5\x3f\x8b\x11\x55\x8e\xee\x94\x68\x5d\xf4\x7a\x53\xe7\x63\xc5\x38\x10\x67\x61\x50\x50\x04\x2b\x1f\xfb\x3d\x50\x0a\xcd\x68\x83\xd0\xe4\x05\xda\x5d\x44\xd1\xd5\x86\xe9\x0a\xa3\x82\x16\x68\x60\xeb\x2c\xf7\xa9\x9d\x5f\x35\x19\xda\x9d\x78\xc3\xbd\x68\x8f\x1a\x3e\x65\x27\x21\xaf\xa2\xc0\xc9\x9a\x4f\x77\xbb\x8b\x3a\x5a\x44\x81\xa7\x22\x15\x04\x3b\x47\xd0\x1c\x51\x79\x21\x2a\x3d\xb7\xb4\x26\xa8\x28\x3f\x72\x78\xc5\xe1\xa1\x93\x8e\x64\x7a\x29\xce\x9c\xc3\x5c\xb4\xc9\xb8\x7e\x70\x86\xea\xeb\xdd\x2e\x8a\xe0\x99\x15\x4b\xd6\x5a\xcd\x78\x96\xc1\x7b\xce\x9e\xf1\x38\x7e\xc6\xfb\xc1\x72\x08\x3e\x71\xf6\x9e\xc7\xf1\x7b\xde\xbf\xfc\x71\xf4\x89\x8f\x5f\x71\x46\x3e\x72\xf6\x89\x07\xab\x88\x7e\x44\xe9\x64\x30\xed\x7d\xe4\x93\xe1\x34\x79\xc8\x91\x09\xfb\xc8\xd9\x43\xde\x5f\xa1\x26\xef\xee\x93\xf9\x19\xff\xeb\x2e\xf9\x6b\xde\xa3\x77\x29\xdd\xed\x30\xe7\xcf\xec\x9f\xdf\x59\x22\x59\xcb\xf9\xe8\x5c\xab\x55\x25\x6f\x1c\x93\x57\x9c\x61\x7e\x47\xe1\x9f\x73\xf6\x8a\xc7\x71\xef\x15\x87\xdf\x9b\xfa\x90\x0f\xad\xc7\x5b\xcf\xf9\xcf\xec\xfb\xe1\x6e\xd7\xdd\x5f\xdd\xbc\x64\x6d\x08\xaf\xf9\xb7\x6e\x73\x3a\xf9\x9d\xb7\x78\x16\x6e\x17\x4a\x25\xc3\x3c\x87\x61\x97\x31\x8b\xff\xc8\x43\xa5\x96\x3c\x95\xb4\xbf\x50\x0a\xb7\xe3\x1f\xfc\x16\x8b\xc0\x5f\x39\xdb\xe6\xf0\x0b\x6f\xf0\x15\xe8\x0b\x92\xc3\x6f\x2d\x6b\xee\x8a\xfc\x5a\x45\xb8\xbf\xda\x06\x47\x1c\xd7\xe7\x36\x0f\x1c\xfa\x64\x6a\x77\x84\x66\xdd\xee\x15\xe1\x10\x3d\x78\xf4\xe8\xc9\xd1\xd1\xeb\xb7\x47\x11\x8d\x63\xde\x2f\x5e\x41\x31\xfb\x7d\x40\xc7\x7c\x32\x98\x26\xbf\x70\x98\x61\xc2\xd0\x26\x0c\xa7\x41\xb7\x51\x6d\x8a\x75\xbb\x72\xef\x80\xc9\xee\xa5\x38\xee\xa6\xc5\x71\xbc\xe7\xbc\xb6\x6e\x17\x26\x07\xc3\x7c\xa4\xc7\x7f\x58\x86\x7f\x58\x13\x57\x3c\x09\xff\x85\xe7\x34\x31\x76\x3f\x0c\xa1\x70\x88\x56\x3e\x00\x03\xfc\xe9\x94\x08\xa8\x8a\x00\x23\xd9\x07\x4e\x22\xf7\x16\x51\xe0\x92\xfd\x56\x79\xaf\x61\x15\x77\x02\x05\xb8\x4d\xaa\x08\xd9\x58\x71\x80\x4b\x4b\x61\x9d\x7e\xa3\x65\x89\xfc\xc9\xc3\xee\xdd\xc3\x29\xc3\x71\x89\x4b\x0a\x20\xd9\x7d\xeb\x80\x2f\x5b\x65\x06\x9c\x91\xc2\xf8\x5d\x36\x05\x77\x3f\x6a\x77\x8a\x52\x39\x3a\x08\x8b\x61\x98\x83\xc7\xec\x5a\x56\x55\x2a\x4a\x32\x29\x49\xe4\x5f\x23\x0a\xa9\x87\x47\x91\x30\x93\x4c\xc9\x38\x4e\xe5\x78\x52\xc4\x27\x69\x1b\xb0\x96\xff\xea\x80\xbf\x06\xd6\x65\x9b\x5d\x36\x93\x8e\xa7\xc1\x1e\xcc\xa4\x87\x57\x26\x51\x25\xb3\x91\x0d\xfb\xfa\x4c\x3a\x5a\x36\xfa\x1a\x12\x9b\xee\x76\x1b\x59\x61\x0a\x6e\x25\xda\xad\x6c\x42\x26\xc9\xa5\x67\x0a\x7c\xa7\x96\xf2\x96\x10\x4f\x37\xc8\x53\xa1\x2b\xea\xd8\x9d\x15\x6a\xb0\x32\xb7\x95\x9e\x8d\x95\xa8\x65\xfe\xd9\x0e\x7f\xb9\x8b\x59\xbb\x7f\x12\x54\x0c\x4a\x9c\x9d\xc1\x03\x43\x34\x05\x3c\x77\x9f\xb1\xc1\x28\x18\xd1\xfc\x3c\x1b\xd1\x82\x9a\x11\xc9\x14\xd1\xc0\x83\xc9\x0c\x8d\xe3\xa5\x24\xa9\x8b\x66\x14\xe4\x8c\x30\xe8\x45\x73\x0a\x0e\xcd\xd7\x4f\xc1\xc2\x4e\xee\x05\xbf\x69\xe5\x31\x0e\x4d\xc9\x61\x60\x53\x73\xc9\xb6\x8f\x8e\x8e\xde\x6e\x96\xfc\xa5\xc8\x4c\x32\x80\x47\x47\x47\x47\xe6\x66\xc9\x1f\xf3\xd9\x32\xd5\x29\xea\x73\x30\xf5\xbd\x25\x6d\x21\xd3\x52\x70\x69\xde\xf2\x99\xf1\x09\x8f\x5f\xbf\xaa\xbf\x39\xe6\xb8\x7c\x3f\x56\x17\x5c\xe2\xeb\x10\x1e\xa7\x26\x3d\xd6\xa9\xcc\x16\x5c\xbf\x30\x7c\xe5\x73\x3d\x15\x45\x27\x9e\x1f\xbf\x7a\xf9\x60\xb9\x7c\xa4\x96\x4b\x3e\xf3\x5d\xb0\x69\x7b\x09\x4f\x95\x5e\xf9\x13\x5f\x9f\x72\xc4\x6d\x8e\x32\xed\x15\x9f\x8b\xd4\x57\xfb\x4a\xac\xb8\x65\xa5\x9d\xe6\x7b\x00\x96\xfb\x9b\x1f\xaa\x39\x7f\x95\xae\xed\xab\x9a\x73\xdf\xc5\x37\xa9\xb0\xe3\xfb\xb8\xe1\x59\x18\xd4\x9b\xe5\xe6\x4c\xc8\xe2\x21\xd4\x71\xf4\xfe\xd9\x4b\x9c\x6f\x9f\xed\xe8\xfd\xb3\xc3\xcd\xea\x94\xeb\xf2\xfd\x4d\x6a\xce\x8f\xf8\x59\x25\x41\x09\x69\xca\xd7\x1a\xac\x8e\xde\x3f\x73\xb0\x51\x3a\x00\xc6\x59\x2f\x3f\xdc\x2c\x16\x65\xad\x76\x8a\x8e\xce\x39\x0f\xd5\x1c\xf3\x6b\x73\xac\xd3\xd9\xc5\xa3\x62\x92\x8a\xa4\xf0\xae\x36\x33\xdf\xcb\xbc\x38\x73\x5d\xa3\x25\xd4\xdc\xef\xab\x73\xc9\xd4\x64\x2d\xa7\xb0\x92\xec\x5c\xc6\xf1\x79\xe5\xb0\xc1\x32\x6a\x2b\x19\xc7\x2b\x59\x62\x12\x36\x93\xd4\x59\x8d\xaf\x24\x14\xb8\x0e\x66\x55\xe3\xf8\x32\xbf\x45\x3c\x78\xee\x7d\xb9\xbf\xab\x03\x3f\xe6\x76\x74\xbb\x83\x83\xcd\xea\xd5\xa3\x12\xea\xc4\xab\x29\x8f\x96\x3e\x48\x03\xa4\x68\xc1\xe4\xfd\x4c\x7e\x26\x9a\xe0\xd7\x45\x00\xfc\x72\x8c\xc1\xad\x0b\x90\x75\x23\x19\xf9\x72\xe6\x02\x45\x9c\xc9\xf1\x99\x4c\xb6\x39\xed\x9f\x9c\xbc\x7f\xf7\xe4\xe4\xf1\x93\xf7\xc7\xaf\x5f\xbf\x3c\x3a\x79\xf6\xf2\xf5\xc3\x07\x2f\x4f\x9e\xbf\x7e\xfd\xeb\xc9\x49\xe9\x79\x7e\xea\x71\x67\xc5\x52\x83\x18\xda\x12\xf9\xaa\x02\x5d\x62\x26\x72\x0a\x92\xd6\xe2\x5b\x5d\x55\x31\x44\x38\x10\x6f\x89\x24\x65\x70\xee\x1e\x34\xc9\xaa\xf3\x6a\x0d\x7e\x85\xce\x6d\xf5\x64\x76\x2e\x96\x73\xcd\x65\x23\x94\x06\xfa\xff\xfa\x2c\x3a\xbd\x7a\xa5\xe6\x9b\x25\x67\xde\x03\xc9\x5b\x13\x71\x17\x63\x0b\x1f\x59\x1b\x67\x2f\xc7\x92\xd0\x44\x7a\xd3\xed\x6b\xc9\xb6\xd2\x4a\x71\xeb\xd4\xa2\xbf\xa6\x66\x22\xcf\x47\xd7\xb2\x5f\x66\xe8\x9f\x71\xb3\xcf\x39\x76\xbb\x8d\x3e\x55\x4a\xe4\xf0\xa0\xb2\x0b\xfa\xe9\xdc\xa9\xfd\xdb\xa0\x50\x0c\xdb\xb9\x4c\xd4\x0b\x6a\xbe\x52\x97\xbc\x59\x96\x6e\x83\x09\x6f\xb3\x82\x46\xf1\x33\x6e\xf6\xcb\x86\x43\xc9\x2f\x94\x3d\x4f\xb3\xdb\xcb\x86\x70\x0e\x65\x05\x8d\xd2\x9b\xf5\x3c\x35\x4d\xc6\xf8\x36\x68\x31\x53\x79\x01\xd3\x4f\xb1\x4c\x16\x9c\x55\x2b\x65\xfc\x17\x56\xe4\xa1\x60\xfa\xab\x8d\x49\x6f\x2b\x50\x7c\x63\x95\x7c\xb6\x90\x3b\x9a\x6a\x2b\xe2\xbf\xb0\x22\x0f\x6d\x8c\xcd\xef\x96\x7d\xe8\x9c\x4a\x52\x07\x0a\x6a\xc6\xda\xca\x3e\xc3\x9a\x3f\x0b\x9e\xa2\x83\x45\xad\x7b\xdf\x6e\xad\xfe\x01\xd6\xfa\xd9\xea\x0b\x18\xb7\x54\xef\xbf\xdd\x5a\xfd\x2b\x0f\xc8\xcf\x36\x50\x99\x95\x96\x26\x8a\xaf\xd8\xc8\x2d\x96\x60\xa4\xda\x38\x5c\x4b\xc7\x7e\x3c\x91\xf0\xba\xa5\x69\x77\x48\xc7\x35\x99\x4c\xc1\xe0\x31\xca\xe8\x75\x63\x2f\xb4\x2e\xe5\xbe\xe6\xf3\xcd\xac\xe6\x4a\x50\x0d\xd0\x5a\xec\x21\xc2\x69\x1e\xc2\x53\x29\x85\xbd\x6e\x54\x7f\x18\xd6\x70\x9b\x2e\x3e\x94\x1b\x7d\xae\xdd\x8a\x01\x43\x8f\x10\xce\xca\x1d\x4c\x24\xa5\x95\x4d\x32\x96\xbd\xe8\x6e\x94\x44\x91\xed\x93\xfd\xad\x77\xa6\x65\xf7\x95\xf1\x03\x4d\xb0\xe5\x46\xc7\x77\x97\xd5\x32\xa3\xba\xbf\xc2\xb9\xc9\x8a\xa8\x2d\x0a\x0d\x9e\x8b\x64\xd4\x30\xca\xb2\x4b\x2a\xc8\xb1\x23\x43\x0a\xc3\x5b\x45\xa1\x96\xa5\xac\x76\xa2\xa6\x34\xcf\x71\x7a\x02\x30\x60\x0f\x8c\x61\x16\x6f\xe1\xe0\x31\x8e\x4a\x69\x8e\x80\x36\x0b\xdd\x01\xf5\x41\xe3\xd0\x8c\x0e\x4d\xd5\xe9\x08\x3d\x90\x3c\x57\x3d\x2e\x1a\x64\xca\x05\x7a\x38\xe3\x86\x04\x23\xa4\x01\x1c\x0c\x29\x2d\x70\x34\x31\x13\x53\xc4\x0f\x98\x82\xa2\x23\x1e\x46\x80\x2b\xb9\x78\xab\x1e\x91\xa1\x59\x48\xb9\x04\x4d\x05\x1a\xdc\x93\xce\xc6\x0c\xc9\x96\x91\xd6\x16\xcb\x7e\x17\x41\xb2\x7a\xdf\x74\x7d\x81\x8c\x74\x1c\xeb\x40\x55\xe3\xb8\x46\x3d\x88\x6c\xf6\x40\x64\x6f\x7d\x0f\xf8\xfc\xdf\xef\x43\x19\x2b\x29\xd0\x0b\xdb\x12\xce\xc7\x51\x5b\x58\xb0\xfa\x04\x1a\x8b\x7e\xd9\x36\xa7\xd0\x7d\x22\xe3\xf8\x76\xc6\x27\x18\xb9\xf5\xdf\x6f\x78\x1c\x37\xb4\xde\xb6\xa8\x61\x8c\x3d\x09\xde\x01\xa3\xee\xff\xb8\xfb\x4d\xf7\x7f\xfc\x5f\x9d\x6f\x3a\x97\x1b\x7e\xdd\xb9\xfc\xb6\xff\x7d\x7f\x88\xef\x64\x46\x9d\x0f\xdc\x93\xcb\x54\x76\xfe\x50\x1b\x4c\xfd\x2f\x3b\x42\x99\xf1\xce\xab\x17\xc7\x36\xe1\xee\xff\x68\x34\xe1\xb8\x73\x62\x82\x16\xad\xa2\x2a\x9b\x0c\xa6\xf4\x67\x76\x8f\x9a\xfe\x4a\x5c\x0b\x49\xb6\xa7\x7c\xa1\x34\x7f\xe4\x34\xdb\x56\x50\x2e\xdc\xc0\xd0\x0e\xb3\x98\x80\x13\x21\x85\x19\xed\xa5\xd4\x81\xb6\x0f\x29\xd3\xc7\x5c\xee\x6f\x3c\x91\xd3\xb0\xd6\x5c\x0a\xb5\x6c\x6e\x55\x81\x59\x8d\x69\x59\x6a\x81\x71\x7a\xef\x28\x3c\x5d\xc9\x46\x96\x89\x52\xda\xc7\x23\xb9\x83\xcf\xad\x01\xdc\x42\x36\xf7\x4f\x68\xe2\x9f\x92\x60\x5f\x1a\xc7\xe1\xc9\x57\x13\xe8\xab\xaf\xb4\xf1\xd5\xe2\x83\x27\x92\x19\x9a\x93\x72\x7e\x69\xc1\xd9\xad\x51\x68\xda\xdb\xf0\x93\x69\x38\x8f\xb7\xcd\x6b\x31\x33\x65\x0e\x8d\x31\x76\xbb\xc3\xc0\x30\xce\xd4\x6a\x25\x8c\x11\xf2\xac\x08\x71\x75\x12\x98\x88\xdb\xd9\x4c\x97\xe3\x68\x73\x6a\xe5\xfa\x53\xcb\x0c\x04\xac\x75\x52\x32\x14\xb7\x17\xbf\xd2\xe9\x7a\xcd\xe7\xcf\x3c\x23\x71\x7b\x46\x8f\x49\x10\x71\xbd\x96\x78\x94\x56\x4d\x2f\x08\xca\xab\x74\xfd\x99\x5a\xb2\xb6\x7e\x5e\x59\x51\x8a\xeb\xf7\xaf\xb0\xf2\x27\x32\xd4\x9c\x5e\x70\x74\x0c\xf1\x9d\x7b\x94\xce\xce\x9b\xb1\xeb\xca\x80\x3b\x2e\x52\x10\xf8\x50\x51\x21\xfa\x15\xa4\x2c\xc4\x6e\x59\xd9\x15\x5c\xfd\xd6\xee\x88\x25\x42\x10\x21\xe7\xff\x5e\x29\x7d\x9b\x4c\x97\x56\x4a\xa0\x49\x83\xe7\xef\xed\x6c\x33\x3d\x72\x2e\x79\x35\x60\x21\x7e\xf7\xc2\xc0\x85\x57\x87\xcd\xa0\x9c\xb7\x4a\x2e\x0a\x6f\x42\x06\x4b\xad\xf6\xa5\x1f\x53\x0d\xd0\x8e\xc7\x7e\xa4\x3c\x63\xe8\xcf\xf9\xa5\x51\x6a\x99\x8d\xcb\xc7\xe4\x89\xec\x3b\x21\xa2\x48\xa2\x75\x3c\x75\x83\xbe\xd9\xfd\x13\xff\xf9\xb9\x52\x17\xec\x46\xc2\x8d\xec\xf3\x95\xc5\x24\x16\x51\x25\x76\x03\x47\x60\xa8\x4d\x56\xd2\x27\x1a\x9d\x5e\x72\x6f\x8e\x94\x1a\x1e\xd5\x4d\x33\x4c\x70\xf2\x38\xb2\x1f\x7d\x6f\x4d\xbf\x58\x13\x4d\xbe\xa6\xde\x60\x58\xcd\x91\x9b\x19\x0a\xdb\xb5\xe6\x6b\x2e\xe7\x28\x03\x57\xeb\x71\x2c\xe5\xe7\x6b\x73\xdb\xa6\xbd\x2e\x9a\x7b\x5f\x3f\x38\x91\x6c\x8b\x23\x69\x93\xbb\x0a\x54\xf5\x68\x4f\xca\x0f\x2e\x5b\xc4\xd0\xfb\x03\x8b\x08\xe2\xd8\xd2\x33\x6c\x62\x6c\x29\x6a\x76\x2e\x16\x78\x50\xc8\x83\x75\x44\x19\xb7\x8f\x04\x55\x6e\xb5\x9a\x91\xfc\xf9\x60\x68\x09\xa5\xc5\xe6\x33\x4e\x24\x0c\xab\xd8\xf2\xef\x20\xa6\x7d\x01\x65\x7c\x11\x29\x7c\x1d\x46\xf8\xea\x6d\xdf\x90\x7c\x2f\x90\x73\xc4\x95\x5e\x5f\xe6\x68\x78\xf3\xc6\x7d\xad\x06\x7b\x7d\xd3\x64\xaa\xfa\x27\x97\xab\x51\x21\xee\xb0\x6d\x8e\x35\xfd\xab\x98\xa2\x39\x4a\x10\x6c\x9b\x8f\x4e\x25\x51\x35\x4e\x49\xd2\xad\x98\xc8\x69\x3b\xa2\x68\xb1\x9d\xc5\x20\x42\x68\x24\xd1\x2a\x26\xdc\x90\xa2\xe3\x20\x6f\xb3\x95\xc3\x11\x4e\xe4\x34\xaf\x6b\x80\xd0\xd3\xdd\x47\x16\x2b\x37\x70\x26\x96\x5c\x9a\x51\x33\x81\x75\x07\x80\xf5\x78\x84\x4a\xb6\xf3\xd4\xa4\xc9\xf6\xce\x1d\xb7\x98\xb9\x8b\x18\xb6\x31\x7c\x9e\x88\x9c\xc2\x5e\xf9\x14\x02\xb9\xaa\x63\x06\xac\xb4\x7f\x07\x11\x76\x9b\x3d\xa0\xc3\x5f\xb6\xb1\xbe\x6f\xab\x16\x00\x9b\x5a\xa6\x60\x3b\xe7\x1c\x0d\x1c\xb2\x1b\x39\x73\x23\x43\x33\x27\xb7\x4d\xec\xd4\x08\x73\xfe\x08\x31\x6e\xbd\x89\x7a\xc5\xe8\xa8\x60\x11\xc8\x13\x89\xd1\xc1\x8e\xc5\xec\xa2\xad\x4b\xba\x7f\x67\xce\x33\xa3\xd5\x0d\xc6\xf2\xac\xac\xad\x0b\x19\xae\x72\x80\x22\xce\x60\x37\x38\xd4\x59\xc2\x51\x2e\xd1\xaa\xc4\x44\x5c\x7c\x7e\x5d\x11\x71\x1c\xba\x6c\xd9\x12\x93\x74\x7a\xcb\x66\x99\xa4\x53\xa6\x29\x74\x45\x1c\x77\x55\xf0\xdb\x7e\x8b\x8b\xae\xce\xc4\x66\x4c\x4e\x64\x85\x89\xbd\x1d\x40\x4f\x64\x3f\xe3\x06\xcd\x90\xb5\xdb\x6f\xc8\xcc\xbb\xc0\xeb\xda\x39\xb5\x5c\xef\x53\x31\x7f\xa5\x04\x86\xba\x04\xc5\xb6\x81\x3c\x26\xda\x12\x8d\xf0\xd2\x34\x2c\x77\xe0\x3a\x0e\xef\x18\x8d\x71\x9d\xde\x2c\x55\x3a\x87\x19\x13\x7d\xcf\xae\x41\xc6\x04\x3a\xd3\x17\xd7\x37\xc4\xf1\x0c\x77\xfc\x6e\x47\x32\xc6\x7b\xa8\xe0\x08\xad\x90\x0c\x7c\x34\xbb\x95\x30\xd8\xbe\x7f\xfc\x9f\x6e\xbd\xb5\x59\x57\xb9\x6d\x14\x66\x34\x2f\xec\xa1\x6e\x93\xf0\x15\x6e\x59\xbb\x7b\x13\xdc\xbb\x7a\xdc\xb6\x7b\x7d\x96\xbc\x65\x6b\xef\x1d\xb1\x76\x6f\xc3\x5d\x13\x3e\x0d\x44\x60\x9b\xa3\xec\xe4\xdd\x86\x6a\xca\xd0\x42\xe9\xd3\xc2\x16\x28\xe7\xcb\x50\xac\x25\x4d\xd1\x97\x21\xc4\x3c\xf4\xe9\x9a\x8e\xda\x11\x95\x04\x71\x3b\x82\xf2\xcd\x4e\x54\x0b\x92\x72\x24\xfd\xd6\x51\xb1\x22\x98\xec\x67\x32\xe5\x2e\xc0\x4e\x0e\x9e\xf4\xb6\xf7\xe3\xad\x24\x9e\xac\xe0\xcd\x11\x39\x05\x95\xa3\xb3\xab\x95\x2e\x9b\xea\x1f\xd2\x40\xeb\xdd\xfa\x2e\x00\x8d\xe1\x4e\x4a\xe2\x88\xbe\xf5\xcd\x14\xcb\xcd\xfb\x40\x26\x35\xbe\xa6\x0c\xad\xed\xfb\xe3\x36\x9e\xed\x4c\x4f\x02\x87\x8d\xb3\x42\xac\x6b\xbc\x9a\x3d\x0a\x81\x79\xed\x22\x1d\xcb\xc4\x96\x54\x78\x1b\x8e\x9c\x2f\xb9\xde\xed\xf8\xe8\x96\x3e\x7b\x7a\x5f\xf4\xb8\x7c\xbf\xad\xbf\xc1\x31\xbe\xe8\x77\x65\xcf\x97\x9c\x73\xd8\x85\x7e\x9b\x40\x58\xfb\xba\xa0\x61\x6e\x7a\xc2\xa0\x6d\xc7\xfd\x44\x26\x25\x9d\xb3\xa9\xc8\xee\x25\x7e\xb2\xf2\xd2\xa0\x96\x28\x26\x68\x5b\x44\xac\x8e\xc2\x30\xcd\xbb\x5d\x19\xfd\xb9\xb8\x74\x41\xb8\x05\x56\xe1\x4d\xc7\x3e\xe6\x69\xe3\x32\x0c\x1f\xe7\xb2\x9a\xb3\xca\x00\x72\xad\x95\x8e\x5c\xf0\x12\x4a\x2d\x19\xc4\x19\xd3\xa0\x9a\xf3\xe5\x06\xf5\x15\x2b\x08\xaf\x4b\x68\x70\x16\x76\x27\x07\xcd\x53\xcb\xb7\x36\x35\x9f\x24\x05\x48\x4b\xed\xa9\x4f\xa9\x28\x7a\x6f\x5d\x5f\x4e\xb5\x51\xbd\x93\x43\xd0\x6d\x20\x76\x41\x02\x17\xd4\x79\x02\x55\x09\xe2\xdb\x3a\x83\xc3\xbf\xa0\x6e\xb4\x3b\x15\x0d\x2a\x8b\x0a\x8e\x9b\x8c\x30\x1e\xbd\x58\xa2\xee\xaf\x94\x91\x8c\x03\x67\x06\x4c\x88\x46\xea\x6d\xed\x0d\x78\xec\x9d\x70\xf0\xb8\x3b\x91\x79\x7e\x22\xdd\xb0\xdb\x0f\x35\x3c\xb7\x71\xb9\x6a\x70\x1c\x50\x14\xcb\x1a\x7a\xd4\x1c\x8e\xaa\x6a\xa5\x5b\xc4\xba\x52\x7d\x07\x8a\x15\x43\x02\x8b\x35\x51\xb9\x9b\x32\x55\x21\x36\x6e\x00\xa2\x18\x40\x9a\x43\xc6\x1a\xf2\xf7\x44\x4c\x47\xa5\xfa\xfe\x16\xf2\x9d\xb5\x0b\x77\x86\xa4\x21\xe8\xc8\x9e\x08\x1d\x5c\x13\xbf\x20\x16\xce\xaa\xfc\x00\x6d\x00\xe1\x16\x69\xb8\x0c\x41\x0a\xda\x03\xc1\x39\x32\x23\x08\x04\xd3\x05\x08\x52\x0f\x02\x55\x80\x40\xe4\x10\x04\xde\x80\x8c\xdc\xfd\x07\x33\xe7\x70\x79\x8b\xe2\xa2\x1c\x0d\x1a\xcb\xdc\x12\xa4\xdd\xa9\xac\x72\xfa\x85\x41\xfb\x7c\x24\x05\x59\xe1\x85\xea\xee\xc9\x19\x9b\x95\x96\x27\x01\xcf\x58\x8c\x38\xeb\xaf\xd2\xf5\x2d\xc0\x14\x08\xc4\x64\x36\x19\x4c\x49\x19\x79\xde\xf2\xd9\xbe\x86\xe6\x76\xc9\x9a\x21\xe7\x7d\x24\x32\xd9\x06\x82\xcf\x0e\x1d\x03\xcd\x7e\x79\xe4\x98\xed\xd6\x81\x3b\x2d\x41\xc3\x62\xf8\xdf\xea\x0e\x62\xd0\xf6\xee\x54\x91\x08\x66\x2b\xbb\xe3\x4c\xba\x2b\x1d\xf2\xd6\xca\x39\xfa\xd4\xd6\x96\x66\xb1\xd2\xdb\x05\x30\x14\xbb\xf7\xf6\x04\x6a\x6d\xda\xab\xd9\x3b\x6a\xaa\x57\xd6\x1a\xb9\xc7\xab\x48\x13\x93\x27\xe6\x36\x8d\xdb\x7e\x93\x57\x7b\x3b\xaa\x71\x2e\x50\xc3\x60\x85\xfe\xeb\x73\x92\xd5\x3e\x51\xb0\xd3\xe8\x14\x4e\x47\xf5\x63\x89\x52\xc7\x72\x9b\x56\xfb\xb3\x88\x88\xef\xe3\x54\x66\xf2\x3d\xc4\x11\x0e\x05\xfc\x21\xf7\xde\x60\xeb\x8a\x50\x2b\xf9\xed\x05\x80\x72\x9a\xe2\x89\x99\xd2\xa6\xe6\xab\x38\x9d\xb0\x68\x27\xa8\xc8\xca\x73\x73\x30\x8d\x02\xa8\xfd\xa7\x80\x4a\x96\x8c\xeb\x4b\x37\xfc\x52\x79\x56\x16\x6d\x0e\xa3\x3c\xdd\xd8\x1b\x48\x0d\x64\x5f\xdf\xf9\xb2\xc6\x52\x4b\x7a\x0b\xa8\x1d\x96\xb5\x62\x5f\x41\xdf\xab\xc2\x9f\x15\xec\xdd\xf1\x39\x91\x50\x3b\xcb\x40\x7a\xf0\xb7\x0c\x7a\xaa\xa3\xc6\x69\x78\xcb\x50\x82\x17\xda\xd7\x8e\xa2\x7a\xe6\x82\x81\x35\xea\x6d\x28\xf3\xee\xb6\x63\xf3\x02\x0e\xee\xb8\xce\x14\x1d\xc5\x88\xf4\xf5\x7a\x2a\x80\xb9\xed\x60\xa7\xa2\x17\x1f\xed\x2b\xca\x07\x60\x48\x8b\x02\x9d\xdf\x7e\x50\x5b\x6d\x1f\x4e\xfc\x41\xed\x0b\xc9\xde\xed\x69\x0c\x83\x00\x16\x76\xeb\x63\x8b\xd8\xda\xb1\x5d\xe0\xde\x2f\xf8\x0d\xb2\xed\x97\xe9\x72\x24\x27\xba\x66\xc4\x5b\x19\x93\x3b\x52\x08\xd2\x4b\x2d\xcd\x6f\xee\x51\x79\x7f\x90\x66\x4f\x65\xf5\x64\x02\xa2\x55\xba\x3e\x72\xfa\x55\xe7\x9c\xd1\xd5\x81\xc7\xe4\xa5\xa0\x5f\xd4\x5e\xa6\x04\xd9\xd4\xaf\x85\x16\xbe\x7b\xac\xaa\x9e\x6f\x20\x69\xc2\x51\xcc\xb3\x63\xe9\x5b\xbe\x99\xa1\x82\x14\xa4\xfd\x79\xf9\x7f\x00\x68\x65\xdc\xf4\xc9\x14\xe4\x9e\x8b\x95\x8b\xa3\x81\xbe\x26\xa5\xe9\xa8\x9c\x8e\x2a\x97\x0c\x78\xb8\xfa\x13\x80\x12\xac\xa2\x0d\xac\x41\x5e\xcc\x0a\xd0\x8a\x00\x5a\x8d\xf7\x4d\x38\x40\xba\xca\x3e\x0f\x47\x67\x6c\x8f\x80\xb4\xc0\xf3\x7c\x37\xa7\x34\xd1\x95\x6f\xa1\xf1\x89\xaa\x66\xc9\x0b\x18\xdf\xf9\xdf\x00\x63\xc5\x4c\x4f\x41\x13\xd2\xa8\x8f\xd8\xed\x5a\x80\xe2\xc5\x95\xa8\x62\x0d\xde\xb2\x62\x6f\x5f\x27\x87\xff\x7f\x5a\x27\x81\x1f\xfe\xd2\x4a\x71\xcc\xc4\x17\xd6\x49\xa8\xec\xff\xc0\x4a\x29\x8f\x23\x1e\xb7\x06\xc5\x2b\x93\x6a\x11\x95\x08\xba\x6a\xda\xcf\x39\x31\x74\xdc\xfc\x36\x36\xb7\xb1\xc2\xdb\x0b\x7e\x93\x18\xb8\x4c\x97\x89\xb1\x9d\x48\x1a\x76\x7a\xf5\x62\xbc\x56\x8c\xbb\x62\x56\x80\xb4\x25\x27\xd3\x52\x84\x7c\x77\x5b\x44\xbf\x26\x05\x2b\xe3\x50\x8e\xbd\x58\x19\x45\x34\x89\xee\xba\x6b\xf4\xfc\x95\x3d\xbc\xa0\x98\x34\x8e\x09\xef\xb1\xe8\x6e\x44\xc1\xf8\xcb\x46\x8b\x46\x9f\xee\xc5\x10\x6e\xd7\xd9\xca\x29\xca\x0d\x1f\x25\x3a\x7f\x6c\x64\x36\x53\xeb\xf4\x74\x89\x0e\x20\xaf\xa4\x0f\x55\x55\x1a\x94\xba\xb0\x15\xaf\xe4\xe4\xa3\x9c\xc6\xf1\x9b\xfe\x82\xbc\x92\xf0\x51\xde\x16\xf4\xe4\x99\x71\x87\x14\xde\x74\xf9\x61\xdd\x26\xc1\x55\x83\x8e\x11\x83\x1c\x9e\x39\xe3\x7c\x21\xe7\xf0\x5e\x5a\x2a\xf8\x29\xb8\x27\xe0\x3d\x37\xee\x5f\xc8\xc9\x34\x8e\xdd\x54\x0e\x29\xe6\xae\x71\x1f\xb6\xe4\xb0\xe9\x28\x78\x8b\x7d\xfd\x7b\xb9\xdb\x75\x3f\x39\x57\x06\x39\x6f\xb3\xbd\x7e\xf6\x2f\xdb\xf5\xe7\x14\x1e\xca\xa2\xcf\xe8\x61\x23\xab\xf1\x0e\x7f\x97\x6c\x32\x2d\xde\x3e\x48\xd6\xed\xfe\x2e\xe3\x78\x78\x77\x32\x2c\x92\xc9\x10\x0e\x06\xf4\xfe\x00\xfe\x70\x0e\x0a\x3e\x39\xa2\xf0\xab\x83\x48\x48\x80\x6d\xe1\x8d\x62\x87\x35\x4c\x06\xf9\x57\x39\x71\x7c\xb0\x03\xff\xc3\xfe\xfc\x6a\x47\x1f\x22\x34\xb6\x00\xe0\x83\x1c\xff\x2e\xab\x9b\xb9\x8c\xa0\xb2\xdb\x0d\x92\xe7\xff\x06\x7c\x10\x28\xbf\x48\x26\xcb\xdd\xfd\x5b\xe5\xd4\xc2\xc5\x7c\xb5\xd2\x9b\x3f\x64\x9e\x88\x29\x49\x29\x58\xc1\x16\xd7\xd4\x5e\x38\x23\xac\x1a\x77\xfb\xcc\x5d\x77\xc6\x49\x46\x93\xa6\x8e\x2d\xf3\xd7\xa4\xa1\x86\x08\xc3\xf2\xca\xcf\x06\xdc\xac\xf2\x36\x55\xe4\xfb\x79\xe9\xb8\xa2\xc9\x2f\xa3\xce\xc8\x0a\x22\x4b\x6d\x5b\xbf\x49\x22\x70\xac\x29\xcc\x20\x5c\x8d\x53\xd1\x39\xcd\xf6\x33\x85\xab\x55\x69\x9e\x92\x00\x4b\x8b\x29\x9d\xb3\x90\xfe\xe2\x71\x5e\x19\xaf\x0b\xad\xb4\x70\xff\x34\xe7\x8c\x82\x66\x83\x91\x2e\x03\x30\xea\x5e\x8f\x22\x51\x2a\xa7\x52\x4f\x47\x7b\x51\x75\x2c\xde\x01\xae\xf7\xe2\x8a\x94\x41\xc3\x4b\x0b\x18\x5d\xe1\xdb\x43\x44\x2b\xec\xcd\x14\x0f\x6b\x74\x11\x15\xbc\x28\xa2\x75\x73\xae\xd1\x20\xa7\xcc\xa0\xf4\xd7\xda\x42\x17\x45\x44\x5b\x37\x42\x98\xdd\x5b\x7b\x92\xea\xe2\x94\xc3\x35\x63\xa8\x58\x14\x17\x98\x74\x5b\xc4\x0f\x1c\x2e\x2d\x61\x3f\x00\xcd\xca\x70\x69\xf7\xf5\x48\xf6\x7a\x94\x57\xdc\x97\x9c\xad\xb7\xa5\xbf\x45\x4c\xd6\xc2\x12\xd0\xd0\x3d\x00\xd7\xa3\x93\x16\xce\x5f\xe8\xa8\x56\xad\x54\x4d\x41\xd9\xb5\x83\x5b\x4a\xb3\xad\x27\x86\x89\xd4\xe0\x1f\x9d\xa7\x42\x0b\x0a\xa8\xcf\x92\xcb\xd6\x84\x10\x88\xec\xd6\xf2\x95\x19\xe9\xe2\x54\xba\xd0\x47\x68\xc9\x51\xf1\x10\xf4\x5f\x6b\x61\x94\x5a\xd5\xe8\xb5\x2c\xfd\xd0\x70\xe3\x6a\xcb\x22\xdd\xf7\xee\xa9\xd2\xab\xc7\xa9\x49\xdb\xc6\xd7\x62\xf4\x16\xb2\xc7\xb1\xa9\xc6\x50\x08\xc9\x79\x1d\x68\xef\x05\xbf\xfa\xca\x8a\x2b\xa5\x3c\x11\x73\x2f\x7d\x91\xd9\x5a\xc6\xfb\x49\xc4\xd0\x04\xcd\xba\x4e\x8b\x71\xba\xa7\x6a\xc7\x2a\xc5\x6c\xdf\xdc\xa6\x6b\xeb\xd2\x9e\xa4\x6c\xb3\x3b\xe3\xba\xb6\xec\x12\xbf\x34\xb2\xbb\x45\x98\x28\xbb\x74\xde\x85\x21\x26\xda\xbe\x3e\xae\x3b\x93\xef\x2d\x21\xfb\xbd\x65\xed\x3c\x15\xcb\xcf\x16\xb3\xdf\xdb\x96\xdc\x52\x9d\x7e\xae\x98\xfd\xde\xd6\x9a\x2f\x91\x08\xed\x60\xc5\xd3\x55\xdb\xba\x55\x6e\xb1\x5a\x54\xd1\x5f\x8b\x35\xc7\xc2\xef\xde\xbe\x3c\xe2\xa9\x9e\x9d\xbf\x49\x75\xba\x6a\xf3\xd7\x6a\x9b\xf6\x46\xa9\xc6\xb2\x6a\x7c\x75\x33\x98\xca\x79\xaa\xe7\x0f\xb5\xba\xca\xb8\x7e\x22\x2f\xf7\x0f\x0b\xab\x7e\x2a\xa5\x9f\x45\x70\x4c\xde\xed\xa2\xb7\x3c\x9d\x99\x43\xbc\x19\xc1\x32\x90\xc5\x27\x8b\x3f\xe6\x9b\x99\x45\x91\xee\xeb\x11\x7a\xcf\xdd\x9a\xe7\xa8\xf5\x0b\x86\x42\xfb\x8c\xc1\x68\xdb\xb7\x22\xea\x64\x0e\xc1\x95\x31\xd5\xb0\xe2\xfa\xac\x9c\xff\x8e\x29\x48\x6f\xf5\x12\x7c\x1f\x2f\x6e\x0f\xa9\x73\x0c\xed\xb3\x97\x2c\xc7\xf6\x03\x33\x04\xe3\xd4\xa2\xc8\x8f\xfe\x85\xe5\x65\x7d\x03\x50\xfb\x12\x95\xbe\xaf\x90\xe8\xa5\x9a\x54\x49\x5e\xc5\xe1\x8f\xe7\x30\xe7\x7c\xfd\xea\xff\x58\x9f\x5b\xb2\x19\xb2\xcd\xed\xf7\xff\x35\xc3\xe1\xd7\x86\xcb\x5b\xaf\x3e\x4b\x75\x2d\x18\x0e\xb7\x03\x72\xbe\x9a\xad\xd8\x99\x8f\x8d\x26\x4e\xc7\xe2\xc3\x12\x19\x2d\x5a\xb7\x57\x61\x38\x47\xee\xfe\xf7\x5f\xd9\x37\x77\x21\x8a\xca\x80\xc9\x77\xff\xca\xbe\xb9\x83\x49\x55\x9b\xb4\xac\x4a\xe8\xb9\x9c\xa9\x39\x7f\xf7\xf6\xc5\x23\xb5\x5a\x2b\xe9\x2e\xe2\x29\x2b\xf8\xc7\x77\x83\xbb\x67\x02\xa2\xff\xaa\xd6\xfa\x8f\x6f\x1f\x60\x62\x52\x4b\xbc\xf7\xdd\xdd\x33\x88\xee\xd4\xd3\x1e\x61\x46\xa8\x27\x0e\x6c\xc6\x5e\x2d\xed\xfb\x87\x98\x71\x52\x4f\x7c\x8c\x89\xd3\xc8\x5b\xaa\xec\x9b\xd3\xe3\xc5\x49\xf5\xdb\x9c\xf0\x36\x25\x49\x35\xb3\x92\x65\x11\xda\x6e\x66\x09\x41\x03\x43\x60\x2c\x04\x56\xb2\x57\xa4\x62\xe3\xac\xd8\x64\x3a\x9a\x15\xe7\xa6\xf5\x48\x46\x96\x79\xf1\x9c\x4b\x1c\xbb\xaa\x0b\xa1\xd8\x0a\x92\x93\x69\x94\x20\xe7\x02\x95\x1a\x4c\xfd\x5c\x05\x4b\x3d\x76\x4a\xd0\x31\x9e\x79\xaa\x17\x47\xaf\x43\x47\x12\xfc\x5c\xc4\xaa\x40\x4e\xe8\x97\xa3\xd7\x87\xfd\x22\x14\x05\x9a\x05\xfa\xb0\x12\x99\x26\x9c\xf6\x22\x16\xf5\x70\x6a\xdd\x51\x1e\x86\x48\x52\xfe\x7a\x85\x38\xa2\xb9\x58\x10\x5d\x32\xd5\x41\x46\x8a\xfe\x23\xa2\xa3\x83\x61\xd7\xdd\xa8\x6c\x3b\x12\xb4\xcc\x78\x9a\xde\x63\xe4\x60\x88\x3e\x08\x45\x81\x71\x44\xc7\xd1\x38\x4a\x6c\xa5\x3d\x5d\xd8\x6c\x54\x16\xd8\x52\x87\x7b\x6c\xbd\x89\x42\xc6\x26\xd3\x7c\xa9\xab\xaa\xf5\xec\x96\x93\x9b\x5a\x31\x7f\x33\xcc\x62\xb3\x5c\x88\xe5\x92\xcf\x13\x03\x9a\x5b\x98\xf0\x39\x06\x5a\xab\x67\x0e\xf2\x7c\x0e\xb5\xa6\xb0\xc0\xbe\x2e\x3a\x14\xc3\x4b\x12\x48\x33\xc9\x5d\xd7\xd9\xa8\x29\xf8\x72\x36\xe6\xb1\x98\xe1\x6a\x1d\x75\xf3\x56\xcf\xaa\xf1\x38\xf6\x96\xb8\x4e\xe0\x58\x68\xb6\xd4\x30\xdf\x5f\xd7\xc1\x22\xaa\xac\xbc\x1a\xdf\x0a\x03\xbc\x39\xb0\x79\xec\xb0\x6e\xbb\x9b\xb0\x8b\x4a\xbb\xae\xe9\x9f\x9c\x3c\x7a\x70\xf8\xe8\xc9\xcb\x93\x13\x5a\x99\xa5\x73\x5d\x78\xf6\x57\x6e\x78\xcc\xb8\x39\x16\x2b\xae\x36\xa6\x73\x9e\xba\x60\x3b\xa7\x9c\xcb\x4e\x20\x42\x15\x3e\x7e\xd5\x5a\xc1\x6c\xc9\x53\xfd\x85\x2a\xd0\x11\x56\xb3\x73\x0d\x67\x9a\xad\x74\xd9\xa7\x1b\xed\x3d\x15\x2e\x35\x63\xac\xec\x4b\xd8\xe2\x65\x0a\x31\xe0\xc2\x9e\xb9\xac\xe7\x7a\xb7\xeb\x5e\x5a\x5e\x77\xbf\xd0\xa5\xae\xd4\x04\xcd\x2a\x2a\x61\x7e\x2f\x35\x26\x79\xc9\x98\xd7\x42\x00\x5f\xea\xaa\x24\x50\xcb\xd5\xc8\xe1\x25\x79\x2b\xa4\xe7\x2d\xa8\xfd\x0c\x4d\xf1\x7c\x17\xe2\x98\xd4\x7a\x47\xa1\xbd\x44\x15\xa8\x71\x4c\xce\x34\xab\xa6\x38\x5d\xc0\xa9\x86\x2b\xcd\x26\x53\x78\xa0\x59\x77\x08\xd7\x9a\x1d\x0c\x4b\xc8\x3e\xb1\x93\xf5\x40\xc7\xf1\xa9\x8e\x63\xe2\xb2\x9c\x86\xd8\xe3\xe3\x2b\xcd\x4e\x75\x50\x1d\x5e\x69\x9a\x60\x69\xb8\xd2\x45\xb8\xb2\xd7\x9a\x54\xed\x41\xec\x2b\x62\xdf\x07\x3a\xf8\x62\xdc\x68\xf2\x44\xd3\x91\xad\x7a\x30\x2a\x75\xae\x45\x1d\x23\x3e\x72\xf2\xf3\xa9\x66\x57\xbe\xaf\xa3\x5e\xef\x5a\xdf\xe7\x23\x7a\x8a\x3d\x9b\x5c\xeb\x69\x5f\x6f\x24\xa1\x23\xd7\x81\x4a\xf1\xfc\x54\xbb\x00\xd4\xae\xef\xd5\xe5\x2e\x16\x16\x22\xac\x0e\x93\xb0\x85\x2a\x69\x3e\x5e\x95\xcb\xbc\xb2\x2b\xe6\xcc\xae\x98\xb6\x62\x0d\x08\x43\xb3\x1a\xbb\x32\xce\x74\x19\x15\xba\xbe\x58\xce\x6a\x8b\x65\x7f\xa9\x9c\xe9\x86\x6b\x4b\x4e\x6a\x0e\x2e\x47\xba\xe2\x59\xbb\xd8\x48\x66\xc2\x85\xe5\x3a\xbd\x61\x3c\x3f\xaa\x62\x25\xbd\x91\xb5\xd8\xec\xbe\x4c\x35\xa2\x4f\x59\xb8\x8a\x00\x4e\xec\x1c\xe2\x5e\x7c\xa4\xd9\x89\x86\xbf\xf1\xf7\x0d\xfe\x5e\xe0\xef\x5b\xfc\x3d\xc6\xdf\x17\xf6\xd7\x5d\x31\xa6\xd9\x99\xec\xaf\xb9\x5e\x28\xbd\xb2\xcc\xf7\x6e\xb7\xcd\xe1\x8e\x66\x2f\x75\x5f\xaa\xab\xdd\xee\xa5\xee\xaf\xd4\xa7\xc3\xf0\x98\x85\x27\x15\x1e\xae\xf8\xe9\x85\x30\xf8\xb6\xcf\x8f\x5b\x5c\x62\x09\x23\xed\x9f\xb9\x7d\x41\x3c\xb6\x3c\xd4\x2c\x7c\xc3\xf7\xc7\x9a\x6d\x83\x79\x6f\x4b\x8c\xb2\xdb\x15\x34\x07\x43\x5c\x07\xfb\xba\xb6\x8a\x8a\x61\x38\x92\xf7\xf7\x4f\x0a\x7a\x3d\xca\x27\xf2\x60\xd8\x38\x2a\xb8\xf2\x71\x05\x6d\x93\x7e\xee\x28\x46\xe2\x29\x56\xef\x6e\xf7\x40\xef\x76\x37\x9a\xbc\xd6\x34\x07\x23\xcc\x92\x27\xd1\xa9\x13\x4b\x22\xf0\x0f\x49\x77\x00\x5c\x5e\x26\xdb\x1c\x52\x7d\x76\x99\x4c\xa6\x50\x5c\x8a\x16\x85\xc7\xcc\x7e\x56\x32\x79\xa4\x21\x9d\xcf\x5f\x8a\xcc\x70\xc9\x75\xf2\xb7\x06\x25\x67\x3c\x79\xa3\x41\x2d\x16\xc9\x85\x06\xe7\x36\x57\x64\x78\x1b\x52\x1e\x2c\x97\x21\x31\x4b\x8e\x35\xf0\x95\x30\xc9\x0b\x0d\xa7\x42\xce\x9b\xf2\xee\x1e\x76\xf7\x01\x99\xfa\x3e\x73\x88\xc7\x56\xb9\xcd\x2f\x87\xd9\xd5\x7c\x5f\xcc\x8a\xee\x46\x39\xcc\xce\xe7\x42\x7f\x5d\x03\x98\xb5\xb5\xfa\xcd\x2a\xcd\x2e\x5a\x8c\x3e\x07\x39\x9c\x6b\x23\x56\xbc\x65\x2d\xf4\x07\x83\xe1\x37\x77\xfc\xae\x7b\xa9\x29\xc8\xca\xf5\x47\x2e\x92\x68\xf5\xfd\x1f\xc3\x6f\x86\xfc\xa7\x32\x1e\x78\x1c\x13\x79\xc0\xcc\x64\x30\x05\xa2\xed\xc3\x70\xea\x9d\x37\x0e\x0e\x40\xf7\x98\xcd\x4c\x61\x22\x41\x4f\x73\x58\x2f\x53\x63\x77\x46\x65\x7e\x35\x5f\xf2\x34\xe3\x76\xe6\x9c\x7e\xdf\x3e\x6d\xd6\xf5\xce\xee\x6d\x80\x83\x43\x4d\xef\x0e\xf9\xb7\x79\x0e\xef\x9a\x9a\xc9\x5b\x18\x4b\x17\x0c\xdc\x71\x1a\xba\x6f\xd4\xbb\xf5\x3a\xdc\x93\x62\x05\xf8\x7a\x4a\x71\xcb\x22\x14\x57\x69\xe9\xa9\x73\xf2\x7c\xda\x64\x49\x6a\x21\xc3\x3f\xf3\xc9\x78\x6f\x01\xc6\xc1\x79\x0a\x59\xe9\x82\x49\x0a\x56\x4e\xc1\x90\x22\x4c\xe3\x73\xb6\x56\x32\xe3\x4c\x81\xb1\xdc\xf3\xb5\x50\x19\x2e\x00\xe7\x9e\x60\x94\x65\x76\x5b\xa2\x5c\xad\x78\x96\xa5\x67\xdc\x79\xbf\xfa\x17\x90\xe9\xca\xa7\xd8\xa7\x5a\x34\x5e\xe7\xd4\x55\x26\x80\x53\xc5\xf8\xdc\xf8\x0c\x0b\xb1\xe4\x87\x45\x15\xe1\x0d\x96\x42\xf2\xc3\x4a\xee\xf2\x1d\x66\x6a\xb9\x59\xc9\xea\xc7\x6a\x0a\x64\x26\x9d\x5d\x24\xc1\xac\x64\x76\x11\xe6\xdc\xe7\xb4\xcf\x60\xc1\x12\x12\xe6\xdc\x5d\x5d\x5d\xee\x02\x43\x0b\xc0\xe6\xf0\x51\xb3\x49\x94\x9e\xf1\x08\xa2\x74\x63\xce\x95\x16\x9f\xbc\xb3\x53\xe4\x2f\xa3\x38\x28\x6e\x3c\x0a\x09\x78\xe9\x11\x44\xdc\xa4\x67\xf6\xef\x7a\x2d\x34\xcf\x22\x88\x16\x5a\xad\x22\x88\xce\x55\x66\x22\x88\xc4\xe2\x60\xa5\xe6\x62\x21\xf8\xfc\x20\x13\x72\xc6\x5d\xda\x46\xee\xa5\x2e\xd3\xcc\x14\x79\xed\xbb\x9a\x85\x3e\xac\xd2\xeb\x83\x85\xd2\x57\xa9\x9e\x67\xee\xce\xa5\xeb\x9b\x83\x66\x47\x35\x5f\x70\xcd\xdd\x25\xdb\x46\xdf\x1c\xa0\x1d\x9a\x0f\xfa\x76\x90\x62\xd4\xb7\x29\xbc\xd2\x0c\xc5\x9e\x7d\xad\x0d\xa1\xe3\xc6\x81\x82\x01\xce\xee\x92\x55\x26\xf8\xce\x68\x31\xe7\xd2\xd0\xbb\xc2\x5d\x59\x59\xaa\x58\x8a\x90\x72\x76\xbf\x17\xb7\x71\xd4\x6f\x9d\x8d\xd2\xa8\x72\xac\xa0\x4b\xc3\x8a\xc2\xc5\x1d\x8d\x53\x2d\xcf\xf6\xc0\x18\x2d\x4e\x37\x86\x93\xe8\x5c\xf3\x45\x04\xda\xe2\x0d\xd9\xb7\x2f\x14\x6e\xcd\xb2\xb5\x4f\x89\xcb\xe6\x8e\x90\x66\x6a\x99\x78\x4b\x93\x99\x5a\x8e\xcb\xc7\x52\xf6\x4d\x9c\xd8\x6e\xf1\xbe\x9d\x2c\x5b\x5c\x65\x96\x79\xb5\xe2\x6b\x62\xdb\xb2\x0f\xe3\xf0\x50\x55\x02\x8c\xcb\x92\x69\x66\xf3\xda\xbf\xb1\xfb\xab\xe4\xfb\x8f\x5a\x03\xb8\x87\x5c\x23\xb8\x89\x2c\xba\xb5\x7d\x54\xda\xc0\x3a\x35\xe7\xf8\x3d\xba\x1b\x31\xc6\x64\x3f\x24\x84\xa3\xd4\x01\x1d\x97\x89\x36\x57\xaf\x7c\x2d\xee\x13\x30\x4c\x07\xef\xd8\xb0\x7a\x3c\xe4\x9a\xe7\xf9\x32\x2c\x03\x94\x85\x39\x1d\x5b\x0c\x9d\x14\x6e\x22\x25\xb8\x50\x2e\x0d\x2f\x71\xec\xba\x8f\x89\xf6\x21\xcf\x09\xdd\xc7\xae\xdd\x41\x0e\x0f\x3f\xb7\xd0\xb6\x78\x81\x4b\xb2\x8f\xe3\x40\x84\x5b\xb4\x26\xd3\x51\xea\x7d\xf3\x50\xea\x6e\xd1\xa1\x58\x06\x00\xdb\xf0\x2e\xd7\x92\xc6\xb1\x2f\x13\xb6\x23\x8b\x7a\x01\xd3\x13\x49\xfb\x46\x3d\x7b\x75\x1c\xe4\x7f\x5f\xd8\xbf\xea\x4a\x61\x0b\x57\x16\xf5\x74\x3d\x87\xaa\xe4\x70\xb7\xf1\xb0\xa8\xa7\x28\x74\x07\x0c\x05\xfb\xf0\x2d\xe3\xb3\x8d\xe6\x11\x85\x72\x37\x28\x75\x21\x38\x4b\xbd\xa2\x60\xd4\xb1\x24\x56\xf3\x74\xde\x42\x45\x1b\x85\x7c\x70\x44\x3b\x88\xb7\xfc\xec\xc9\xf5\x9a\x44\xe4\xbf\x77\xa3\xbf\xfe\xca\xbe\xa1\x04\xaf\x10\xa2\x8c\x4c\xfe\x7b\x34\xfd\x86\x46\x65\x58\x6e\x3e\x9e\xf3\x7d\x70\x4d\xbe\x9d\xd2\x04\xdd\xb6\x3c\x97\x92\xec\x09\xec\xee\x62\x1d\x03\x51\x04\x16\x66\x96\xd5\x24\xf4\xe0\xc7\x1f\xbe\xe3\xdf\xd3\x3c\x4f\x9a\xf3\x46\xb7\xcd\x71\xd4\x8e\x52\xf6\xdb\xa1\xdb\x3c\x87\x67\xad\x97\xfc\xb7\x1f\x52\xd6\x7c\x0f\xe7\xa9\x49\x41\xd9\xa5\xc7\xd3\x39\xd7\xd9\x08\xa7\x27\x1c\x75\xe0\x14\x7a\x2a\xab\x26\xd1\x23\x8f\xa6\x8f\x2d\x9a\x76\x96\x26\xc2\x5d\xfa\xfa\xea\xe5\x73\x63\xd6\x3e\xfa\x16\xda\x99\xf4\x2d\x2e\x0d\x2b\xcf\xbd\x21\x62\xb3\x9b\x0b\x03\x65\xce\x42\xea\x3a\xcd\xb2\x2b\xa5\xe7\x36\x75\xa4\xfa\x0f\xaa\x38\x98\x45\x0f\xd3\x4c\xcc\x3a\x51\xef\xd4\xa8\x94\xa4\xbd\x28\x89\x7a\x33\x27\x89\xe3\xd5\x14\x8c\x64\xcc\xf4\x4f\xd3\x8c\xbf\x7b\xfb\x12\x6f\x3a\xdb\xe8\x25\x64\x71\xdc\xbd\xfb\xdf\x64\x92\x1e\x7c\x9a\xda\x9f\xbf\xe6\x7f\xf5\xfe\x3a\xf8\xab\x3f\xfd\x26\xa1\xe3\xbf\xee\xfe\x75\x37\x20\xdd\x4d\x3d\x4e\x7f\xa9\x5e\x1c\x57\x14\x94\x7f\xdd\xed\x39\xb4\xd6\xb3\x38\x82\x57\x91\xd6\xdd\x9e\x43\x47\x26\x27\x19\x6c\x68\xb2\x41\x0e\x5d\xb8\x6b\x95\x4c\xdf\xdd\x22\x5f\x67\x5f\x60\xa3\xc9\x12\xd0\x15\x3f\x5d\x65\xc5\xc3\x11\xd7\x22\x5d\x8a\x4f\x5c\x53\xf4\x1c\x15\x7d\xe3\xc4\x36\x66\xc2\x13\x88\xbe\x92\x76\x6d\xdc\xa0\x1d\xdc\xec\x3c\x95\x7b\x81\xbf\x45\x1c\x7f\x67\xf7\x4e\x1f\xf3\xa1\x49\x5d\x1c\x13\xbc\x57\x0d\xad\xe7\x36\xd9\x6e\x27\x0a\x3e\xe6\xdd\xdb\x97\x71\x3c\xf0\xf9\x8b\xa4\x52\x67\x66\xb9\x8a\x24\xa2\xb4\x70\xa9\x3b\xe3\xe6\xc1\x72\xf9\xd6\xe7\x7d\xee\xd6\x4c\x24\x64\x47\x8c\xf7\xf6\x9d\x43\x3f\x15\x7b\x28\x33\x26\x55\xfe\x2f\x44\x71\xf8\x4b\x46\x0d\xe3\x6d\x8c\x2f\x5b\x51\xdd\x25\x11\x05\x6e\x71\x9f\xd1\x62\x45\x9c\x5b\xb4\xd1\xe8\x02\xd6\xb8\x55\x0f\xe4\x7e\x36\xdd\x1b\x52\xea\x0f\x6e\x15\xde\xc4\xfa\x51\x17\x75\x73\xfa\x33\x1b\x04\x3b\x27\xfb\x95\x45\x19\x37\x07\x0e\x53\xe0\xe9\xd1\x18\x0b\x8d\xed\x4f\x32\x99\x16\x41\xfb\x27\x72\x4a\x93\xe2\x4b\x2f\x82\x4e\xd4\x93\x89\x44\xe3\x25\x45\x13\x95\x13\xd1\x6f\x85\x16\xa1\x0e\x63\xa0\x63\x62\x6a\xd2\xa4\x64\x2b\x8f\xd1\xa5\x24\x32\xfc\x1a\x8f\x63\xea\x1f\xc6\xe5\x1c\x25\xe5\xe3\x31\xbf\x36\xe0\x26\x36\x09\x33\xec\xdf\xed\xa7\x22\x0d\xf3\xf9\x3d\x9e\xe8\x82\xb5\x03\xcf\xdd\x26\x22\x6f\x3a\x63\x85\x39\x2f\x1c\x69\x2f\xd3\xa5\x98\xa7\x06\xed\x90\x37\xd9\xa8\xab\x77\x3b\x4d\xa4\xaf\x9f\x8e\x0d\x91\x34\xe1\xe4\xa9\x26\x91\xc7\x03\x9d\x45\x2a\x96\x7c\xde\xb9\x12\xe6\xbc\xe3\xb2\xe1\x1d\xdd\x16\x52\xa1\xab\xa1\x76\x70\x97\x74\x05\x6e\x1b\xaf\x43\xc7\x48\x39\x8a\x82\x70\x8e\xb1\x39\xae\xff\xf4\x54\xe9\x9a\xe7\x8c\xb0\x7c\x4e\xad\x59\xcc\x62\xf9\x3d\x03\xd1\x93\x47\xaf\x0f\x0f\x1f\x3c\x7c\xfd\xf6\xf8\xc9\xe3\x08\x75\xc3\x22\xe8\x48\x6d\x6d\x68\xc9\x5f\xad\xcd\xd5\x74\xc8\xcd\x95\xd2\x17\x8e\xad\xb5\xf5\x60\xef\xca\xd2\xae\x70\xd8\xa0\x7b\x46\x23\x91\xff\xd2\x51\x8b\x4e\xd4\x2b\xf6\x6f\x2f\x5a\x65\x1d\x7e\x3d\xe3\x7c\xce\xe7\xd1\xa8\x48\xc7\x56\x5e\x39\xa9\x00\x43\x20\xb7\x7e\xa1\x80\x7d\xe3\x9f\x1b\x55\x0e\xb7\x32\x08\xae\x6f\x0b\xf6\x50\xc3\x9c\x11\x77\x85\xd7\x23\xcd\x2d\x0b\x2a\xd2\x65\xb6\xdb\xbd\xd2\x64\x49\xd1\xb3\xe9\x3a\xd3\x8b\x47\xb8\x01\xac\x44\x31\x5e\x20\x2e\x21\xcd\xf4\xe2\xfa\x9e\x79\x1c\x13\x35\x71\x9f\xdd\x1a\xb7\x9f\xa7\x6c\x8e\xba\x7b\xbb\x9d\xfc\xc4\xb8\x8f\x88\x2d\xe2\xb8\x82\x09\x54\xf3\x90\xa2\x1a\x4f\xa4\x2e\x1b\x78\x69\xb0\xb2\xe3\xc7\x05\x79\xe2\x53\xbb\xda\x1b\xad\xf9\xf8\xfe\x9e\xed\x28\x0e\xac\xf7\x01\x40\x77\x3b\x22\x9a\x89\xac\xdb\xdd\xcf\x08\xf5\x7d\x89\xd1\x14\x45\x2d\xa9\xb1\x73\x4b\x3d\x9a\x85\xc7\xdf\x19\xde\x1d\xc5\x9a\xb5\xa0\x46\x81\xb7\xa9\x5e\x4d\x5f\xc9\xc7\xea\x4a\x2e\x55\x3a\x7f\xa3\xd5\x99\xe6\x59\x16\xc7\xa2\x9f\xce\xe7\x4f\x2e\xb9\x0b\x4b\xc9\x25\x77\x5a\x08\xfc\x1a\x41\x5b\x99\x56\x2d\xad\xcd\xf8\x6e\xdd\xac\x7a\x83\x29\xe5\xd3\x17\xdb\xaa\x57\x81\xae\xc8\xa9\x9c\xf1\x25\x06\x11\x45\xf3\x8c\xf2\xd5\xf2\xbe\x68\x9c\xd5\xf0\x22\x32\x6e\x33\x8b\x3e\x6e\x60\x8b\xcc\xad\x44\x19\xf6\x2b\xad\xdc\x60\xe6\xe2\xcc\xb8\xc8\x0d\x76\xce\xe5\x9c\x68\xa7\x01\x78\xaf\xd9\xb6\xce\xa7\x24\x51\xba\x5e\x2f\x85\x63\xdd\xef\x5e\x1f\x5c\x5d\x5d\x59\xc1\x6f\x75\xb0\xd1\x4b\xc7\x01\xcf\xa3\x8a\x76\xf1\x93\xd7\x61\x76\x9b\x0b\x86\xe2\x9a\xad\x25\x35\x39\x22\xa7\x9a\x68\x24\x32\xee\xd8\x95\xe7\x1a\x7e\xd7\x6c\x9b\xce\xd3\xb5\xe1\x3a\x21\xad\xc7\xe7\x75\x46\xaa\x12\x5b\xfd\xb1\xae\xdc\x01\xe8\x95\x4d\x68\xdd\x70\xab\xd5\x95\x53\x1a\x3d\xc6\xcb\x58\xc9\x73\xcd\x9e\x69\x0a\xcf\x35\x05\x13\x42\x95\xfa\x46\x92\x49\x2b\x07\xf4\x4e\x63\xf4\xeb\xd9\x8c\xaf\x4d\x44\xc1\xbd\xd6\x46\xe6\xf7\x54\xc1\x2b\x1a\xba\xdb\x95\x87\x8a\x85\x01\x8e\x4f\x6c\xbe\x3b\xcb\x8b\xf2\xfd\xa9\x58\xf2\x4a\xee\xa5\x3a\xc5\x13\xc6\xa4\x59\xa3\xb7\x8a\x19\x07\x43\x98\xa4\xf5\x88\xd4\xd0\x31\xf9\x84\x5d\xfe\xe2\xe4\x8f\xac\x34\x98\x71\xc3\x36\x66\x71\xf0\x63\x44\x51\x8f\x53\x08\x34\x8d\x13\xcd\xb6\x5a\xed\x86\xde\xab\x64\xff\xd4\x33\x31\xf9\xb4\x0a\x7c\x4f\xca\x27\x0d\xc6\x67\xdf\x48\x07\x11\x8c\x3f\x47\x5d\xdb\x56\x6a\x97\x3a\x96\x07\x99\x53\xf0\x54\x23\x19\x40\x1d\x55\x27\xd1\xef\x47\x6f\x9f\x1e\x1c\xbf\xfe\xf5\xc9\x61\x04\x75\x3c\x9d\x44\xbf\x1f\x54\xbf\xae\xd2\x6b\x3f\xcb\x2f\x43\x00\x72\xa8\x53\xfe\xd6\xe3\xfc\x9f\xd9\xbd\xc1\x20\x8e\xcd\xfd\x6f\x07\x83\x3c\x1f\xfd\xae\x83\x40\xc1\xb6\x33\xb5\x5a\x29\x99\x6c\xdd\x5a\x4a\xf6\x60\x07\x1d\xcb\xf0\xdc\x5d\x2f\x53\x21\xa1\xf3\xcd\xdd\x6f\xa2\x3c\xaf\x9e\x40\x4f\x22\x87\xe2\x23\xb0\xec\x67\x04\x91\xad\x39\x9a\xd6\x59\xc6\xb2\xc1\x89\x99\xb2\x6d\xee\x51\x7e\x59\xc7\xda\xe9\x8e\xd6\x1b\xfc\xb5\xd0\xfb\x7c\x15\x33\xdd\x47\xcb\x14\xf2\x5e\x17\x71\x4a\x3e\x68\xf6\x7b\xe5\xd4\xef\x0f\xed\x02\x88\x7c\x06\xd3\x21\x56\x7f\xb1\xf0\x5b\x8d\xcf\x89\xc3\x05\xbf\xb6\x8a\x6b\x7f\x38\xef\xaa\x02\x72\xc5\x13\x1e\x54\xf8\xab\xa2\xe7\x9a\x78\xa9\xad\xf8\x6c\x57\x6c\x63\x53\x57\xab\x29\x46\x52\x24\xf5\xdd\x94\xf8\x6a\x8b\x41\x7b\x71\x65\x5a\x4f\xa7\x5f\x9e\x0b\x68\x83\x2e\x44\xae\x95\x1a\x98\x79\x19\x3c\xb5\x68\x97\x4f\x31\xc4\x93\xe9\x7b\xd4\xb8\xdb\x7d\xd0\xe1\x99\x12\x43\x5b\x9c\x4d\x6b\x00\xe3\x05\x60\xdc\x13\xf0\x76\xc0\xb8\x0d\x87\xce\xf1\xd0\x56\xdb\x5a\xbb\xcb\x2a\x7c\xad\x2e\x84\x9f\x2b\x64\xb9\xb2\xe2\xa5\xd2\x5c\x2d\x09\x2a\xef\x9f\xeb\x00\xa5\x50\x5a\x27\x23\x5e\x71\x47\xeb\xf0\x4b\x53\x5b\xce\x19\x9e\x51\x8d\x2a\x61\x33\x26\xd1\x46\x2f\x23\x88\xdc\x54\x21\xb0\x2d\xc2\x8b\x20\xb2\x5d\x88\xa6\xa0\xd8\x24\xf2\xad\x7b\xcd\x6b\xd0\x6e\x46\x53\x10\x6c\x12\x79\x59\x39\x02\x5f\x53\x73\xe9\xd4\x93\x5c\x9f\x8b\x76\x4a\x29\xd5\x66\x73\xe8\x26\x72\xd7\x1f\x55\x58\x24\xdb\xb0\x9b\x3f\xd4\x9c\x96\x5c\x4e\x04\x51\x1d\x33\xf9\x84\x12\x1d\x45\x10\x35\x99\x09\x4c\x6a\xf2\x32\x4e\x83\x5b\xc3\x54\xee\x6a\xfd\x0a\xa2\x72\x79\xde\xf2\xb9\xd0\x7c\x66\xec\xeb\xb9\x31\x6b\x77\x59\x87\x7b\xce\xc2\x4b\x65\xcf\x46\x10\x65\x6a\x76\xc1\xcd\x9b\xd4\x9c\x47\x35\x6b\x1a\x5d\x47\x18\x05\x71\xe6\xce\x18\xc3\xc5\x10\x0e\x57\x74\xdd\xc2\xe0\x6a\x6f\x43\xe3\x49\x0a\x9f\xe8\x29\x1d\xa3\x95\xf5\x4c\xf7\x0b\xdb\x32\x62\x26\x7a\x0a\xf8\x31\xa9\x34\xa3\xa7\x2e\xab\x7d\xaa\x53\xa6\xcf\x54\x53\xa9\xc1\xb8\x9b\xf0\x30\x5f\x38\x35\xa9\x76\x54\xd4\x3b\x7a\x5b\xcb\x9f\xad\xcf\x47\x74\xd2\x65\x10\xce\x4a\x80\x86\x59\xf5\x96\x72\xf4\x8e\xba\xd5\x1d\x1b\xed\x77\xd2\x4a\xbc\xb0\xbc\x54\xc6\x55\xba\x3c\xfb\x5f\xd0\x65\x90\x15\x06\xf0\x37\x5d\xa8\xee\xe6\x7c\x91\x6e\x96\x26\x0b\xe7\xd8\x42\x1a\xae\x2d\x11\x53\x96\xae\x05\xd1\x59\xf2\xab\xce\x42\x43\x21\x9c\xbb\xf7\x3c\xff\xad\x76\xda\xed\x4f\x91\xaa\xe3\xdc\x27\xf5\x63\x52\xb9\x72\x6d\x32\xf4\xf7\xf0\x6f\xf4\xb2\x76\xdb\x5a\x62\x98\x41\x1c\x4d\x0c\xfb\x45\x93\x5a\x57\xc1\x50\xea\xf1\xf8\x38\x20\x74\x56\x51\x44\x55\x24\xa7\xa4\x56\x70\xbf\x50\xcb\xd7\x66\x05\x21\x2f\x12\x03\x7f\xd9\xf9\xe4\x57\xed\x19\xf5\x29\xc8\xbd\x58\x27\xfe\x36\xf9\x3d\x70\x06\x00\xb5\x07\x02\xa8\xc4\x97\xeb\x17\x56\x55\x28\x87\x39\xab\xaa\x32\x96\x44\xa3\x4e\x8f\x8e\x6f\xa9\xd4\xe9\xc2\x6f\xad\x71\x54\xc4\x28\xa2\x92\x49\x47\x86\x78\xdf\xf5\x03\xaf\x5c\x77\x4f\x65\xc4\x84\x1c\x6a\x73\x7e\xc6\xcd\x3b\x2d\x5a\xc3\x1e\xb7\xcd\x1b\x6c\x2c\x69\xdf\xe8\xcf\x2b\x07\xf7\x8f\x4c\xbe\x82\x59\x82\xc8\x87\x20\x69\xf2\x3c\xd5\xfe\x5a\xec\xd5\xe6\x9e\xd6\xf1\x01\x9e\x71\x7e\x48\xc1\x4d\x38\xf6\x61\xeb\x56\x40\x62\x60\xa3\x97\x68\xf5\xf9\xef\xb0\x5e\x9f\xeb\x46\xf5\x9e\xe8\xd6\x8e\xe8\xb6\x8e\x00\xaa\xd6\xa4\xef\x0f\x2e\xcd\x3f\x35\xfb\xad\xc2\xbd\x19\x55\xec\x73\x7f\x22\xcb\x4c\x6e\x54\x8b\x24\xb5\x7f\xa0\x1b\x3d\x42\x7a\x11\xf5\x48\xb5\xfc\x38\x4a\x3a\x51\xaf\x9a\x82\x21\xa2\xa1\x56\x69\x69\xd4\x16\xae\x96\xe2\x8a\x19\x55\x31\x1b\x56\xe4\x8b\x57\x83\x5b\x14\x53\xb9\xc9\x91\x5f\xf3\xd9\xc6\x28\xdd\x59\x6d\x32\xd3\x39\xe5\x95\xdb\xc1\xfb\xde\x0d\xcd\x87\xe8\xf7\x92\x37\xbb\x25\xb8\x87\x65\x39\x4c\x80\x97\xf4\x81\x15\xea\x19\x64\x5f\xf3\x34\xb3\xcc\x23\x09\x8f\x58\x1b\x57\xc8\x35\x15\x89\x2e\xfc\x85\xac\xc1\xb3\xc1\x0c\xb7\xdc\x59\x19\x0a\xfb\x50\x47\x65\x4a\x0e\x52\xf5\x33\xbc\x55\xa3\xa9\x6f\x0b\x27\x9e\x5b\x63\xc9\x37\xa2\x5f\xa9\x1a\xc1\x49\x18\xda\x23\x3b\x2a\x9f\x18\xef\x37\xa5\x15\x93\x15\xc0\x2b\x55\x37\xc2\xf9\x53\xbb\x6b\x2b\x8d\x26\x7f\xb6\xa0\xf2\x32\xe8\x93\x25\x47\xce\x8c\x9a\x48\xa8\x66\x05\x8e\x3b\xa1\xf8\x86\xd7\xe9\xe2\xa9\x89\x62\x4a\x91\x0f\x9a\x8e\x84\xea\xa3\x15\x01\xfb\x53\x83\x50\xfe\x90\xb7\x0d\x65\x28\x45\x7e\xd1\x44\xa8\x1a\xa6\xcf\x6d\x19\xb7\x16\x19\x57\xe5\x0b\x32\x32\x4c\x63\x8a\xc8\x7c\x86\x35\xb6\x90\x2e\x97\x6d\xd5\x57\x63\xc5\x18\x57\x6f\xb6\xd6\x3c\x6d\xbd\x80\xa0\x85\x79\x36\x55\xbb\x2d\x1e\x3c\xd3\x52\xc5\x84\x82\x99\xfd\x1d\xa5\x45\xd7\xd9\x4c\xb9\xeb\x8b\x14\x4b\x2b\xf0\xdf\x20\xfc\x33\xd5\x4e\x17\x36\xf5\x33\xac\x96\x7b\x0a\x0b\xe9\xa6\x76\x82\x14\xc7\x06\xb9\xf7\xd6\x8f\x2c\x7a\xc8\x53\xcd\x75\x27\x2a\xc2\x38\x53\x17\x3d\x0b\xa7\x69\xa9\xd8\x64\x8a\x27\x8c\xb0\x50\xec\xbc\xeb\x99\x17\x58\x2b\x74\xcc\xb4\x1f\x22\xb4\x12\xff\x1a\xaf\xcb\x85\xda\xed\xba\x6b\x95\xc3\xd6\x96\x6b\x13\xa2\x97\x3e\x52\xc1\xa5\x8b\x81\x51\xaa\xbb\xcc\x38\x82\x28\x31\x85\xfb\xe4\xb9\x62\x4b\xde\x5f\xa5\x6b\x58\x29\xbc\xd2\x6b\x95\xae\x23\x9b\x1f\xdd\x43\xf1\xe5\xab\x2e\xf3\x5a\xd9\x2e\x5d\xda\x2e\xad\xd2\x75\x5b\x8f\xce\xd5\xbf\xe9\xe0\x79\x86\xe7\x3e\x67\x6a\xe2\x6e\x29\x77\x78\xf4\x38\x3d\x8b\xe8\x94\x45\x9f\x1c\xab\x70\xa3\x58\xa1\xd1\xfa\x84\xba\x2c\xaf\x75\x39\x53\x14\x4e\x15\xdb\x2b\x0a\x57\x8a\x45\x0f\x42\xab\x11\x63\xf3\x96\xa8\x32\x45\xaf\x72\x42\x29\x3c\x50\xec\x46\x8d\x5b\x0e\x85\x2d\x5d\x19\xed\x79\x15\x8e\xa3\x42\xbb\x17\x25\xfe\x8a\x7e\x33\x8e\x0e\x37\xcb\x65\x94\x34\xd9\x35\xb2\x77\xad\x4a\x69\x49\x89\x8e\xe0\xa5\x8e\x26\x27\x21\x76\xab\x45\x29\xa7\x8a\xd2\xb1\x4c\xae\xd4\x78\x4e\x38\x2d\xae\x85\x62\x8c\x68\x66\x53\xda\x3d\xdf\x9c\x4b\x1f\xe7\xe3\x0a\x08\x12\x9d\xc3\x35\x0e\x71\x9b\x17\xe4\xaa\xc5\x88\x2d\x80\x39\xea\x3d\x70\x33\x4a\x7b\xd1\x34\xca\x47\x37\x6a\xb7\xe3\x86\xec\xdd\x08\x5f\xb9\x03\xf7\x5a\xd5\xee\x76\x75\x77\x40\x28\xa6\xfa\x1e\x63\xc0\x6b\xb5\x67\x06\x5e\xf8\xa5\x74\x84\xec\x70\xca\x0d\x46\xa1\xe3\x75\xdf\x13\x93\xc3\x91\x6a\x5c\x39\x78\xb2\x5f\x97\x58\x90\x2e\xa9\x39\x4c\xf1\xfd\x2b\x56\xa3\x17\x72\xa6\xb4\x76\x43\x24\x72\x2c\x7b\x51\x07\xef\x67\xe8\x45\x42\x5e\x06\xa3\x9f\x6a\xd3\x8f\xec\x02\x85\xbf\x5d\x07\x84\xe1\x1a\xaf\x73\xa4\xf0\x46\x35\x7d\xde\xe1\x42\xb5\xe1\xc0\x52\xa0\x88\x63\xf2\x48\xf5\xb1\x94\x5d\x2e\xbb\xdd\x1b\x35\xf9\x5b\x4d\xed\x33\xcd\xe1\xed\x5e\x13\xc7\xf5\xfa\x2a\xee\xa4\xc5\xe2\x79\xab\xa6\xbb\x9d\x99\x44\xff\xf5\x5f\x45\xb9\xe9\x6e\xf7\x48\x4d\xec\xf4\xd1\x69\x0e\x2f\x9a\x80\x42\xc7\x9c\x72\xfd\xe9\x31\x27\x8f\x88\xa4\x13\xcb\x84\x4f\x86\x53\x9a\x70\x22\x2b\x06\xbd\x21\x68\xb0\x3f\xf8\x74\xf0\x2c\x86\xa4\xe2\xf8\x11\x09\x61\x53\x10\x21\xe6\xf0\x52\xb1\x06\xab\xe0\x28\x65\x63\x0b\x38\xeb\x31\xb5\x5e\xf3\x79\x90\x9a\x34\xcf\x2c\xd2\xe7\xf9\x88\x98\x3e\xbf\x5e\x2b\x6d\xb2\x6a\xb1\xba\x95\x0a\xcc\x00\x0f\xf6\x61\x01\x73\x58\x33\xc1\x5d\x40\xd4\xf1\xbd\xc4\x59\xbf\x0a\x9a\x32\xe3\x1c\x5e\x5a\x79\x24\x32\x63\xc7\x16\x48\x2d\x8b\xe4\x18\xd1\x61\x30\xce\x44\xc8\x9e\x2e\xb9\xbb\x8b\xf7\x42\x91\x19\x75\x2b\x37\x63\x03\xd8\xb0\x8d\x95\x35\xbc\x63\xf4\x68\xf3\x73\x36\xca\x7a\x3d\x2a\x16\x84\x2c\x99\x1a\xaf\xc9\x23\x32\x67\x66\x92\x4d\x11\xc2\x73\x84\xf0\x9a\x60\x02\x8d\xe3\x65\x7d\xb9\x06\xf4\x5e\xf5\x1d\xe7\xa4\x3b\xa4\x79\xca\x66\xa5\x9f\xb1\xd2\x64\xc1\x52\x8c\xfc\x3b\xea\x92\x39\x5b\xb8\x4f\x29\xa5\xe8\xd7\x3e\xaa\x7a\x1b\x17\x38\x68\xc9\x5e\x28\x92\xc2\x1a\xe6\xce\x3d\x1e\x14\x76\xe0\x5f\xe8\x03\xc5\xf9\xba\xcd\x7c\x84\x93\xee\x00\x4d\xbd\x29\x85\x3b\x7b\x4b\xf9\x50\xb1\xee\x70\x14\xbc\xf5\x1f\x2b\x36\x80\x77\xca\x59\x37\xef\x63\xa1\xad\x1d\x45\xd2\xed\x3e\x56\xbd\x5e\x9e\x83\x4b\xac\x66\xb3\xb5\x0d\xf2\x7c\xf4\x4e\x4d\xee\xa8\x96\xcb\x42\x91\x1f\xcc\xc1\xed\xcf\x85\x56\x2b\xf2\x4e\xd5\x42\x31\xbb\x19\xbf\xb7\x1f\x16\xef\xa9\x82\x8f\x0a\x5e\x29\x78\xa8\xf6\x6f\x05\xed\xf2\x38\xee\x1e\xaa\x70\x01\xe7\xd0\x33\xbf\x95\x81\x69\x34\x62\x68\xef\xd4\x67\x07\x2b\x71\x40\x79\x0e\x86\xe8\x16\x9d\xbd\xcc\xe1\x59\x13\x05\xbe\x6f\xf6\x10\x7b\x03\x9a\x3d\x22\x86\x56\x9d\x9c\xf7\xa8\x97\xde\xed\x1c\xc9\x22\x92\x3d\x22\x9a\x4e\x9e\xa9\x29\x1d\xf3\x44\xe1\xd6\x87\x4f\x8a\xdd\x25\x62\x7d\xae\x24\xdf\x89\xb5\x9a\xef\xc4\x3a\x9d\xd3\xfe\x37\x96\x6f\xe3\xce\xb2\x3d\x58\xc5\x3c\xe4\x14\x9e\x5b\x1c\x1f\x2c\xde\xe0\x77\xfb\x96\x71\xf3\x62\xb5\xe2\x73\x91\x1a\x0e\x1f\x6c\x0a\xba\x17\x94\x69\x7f\xa8\xca\xdd\xb7\xbf\xda\x17\x7f\x76\xfd\xe8\x3c\x95\x92\x2f\xe1\x17\x9b\xf6\x38\x84\x63\xfd\xcd\xae\x97\x3f\x11\x11\x1b\xd1\xc4\x89\x7f\xaa\x86\x7b\xbb\xdd\xd3\x1e\xe7\xfc\xa9\x26\x66\x3a\xf2\x8a\x64\x7c\x01\x4e\x30\x0a\x41\xab\xb4\x5d\x5d\x21\x02\x3d\x16\x40\xd6\x33\xda\x64\xd4\xe1\xd2\x1c\x1a\x12\xbb\xea\x5b\xf1\xd5\x8f\x83\x98\x5e\x14\xc1\x73\x55\x58\xef\xf5\xa2\xbb\x77\xa3\xde\x73\x85\x96\x7b\x34\x1f\xfd\xae\xe2\xf8\x83\xda\xed\xc8\xef\x75\x24\xdf\x88\xe5\xd3\x72\xdb\xb2\x1c\x51\xde\xbc\x6d\x59\xe2\x6d\xcb\x7e\x14\x7f\xaa\x49\xaf\xf7\x5b\x7d\x09\xb6\x07\xf8\x33\xc9\xd3\xb2\x69\xea\x19\xf3\x70\x19\x3f\xcd\xe1\xa9\x22\xbf\x29\x0a\xbf\xa9\xdc\xce\x62\xb5\x9b\x55\x90\xe6\x10\x8c\xda\x91\xd3\xfa\x43\xd1\xf1\xd3\x7a\xee\x3f\x54\x19\xa6\x9c\x0b\xf4\xe0\x4b\x7e\x51\x71\xfc\x8b\xea\x4b\x75\xd5\xcc\xed\x52\x8b\x8c\xbf\xaa\x38\xee\x7e\x52\x63\xf2\x4a\x31\xf2\xd1\xdd\x1e\xf4\xab\xa2\x68\xba\x79\x0f\x3e\x2a\x7c\x18\xf6\x95\x0c\xc2\xb9\x14\xf0\x54\x59\x7a\xf0\xaa\x36\x25\x76\x57\x0f\x29\x4d\xba\x6a\xef\x8c\x7a\xb7\x6b\x11\xa1\x2b\x45\x77\x3b\xd5\x17\x2b\xdb\x8e\x73\x81\xce\x76\x3b\x41\xb4\xa0\xb6\x1c\x1a\x3e\x31\xc6\x2a\x73\x6d\x07\x14\xed\x1b\x60\x45\x42\x76\x9e\x90\xc8\xd9\x6a\x47\xb4\x66\x07\xf5\x0e\xc5\x22\x2e\xfd\xdd\x46\x95\x6c\xf4\x0b\xa6\x5c\xef\x4c\xed\xfe\x20\x27\x10\xf8\xd5\x5b\xe3\x66\x2b\x7e\x61\x08\x5a\x18\xd0\x3c\x21\x4f\x15\xd3\x02\xf6\x41\x42\x22\x0f\xce\x08\xa4\x80\xee\x90\x7a\x59\x5f\x09\x10\x02\x52\x01\x33\x01\x99\x80\x8d\x80\xa5\x80\x85\x80\xb9\x60\xb6\x85\xe4\x77\xe5\x5c\x89\x92\x0f\x2a\x87\xb5\xc0\x6b\x54\xcf\x05\x9b\xa3\xc1\x05\xac\x84\xdd\xea\x3e\xce\xd8\xeb\x53\x8c\x56\xa8\x2d\x74\x3f\xf0\xd3\x5f\x85\x69\x7e\x81\x4b\x51\xc1\x13\x67\xa2\xc2\x4c\xde\x08\x56\x5b\x75\x97\x82\xc2\xa9\x60\x6b\x41\x14\x44\x1f\x37\x7c\xc3\x5f\x89\x99\x56\x26\xcd\x2e\xac\x3c\x20\xd8\xa9\x88\xe3\x53\xe1\x68\xdf\xe8\x4a\xec\x76\x44\x89\x3d\x05\x01\x70\x54\x3a\xde\x38\x57\xd1\x4b\xd1\x77\xb6\xa6\x68\xec\xc2\xaf\x85\x21\x74\x24\xc4\x88\x6e\x39\x13\xa2\xbf\x90\x20\x84\x7d\x40\x42\x6c\x49\x80\xc5\x2d\x05\xee\x76\x34\x46\x88\xf1\x4c\x10\x9a\xa4\x82\xf9\x8d\x65\xf2\xbc\xf2\x82\x35\x5b\x31\x96\xd0\x1c\x6e\x6c\xe6\x5a\xa7\x44\xb9\x71\x94\xa0\x79\xb2\x12\x7e\x33\x64\x82\x75\x07\xb0\x11\x4d\xb3\xef\x63\x7e\x6d\x0e\xd5\x9c\x93\x28\xa2\x60\xb7\xca\x4a\xd8\x92\x7d\xe5\x40\x4a\x36\x02\xb6\xb3\xf3\x54\xa7\x33\xc3\x35\x86\xba\xc0\x1b\x44\xea\xcd\x6e\x84\x3b\xba\xb2\x8d\x64\x22\xa7\xc9\x99\x88\xe3\x33\x11\x74\xb3\x63\xb2\x14\xac\x7c\x0d\x71\x66\x60\x21\xd8\x52\xa0\xf6\xb3\x51\xdf\xc2\x5f\x2c\xb3\x14\x60\x47\x41\x93\xfa\xe7\xf3\xe2\xde\x19\xfc\x8a\xeb\xec\x81\x80\x6b\x01\x4f\x04\xbc\x16\x70\x24\x98\x9d\xb0\x7d\x96\x72\xbb\x90\x89\x01\xa4\xab\xae\x0f\xf9\x28\xb5\x53\x97\x3a\xb0\x31\x4e\x41\xd8\x99\x16\x82\x71\xb0\xd3\x40\x21\x15\x8c\xe7\x70\x22\xf6\x23\x2e\x82\xdc\xd7\x7c\xd5\x54\x5a\x3e\xcc\x75\x79\x70\x50\xb1\xba\x90\xfb\x4c\xe4\xc3\x74\x1e\x94\x25\x9d\x0a\x35\x8e\xe8\x88\x33\x03\x92\xe9\x42\x15\xed\xe1\xc8\x14\x27\xbc\x48\x42\xa7\x5e\x4f\x91\x1f\x09\xb6\x6d\x0d\xbb\x64\xfb\x78\xe2\x29\xd5\xdf\x62\x9f\x63\xb1\xac\x00\x9c\x11\xee\x02\xbd\x54\xee\x59\x67\xa5\x10\xc1\x3d\x1b\xf3\x48\xf4\xf1\xb2\x15\xef\xa4\x33\x40\x1b\x3b\xec\x18\xb5\xdd\x2a\x8c\x71\x72\x78\xd3\xa0\x89\x85\x34\xb1\x45\x2b\xb9\xa4\x3b\xf4\x51\xbd\x8c\xa5\xb5\x8d\x30\x4c\x21\x4f\x88\xfc\x65\x2c\xd7\x73\x51\x60\x88\xb7\xa2\xc1\xe6\x1c\x0b\x16\x79\x30\x46\xf0\x42\x30\x83\xa1\x1c\xe1\x25\x3e\xd9\x12\x77\x42\x9a\xe1\xfa\xa9\xd2\xe4\x58\x50\x38\x14\xec\x89\x82\xc7\x16\x61\x14\x33\x02\xef\xec\x6b\xd8\x2e\xf0\xb4\x8a\x5a\x3e\x0a\xbc\xae\x7f\xc1\x0d\x5e\xe7\xfd\x4a\x20\x34\xe0\xa1\x60\xaf\x04\x3c\x6b\xa0\x9a\xa7\x82\xc2\x7b\xc1\xba\x5d\xf2\x4e\xc4\xf1\x3b\x11\x1c\x2e\x2e\xf1\x62\x2d\x55\x04\xbe\xc3\x04\x0a\x9f\x04\x7b\x63\xc8\xb1\x80\xc6\x65\xee\x5d\xf2\x98\x1c\x0a\xda\x2d\xb4\x19\x87\x82\x52\xfc\xf2\xc3\x0f\x96\x9e\xf0\xf2\xa2\x77\x9b\xfb\x99\xa8\x0a\xfb\x05\x95\xf2\xa0\x79\x8b\xeb\x45\x28\xe9\x1a\x2d\x5c\x01\xc4\x82\xb8\x7b\xf8\xe3\xf8\xae\xc4\x20\x1e\x68\x58\x79\xd7\xb1\x6f\xb6\xc5\x1a\x33\x6b\xd8\x61\xb9\xad\x87\x14\x1a\x21\x4e\x49\xe3\x3a\x93\xfa\x2b\x0d\xf6\xbb\xf5\xf0\x3c\x78\xa7\xff\x5b\x31\x65\x1c\xba\xc4\x34\xcf\xe8\xb1\x60\x4d\x00\xb1\xdb\xe2\xb9\x60\x9f\xc4\x6e\xd7\x7d\xa8\xea\x92\xe4\xa1\xf0\x7a\xc7\xbd\xa8\xf7\xae\x03\x94\xc2\xef\x2d\x5b\x7b\x54\xf8\x8b\x9f\xa1\xe5\x50\x8b\x30\x88\xb6\x94\xe7\x5c\x5a\xa1\x88\xe7\xf0\x41\xb4\x87\x62\xe8\x4b\x65\xd0\x47\x88\x6e\xcb\xe7\xa0\x9f\xc7\x2b\x0c\xb8\x0f\xfb\x3d\x3a\xaa\xdf\xf3\x5d\x84\x68\x72\x41\x1c\x37\x1c\x04\x1b\x32\x16\x02\xa1\xa6\x6c\x30\x0a\xbe\x94\x3f\xa7\x23\x7f\x2b\x8a\x93\x70\x99\x9e\xa4\xbd\xde\x14\x16\x4c\x8c\x97\x7d\x75\x91\x2c\xfb\x8b\x54\x2c\x61\xce\x96\x61\xb2\x60\x8d\xcf\xa8\x74\x3c\x67\x4b\x4f\xb7\x90\x28\x2d\xc6\xc4\xe2\xc0\x7b\xa8\xf9\xd4\x61\x9d\xc4\xf1\x6f\xc2\x45\x18\xae\x24\xb2\xa1\xf7\xa8\x58\x8c\x67\x4c\x25\xe4\x3c\x8e\xcf\x03\x75\x82\x19\x5b\x10\x45\xe1\x3c\x8e\xc9\xb9\x27\x86\xb0\x61\xdd\x01\xb5\x9f\x18\x5b\x06\xfc\x30\x5e\x93\xc7\x82\x84\x3d\x7b\x30\x3b\x4f\x85\xec\xcc\x6e\x66\x56\x80\xa6\x09\xc9\xd8\xef\xc2\x4a\xd0\xe3\xcc\x21\xfd\x99\x95\xde\x69\x32\xb7\x69\xc9\x9a\xa8\x0a\x05\x3d\x8f\xe3\xee\x06\xbb\xe0\x5a\x5b\x23\xa2\xab\xc0\xd8\xf2\xc8\xd5\x69\x18\x82\x8c\xe3\x6e\x6d\x94\xbf\x8a\x10\x46\x20\xcf\xe1\x8f\xfd\x59\xc5\x79\x03\x31\x7a\x2f\xc6\x84\x68\x56\xdf\xcd\x24\xc2\x3f\xcb\x84\x05\xaa\xc0\x41\x17\x87\x19\xa0\xf1\x2a\x3f\x97\xd5\x40\x77\x88\xf6\xf8\x0d\x04\x40\x34\xa5\x89\x66\x5b\x5f\x41\xc2\xc1\x15\x4f\x64\x0e\x44\x30\x35\x89\x94\x8c\x7a\x66\x4a\xc7\x82\x68\x9a\x44\x1b\xe9\x22\x2c\xcc\x8b\x41\x44\xee\x5e\xc1\x16\x61\xcf\x0a\x56\x4a\x66\x6a\xc9\x47\x78\xcb\x16\xa2\xd6\x38\x26\x78\x20\xde\x90\x1b\xc6\xfe\x33\x31\x34\x29\x1e\x81\x53\x9a\x93\xe8\x5d\x68\xb3\xe3\x7b\xd9\x29\x1b\xc7\x20\xdb\xbf\x36\x69\xcb\x45\x41\xb2\xf7\x42\x3a\xe3\x95\x2d\x8e\xcd\x12\x0b\xf2\x8b\x40\xea\x43\x24\x7b\x53\xdf\x0f\xcf\xc4\xf8\xa9\xf0\x97\x52\x14\x63\x7e\x5b\x36\xab\xc1\xd0\xe4\x0f\x41\xda\x00\x02\x96\x16\xdb\xcd\x5e\x5d\xbb\xcf\xc4\x6e\x87\xad\x8d\xef\x25\x43\xf0\x43\x0c\xca\x1d\xe9\x63\x02\xa2\xf5\x4c\xab\xec\x37\xf4\x96\xb6\xc5\xca\xe9\x86\x4b\x10\x73\xf8\xed\xeb\x86\x5f\x1d\x52\x51\xd1\x73\xd7\xf9\x28\x0c\xa7\xf8\x70\x5e\x7c\x00\x0f\x2f\x67\xdc\xf3\x67\x73\x91\x56\xce\x35\x8b\x0f\xca\x62\x63\xb4\x7a\xb7\x90\xc8\xc1\xa4\x2d\x85\x38\xaa\x83\x76\x3b\xe2\x1e\x2c\xc3\xa8\xd1\x6c\x5c\xd3\xd0\x24\x93\xe0\x31\x10\xbb\x07\x1f\x70\xaf\xd8\x45\x4c\x73\xe0\x6d\x35\x3a\x1c\x68\x2b\x0b\xb5\x57\x2b\x45\x74\x23\x16\xc4\xb0\x92\x21\xaa\xa0\x82\xce\x2c\x95\xff\x89\xa7\x8e\x1e\x69\xcd\x3b\xc2\x64\x7c\xb9\x88\xc2\xdd\x64\xbf\x0b\x22\xe9\x48\x8d\x1b\xa8\xd3\x6b\x56\x9c\x56\x68\x98\x63\x33\x5e\xe9\x28\xe1\x4f\x41\x78\x0a\xa8\x36\xa6\xf6\xc5\x84\x97\x80\x48\x24\xdd\x9a\x14\xf5\xca\x78\xbd\x5a\x6e\x91\xd0\xfe\xe8\x87\xc5\xe8\x87\x7b\x25\x8b\x96\x7d\x0d\xf9\xe8\x93\xe5\x32\x0f\xeb\xeb\xe8\xc4\x1f\x81\x1c\x0a\xb0\x2c\x88\xc2\xe8\xdf\x0f\x44\x19\x08\xc1\x9f\xaf\xb2\x17\xc2\xbf\xa2\xb9\x26\xf1\x03\xc0\xa0\xd3\xc5\x08\xdc\x5b\x55\x9a\x48\x43\x5c\x6a\x64\xf6\xc8\x83\x7a\xe3\x2f\x5d\x9d\xfe\x4a\x91\x63\x01\xbe\xcb\x10\x90\xa3\x7d\x76\xcb\xd9\x3e\x15\x18\x34\x99\x4c\xa1\x58\x91\xf6\x8b\xbb\xd7\x26\x30\x67\x9e\xab\xa6\x39\x2d\xd5\xdc\xec\xb5\x22\x87\xa2\xa2\xf6\xde\x5a\xba\x99\xb4\xa1\xa7\x3b\x7e\xa4\xa0\xd9\x2b\x41\xde\x17\x00\x2a\x2d\x21\x74\x5f\x5d\xb0\xb6\xf3\xeb\xdd\xce\x80\x46\x32\xd7\x76\xc3\x29\x8f\x63\x8b\x88\xbd\x27\xa0\xdb\x77\xee\xc5\x77\xd9\xb2\xab\x38\x5a\xbb\x3e\x65\x49\x31\x9c\xe2\x44\x53\x18\x74\x99\xbf\x94\x21\x8e\x3f\x78\xe0\x49\x3b\xf9\xa0\x4b\x46\x77\x56\xbf\xfe\xab\x71\x29\x3b\x72\x32\x41\x8e\xc3\x88\xae\xd7\xfb\x12\xa5\x8b\xd2\x20\xc0\x4d\x3b\xad\x8b\x18\xa6\xce\xff\x87\xa5\xdc\x10\x02\xc2\xa2\xe6\x28\x09\xf4\x17\xec\xd5\x2d\xa6\x22\x8c\x1d\x8a\xdd\x0e\xaf\xd8\x15\x63\xdb\xee\xb5\x6d\x32\x79\x88\x02\x42\x9b\x49\xff\x13\x15\xc7\xe4\xb5\xe5\x95\x6b\x87\xef\x5c\x02\x37\xa4\x9a\x08\x91\x4d\x8d\xf6\xdc\x2f\xca\xc3\xff\x8a\x40\x72\x28\x9a\xf1\xae\x5f\x8b\xb0\x5b\x3d\x2d\x76\xb0\x0b\xf7\x4f\x56\x4e\x8d\xda\x7a\xf9\x51\xc4\xf1\x5b\x43\xb6\x67\x4b\x75\x9a\x2e\x5d\x0c\x89\xca\xc5\x5b\xc5\x21\xe5\x20\x87\x2d\x72\xf0\x6d\x33\xf6\xb7\x20\x87\x02\x3e\x0a\xaf\xe4\x52\x95\x00\xb5\x88\x13\x5c\x20\xe0\xb2\x89\x2b\x9d\xae\x2b\x95\x7f\x12\x39\x6c\x3d\x1e\x4b\x0e\x45\x4e\x41\x73\x82\x3b\x1d\xd7\xcc\xbe\x68\xaa\xdc\x9d\x0c\xec\x4d\x7f\x31\x4a\xe3\x98\x5b\xbe\x64\x72\xa4\xa6\x71\x2c\x09\x87\x23\xb5\x1f\x08\xf9\x96\x1b\xc7\xce\x45\x96\xe7\x34\x47\xb1\xe6\x09\x8a\x29\xf6\xa9\x72\x68\x7b\x2c\x70\xd3\x36\x3b\xeb\x16\x4f\x8b\x93\xeb\xab\x80\x7e\x82\xfc\xe7\xd7\x99\x3f\x52\x0e\xeb\x19\x78\xb1\x0f\xf2\xaf\x6b\x0f\x17\xf1\x2d\xb0\x2f\x02\xc1\x7c\xa1\xaa\xe7\xb6\xaa\x74\xb9\x6c\xe9\xb7\x0f\xb0\xfb\x4a\xb8\x70\x16\x85\x74\x0a\x0a\x9f\x91\xf5\x15\x4d\x2e\xc3\xb3\x49\x9c\x14\x86\x65\x14\x84\x65\x1b\x53\x36\x80\x19\x1b\x8e\x5e\xaa\x66\xe0\x32\x77\x3b\x4e\xda\xeb\x59\xee\x76\x38\x12\x0e\x65\x04\x1d\xc7\xac\xd7\x03\x7f\x77\x98\x45\xc5\x2d\x9e\x29\x9b\xdd\x8e\x58\xbe\x18\xc4\x24\x9b\x32\x03\x07\x07\xb3\xdd\x4e\x13\x61\xc5\x13\x77\xeb\x54\x99\x54\xb1\x54\x14\x81\x7b\x53\xc4\x6b\xa9\x6a\x32\xb7\x4e\x67\x6d\x71\x3f\x5a\x80\x82\x80\x50\x6d\x80\x50\x75\x40\xb4\x8c\x5d\x35\x47\x56\x42\x59\xfb\x8b\x6a\x42\x7f\x55\xe8\xaf\x26\x6a\xbf\xbf\x5e\x8b\x23\x53\xd0\x29\xa8\x14\x44\xba\xef\x7f\x52\xd7\xda\x43\x9a\xb2\x5a\x04\x76\x98\xa5\x6d\x41\xee\x0d\x32\xfd\x6c\x30\xe2\xf7\xef\x7d\xff\xc3\xa8\xd7\xe3\xd4\x78\xe7\xef\x7f\x44\x3d\x42\xf8\xfd\xe1\x0f\xe3\x68\xe0\x0e\x75\x2b\xb1\xef\x86\x3f\xa0\x0b\x68\xc5\xbf\xb6\x72\xca\x4b\x28\x64\x69\x83\xc7\x2b\x43\xe5\xa0\x85\x37\x7a\x1d\xb8\x31\x64\xe3\x96\xeb\x55\x13\xb4\xba\x1e\x8c\xf4\xfd\x22\x70\x6f\xaf\xa7\xe9\xed\xe6\xa4\x15\x63\xc0\x4d\xca\xb6\x18\xbd\xe8\x58\xf9\xa8\xa9\x59\x0a\x69\x96\x89\xb3\x26\x5d\xf5\x65\x1a\xb6\xb1\x2d\x77\x95\x55\x8c\xf2\x26\x72\xca\xf8\x44\x4e\xc1\xb8\x2b\xcb\x60\xa6\x56\xa7\x42\xf2\xd6\xaa\x27\xe5\x3d\xe5\x48\x70\x66\x6a\xb5\x4e\x1b\x78\xa4\x72\x46\xb1\x55\xa7\x7f\x27\x5b\x95\x60\x88\x36\xb5\x4e\x22\x15\xe5\x53\x90\x76\x8e\x1c\x30\x78\x15\x18\x15\x19\x78\xa2\xa7\x78\xab\x98\x3a\xfd\x7b\x82\x84\x66\x6d\xf7\x64\x75\x5c\x68\x04\x3c\x18\xcd\xee\xa7\x65\x15\xb3\x62\x7b\x4e\x66\x53\xd8\x30\xbb\xc5\x46\x7b\x91\x2f\x37\x45\xe8\xe0\x4d\x1c\xa3\x75\xb0\x2c\xac\x83\x37\x18\x0c\xdf\xc7\xdd\xb3\x9d\x17\xae\xe3\x59\x8e\xcb\xd7\x26\x6f\x28\xcd\xf7\x02\xc1\xb8\x51\x8f\x4c\x61\xd5\x32\xa2\xe5\x5d\xf1\x6a\x8d\x0e\xc5\x1c\x47\xc3\xdd\x68\x30\x00\x53\x4a\x24\xad\x58\x39\x58\xb0\x28\x36\x18\xa9\x32\x74\x76\xaf\xa7\xca\x35\x22\x27\x96\x40\x84\x58\x4b\x13\x35\xa5\xa3\x5a\x9d\x4c\xe7\x79\x8e\x3a\xc2\x1c\x5c\x90\x81\xbd\x70\x9c\xc1\x5d\xbf\xf4\x49\xef\xdd\x3d\x83\xa8\xe3\x0e\xaf\x23\x91\xa9\x83\x1f\x7f\xfc\xfe\xa7\x83\x21\x46\xba\xa0\x05\x1b\x56\x06\xa5\x9c\x0c\x0e\x7e\x4a\x0f\x16\xd3\xed\xbd\xfc\xee\x99\x80\x8d\xe4\xd9\x2c\x5d\xf3\x5a\x20\xb9\x96\x08\x07\xd5\x63\xcb\x50\x6b\x9e\x83\xf3\x9d\xda\xeb\xa6\x58\x10\xb4\xa3\x09\x07\xe7\xf5\x08\x97\x0c\x23\x03\x44\xd9\xcd\xea\x54\x2d\xab\x07\x56\x9a\x1d\x61\xda\xad\x5e\x6c\x86\x26\x7b\x97\x24\x18\xf4\x01\xf4\x68\xc0\x50\x0a\xb7\x41\xc1\x0d\x94\x54\x4d\x67\xff\xb1\x29\xc0\xf1\x1d\x82\xa3\xc5\xfe\x3c\xfa\xc7\xbd\x1f\xfe\x71\xef\xdb\xa8\x87\x3e\x57\x2f\xa4\x21\x21\xc6\xe4\x3d\x0a\xc3\x1f\x68\x2f\xfa\xc7\xb7\x0f\x23\xbc\xa6\xa2\x58\xff\x51\x04\x82\x0d\x46\xe2\xbe\x2e\x17\x42\x11\x7e\x43\x63\xdc\x91\x47\x6a\xce\x1f\x18\x22\xe8\xe8\xbb\xef\xad\x3c\xbf\xdb\x7d\xf7\x83\xfb\xff\xc9\xbf\x0f\xef\xf9\x84\xf4\x67\xf6\xdd\x8f\x71\x9c\xde\x67\xdf\xff\x13\xdf\x7e\xf8\x1e\xdf\x7e\x1a\xe0\xdb\x4f\xff\xc4\xb7\xe1\xbd\x7b\x63\xd5\xf3\xb5\x63\xcd\x49\x7a\x7f\x78\xef\x47\x9b\x38\x4b\x27\xe9\x34\x49\xef\xdf\x1b\x7c\x17\xde\x87\x3f\xdd\xdb\xa5\x3f\xff\xfc\xc3\xb4\x67\x5f\xee\xfd\xb8\xfb\xe1\xdb\x18\xf3\x7c\xff\xfd\xbd\x9f\x7e\xc0\x8a\xbf\xff\xe7\xb7\xdf\x7d\xe7\xb3\xdf\xbb\xf7\x9d\xcd\x3e\xbc\x57\xe4\xb7\x85\xe3\x1f\xbe\x6d\x94\x27\xa2\xc7\x86\x90\xb2\x1f\xbe\xff\xfe\xdb\x1f\x7a\x84\x0c\x07\xf7\xbe\x8d\x53\x7a\xff\xfe\x70\xb0\xc3\xe7\xc6\xe8\x29\xf8\xfa\xbf\x1b\x60\xfd\x3f\x56\xeb\x1f\xde\xab\x36\xd0\xda\x60\xb1\x97\xd5\x67\xc3\x8f\xbb\x58\x92\xfb\x31\xda\x69\x1c\x77\xbb\xa4\x11\x82\xfc\x5f\x8e\x2d\x8e\x31\xa1\x5d\x0c\x91\xcf\x45\xa2\x76\x39\xbe\xc6\x5b\xd3\xa2\xf1\x55\x7a\x73\xca\x5f\xd5\xec\xf1\xbc\xda\x3f\x4d\xf1\x0c\xbc\xa4\x60\x05\x3a\x36\x65\xc8\x7e\x36\xa4\x1e\xe1\x79\xef\x8f\x0a\x45\x0a\x1b\xc2\xb5\xd3\x8c\x61\x5c\x51\x06\x94\x7b\x67\xd4\x16\xe2\x5e\x86\xee\x70\x1a\x0e\xad\x25\x2d\x6c\x72\xba\xbc\x05\xe2\x41\xed\x3d\xe1\x20\xa7\x23\x82\x0e\xbc\x35\xe2\xbb\xdb\xe9\x7e\xba\x5c\xaa\xab\x37\x01\x36\x19\xdd\xed\xba\x22\x75\x90\xd9\x33\x51\x43\x95\x2e\xc1\xeb\x6f\xba\x83\x62\x35\xf0\xfc\xcb\x1d\x28\x48\xa1\x0c\x0a\x8a\x22\x46\x0f\x0e\x29\x8e\xbb\x88\xe1\xe3\x98\x28\x96\xa5\x18\xf4\x98\x82\xff\x84\x5f\xc6\x44\xb6\xb8\x14\x48\x70\x37\x14\x87\x2e\xa3\x2d\x8e\x0f\x5c\xcb\xf1\xba\xc8\x96\xa8\xcf\x22\x8e\xe5\x2d\xc1\xa0\xd5\x94\x19\x22\x70\x52\x92\x02\xca\x39\x46\x06\xc6\x8f\x78\x11\x11\xaf\xdf\x52\x23\x5b\xb8\x06\x5e\x5e\x4a\x61\x89\x4f\xc1\x99\x56\xba\x19\x5a\xb3\x7f\x20\xb0\x41\x9b\x20\xd0\x57\x4e\xd1\x3c\x87\x65\xea\x51\xed\xfe\xb5\x7c\xb0\x48\x99\x8f\x8e\x3c\x4f\xd9\xf6\xed\xd3\x47\xc3\x7f\x7e\xfb\x63\x12\xf9\x87\x08\xde\x3e\x7d\xf4\xed\x4f\x3f\xfe\x80\x29\xf6\x21\xca\x61\x9d\xb2\x4d\xda\x77\xbc\x10\xd9\x7a\xbb\xe0\x64\x9e\xf6\x7d\x16\xc0\x18\x8d\xfe\x66\xea\x50\x63\x9b\xc9\x6c\x1a\x6e\x3d\x58\xa4\x18\x9b\x39\x2f\x5a\x6b\xc9\x5d\x10\x8b\x3c\xcf\x61\x9e\x52\x38\xff\x32\xff\xba\x4a\xd9\xf6\x54\xa7\xb3\x0b\x6e\xda\x3d\x5f\x7b\xd1\x64\x1a\xb9\x1b\xbe\xd3\x04\x7d\x1e\xd3\x08\x84\x9c\x8b\x19\xcf\xda\xd9\x3c\x5b\x24\xea\x71\x34\xc1\x04\xcd\xd7\x3c\x35\xad\x35\xe7\x39\x5c\x36\xb9\xe7\xb3\xb4\x69\x9f\x88\x2b\x03\x6e\x9a\x7c\xee\x59\x1a\xee\x6d\x81\x4b\xbb\x74\xc7\x3c\x99\xf0\x29\xcd\xe1\x34\x65\x18\x87\xa8\x8a\x83\x8a\x10\xce\x70\x95\xb2\x75\x1a\x0c\xb5\xe1\x81\xe5\x60\xe7\xf3\xdf\x36\x5c\xdf\xbc\xd1\x7c\x21\xae\x93\xee\x10\x70\x9b\x3e\x56\x26\xb3\x2f\xde\xf1\x39\x89\x9c\xe7\x73\x78\x3f\xe2\xd2\x08\xc9\x97\x36\xcb\x9c\x2f\xc5\x4a\x18\xae\x93\x28\x8e\x02\xeb\x80\xf2\xbe\x7d\xd2\xc9\x26\xed\xbb\x47\x9f\xf2\xde\x8a\x1d\xd9\x6b\xb9\xbc\xb1\xa5\xdd\x4a\x48\xae\xd2\x72\x4d\x24\xeb\xb4\x5f\x2e\x90\xc9\x55\x3a\x2d\x00\xde\x1d\x42\x16\x9c\x65\x6e\xb9\x8f\xa0\x73\x9a\x96\xd8\x36\xbb\x10\xeb\xc3\xcd\x72\xe9\x4a\x1a\x2d\x66\xc6\xbe\xa2\x7a\x57\xc8\x33\x54\x0f\x5e\x97\xb0\x0d\x68\xd2\x5d\x54\x53\xb7\x55\x74\x9b\xec\x1c\x56\xcc\x61\xcd\x7d\x95\xc7\x6c\xbc\x62\x33\x22\x61\x45\x93\x55\xd5\x3c\xcf\x76\x74\xbc\x62\x4b\xb2\xa2\x61\x05\xb9\x20\x07\x97\x29\x59\x59\x3c\xb4\xb2\xbb\x25\x10\x06\xb2\x6a\x63\x57\x3a\x66\xaf\x46\xe4\x9b\x4c\x4e\xa9\x0f\x92\x05\x11\xa5\xe0\xad\x9a\x57\x2e\x1c\x4e\xc0\xf3\x69\x1c\x77\xe7\xe3\x94\x48\x78\x10\x26\x43\xc3\x1a\xa2\x0b\x7e\x13\xd1\x44\x8e\x56\x2c\x8a\xf2\x16\xef\x74\x72\xce\x56\x74\xb7\xdb\xbb\x2a\xe2\x7c\xb7\x8b\x4e\x95\x5a\xf2\x54\xd6\x13\x9b\xcc\x1f\x66\x14\x67\x42\x9a\x5a\xda\x26\x2d\xe9\xec\xaa\xb8\xa2\x2d\x1d\x4f\x16\x64\x3e\x96\xc9\x2d\x1d\x75\xc1\xc4\x17\x24\x25\xab\xc6\x67\x94\x64\x23\x4a\xa7\xc9\x64\x41\x64\xc8\xe7\xf1\xc1\x8a\x52\x17\xcc\xea\x12\xce\xd8\x04\x59\xfc\xc2\xa8\x6e\x55\x44\xd6\xc5\xe4\x94\xcc\x28\xbd\x64\xb3\x32\xe2\xfa\x4d\x4d\xba\x59\xd1\xd1\x25\xcb\xc6\x37\xfd\x4c\x69\x43\x32\x9a\xdc\x14\x41\xfa\x4f\xd9\x60\x74\x7a\xff\xb2\x64\x0c\x4f\xdd\x82\xb9\x62\x97\x93\xd3\x29\x3c\x60\xab\xc9\xd5\xf4\xff\x63\xef\xcf\xb7\x1b\xb7\xb5\x85\x41\xfc\x55\x28\xa4\x22\x13\x11\x34\xb9\x66\xca\xb0\x8e\xab\xca\x55\xa9\xa4\xa6\xd4\x90\x49\x52\xfc\xd1\x14\x64\x33\x45\x91\x0a\x07\x0f\x11\x79\x57\xee\xfd\xfd\x7a\x7c\x84\xfe\xa7\xfb\x0d\x7a\xf5\x1f\xfd\x02\xfd\x04\xdf\x7d\x84\x4e\xbf\x48\x2f\x6c\x0c\x04\x29\xca\x76\xe5\xe4\x9c\x7b\xbe\xd3\x37\xa9\x25\x93\x20\x86\x8d\x8d\x0d\x60\x63\x63\x0f\x22\xee\x9a\x50\xe4\x6b\x51\x7a\x20\xb2\x5c\x50\x20\x84\x71\x03\x49\xc5\xe3\xd8\x0e\xc9\x39\x76\x42\x27\xec\xd8\xd9\x18\xf5\x50\xe7\xdc\xe1\xeb\xcb\x39\x5f\x5f\xf0\xe8\xd2\xb5\x4f\x48\x6a\x1f\x90\x8b\x2d\x54\x8b\xb5\xab\xbb\x93\x82\x1c\xba\x74\x63\xab\xad\xaf\x88\xd5\x05\xa9\x59\x59\x31\x25\x1b\x4a\xce\x2d\xad\x9a\x70\xe0\x8e\xb4\xd2\x33\x4d\xd5\x30\xb5\xdb\xe5\xa1\xba\x4c\x6b\x12\x22\xab\xaf\xcd\xc6\x50\x87\xe2\x23\xf8\xf0\x4e\xa3\x2d\xd6\x50\x34\xed\xc9\x85\x2a\xcf\x0f\x5c\xf5\x3c\x32\xf5\x40\x74\x8e\x76\x5b\xae\x6d\xb5\x44\xe3\xb8\x61\x7e\x69\x86\xea\xfd\x29\xb3\x64\x06\x4b\xd8\xe2\x69\x63\x2d\xe6\xa7\xa7\x2c\xb6\xa0\x0d\x62\x95\xb5\x12\x2b\x8a\xad\xd2\x47\x88\x32\xca\x2a\x97\xe7\x1a\xb8\x62\x45\x14\xb8\x3e\x95\x4b\x5c\x65\xa1\x24\x3a\x4f\x33\x8c\x1f\xc2\x8f\x61\x74\x1e\x5a\x22\x93\x02\x73\x15\x47\x67\xfe\x9c\xcd\x39\xee\x42\xdd\x4c\x21\x4e\x74\xd5\x85\x38\xe4\xe7\xe0\x03\x57\x1a\xf5\x2a\xb5\x81\x46\xa7\x33\x22\x4b\x9e\x9f\xb9\xb6\x7a\xc1\x82\xe3\xd2\xaf\xa4\xbe\xf5\x6c\xae\x28\x69\xaf\x9a\x65\x5c\x4f\x70\x0e\xdc\x5a\x8a\xb1\x7b\x95\x76\x1f\x3d\x9d\x38\xe6\x05\xca\xfd\xad\x65\x7c\xd2\x5b\x1d\xdb\xd8\xe4\x9a\x20\xab\xe5\x19\x6f\xa4\x38\x25\xe1\xa9\x24\x63\xab\x34\x80\xd3\x89\x1c\xb8\x32\x87\xf1\x41\x6d\xaa\x4d\x70\x88\x4f\x63\xf5\xe0\x1c\xd4\x76\xdb\xd8\x69\x1c\x20\xf9\x51\x97\x8b\x1d\x63\x45\xdd\xd8\xa7\xb7\x37\x5c\x66\x1a\x6f\x26\x95\x75\x96\x69\x44\x0c\xbf\x13\x19\xfb\x7d\x5c\xdb\xd4\x1b\x21\xae\x64\x19\xd7\xde\x79\x4b\x95\x04\x63\xe7\x6f\x02\x5e\x7f\x1d\x1b\xcf\x50\x89\x7a\x21\x7c\x89\xdf\x02\x49\x14\xa7\x63\xf1\x47\xb8\x7a\x6b\x60\x2c\x1a\x1b\xdd\xc8\x36\x6e\x4a\x04\x30\x36\x52\x41\x84\x34\x6a\x8a\xc7\x29\x27\xd4\x38\xa6\xf6\x80\xa8\x37\x6c\x23\xc4\x19\xfd\x33\xd7\xd6\x49\x70\xa1\xaf\xdf\x84\x7f\x47\xe2\xca\x2d\x71\xe3\x44\xa5\xf5\xcd\xa9\x8a\xd5\x8b\xd0\xc8\x17\x62\x55\x10\x7b\x3e\x15\xeb\x88\x1f\x5a\x4b\x77\x5c\x49\x73\x18\x5f\x3f\x05\xcb\x86\xfc\xd0\x62\x63\xd6\x93\xaf\x63\x9d\xee\x20\xc1\x1b\x23\x47\x27\x01\x48\x1e\x5d\xba\x13\x7f\x36\x02\x13\xd4\xca\xee\x1b\x43\x6c\x11\x8e\xf6\x76\x3b\x14\x5b\xb0\x78\x2d\x65\x34\x09\x1d\x8c\x12\x53\x4e\x97\x88\x4d\x2b\xa3\xe1\x24\x99\x8d\xa2\x72\x7c\x85\xb4\x91\xf7\x6e\x92\xcd\xf2\xfc\xd2\xb5\x5d\x72\xe1\xda\xfc\x8d\x64\xc4\xe3\x0d\x6d\x8c\x01\x31\xca\x93\x48\x4d\xbd\x48\x4f\x21\xe1\xf7\x4f\x22\x58\x82\x4a\x22\x63\x89\x89\x6a\x44\x1a\x95\xcb\xab\xae\xcf\x98\x2a\x91\xde\x74\xa4\xc1\xa2\x72\x88\x1a\x95\x6b\x03\x26\x0b\x0a\xda\x3f\x51\x7d\xb1\x84\x68\x28\xa8\x94\xfc\xd7\x16\xa3\x76\xbb\x2e\x58\xd4\x59\xc6\x8b\x0e\xe5\x9b\xe2\x03\x2a\x84\x64\xc3\xc1\x60\x70\xfb\xf3\xdb\x8f\xda\xc8\x29\xbf\x1c\xee\x7e\xfe\xf0\xf1\xe7\x0f\x6f\xb7\x11\x26\x81\x12\xb0\x0e\xc6\x8b\x4e\xe0\x20\x54\x60\xf2\x7a\x53\x15\x41\xd8\x01\x89\xb0\x32\x86\xa3\x01\xe9\x52\x42\x1f\xd3\xab\x63\xae\xab\x6e\xb7\x6d\x97\xb2\x0e\x1a\xa3\xce\xa1\x0b\xc4\x10\x8e\x93\x68\x92\xce\x6c\x97\x84\xc4\xc7\x0e\x98\xc4\x83\x49\x9f\x4a\xf6\xb1\xa3\x1e\x0f\x5d\x3b\xc2\xc4\xc7\x05\x79\xe7\x36\x68\x10\x6f\x68\xde\xf0\xf6\xf4\xee\x6b\xba\x67\x18\x57\x7c\x35\xac\x0b\x10\x21\xdf\x12\xf7\xd8\x63\xfd\xe4\xf0\xe9\xc7\x3f\x48\xff\x87\x11\x45\x7d\x77\xe5\xf7\xcf\x06\xfd\x84\x41\xc4\xef\xa4\x2f\xce\xc7\x50\x55\xd7\x9d\xcf\x11\xf1\xe9\xba\x20\xae\xe1\x52\xb3\xd4\x5a\xed\x1d\x47\xf3\x4b\xd0\x6f\x16\x8f\x86\xf9\xa8\x48\x18\xd7\x9c\xce\x18\xce\xeb\x5f\xfa\x49\xe2\x87\x27\x56\xcc\x7e\xc9\xfc\x98\xcd\x2d\x0b\xdc\x0e\x30\xbe\xf4\x5a\xbc\x2c\x12\xda\x15\xb7\x7e\x01\xea\x51\xdf\x92\x76\xbb\x72\x63\xb1\xf1\xbd\x29\xf8\x31\x67\x50\xc0\x4f\xca\x46\xee\x49\x0a\x8e\x80\x5e\xbb\xb6\xf4\x18\x10\x76\x22\x92\x02\xc7\x1a\x63\x5c\x90\xa3\x7f\xc4\x61\x09\x7c\x0e\xe9\xff\xa7\xc7\xe5\xf1\x3f\xca\xb8\xc4\x51\xc0\xfe\x73\x44\x70\x41\x7e\x76\x69\xab\xa6\xa6\x5a\xca\x2f\x0c\x97\x71\xc6\x19\xcf\xd4\xec\x85\x5d\x4a\xc2\x7b\xc2\x52\x2d\x90\x7d\xbd\x00\x54\xa4\xb8\xa5\x1d\x98\xf3\x64\x0e\xca\x1b\x97\xfe\x6a\xa3\xe7\x87\x47\x6f\xde\xbe\x7e\xff\x1a\x61\xf2\x71\x53\xb2\x46\xde\xba\xf4\x67\x77\xdc\x58\x71\xa3\xfc\x8b\xde\x02\x6d\x8b\x73\x3b\x25\x6f\x5c\x3c\x4e\x27\x6f\xdc\x59\x33\xc3\x55\x15\xe3\x9b\x82\x90\xca\xb7\x71\x55\x92\xaf\x21\x73\x2a\x45\x04\x80\xe3\x8f\xae\x74\xec\xfd\xde\xad\x9b\x3d\x3e\x77\x69\x6b\x38\x9a\xcc\x60\x34\xf9\x36\x09\x31\x7c\xf9\xb6\xcb\x99\x25\x31\xc6\x18\x8f\xed\xd8\xa5\x6f\x5d\xfb\xad\x6b\x47\x2e\xc6\x1c\x6b\x75\x94\x70\x86\xcb\xa5\xb1\x8b\x1d\x5e\xe5\x40\x49\x67\x42\x57\x7c\x58\x17\xbc\xf7\xa1\x4b\xde\xbb\x38\xcf\x3f\x8a\x27\xd2\x60\xf4\x0e\xea\x24\xd2\x94\xe7\x85\x4b\xd7\xcf\x25\xac\x1a\xc3\x4e\xe8\x92\x47\x1f\x9e\x3d\xfb\xe1\xe8\xdd\xc1\xd3\x83\xb7\xcf\x8f\x9e\xbf\x3f\x7c\x7b\xf0\xfe\xf5\xdb\x77\xce\x73\xb7\x20\xb7\x5c\xfa\xc2\xed\x6d\x94\x22\xaf\xdc\xad\x56\x98\x4f\xea\xbb\xb7\x0e\x6a\xdf\x41\x96\xaa\x09\x8d\x36\x49\x8d\x3e\x4b\xed\x5b\x2e\x11\x76\x93\x81\x3d\x24\x21\x16\x7a\x37\x29\x89\x41\xeb\xe6\x71\x34\x89\x67\xf4\x95\x4b\xd2\x82\x7c\xd0\x64\x94\x54\xe8\x25\xcf\x6d\x74\x74\x04\x75\x1e\x1d\x21\x3f\x5c\x17\x4d\x91\x16\x5a\x43\x02\xf1\xf8\xd3\xf8\x72\x6d\xa7\xb4\xa4\x3c\x43\x9c\xf1\x44\x46\xd9\x88\xe2\x06\x33\xf8\xb2\x09\xcc\x01\xc0\x4a\xdf\x69\x32\xc3\x84\xd1\x70\x23\x08\xeb\xa6\x89\xa7\x71\x3b\x50\xea\x7b\x3e\xb6\x43\x5c\x8f\x04\x05\x3a\xec\x65\x70\xdc\x4d\xc3\x93\xc7\xa0\x66\x99\xb0\xd4\x42\x1d\x2d\xc8\xee\x20\xcb\x4d\x2c\xd7\xd2\x30\x23\x5c\xd8\x31\x26\xfc\xfc\x23\x61\x8d\xb1\x13\xf6\x74\x47\x68\x4c\x42\x88\x30\xa0\x34\x5f\x9e\x6e\x19\xfa\x5f\x20\xbd\x99\x66\xc8\xcb\x8d\x29\xf1\x68\x3b\xa5\x3c\x6b\xe6\xf3\x88\x8b\xd7\x4f\x5c\x3b\x24\x8c\xc8\xb3\x86\xd2\x8b\xaf\x61\x26\xa5\x60\x91\xae\x25\x71\x4b\x10\x92\xfd\x22\xc3\xf3\x5a\x2b\x95\xbe\x9a\xa4\xb3\x51\x72\xee\xcb\x11\xf0\xdc\x84\x21\x3e\x15\x91\x03\x8f\x20\x02\x54\x2f\x2c\x4c\x63\x9f\xbf\x6d\x9a\x88\x1a\x2a\x6f\x61\xa9\xe0\x74\x83\x7c\xb8\x28\xc8\xa2\x4a\xfe\x04\xb4\xd7\x57\xe6\x6a\x49\x4e\xe9\x6a\xf2\xd2\x9d\xe5\xf9\xaa\x6e\xdf\x1f\xb5\xdb\xab\x49\x34\x23\x4b\x0a\xbd\x3b\xcd\xf3\x80\xb3\xa4\x67\x54\x3a\xf0\x80\xf0\x38\xab\x9e\x84\x3d\xcf\x4f\x41\x00\xd4\x6e\xdb\x1e\x5f\x66\xce\xe4\x80\xc3\x0a\xcd\xc7\xb5\x71\xbd\xf1\xc0\x84\xaa\xdd\xe6\xab\x92\xc7\x97\xa4\xa7\x7c\xad\xf9\xe0\x8e\x3f\xb8\xb6\x47\x9e\xba\xd8\x69\x90\xb8\x79\x1c\xe0\x76\xfb\xa3\xed\x91\x97\x2e\x79\xe4\x62\x98\xaf\x1e\x59\x80\x52\x31\x26\x0a\xb7\x30\x4e\xa7\xed\xb6\x7a\x6f\x51\x7a\x0a\xc1\x6d\xda\x6d\x7b\x4e\x5b\x03\xb2\x6c\x20\x92\x53\x43\x95\xb6\xc0\x04\x90\xd3\xa2\x74\xc9\xdb\x5b\xf1\xf6\x96\xb0\x24\xb0\x19\x5d\x92\x08\xfb\x0b\x3b\xa1\x6b\x51\xbf\x13\xd8\xaa\x25\x4c\xf8\x48\x3b\xfe\x78\xc9\x13\x61\xd4\x31\x91\x88\xe2\x29\x6a\xbc\x71\x41\x5c\xd0\x57\xc9\x38\xe9\x24\xd8\xfe\xc5\xcd\xf3\x79\x9e\xb7\x44\xc2\x0a\xec\x44\x52\x7b\x45\x32\x92\x4c\xb2\x99\x0c\xc4\x69\xe8\xb6\xb1\x0d\x2f\x2a\x50\x43\x41\x4a\xcd\xbb\xa4\x20\xdf\xba\xca\x8c\xe9\x57\xb7\x6a\xc6\x24\x86\xb2\xa4\x10\x4c\xbe\x74\xe9\x33\xd7\x16\xc2\x54\xe5\xa9\xa5\xa6\x68\xf9\xad\x6b\xaa\x01\xd7\xab\x20\x12\xb4\x33\xf0\x96\x1c\xce\xd9\x85\x33\x20\x1f\xfd\x10\x62\x4d\xd6\xcc\x79\x84\xaa\xd5\xaf\xae\x54\xe0\x05\xf3\x18\x28\x4d\x42\x9a\xf6\x78\x21\xa2\x3d\xef\x77\x3a\xca\xc0\x86\xe5\x79\xbc\x4f\x95\xce\xcf\xd8\x56\x85\x94\xb9\xe3\xda\x54\x2b\x96\x3a\xca\x83\x02\x3b\x62\x20\x28\x0d\xc7\x32\x47\xac\x14\x98\x0b\xa7\xa4\x19\xfd\x15\xb4\x87\x74\x06\x99\x38\x11\x8e\x43\xca\x0f\x45\x49\x6f\x78\x04\x8e\x37\x24\xfb\x48\x95\x17\x0e\xf2\x28\xd4\x34\xc0\x1f\x35\x8d\xf0\x17\x4d\x09\xb0\xe4\x7c\xbf\x65\x17\x23\x91\x1a\xcd\x0f\x6e\x93\x37\x16\x9b\xf3\xa2\xd5\x60\xe5\x71\x8b\xd2\xb0\xdd\x3e\xb1\x23\x6a\xb0\x16\xb8\xdd\x8e\x5a\x10\x7c\xa6\x9c\x83\x1f\x5c\x88\xd2\xce\xf7\xb7\xef\x5c\x8a\x26\xd3\x74\x1a\x4e\xcf\xa6\x8b\x69\x6c\xfd\x5f\xff\xdb\xff\xfd\xbf\xfc\xf6\xfb\x6f\xbf\xfd\xfe\xdb\xbf\xfe\xfe\xdb\xbf\xfd\xfe\xdb\xff\xef\xf7\xdf\xfe\xff\xbf\xff\xf6\xdf\xfd\xfe\xdb\x7f\xff\xfb\x6f\xff\xc3\xef\xbf\xfd\x8f\xbf\xff\xf6\x3f\xfd\xfe\xdb\xff\xfc\xfb\x6f\xff\xfb\xef\xff\xfa\xbf\xfe\x3f\xbf\xfd\x36\xcd\x76\x07\xbb\x0f\xe0\xf7\xe1\x34\x5b\xb0\xc5\x62\x86\xc8\x0f\x2e\x55\x71\x4d\x7e\x42\x9d\xef\x5c\xfe\x0f\x7d\x81\x30\xf9\x5a\x7f\x50\x89\xb7\x10\x26\x5f\xb9\xd7\xb9\x78\x12\x72\x67\x75\x59\x62\xb3\x52\xa5\x60\x08\xce\x95\x42\x50\x50\x14\xaa\x35\x3f\xb8\x04\x21\x8c\xc9\xee\xc6\x97\xaf\xe5\x97\xb0\x28\xc8\x37\x2e\x5d\x27\xa9\x1b\xa7\xce\x57\x2e\x18\xa4\x85\x73\xfe\xb4\x8b\x45\xbc\xe0\xaf\x5c\xfb\x36\x2e\xc8\x8f\x2e\x3d\x4e\x7b\x0b\x92\x7a\x60\x6f\xcc\x3c\xfa\xa6\xb7\x20\xa1\x47\xbf\x71\x21\xc4\x03\x89\x3d\x1a\xf5\x64\xf4\xaa\xc8\xa3\xb1\x67\x2c\xb3\xbe\x47\xd1\x2b\x75\x2b\x35\xb7\x9f\xa5\x76\xe4\x61\x4c\x5c\xaf\xc9\x44\xb4\x7a\x35\x42\x2f\xc1\xec\x47\xa8\x56\xd5\x7d\x34\x66\xed\x76\xa6\x8e\x34\xbb\x7c\x39\xba\x73\x9b\x52\x6a\x33\x6a\x67\x34\xf4\xec\x0c\x63\x53\xd1\x65\x80\x71\x9e\x83\xa2\x8f\x50\xe1\x78\xf0\x80\x82\x7f\x86\xcc\xcc\xb4\xcb\x33\x0d\x77\x07\xa6\xd2\xd2\x2b\xf7\x55\xa1\x82\x00\xdf\x79\x20\xca\xcb\xbd\xad\x52\x76\x88\xc5\x4e\x67\xdd\xbb\x07\x3b\x9b\xf5\xf0\x81\x13\xd3\x5d\x12\xd1\x3b\x0f\x47\xc7\x31\x73\x3f\x8e\x20\xf9\xfe\x43\xf1\x79\x38\x1c\x3a\x31\x7d\x40\x22\x7a\xf7\xae\xfc\xae\x6e\xdf\x45\xcb\x9d\x0c\x6e\xac\x5c\x6a\xfb\x34\xd3\x0a\x4f\x4a\xc8\xa2\x74\xf7\x46\x9e\xf4\x86\x92\x50\xdf\x04\xc7\xc3\x78\xef\xce\x83\x3c\x4f\xf6\x23\xa3\x27\x8a\x5c\xb4\x26\x95\x4f\x62\xa5\xb2\xd1\xc9\x0a\x8e\xe7\x37\xa9\xad\x86\x8b\xb4\x62\xcf\x46\xd6\x20\x1a\x22\x9c\xe7\xf0\x32\x38\x86\x67\xfe\xd8\x19\x5c\x0c\x21\x22\x89\x92\xe8\x79\x1e\x49\x1a\x06\x75\xe3\x00\xba\x37\x1c\x0f\x1c\x58\xe7\x4c\xc5\x76\x93\x85\x4b\xbc\x76\xdb\xf6\xbd\x71\xf5\xe8\x14\x79\x42\x0f\xf6\xb5\xf4\xc7\xc2\xd9\x55\xec\x28\x60\x5b\x74\x6e\x87\x18\x8f\xbf\x77\x61\xe7\x8d\x3d\xdb\xf5\x20\x8a\x52\x48\x12\x0f\x3b\xf0\x52\x90\xcc\xa3\xee\xf8\x47\xd7\x8e\x3d\xec\xa0\x97\x07\xdf\x1f\x7d\x7b\xf0\xe2\xc3\x21\x79\xf9\xfc\x95\x7c\x7a\xe5\xbe\x22\xaf\x0e\x9f\x1d\xbc\x7f\xfe\xed\xe1\xd1\xf3\x57\x4f\x9f\xbf\x7a\xfe\xfe\x07\xf2\xe6\xf5\xbb\xe7\xd5\x94\xc3\x37\xef\x9e\xbf\x78\xfd\x0a\xa2\xe6\x87\x7e\xca\x88\x9f\x3c\x0f\x53\x76\xc2\x62\xe2\x27\xbc\x12\x3f\x79\xe7\x2e\x98\x4a\xe3\x4d\xbd\x3b\x78\xca\x2b\x78\x7f\xf8\xec\xf0\x2d\xb4\x58\x49\x80\x21\x79\x1a\x44\x6e\x4a\xd4\xe8\x94\x75\x22\x15\xa2\x85\x20\x4c\x02\x3e\xf4\x99\xa7\x68\x3f\xf0\x46\x01\x27\x82\x73\x3b\xf6\x88\xe7\xd1\xcc\x9b\x04\xde\x0c\xb7\xdb\xad\x73\x3b\xe1\x29\x7c\x27\xf5\xc4\x23\x49\x3d\x91\x0b\xe3\x51\x62\x4c\x52\x1a\x79\x24\xf2\x2a\x67\xcf\xc4\x23\x2c\xb5\x23\xa2\x89\x21\x91\xd1\x7e\x16\xde\xa6\x11\xc6\x63\xbd\x8d\x21\xe3\xa4\x21\xb4\xfd\xdb\x6d\x9b\x75\x28\x3a\x01\x87\xee\xfe\x49\x18\xc5\xec\xb1\x2b\x3c\x39\x77\x28\xf2\x21\x79\x99\x05\xa9\x1f\xf8\xa1\x4a\x5d\x42\xea\x3c\x4a\x0f\x02\x55\x3e\x81\xa4\x2c\xf4\xbd\x68\xae\xb2\x65\x90\x96\xa4\xbe\xf7\xf1\x52\x26\x5d\x72\x76\xc3\x70\x22\x3b\xf7\x2a\x1a\x1f\x72\xd9\x05\xdd\x5b\x0e\xfa\xca\x23\xa7\x1e\x59\x7a\x74\xfd\xe1\xd5\xbb\x0f\x6f\xde\x40\x20\x8f\xa3\x1f\x9c\x4d\xe5\xee\x94\xce\x3d\x1b\xb9\x88\xf0\x26\xca\x3e\x06\x6e\x92\x3e\xe7\x9b\x34\xdd\x25\xd2\x7b\x54\x8f\x5d\x30\x9e\xf5\xd8\x9b\x23\x50\x47\x7f\xf4\xf6\xf5\xd7\x87\xaf\x8e\x1e\x1f\xbc\x3d\x7c\xbf\xb5\xe6\x9f\x62\x44\xd0\xc9\x0d\xeb\x4e\xd2\x18\x09\x6b\xb6\x33\x4f\x6e\x25\x66\xc0\xea\x0b\xe6\x91\x13\x6f\xbb\x9e\xd0\xa5\x47\xcf\x3c\x72\xec\x51\x7b\xe5\xd1\xbe\xdb\x27\xa7\x1e\xed\x1f\x7f\xd1\x3f\x21\x67\xd2\x0d\xd2\xca\x23\xc8\x45\x58\xbf\x9f\xca\xf7\x41\x8b\xd2\x95\x57\x42\x96\xe7\x3c\xe5\xd4\x48\xc1\xe4\xdc\xa3\x4b\xaf\x57\xc1\x67\x9e\x2f\xbd\x9e\x89\x06\x72\xe0\x51\x2d\x08\xea\xdb\x78\x3c\xee\xcb\xae\x21\x3c\x19\xce\x46\xf6\xb1\x97\xe7\x07\x5e\x9e\x9f\x73\xf2\xb5\x2f\xaf\xd8\x2c\x84\x8e\xbe\x4b\xcf\xbd\x76\xdb\x97\xc4\x40\x3c\xba\x90\x90\xfb\x98\xf0\xa5\x51\x78\xac\x24\x19\x1d\x90\xa0\x0c\xcd\xc7\x59\x6e\x50\x60\xb6\x3d\xea\xe9\x0d\x12\x5d\x22\xd8\x21\xcb\xb8\x47\x27\x88\x43\xe1\x49\x32\x0e\x4a\x65\x57\xb9\x2e\xfb\x66\xff\x8d\x17\x10\x85\xb7\xfc\x92\xbe\xf3\xdc\x37\x89\x1d\x4d\x45\x04\x92\x89\x51\xa6\x3b\x84\xf0\x15\x09\x45\xf6\xd8\xb1\x50\x27\xe9\x20\x8c\x48\x40\x91\x85\x3a\x01\xc9\x3a\x1d\x4c\x84\xa3\x4f\xcd\x5b\xd8\x63\x47\x65\xe3\x3b\xeb\x81\x27\x36\x7c\x33\x0b\x7c\xbf\x65\x8f\x5b\xd3\x69\x22\xb3\x1d\x7b\x60\x56\x58\x01\x3d\xa6\x6a\xc0\xdd\x71\xe8\xf8\x24\xc0\xc4\x1d\xc7\x63\x3b\xee\xf9\xe1\x2a\x4b\xa9\xfc\x2b\x7b\x9d\x61\x12\x4f\x06\x33\xca\x7f\x8c\x24\x81\x36\xb3\x62\x13\x25\x1d\x91\x5d\xea\x25\x3b\xc6\x17\x3a\x70\x38\x4c\x31\x44\x1e\x29\x53\x7d\xb9\x8e\x8c\x65\xc5\x1d\xa3\xbc\xc3\x44\x77\xe3\x76\x5b\x1b\x77\x0f\xdb\xed\x13\xd9\x89\x18\xbc\xae\x91\xba\x99\x78\x44\x87\xa3\x68\x23\x38\x6f\x77\x77\x14\x75\x3a\x58\x8b\x20\x4b\x69\x68\x34\x6b\xb7\xed\x78\x12\xcd\xa8\x72\xae\xc8\xcf\x5d\xd2\x04\xe3\xc2\xa3\x97\x5e\xc5\xc9\xa3\x40\xfa\xa6\x97\xc7\x7e\x4f\xd0\x78\x8b\xd2\x0b\xaf\x20\x6b\xfe\xec\x5c\x78\xca\x95\x9f\x77\x35\xf7\x67\x70\xc4\xc4\xaf\xf0\x80\xc4\xa5\x5e\x6a\x87\x98\x78\x1c\xe7\x52\xfd\x54\xd2\xf7\x9e\xd0\x50\xf6\xc6\xe9\x18\x21\x79\x2e\x70\xec\xb8\xca\x2b\xb8\x18\x2b\xa5\xe3\x78\xff\xee\xbd\xdb\xc3\x87\x79\xee\x76\xf8\xb4\xf0\xf2\xdc\x8e\x6a\x99\x3b\x43\x9e\xfd\xde\xed\xdd\x41\x9e\x47\xfb\x77\xef\xdf\xbe\x73\x7b\x9c\x8e\x7d\xa5\xf5\xec\x62\x27\x76\xf8\xbb\x20\x08\x97\xb8\x9d\x5d\xec\x44\x5d\x28\xd1\xb1\xe3\x2e\xb4\xb4\xb7\x37\x1c\xe0\x0e\xe8\x28\x17\x05\x79\xed\xd1\xb5\x07\xd5\x3b\x87\x9e\xdd\x1a\x62\x22\x2a\x83\xb7\x01\x2e\xc8\x3b\x8f\xbe\xf6\x64\x0b\xe4\xc8\x53\x67\xba\xc7\x5e\xed\x4c\x27\xd0\x62\x1c\xea\x46\xcf\x5c\xa9\x5c\x44\x90\x72\xa4\x58\x11\xec\x1e\x79\x95\x13\x5d\xbd\x02\x22\xb8\x4e\x47\x4f\x78\x75\xae\x6b\x3e\xd0\x11\x46\x1f\x7b\x72\x2f\x0c\xc1\xf7\x00\x34\xcd\xcf\x28\x50\x4e\x9b\x65\xee\x53\x75\xf3\x39\x6e\x3e\xb3\x39\x76\x4a\xdf\x79\x20\x35\x22\xb2\x70\x47\xab\xf3\xab\x73\x5e\xaa\xcf\x62\xda\xdf\xfb\xcf\x5e\xcd\xbf\xc7\x1b\xaf\x2e\x82\x16\x7b\x4e\xbf\xd7\x2f\x77\x1a\x4e\x8a\x9b\xbb\xfa\x64\x66\xec\xe5\x71\x94\xad\x12\xba\x76\x1d\x74\x1f\x15\xfc\xc4\x84\xee\xf3\xa5\x0b\x21\xbd\x6c\xa6\x04\xdd\xda\x73\xf7\xc5\x9e\xf7\xd1\xa3\xe8\xd6\x00\x51\x4a\x91\x5b\x66\xe9\xf7\xfa\x84\x27\x63\xf2\x56\xc0\x29\x3f\x20\x4c\xde\x7b\xb4\xd5\xea\xf7\xfa\x93\xb7\xde\xac\xdd\x46\xbc\xa4\x7c\x13\xbb\x2e\x94\x7a\xbe\xad\x33\xf6\xd8\xc1\x7d\x38\x45\xf3\xae\x8c\x36\x7b\xa4\x8d\xf1\xa4\x2e\x26\xec\x19\xda\x44\x51\x45\x76\x40\xee\xb1\x62\xb5\xb4\xa7\x16\x6b\x17\x8e\x8d\x2a\x0c\x37\x72\x11\x58\x92\x0c\x66\x79\x8e\x8e\xc5\xf3\x10\x6e\x01\x5e\x78\x0d\x16\xdd\x42\xaf\xf9\x2b\x90\x9f\x6f\x5c\x06\x48\x2f\x3b\xfa\x6a\x04\x74\x7d\x37\x81\xbe\x5f\x90\xfb\x2d\x8a\xd0\x24\x9d\x89\x08\x15\xc4\xa3\x6e\xbb\xdd\x58\x19\x48\x5a\xfb\xae\x1a\x5b\x04\x9d\x91\x1e\x0e\x6c\x3b\xa4\xeb\x02\xd7\x9c\x87\x88\xc8\x6f\x2a\x61\xf2\xb3\xd7\x04\x42\xc8\xb3\x2d\x02\xf7\x24\xa1\x08\x91\x90\xc3\xc9\x47\x27\x9a\x61\x12\x6e\xc5\x35\xd8\x06\x83\xe4\x9e\x17\x00\x8f\x49\x2d\xc6\x09\xd5\x5f\xd8\x2d\x37\xcf\x5b\x5e\x9e\x6b\x0a\x90\x20\xb6\xde\x78\x79\xde\xfa\xe8\xe5\xf9\x7b\x0f\xe7\x79\x05\xfe\xd6\x73\x6d\x9f\x24\x1a\x27\x19\x0d\x39\x8b\xca\x31\x53\x15\xd5\xd4\xa2\x4a\x0b\x9e\x88\xf2\x85\x77\xcc\x31\x17\x8d\xa5\xcd\xb9\x32\xc4\x4e\x94\x0a\x36\x1f\xb4\xc2\xa9\x7d\xd5\x22\x5c\x66\x7e\x05\x09\xc8\xfa\xed\xe1\x9b\x17\x07\x8f\x0f\x8f\xbe\x3e\x3c\x7c\xf3\xee\xe8\xd6\xc0\xf9\xe8\x91\xb7\x87\xcf\x0e\xbf\x7f\x73\xa4\x3e\xbd\xfb\xf0\xe8\xdd\xfb\xe7\xef\x3f\xbc\x3f\x7c\x77\xf4\xe1\xd5\x93\xc3\xa7\xcf\x5f\x1d\x3e\x39\x7a\x7c\xf0\xe6\xfd\x87\xb7\x87\xce\x7b\xaf\xe0\x2c\x45\xc6\xf7\xaa\x05\xcd\x38\xf7\xc3\x52\xbb\xce\xbb\x91\x94\x6f\xc6\x2c\xb5\xeb\xdc\x1e\x89\xc8\x2e\xa5\xac\x39\x7a\xe6\x42\x29\x65\x4b\x83\xf7\xa2\xe9\x7a\xa7\x92\x09\x17\xb8\x88\xdb\xed\x8f\x1b\xed\x70\x74\xa3\xe4\xd4\x5d\x22\x02\x4b\xf2\x2d\x73\x49\x7e\x55\x27\xfd\x12\xf3\x1d\x3b\x1c\xdf\x12\x4c\xb8\xda\xb4\x87\xb8\x20\x4f\xbc\x26\xef\x8a\x6a\xfe\x36\x6b\xed\x9a\x91\x10\x05\xc4\x0c\x37\x2b\xc4\x6c\x0a\xed\x45\x77\x2c\x5e\xbb\x25\x1c\xd4\x5b\x02\x42\x36\xb7\x92\x88\xa7\xf0\x75\x3f\x02\x05\xc0\xf4\xd4\x0d\x2d\x57\x69\x37\x58\x51\x0c\x01\x5f\x4b\xce\x3c\x06\x05\x5c\xb9\xcd\xb7\x28\x9d\xdb\x69\x83\x93\x53\xf1\xfd\x33\x68\x11\x1c\x06\xcf\xad\x88\x9f\x72\xc1\xe2\x2f\xf5\x8f\x03\x66\xc5\xcc\x63\xfe\x19\x8b\xcb\xaa\x2f\xbc\xb2\x6b\xc5\xe8\x85\x67\xa3\xa5\x88\xe1\x33\xac\xd3\xb7\x36\x28\xdc\x14\x10\x2d\xb5\x57\x00\x71\x8b\xc5\xc6\x72\xe3\x67\x93\x74\xb6\x71\x0d\x1b\x8f\x63\x4d\xfc\xd8\x31\xb8\x46\x86\xf9\x82\x23\x77\xbe\x90\x1f\x36\xea\x3c\x78\x4c\x43\x08\x83\x28\xec\x9d\xfd\x85\x1d\x0b\xdf\x15\xda\xea\x4d\xb8\x29\x11\x6b\xe0\x63\x11\x43\x4e\xed\xa4\xaa\x48\x2b\x92\xfc\x9d\x2a\xf5\xc4\xb3\x23\xe2\x2b\x55\x93\x48\x1d\xf9\x46\x91\xc9\x29\x6a\x35\x22\x8f\x80\x97\x9a\x8c\x0e\x46\xf2\xc6\xc6\xf6\xa8\xac\x02\x4b\x1b\x42\xcd\xaf\x7b\x93\xc1\x0c\x8f\x92\x49\x36\xa3\x01\x81\x2d\x86\x9f\x2e\xcd\x8a\x5f\x79\xb6\x4f\xb2\xd4\x4c\xc3\xc4\xc5\x98\xf3\xdd\xea\xea\x81\x33\x87\xd9\x98\xb7\xe6\x24\xc5\x4c\x6d\xbc\x1f\xbc\xfa\x4d\xcc\x53\xaf\xc1\x73\xf6\x2f\x1e\xfd\xd2\x15\x78\x49\x74\x27\x5e\x7a\x96\x1f\x5a\x73\x49\xdf\x8f\x3c\x1a\x4d\x5e\x7a\x33\xf2\xcc\xa3\x8f\xbc\x76\xfb\x91\x71\x50\xe7\x18\x7b\xe6\x81\x04\xeb\x99\x37\xf9\xe0\xcd\x5a\x94\xfe\xe2\x41\x60\xb2\x8f\xf6\x33\x8f\x7c\xf0\xc8\x2f\x9e\x61\x29\x28\x32\xd1\x5f\xbc\x42\x94\x78\xea\xcd\xf2\x1c\x72\x3e\xf5\xc8\x4b\x0f\x93\x79\xc8\x9b\xd2\x96\xa3\xdf\x02\x24\x5f\xba\x58\x64\xff\x16\x1a\xf8\xd2\xe5\x0f\x65\x23\xdf\x7a\x44\x26\x55\x1a\xfa\xd6\x9b\xc9\xac\x45\x01\x87\xeb\x5f\x37\x50\xf2\xe5\x96\xfd\x9b\x53\xdd\x87\xb7\x2f\x6c\x74\x3c\x76\xe9\xb0\x7d\x4c\x77\xdb\x1e\xbd\x2d\x63\x03\x39\xfd\xbe\x8b\x84\x88\x3c\x31\x42\xcb\x91\xb0\x22\x6c\x50\xf1\xc2\x29\xf2\x3e\xdf\x1d\xcc\x11\x69\x0c\x36\x22\xdd\xb6\x80\x77\x4d\x1b\x1d\x23\x4c\xc2\x0e\x8d\x3b\x29\xdf\x54\x5b\x0c\xd4\xc0\xf2\x5c\xb7\xda\x87\xaa\x00\x24\x0e\x0e\xdc\xb6\x9f\xc6\x6c\x91\xe7\x08\xde\x20\xb2\x88\x8d\x3c\xc4\x77\x2a\x97\x82\xfa\xb1\x9a\x2f\xa2\x47\x95\x58\x78\x88\xd7\x84\x30\xce\xf3\x16\x9b\xfc\xca\x47\x42\x32\x13\xaa\xf7\x10\x09\x89\x37\xfc\x97\x63\x84\xcd\x20\xcd\xc7\x46\xb6\x4a\x95\x8d\xcd\xb8\xf4\x98\x9f\x5e\x01\x36\x17\x60\xbb\x08\xbb\x5d\x36\x74\x2f\x8f\xbd\x8d\xf6\x9c\x7e\xff\xdf\xff\xed\xbf\xfe\x9f\xff\xfe\xaf\xff\xfe\x6f\x08\x83\xf7\xd4\x3c\x47\x9f\x7d\xfe\x64\xf0\xf9\xa3\x61\x53\x66\xf7\xb3\xff\xfa\x7f\xf0\x8c\x6e\x02\xcc\xd0\xd0\x03\x4c\x84\xbc\x91\xa6\xec\x17\x48\x2a\x75\x88\xba\xc1\x83\x98\x8e\x3d\x24\xf4\x77\xc8\x77\x3a\x41\xa8\x58\x6b\x05\xf7\x1f\x3c\xda\xfa\xde\xcb\xf3\x2a\xc9\xf8\x0b\xdb\x6d\xb7\x87\x2d\x4a\xbf\xf7\xec\xf5\xb1\x33\x2c\xc8\xf7\x9e\xfd\x9d\x67\xaf\x0b\xc2\x59\xc5\x75\xd5\x7d\x45\xcd\xef\xc3\x77\x92\xe1\x47\xc7\x48\xb1\xd1\xb7\x2b\x0e\x2f\x38\x33\xcd\x37\xf6\x63\x67\xb7\xc0\xb8\x77\x5c\xba\x89\x13\xb4\xba\x2e\x08\x03\xb6\x49\xda\xca\xda\xa5\xc4\x66\x12\xce\xe8\x7d\x02\x92\x1f\xb6\x38\x39\xf5\x7f\xfe\x18\x2c\xc3\x68\xf5\x4b\x9c\xa4\x5a\x82\x87\xb6\x68\x98\x40\xb8\x15\xc0\xcf\xfd\x16\x74\xac\x20\x29\x9e\x84\x40\x24\x4d\xf5\xb5\xe8\xab\xd4\x16\xf9\x98\x36\x2c\x01\xde\x7b\xbc\xcd\xce\x5e\x68\x71\xc4\x1b\x02\x59\x12\xd1\x21\xf1\xe9\x79\xda\x5b\x10\x8f\x66\xbd\xc5\x28\xde\x8f\x46\x7a\x4d\x48\x48\x40\x4d\x67\xb8\x51\xa7\x33\xc3\xe0\x2c\xed\x55\x6a\x07\x65\x50\x29\x3b\xc0\xd8\x81\x24\x32\xa7\x0b\x55\xf7\x8a\x0e\x46\xf3\xfd\xd5\x08\x27\x74\x31\x59\x75\x3a\x33\xc2\x19\x30\xb9\xcd\x05\x04\xc2\xbd\x86\x93\x64\x46\x83\x49\x62\x1a\xed\x3b\xdf\x7b\xe4\xeb\x6b\xee\x08\x64\x8f\x92\x26\x17\x36\x7c\x90\xc7\xfc\xc7\x11\x57\x51\xd9\x66\xb7\x03\x9a\x35\x47\x4f\x20\x8b\x52\x38\x15\x90\x39\x7d\x1f\xd9\x1e\x86\x9e\xf8\x0b\x7b\xd1\x6e\xdb\x01\xf5\x99\x1d\x90\x6c\x7f\xd7\x28\xbe\xab\x8b\xef\x6a\xf3\x9e\x79\x9e\x27\x54\x18\x8a\xb5\xdb\x1f\x23\x7b\x8e\x01\xad\x42\x3a\x93\xd8\x8c\x66\xa9\xad\x24\xb9\x18\x8f\xd8\xfe\x6a\xb4\xea\x74\xb0\x4b\x17\xe3\xc0\xf6\x26\xab\x19\x59\x61\x07\xfe\x06\xa1\x1d\x92\x15\x71\xe5\x4d\x28\xaf\xc5\xa7\x76\x44\xe7\xd2\xcd\x1b\xc6\x70\xa1\x2c\x65\x43\xc9\xa8\x25\x4e\xf9\xe0\x45\x4b\x39\x2e\x57\x55\x3f\x8f\xec\x88\x04\x64\x22\x37\x68\xb2\x9a\x71\x9e\xce\x51\xaf\x65\x53\x6a\x34\x24\x84\x74\x45\xc2\x82\x7c\xe5\xd1\xfe\xe4\xa7\xe9\xa0\x3b\xcd\x06\x83\xfb\x87\xb3\x3e\xf9\x86\xa7\xf4\xa6\xd9\xed\xc1\x60\x77\x9a\x3d\x7d\x3a\x38\xe4\xbf\xf7\x86\xb3\xfe\x09\xf9\xd1\xa3\xe8\xf5\x19\x8b\x17\x41\x74\xee\x58\x20\x3e\xb2\x42\xc6\xe6\x89\x75\xee\xcf\x59\x6c\xf9\x42\xc2\x0d\x26\x22\xca\x0b\x24\x49\x13\xfa\xd2\x4d\x4f\x7b\x8b\x20\x8a\x62\xc2\x12\x25\xca\x5c\xc4\xd1\xf2\xb1\x94\x45\x90\x30\x69\x74\xd3\xd3\xd9\xdd\xed\xdc\xbf\xfb\x85\x9d\xee\xed\xde\xc3\x05\x89\x93\x2d\xea\x31\x82\x87\x48\x69\x38\x4e\x13\x3b\xed\xdf\x1f\x0c\xb0\x93\xee\xef\x0f\x49\xda\xa1\x90\xc2\xf0\x28\xdd\xbf\x73\xf7\xee\x28\xee\xd0\xdb\xf7\x70\x2a\x52\x6f\xdf\x2d\xe7\x7b\x62\xc7\x9d\xdb\xf7\xbe\x48\xfb\x76\xda\xb9\xfd\x80\x73\x48\x51\xd2\x4c\xb1\xc2\x33\x81\x9d\x5e\xe5\x8b\x7a\x00\x37\xbe\x52\x80\x13\xee\xc5\xa3\x32\x3a\x80\x21\x7f\x09\x3b\x1d\xe0\x9b\xa2\x7d\x0a\x92\x94\x76\x3b\xda\xa3\x20\xb4\x69\xb7\xc3\xbd\x58\x19\x98\x6e\x96\x01\x01\x0c\xa5\xf6\xbd\x3b\x77\x87\xbb\x6d\x1f\x8f\xa5\x29\xab\x34\x11\x8f\xb0\x90\xc9\x88\x37\x5f\x0a\x67\x40\x87\x0e\xb2\x45\x98\x84\xdd\xae\x32\x7b\x55\x69\xa5\xb9\x2f\x78\xb8\x96\x13\xcb\xa7\xc3\xdd\x07\xd2\x05\xcc\xfd\x5d\xc0\xb3\xf0\x28\xa2\xbb\xc7\x3a\x1d\x6c\x87\x34\x9d\xb0\x19\xde\x1b\xee\x3e\xd0\x5e\x19\x58\xc2\x59\x4d\x11\x95\x86\x2a\x99\x1e\xc9\xa8\x60\x96\x12\x9d\x0f\x75\x11\x1e\x65\x7b\x91\x66\xf1\x76\x87\x77\xee\xdf\x79\x70\xfb\xde\x9d\xfb\xd7\xb5\xb7\x4f\x7d\x8e\xaa\x00\xe6\xb1\x34\x3d\x5e\xd0\xac\x33\xe4\x68\x0d\xba\xfe\x7e\x9a\xd8\x76\x59\x5d\xd7\xc5\xfd\x85\xe2\xef\xdf\xba\xe1\x89\x64\xf0\x7f\xf4\x84\x32\xbb\xdb\xa1\xbc\x14\xfe\x62\x41\x7c\x1a\x90\x86\x86\xf9\x8e\xa5\x3b\xeb\xb7\xdb\x9d\x8e\xbb\x5f\xd6\xdf\x5c\xb3\xbf\xb0\x43\x4a\xfd\x92\x48\xe6\xd4\x25\x2b\x7a\xfb\xde\x68\xb4\x02\x72\x14\x36\x8e\x74\xb5\x47\xbd\xf1\xd0\x59\xed\x53\xaf\xb3\x7b\x6f\xbc\x7b\xcf\x59\x75\xe1\xfc\x34\xdf\x3b\xc5\xe2\x5a\x91\x67\x5c\xd2\x79\xf7\x94\x9c\xd1\xdb\xf7\xba\xa7\x23\x03\xd5\x89\x7d\xda\x59\x7e\x7e\x86\x31\x5f\xb3\xd3\xc4\x5e\xf6\xcf\x70\x51\xf9\x3e\xc7\x20\x6f\x88\x13\xdb\x25\x0b\x92\x51\x9a\x60\x18\xd9\x4e\x27\x2b\x8a\x4e\xc7\x25\x9d\x8e\x5f\x68\x86\x5f\x6f\x43\xc4\x6f\x98\x09\x22\x20\xc4\xa8\x39\xa4\x16\xdb\x38\x42\x99\xca\x55\x9b\xb1\x22\xb4\x0a\x17\xd3\xf1\x31\x0a\xe2\x26\x15\x47\xb3\x9e\x78\x95\x01\xff\x11\x26\x49\x52\x67\x49\xb3\x44\x49\x13\x83\xa4\x26\x4d\xac\x31\x56\x08\x93\xc5\x35\x59\x0c\x6d\x92\x79\x42\x85\x6f\x90\x55\x22\xd6\x7f\xfb\x0e\x26\xa7\x8d\x4b\xd6\x2a\x99\xa4\xdd\xe1\x2c\xcf\x6d\xf9\xa4\xd5\x06\x6c\x7b\xec\x7c\x3e\x99\x4e\xe7\xd2\x61\x08\x5e\xa3\x4e\xda\x41\x05\x46\x04\x9d\xf8\x88\xf7\x78\x99\x6c\x71\x16\xdc\xe4\x44\x24\x35\x22\x8f\x98\xc6\xcd\x4d\x63\x55\xfa\x38\x99\x27\xe0\xe0\x84\x84\xf4\xce\x35\x4e\x4a\x98\x71\x22\x00\x7f\x2e\xe1\x08\x33\xaa\x2f\x9e\xec\xd3\xc4\xe6\x8b\x08\x59\x1a\xee\xb1\x8a\x82\x9c\x24\xb4\x3f\x69\xed\xd8\xf8\x5f\x66\xb9\xb0\x5f\xbf\x4c\xe8\x1a\xb5\x90\x83\x3e\xdf\x1d\x22\x82\x76\xe0\xe9\x3e\x22\xc8\x86\xa7\x07\x88\x20\x0c\x4f\x0f\x11\x41\xff\xc2\x9f\xee\x1f\x22\x82\x3e\xdf\x1d\x20\x07\x75\x50\x41\x8e\x1b\x31\x7d\x09\x1a\xbb\xe4\xbc\xf1\xa3\x30\xea\xa8\xe1\x4b\x83\x7e\x92\x90\xe3\x04\x17\xe4\x20\xd9\x74\x03\xcd\x34\xaf\x04\xcc\x09\x65\x8a\xd9\x6b\x23\x2c\xfd\x90\x44\x3a\x82\xa1\x1d\xd2\x68\xe2\x73\x1e\x4a\x26\x89\x10\xea\xaa\x08\x85\x3b\x4d\xe1\x3f\xe7\x23\xbb\x74\xce\x12\x3b\xd6\x01\x0e\x95\xdb\x40\x9e\x26\xa6\x1a\x45\x22\xbe\x1b\xb9\xa8\xd1\xc1\xa9\x9f\x28\x05\x35\xb5\x7b\x0f\xc8\x41\x62\x9b\x1f\xc0\x5b\xd1\x61\x43\x87\xd2\xbd\xcd\xd9\x88\x5e\x45\xa9\xc5\xc2\x28\x3b\x39\x2d\x63\x3b\xf1\x99\xfe\x3a\xa1\x4f\xdc\xba\x4b\xba\x2c\xa9\xc8\xd5\xb7\xcd\x13\xa2\x66\xa2\xe3\x27\x76\x90\x70\x84\x4b\xd8\xb0\xa9\x39\x85\xca\x02\x9b\x87\xc7\x45\x62\x28\x51\x81\xe6\x54\x48\xd3\x9e\xaa\x18\xb8\x22\x5b\x38\xef\x12\xe2\x08\xcd\xd4\x48\xef\x9d\x32\x9d\x2a\x25\x29\xca\xc6\x71\x8f\xa3\xbe\xd4\x8c\x82\x24\xa5\x06\xc5\xbf\x11\xf9\x3a\xc3\x04\xbc\x3f\xbc\x4b\x4c\x01\xa8\x72\x55\xf9\x2e\x21\x9b\x8b\xc8\x48\xde\x14\x6c\x28\xbb\x6c\x2a\xea\x57\x35\xf2\x25\x73\x19\x88\x0b\xcf\x85\xb4\x06\xcb\x12\x3b\xd8\x82\x65\xa4\x15\xef\x16\x24\x5b\xcd\xdd\x94\x7d\x78\xfb\xc2\x3c\x0b\x15\x32\xd9\x2c\xe4\x5c\x24\x85\x52\xc4\x6f\x51\x9a\x61\x7f\x61\x9f\xd8\x19\xc6\x8d\x32\x39\x3b\xe5\x6b\x7a\x86\x15\x5b\x0b\x7e\x9e\x61\x39\xce\x24\x43\x0a\x8c\xa8\xf2\xe8\xa6\x23\xe8\xc0\x96\x08\xaa\x2d\x76\x44\xfd\xc4\x7e\x6c\x4b\x84\x62\x59\x0c\x57\x59\xd7\x3c\xb7\xbd\x3a\x3b\x9b\xe7\x2d\x9d\x22\xe4\x4e\x1b\x24\x7b\x78\xb1\x82\x20\xa2\x56\xc2\x7e\xc9\x58\xe8\x31\xeb\xdc\x4f\x4f\x2d\x81\x5f\x6b\x17\xe1\xd1\xc2\x98\x6a\x52\x2e\xd3\x41\x48\xce\x33\x4f\x27\x14\x92\xf1\x01\x26\xc4\xf2\x43\x2b\xc3\xe7\x76\x46\x12\xdc\x6e\x9b\x35\x24\xb2\x60\x36\x49\x66\x50\x4a\x30\xeb\x07\x89\xbd\x20\x9b\x0a\x4c\x63\x34\xe6\xb4\x95\xa9\xab\xb3\x01\x1e\x2b\x45\x9f\x21\x76\x32\x27\xeb\xc0\x4e\x7a\x94\xd0\x77\x89\x21\x02\x7a\x1d\xd9\x47\x09\x59\x8b\x78\x16\x35\xc7\x16\x87\x89\xbd\x71\xcc\xd9\x55\x06\xcb\x81\x9c\x28\xa3\x50\xaf\x0c\x25\xe8\x69\xd9\x6d\xd1\x61\x12\xf6\x34\xd1\xd8\xb8\x20\x42\x68\x52\x11\x20\x37\xb5\x36\x2c\x4d\xfc\x98\x6e\x11\x2e\xc3\xd4\xa2\x13\x53\x68\xab\xe6\xa8\x0b\x87\x93\x08\x34\xf6\x29\xa5\xf1\x58\x2c\x87\x1e\xb3\x23\x32\xc4\x4e\xd4\xe9\x8c\x58\x15\x9a\xca\xa9\xfe\x53\x40\xd1\x60\x84\x02\x8c\x9a\x1b\xb5\x58\xa8\x53\xb1\x49\xac\x80\x29\x5d\xf0\xf0\xb4\xea\x12\x02\x97\x1b\x27\x2c\x3d\xa8\x79\x54\xfc\x2b\xa0\xd1\x2e\xcc\x34\x48\x51\xa7\x83\x59\x89\x9c\xb0\xe4\x95\x79\xa2\x98\x35\xa5\x68\x9a\x9c\xba\xc9\xdf\x04\x33\x12\x2d\x9d\x4e\x1d\x31\xad\x81\x52\x4f\x1d\x16\x24\xa9\x8c\xcb\x36\x92\x34\xda\xe7\x87\x23\x4d\x26\x11\x8d\x35\x14\x3e\x6d\x0d\x89\x2b\x40\xf1\x28\xcc\x4a\x61\x33\xaa\xb7\xd2\x44\x30\xf5\xd1\x24\x99\x61\x09\x93\xdb\x6e\xdb\xfe\x38\x52\xd4\x93\x74\xbb\x9c\x7e\x6c\x5f\xb8\xa9\x15\xeb\xbc\x87\xf1\xc8\xcf\xf3\xc8\x9c\xf9\x6a\xc2\x17\x98\xc4\x55\x42\x03\xdb\xe1\xcd\x7b\x5e\x72\x05\xdc\x91\x9c\xc4\xa2\x93\x51\xb9\xfd\x86\x74\x30\x0a\xf7\xf4\x25\x3d\x3f\x96\xad\xc5\x21\xd4\x9f\x84\xca\xeb\x62\x08\x67\x06\x7e\xc2\x9b\x30\x40\xf5\x3e\x18\x2b\xe1\xb5\xee\x15\x23\x03\x92\x62\xa1\x34\x58\x30\x41\x12\xb2\x37\x29\xe7\xde\x2b\xf0\x4b\x61\x53\xb3\x83\x41\x12\x6e\x8e\x7e\x4c\x7d\x66\xdf\x34\xce\x24\xb9\x8d\x37\x26\x72\x6c\xdb\x8c\x86\x42\x4c\x24\x25\x0a\x0c\xf6\x4c\x71\xbf\x24\x14\xc4\x9b\xf5\xf7\x5f\x4b\xae\x41\x2a\x0d\x17\x44\xea\x97\x5f\x93\x5b\xe9\x15\x17\xe5\x86\x77\x75\x81\x52\x0b\xbd\xa8\x89\x0b\x0b\xb8\x64\x3b\x4a\x48\x92\x90\xa3\xa4\x64\x46\x44\xa2\x11\x8e\xb1\x29\xf6\x40\x4a\x1a\x67\xd3\xa6\xb3\x46\x9c\x52\x31\x95\x94\x4f\xc4\xf3\xc4\x16\xa3\x0c\x0e\x51\xe0\x4d\x6e\x87\x25\xbb\x22\x18\xbe\x36\x02\x9f\xbe\x75\xa0\x63\x66\x37\x72\x1b\x35\xb7\xbb\xca\x97\xef\x97\x5e\x41\xd6\xb5\xcc\xce\x3b\xbe\xf3\x7f\xe9\x35\x46\x6b\x72\x93\xc6\x64\x2f\xc9\xf3\x3f\xee\x3b\xd8\x10\xe8\x51\xe3\x6a\x6a\x93\xf4\xda\x6d\xfb\xc4\x66\x95\x88\xec\xc2\x46\x5e\xd8\x09\x6e\xf6\x9b\x52\x7a\x10\x09\xd7\x61\xa0\x21\x2e\x83\xce\x82\xd7\x66\x2f\x29\xa3\xd0\x8a\x0b\x2f\x2f\x01\x81\xb6\x8d\xbc\x28\x4c\x59\x98\x76\x85\x01\x4f\x9e\xc7\xfc\x60\x58\x4b\x26\xc8\x5d\xf1\x79\x08\x91\x94\xfa\x17\xdd\xf3\xf3\xf3\xee\x22\x8a\x97\xdd\x2c\x0e\xc4\x11\x62\x3e\x92\xd6\xd9\xf4\xc3\xfb\xa7\xdd\x07\x70\x77\xf1\x2c\xb5\x19\x59\x73\x60\x9d\xc0\x1e\x90\xf2\x56\x8d\x48\x48\x20\x19\x9c\xc0\x62\x22\x27\x33\xe8\xf6\x24\xa6\xc6\x42\xa4\xe3\xba\x3e\x4e\xc8\xcf\x09\x6d\x18\x42\xbe\x1d\xbd\x03\x27\xe3\x41\x52\x90\x37\x09\xdc\xd2\x82\x18\x88\x7c\x4c\x68\xd4\xfb\xf0\xf6\x05\x79\x9b\xd0\x9f\x93\x5e\xad\x2c\x79\x0f\xa9\xaa\x38\x79\xae\x0f\xc6\x2f\x1a\x4e\xbd\x08\x93\x5b\x15\x21\xdd\x2b\xf9\xb6\x8a\xce\xc9\x13\x7e\x9e\x3b\xe8\xfe\xe8\x76\x7f\x9d\xf5\xc9\x07\xfe\x36\x9d\x77\xba\x3d\x9d\xf4\x94\x1f\x8e\xe7\x7d\xf2\x4b\x42\xfb\x3f\xd9\x83\x8b\x7c\xf0\x3d\xee\x93\x97\xfc\x6d\x32\xe8\xde\x9f\x75\x6e\xf5\xc9\x23\xfe\x36\x9d\xf3\xc7\x67\xf0\x61\x3a\x3f\xe8\x3e\xe5\x07\x61\x9e\xf4\x2d\x54\x9a\x0d\x06\x83\x01\xfc\x3e\x84\xdf\x03\xf8\x7d\x62\x7d\xf6\x79\xdf\x19\xff\x65\x32\x9d\xce\x66\x7d\xf2\xeb\xd5\x59\x8d\x9c\x5f\x8a\x76\x20\x2b\x48\x37\x87\x4f\xad\x59\x27\xdf\x48\xb9\xd5\x3f\x21\xdf\xeb\x5a\x2b\xf5\xcd\xfa\x27\xe4\xbb\xfa\x89\x4a\x9f\x0c\x41\xf4\x31\x41\x94\xb2\x92\xe7\x13\x21\xc6\x67\xa8\x55\x26\xaa\x75\xa2\x3b\x54\x1e\x97\xd0\xf3\xf0\xcc\x0d\xfc\xb9\x75\x1a\x25\x29\x82\x7b\x53\x3b\xa4\x5f\x73\x4a\x96\x0c\x23\xe1\x99\xb7\x64\x4f\xe1\xee\x85\x86\x5a\x91\x3d\xca\xc0\x81\x21\xdf\xd1\xaf\x92\x57\xd6\xac\xff\xf5\x59\xf8\x1b\x8f\xa0\x1e\xc2\xea\xc8\xda\x43\xd8\x90\xb9\x45\xa6\xe8\x8b\xef\xce\x6c\x46\x24\xc3\xf2\x95\x27\xe2\xe2\x84\x78\x0c\x57\x52\xa8\x13\x25\x76\x88\x9d\xd0\xf0\x57\x2f\x56\xb9\x1e\xc2\xe0\x88\xf5\xdb\x44\x94\x60\xdb\x11\x21\x9d\x43\xd8\x21\xfd\x21\xe1\xf9\x6e\x80\x02\xde\xf1\x5f\xaf\xa9\x59\x9c\x67\x80\x0d\xfa\xda\xe3\xa0\x88\x6d\x2e\x36\xb9\xb2\xb0\x43\xc3\x0c\x34\x03\xc9\x37\x09\x2e\xdb\x28\xc8\x0f\x5b\xe4\xc0\xe5\x81\x8f\xa6\x26\xfa\xfc\x85\x9d\x68\x71\x00\x42\x94\x26\x13\xad\x97\x38\x9c\xb5\xdb\x89\x74\x82\x6b\x33\xaa\xd2\xf1\xfe\x9d\xd2\xad\xab\x80\xb6\xdc\x68\x80\x8f\x05\xc2\x42\x94\x1f\xb1\x12\x70\x40\xa9\xb3\xfb\x0b\xdb\xa7\xc3\x01\x89\x8c\x15\x16\x0d\x90\x72\x2c\x01\x74\xc9\x39\x29\xfa\x8b\xc4\x52\x84\xc7\xc3\x7b\xce\x03\x12\x69\xe6\xe6\x01\xa5\xfe\x78\xe8\xec\x62\x2c\x6e\xd2\x23\xec\xf2\xe1\x57\xae\x27\xed\xe1\x80\x67\x78\x94\x38\x90\xf1\x65\xe2\x3c\x4b\xb0\xaa\xab\x04\xc4\xa5\xda\x14\x21\x22\x3e\x2e\xe4\x76\xe8\x8a\x28\xac\x66\x67\xfc\x85\xed\xd2\x70\x12\xf3\x2e\x52\xd6\x1d\x8a\x7b\xc0\x7d\xfa\x2a\xb1\x77\xef\xde\x23\x77\xbb\x7a\x20\x05\x5b\xae\x48\xdd\xdd\xdf\xbd\x7b\xd7\xfc\x02\xb8\xf2\x68\x28\x31\x2a\xda\x08\x4d\xfe\xdf\xeb\x40\x43\x5f\xc8\xaa\x6f\x77\xe3\x32\xc0\x7c\x41\xbe\xbe\x7e\x68\x27\x03\x52\xf9\x7f\x26\xf5\x8e\xc1\x9e\x7b\x41\x07\x64\xde\x64\xa3\xa9\x50\xbf\xc0\x60\x88\x81\x1c\xb0\x97\x91\xeb\x83\xc3\xf7\x5c\x95\x43\x2f\x0b\xa3\x45\x87\xee\x92\x80\x76\xa4\xb1\xc8\x68\x6e\x63\x71\xb8\x7e\xc0\x8f\xee\x32\x93\x2a\x0f\x95\x89\x89\x2a\x38\xd1\x3b\xed\xf6\x33\x39\xc0\xfc\xdb\x08\x33\x3a\xbc\xf7\x05\x2b\x1d\xed\xce\x6d\xf0\xb0\x4b\x16\x9d\x0e\x09\x3b\x1d\xa8\xa9\x67\x80\x35\x28\x4f\x01\x70\x35\xd6\xa5\x21\xc9\xf6\xef\x69\xe8\xe4\x18\x6a\xa8\x22\x81\x82\x78\x7f\x20\x43\x74\xa9\xda\xda\xed\x78\xef\x8e\xd1\xab\x0e\xb8\x0f\x7d\x6a\x00\x67\xd6\x39\x7a\x5a\x81\x1a\x7c\x7d\xd2\x2a\xd0\xda\x84\x9b\x46\x38\xa2\xbe\x26\xcc\x01\x4f\x90\x55\x45\x74\x38\xf8\x22\xea\xf8\x05\x5c\xa7\x94\x64\x02\xed\x83\x96\xc8\xee\xdd\x7b\x5f\xf0\x87\x4e\x44\x76\x5b\xb4\xd3\x89\xdb\xed\x3b\x2d\x1a\xe7\x79\x26\x20\xe4\x2f\xaa\x90\x60\xc7\xeb\x03\xc7\x31\xd7\xe2\x2f\x22\x97\x26\xcb\x32\x69\x94\x4c\xb2\x4e\x67\x46\x99\x5e\x9a\xa4\x22\x4b\x60\x80\x23\xc7\xb8\x30\xbf\x0a\xeb\xa0\xac\x1b\x90\x8c\xde\x1f\x0d\x5a\x34\x6b\xb7\xdd\xfd\xc1\x08\x7b\x94\xc3\x4c\x92\x49\xd6\xed\xce\x68\x32\x09\x3a\x6e\x77\xc8\xdf\x83\x4e\xb7\xeb\xce\xa4\xd3\x3c\x0e\xc5\x83\x56\x49\x25\xa5\xd1\xe4\x57\x5b\x29\x1c\x08\xa0\xee\x62\x30\x55\x44\x25\x6e\xb1\x38\x5d\xc1\xd1\x86\xf5\xb2\x50\x08\x2e\xd3\xcf\x77\xef\xde\xc3\x24\xa5\xb7\x12\x3b\xed\xf3\xe7\x32\x38\x42\xb9\xde\x37\x44\x55\x2e\xeb\x86\x85\xb8\xf9\xf2\x0c\x48\x2a\xa4\x43\xa9\xef\xc4\x17\x6a\x29\x74\x7d\x30\xf2\x3b\x1d\x2c\xbc\xc3\xfb\xb3\xb1\x1d\xed\x87\x22\x94\x0e\x09\x69\x84\x8d\xfc\xd8\x51\xdb\x08\xf8\xc3\xa5\x3e\x26\x9d\x4e\x54\xfa\xe2\xaf\x96\x83\xcb\x2e\xd9\xd5\x07\xd0\xd5\xa8\xdd\x06\x0f\x61\x70\x5f\x6f\x47\xe0\x3e\x0d\x62\x9d\xf0\xc3\xd9\xd8\x66\x1d\x1a\x8e\x91\xc3\xff\x77\x10\x89\x68\x8b\x37\xc8\x3a\x90\xbf\xe2\x41\x9f\x84\x7b\xf7\xa5\x21\x8b\x83\xb0\x66\xfe\x4b\x2f\xa5\x5a\x68\x4f\xbe\x49\xe8\xba\x20\x3f\x26\xf4\x07\xd0\x01\xf8\x26\x21\x6b\x64\x21\x67\x48\x76\xd0\x8e\x33\x24\x68\x8f\x3f\xa3\x7d\xf8\xfd\x2f\xc8\x19\x16\x98\xa4\x99\xcc\xfc\x23\xcf\xfc\x19\x7c\x1a\xc3\xef\x1a\x7e\x0b\x91\x8d\xa9\x6c\x69\x46\xd6\xa8\x0f\x9f\x1c\xf8\x1d\xc1\x2f\x85\xdf\xbf\xc0\xef\x04\x7e\xa7\x53\xf8\x33\x83\xdf\x9f\xe0\x37\x17\x75\x85\x59\xa3\x9a\xdf\x9b\xc4\x4e\xc9\xa0\x3c\xdb\xec\xdf\xde\x6d\xb7\xc3\xbd\xe1\xee\x7d\x30\x5b\x62\x24\xc5\xe3\xd4\x69\x14\xc8\x17\x24\xce\xe8\x7a\x91\xae\x9c\xdd\x21\x81\xe8\xb0\x30\x88\xa0\x6e\xf2\x60\x40\x84\x0a\xcd\x9d\x3b\xb7\xc9\x79\xc2\xdf\xcf\x13\x78\x2b\x48\x94\x35\xc9\xfc\xcf\xed\x38\x23\x69\x2f\xf1\x4e\xd9\x92\xe1\x82\xf8\x4d\xb9\x10\xac\xbd\x86\x3a\x0e\xbc\xaf\xdc\x24\x39\x8f\xe2\x79\x41\xdc\xa6\x42\xad\x54\x2a\xd3\xa4\x3d\xcf\x0d\xc3\x28\x7d\xc4\x0e\x1e\xb9\x09\x3f\x96\xcb\xb0\xb6\x9c\xca\x65\xcb\x05\xf1\x1a\x11\xa5\x55\x90\x4b\x57\xee\xed\xf6\x13\xb9\xf8\xa5\x06\x0f\xd9\x6e\x8b\x65\xc7\x0e\x2b\xbb\x44\x9e\xb7\x58\xbb\x8d\x72\xc4\xd7\xe9\x82\x24\xd9\xd6\xd8\x7d\x56\x6a\xb0\x02\x5e\xa6\x5d\xac\x83\x32\x43\xbb\x6d\x1b\x10\xe4\x39\xea\x23\x61\x6a\xa9\xdb\x02\xcb\x49\x4e\x07\x14\xe2\x76\x0a\xc1\x26\x7f\xf8\x0c\x1e\x70\x41\xb2\x86\xb6\xa9\x50\xdb\x02\xe9\xa0\xdc\x7f\x5b\xe1\x26\x76\xda\xed\x21\xc8\x38\xbc\xcc\x66\x93\x01\xe8\x2a\xe4\x39\x13\xfb\x77\x41\x82\xc6\x21\xeb\x81\xce\x70\x9e\xa3\xcf\x77\x85\x6e\x71\x95\x95\x2d\xc8\x22\xe3\xf3\x67\x0e\xbf\x2b\xf8\x3d\x85\xdf\x25\xfc\x9e\xc1\xef\x09\xfc\x5e\xc2\xef\x31\xfc\x9e\xc3\xef\x01\xfc\x5e\xc0\xef\x21\xfc\xbe\x86\xdf\x77\xf0\x7b\x04\xbf\x8f\xe1\xf7\x67\xf8\x7d\x03\xbf\x1f\xe1\xf7\x2d\xfc\xbe\xcf\xb6\xe9\x8a\x1b\x17\x02\x61\x9e\x2f\x32\x12\xd0\x01\x59\xf0\xf5\x4f\xba\x30\x68\x0d\xc9\x29\x6d\x0d\x05\xcb\x97\xe7\xb6\xc2\x12\xcf\x52\x52\xa9\x78\x53\x34\x2a\xde\x04\x77\xca\x67\x4b\x0a\x41\x9d\xf5\xb3\x9b\x9e\xf2\xc5\x3b\xed\x81\x7b\x1b\x95\xbc\x88\xdd\x13\x7e\xda\x56\xef\x75\x32\xe6\x90\x98\x97\x7b\x5f\x26\xc2\xae\xd8\x4c\xfb\x1e\xd2\x48\x24\x78\xe8\x51\xb0\x47\xcb\x8b\x30\x65\x46\xeb\xd3\x68\x12\xcc\x48\x26\xed\x67\x17\x99\x23\x7d\xaf\xb6\x14\xa5\xfb\x62\x2f\x0d\xeb\x9c\xba\xe8\x38\x1a\x65\x74\x95\x8d\xf8\x21\xdd\x0f\x33\x56\x2c\x3a\xd4\xaf\x8e\x36\xc9\xe8\x3c\x33\x8d\x70\xe7\xd0\x86\xdf\x6e\xdb\x1f\x74\x13\x79\x8e\x3a\x88\x52\x3f\xcf\x51\x57\xfe\xe5\x44\xe4\x63\xbc\x59\xa1\x66\x27\x80\xaf\xf2\xaf\x86\x0e\x06\x8f\x83\xc8\x87\xb2\x04\x93\x17\xe1\x1b\x05\x3f\x8a\xb5\x28\x2c\x44\x0b\x5c\x12\xff\x82\xf3\xdf\x19\x84\xd3\xd4\x0e\x5a\xf9\xa0\xe1\xa6\xf9\x21\x17\x1b\x6c\xf0\x62\x9a\x2c\x16\x44\x4b\xb0\xcf\x22\x7f\x2e\x1a\x6c\xb7\xe3\x6c\xa2\xb2\xcc\x54\xdd\xed\xb6\x6d\x50\x06\xc6\x02\xf4\x7a\x73\xe3\x8c\xbe\xce\x1c\x55\x4d\xbb\x1d\xab\x96\xcc\x1c\xa7\x32\xc7\x38\xa3\x97\x99\x03\x0b\x46\x34\x09\x3a\xc3\xd9\xd8\xce\xe8\x32\x23\x41\xa7\x83\x1d\xbb\x89\xa8\x06\x92\x22\xa5\x9e\x07\xe2\xa3\xf7\x26\xc3\x85\x31\x7c\x2b\x41\x22\x71\x9e\xc7\x1b\x15\xb4\xdb\xe8\x33\x18\x93\x2d\xa3\x01\x5a\xca\x8d\x85\x40\xdd\x42\xa3\x4d\xf5\x4a\xcd\x8f\x58\x00\x25\x25\xbb\x7a\xae\xc4\xe2\xaf\x39\x5d\x60\xae\x35\xf5\x2b\xa3\x6f\x25\x15\x16\x19\x55\x58\x55\xed\x8c\x5f\x67\xce\x59\x49\xc5\xa2\xa3\xa7\xd0\x51\xd4\xe7\x1d\x82\x65\xb7\x25\xb1\x88\xd7\x19\x35\x72\x17\x19\x3d\x06\x9c\x9a\x44\xbe\x54\x85\xa1\x63\x19\x3d\x2f\x1b\xff\xb9\xde\xd0\x19\xe4\xdd\xec\xbc\x4f\xe9\xe3\x04\x1b\xcb\x4a\xac\x1f\xcd\xe5\x25\xd6\x8f\x6a\x99\x89\xe1\x8f\x5a\x68\x62\xf8\x73\x33\x54\x6a\xe6\x54\x40\xae\xb6\x15\xbf\xdd\x16\x52\x8b\x8c\x9e\x64\x65\x9e\x31\xf4\xee\xef\x03\x20\x4c\xe3\x8f\x59\x39\xf9\x05\xa1\xad\xff\xd6\xad\x8b\xd9\x00\xa7\xd5\xca\xd0\x15\x7f\xd7\x71\xa9\x91\x38\x27\x66\x73\x4e\x9e\x88\x39\x19\x89\x25\x4b\x90\x6c\xbb\xcd\xc7\x4e\x2d\x90\x22\xed\xcf\x43\x57\x15\x17\x9c\xbe\xc5\xe9\x8a\xcf\x05\x73\x1e\x5c\x02\x64\x30\x43\x2a\x33\x69\xa1\x98\x97\xa0\x33\xc4\x58\xcf\x87\xda\x2c\x3a\x36\xa6\xa0\xd1\x1f\x98\x4e\xba\x71\x23\xff\xb9\xc8\xff\x17\x31\xeb\xe6\xed\xb6\xbd\xa0\xe8\xf3\x3b\x03\xd4\x59\x60\x02\xbe\x77\x5c\xbe\x19\x2e\xca\x1b\xb0\x25\x1d\x8c\x96\x65\x14\xa6\x65\xa7\x23\x58\x81\x33\xea\x4e\x96\x33\x7d\x7a\x3f\xcb\xf3\x53\xf1\xe1\x84\x86\x99\x7d\x46\x58\x86\x47\xa7\xe3\x12\x6f\x1d\x7a\xe2\x94\xb8\xed\xd0\x13\x81\x8e\x53\xda\x1a\x14\x7c\x21\xd7\x67\x4f\x98\xd4\x92\x8b\xf3\x25\xb3\xe6\x4b\x5e\x6d\x73\xbe\xf1\xa1\x9b\x0b\xa1\xd4\xa2\xbe\xa8\xba\x59\x7a\x1a\xc5\x7e\x7a\x89\x46\x41\x57\x74\x4b\x76\xa3\x33\x24\x72\xdf\x3b\x90\xc3\xc2\x77\x51\x13\xb1\x07\x99\x70\x84\x71\x01\x08\x0b\xdb\xed\xfa\x3e\xc3\x91\x7c\x94\x55\x36\x4c\xb1\xdd\xe6\xf9\x4a\x9e\xf9\x3f\xb5\x1f\x72\xd3\x6a\xec\x4b\x29\x50\x94\x19\xb6\x6d\xc0\xc6\x26\xeb\xd1\xef\xf8\x49\x66\xa1\x45\x4f\xa0\x7a\x27\x3b\xfe\x38\xd3\x3b\x6f\xd9\x09\x90\xfe\xfa\xe3\x15\x6d\x0d\x1c\x34\x13\xf0\xd9\x2b\x38\x2c\x72\x04\x69\x19\xc0\xd5\x20\x5e\xd9\xee\x61\x46\x42\x4a\x2f\xd4\xc1\xde\x24\xce\x43\x31\x49\x9f\x56\xf9\xaa\x4f\xc2\x63\x9e\x87\x52\xb0\xd8\xa2\x0b\x2c\x3d\xef\x6b\xd9\xcb\x82\x0c\x07\x20\xcd\xbc\xdc\xbf\x77\xf7\xee\xed\xbb\xf5\x1e\x70\x04\xa2\x91\x9c\xc7\x72\x34\xe0\xc6\xdf\xe0\x46\x84\x69\xcd\x25\xd0\x4f\x61\x30\x56\x23\x8e\xd2\x12\x93\x4d\x35\x17\x75\x22\x7b\x5d\xdd\xd7\x04\x89\x91\xda\xce\x82\x33\xfa\xae\x5c\xd5\x39\x5b\x21\xf2\xb5\xf4\x3e\xc8\x49\xf1\xe7\x2a\x29\xaa\x9d\xb1\xb6\x3e\x7d\xca\xfe\xa6\xf6\xae\x9b\x57\xb1\x6d\x07\x4a\x32\x5b\xc9\x65\x83\xd2\x16\x00\xc3\xe9\xe0\xfa\xda\x33\x98\x1f\x1b\x7b\xcb\x27\xf7\xac\x69\x87\x30\xa9\xef\x9d\xc1\x90\x94\xc8\x17\xb3\x5c\x70\x26\x71\xb9\x0a\xc4\x25\x73\xbb\xa5\x77\xed\xb6\xed\x65\xb6\x00\x49\x1e\x0b\xc7\x26\xeb\xa8\xbf\x60\xa7\xd2\x99\x5a\x4f\x05\x6c\x47\xe2\x44\x50\x9b\x09\x02\xc4\xfa\x94\x90\xa1\x99\xe0\x40\xba\xe0\x0c\xc9\xcf\x06\x43\x02\xf3\x16\x74\xe8\x44\x9b\x08\x91\x0a\x01\xeb\x19\xde\x3c\x87\x51\x10\x79\x6e\x00\x13\x1d\xac\x8d\xa2\x44\x70\xe5\xb2\x2e\x5c\x56\xa6\x57\x99\xa2\x72\xf2\x31\xa9\xff\x31\x74\xaa\x5c\xfe\x38\xa4\xa4\xbe\x95\xe9\xd2\xaa\x0b\x21\xf4\x97\x7f\x92\x2f\x9f\xe9\x2d\xdc\x6f\xd1\xc7\x49\xbb\x6d\x56\x84\x6b\x15\x6c\xd2\xc0\x48\xa6\x57\x49\xd8\x00\xf3\xe7\x2b\x70\xaf\x57\x1d\x8e\x6f\xbb\x36\x0e\x62\x21\xea\xc1\x59\xdf\x4e\xf8\xbf\x05\xae\x1e\xd4\xb0\x90\x00\x40\x0e\x5e\x79\x4f\x8a\x03\x12\x91\xae\xde\xc6\x36\xcc\x81\xfa\xc2\xa0\x1b\xaf\x9d\x48\xb0\x13\xf0\x91\x1f\xdf\x30\xbb\x63\x37\x9e\xd8\x20\x8f\x12\xea\x00\x29\xe9\x91\xae\x0e\xf9\xa2\x64\x55\x06\xb8\x83\x1c\x84\x2b\x47\xa4\x05\xc6\xa4\xf1\xa0\x06\x37\x38\x02\xa9\x35\xbc\xc9\x58\x8b\x06\x04\x70\x03\x24\x04\x25\x72\xd6\x8c\xb0\xcc\x20\x95\x4f\x47\xa2\x92\xb1\x5d\x1b\x49\xec\x88\x5a\x01\xe6\xfa\xd8\x63\xbd\xf7\x87\x99\xed\x93\x34\xc3\xe6\xc0\xbf\xc9\x9c\x6b\x2a\x1d\x37\xd5\xe9\x28\x32\xd4\xb0\xca\xea\xbf\x49\x70\xa5\xfe\x8f\x99\xa3\xe9\x77\xac\x0a\xa1\x1d\x63\xac\xc6\xb2\xdd\x0e\x05\xfd\x62\xa7\x7c\x15\xcd\xa3\xcf\x77\x6f\x23\x47\x57\xee\x34\x81\x63\xb6\xf8\x36\x33\x80\x53\x39\x25\x74\x3f\x26\x18\x17\x41\xa7\x53\x14\xe4\x79\x83\x30\x0c\xae\x5d\x95\xe6\xe8\xf3\x8c\xc8\x5b\xf6\x68\x53\x2f\xb4\x59\x13\xa7\x34\xad\xc5\xc4\xa3\xcf\x13\x3b\x36\xd4\x42\x51\x81\x2b\x41\x4a\xc0\x7f\x63\x64\xfa\xdc\x7a\x9e\x61\x46\x5f\x24\x76\x84\xf5\x5a\x16\xd2\xf7\x99\x0d\xb6\x6e\xb2\xe6\x08\x6f\xda\x39\x87\xd2\x56\xe1\x7d\x66\x7b\xc4\x87\x4b\x17\xc2\x1a\xb3\x09\x9b\x0e\xaf\x62\xc4\x29\xbc\xd4\x24\x24\xa3\xef\x13\x3b\xc1\xa3\xac\xb7\xa9\x91\x6a\x7b\x62\x50\x30\xc9\x4a\xd5\x26\xf3\x02\x4d\x7e\x57\xfd\x4f\x24\xc7\x56\x10\x37\xcf\xed\x18\x2c\x36\xe9\xad\x4c\xba\x84\xc1\x24\xee\x45\xb1\x7f\xe2\x87\xf4\x95\x99\x06\xfa\x95\x5e\x14\xd0\x27\x66\xaa\x3e\xa9\x7c\xa8\xe4\x55\x27\x95\xa7\x66\x2a\xcc\xd7\x5f\xea\x29\x50\xfa\x65\xa5\x34\xe7\x7d\x1e\x55\xeb\x93\xb6\xab\xcf\xcc\x54\x81\x27\xfa\xed\x66\x9a\xc4\xdd\xaf\x95\xb6\xdc\xe4\x94\x7e\xa9\x53\x70\x41\x5e\x64\xf4\x79\x66\x38\x0a\xb8\x95\x6d\xba\xf8\x78\x61\xea\x4e\xcb\x33\x7f\x68\x08\xbb\xc1\x24\x49\x9f\xc6\x22\xb9\x23\x11\x5f\xf2\xc2\xc4\x55\x22\x5c\x8f\xca\xa9\x03\x37\xdb\x8a\xf2\x49\x46\x19\x5f\xb0\x4c\x85\x49\x4e\x7d\x63\x3b\xeb\x50\xd4\xef\x23\xe2\x0b\x1e\x90\xbf\x87\x1d\x3b\x1e\x23\x07\x75\x62\x88\x2d\x8c\xfe\x82\x30\xc9\x3a\xf4\xab\x04\x6c\x8f\x44\x49\x5f\x64\xe5\xb9\x7c\x8c\x1d\xb5\xe2\x31\x99\xdc\xef\x8b\x32\x9b\xf2\x97\xb1\x3b\x19\xcc\x1c\x75\xc8\xe2\x2b\x77\x47\x46\x68\x40\x7d\x84\x1d\xbe\x4b\x8b\x16\x3c\x59\xd5\x18\x75\x3c\xdd\x6c\x22\x13\x3f\x43\x9d\x04\x93\xac\x20\xaf\x3e\x01\x97\x1c\x51\xb0\xb5\x1f\x07\xd1\x31\x07\x16\x1b\x46\x14\xca\x5e\x96\x69\x66\x45\x52\x67\x3d\xda\x2b\x02\x1f\x04\x8a\xeb\x95\xfc\x29\x53\xcb\x18\xc7\x72\xbf\x8f\x3a\x5f\x25\x72\xe3\xc0\x1d\x75\x51\x08\x37\x4f\x9d\x90\xe3\xd4\x91\x95\x90\x27\x59\xc3\x05\xb4\x82\x5f\xc2\xce\xc7\xad\x20\x1f\xae\xcc\xa9\xc8\xa4\x20\x4f\xaf\xcc\x57\xde\x95\xfc\x72\x1d\xe2\x80\xbe\x34\xda\x0c\xba\x01\x2d\x7c\x84\x1c\xf9\x1c\x8e\xbf\x4a\x6c\x86\x1d\xf8\xed\x40\x17\x0b\xf2\xf2\x8a\xda\xa1\xe6\x5a\x85\xe0\x15\x89\xe3\x0c\x17\xe4\xd1\x55\x65\x1b\x80\x81\xb2\x65\x20\x43\xf2\xec\xba\x9e\xf1\x01\x2e\x6f\x5b\x36\x08\x94\x71\x02\x65\x26\x81\xb2\x0a\x81\x16\xe4\xdb\xab\x20\x14\x67\x0b\x55\xfd\x98\xd3\x6f\x0a\xa5\x7e\xbd\x7a\xac\x8d\x05\xa5\x20\x5f\x5e\xd5\x82\x9a\xd4\x46\x23\x9f\xa9\x46\xbe\xaf\x5f\x5f\x89\x3c\xeb\x13\x96\x3a\x29\x91\xb1\x9a\x6a\x01\xf9\xab\x2a\x8c\xa0\xf3\xe0\xb6\xdb\x4f\x52\xfb\x45\x46\xd6\x7c\xd1\x76\xbe\xcf\xec\x5b\xd9\x66\xf4\x78\x56\xe2\x35\x34\x36\xbd\x18\xb6\x2b\x22\x36\xa4\x4d\x17\x20\x31\x1e\xbd\x07\x7d\x29\xa3\xc7\xb8\x69\xbb\x61\x72\xbb\x29\x30\x26\x62\x2e\x72\x40\x5e\x65\x98\xa8\x3d\x82\xbf\x3f\xb9\x12\xb0\x11\x80\x62\x18\xb0\x39\x88\x2c\x32\xa8\x52\xcd\x19\x5e\xc9\x87\xeb\x7a\xf7\xb5\x57\x5a\xc1\x49\xbf\x39\x99\xcd\x30\x5e\x33\xf3\xa6\x67\x54\x46\xc0\xde\x50\x66\x61\x86\x44\x28\xcc\x20\x3e\x3a\x61\x19\x2e\x38\x28\x6a\x5a\x72\x50\x9e\xfe\x15\xa0\x18\xd7\x4c\x57\x83\x52\x8a\xaa\xea\xa0\xf0\xc9\xc9\xc1\xf8\xe5\x6a\xb4\xb2\x86\xcb\xd4\x2a\xaa\xc9\x81\x40\xb3\xda\x7b\x79\xa5\x2f\xff\xea\x4a\x2f\x44\xa5\x7c\x19\xe0\x15\x3e\xba\xba\x42\x40\x4c\x9e\x0b\xe5\xab\xd4\x08\x8d\x3d\x66\xe5\xf5\x8a\x03\x4d\xa4\xe4\x30\xc3\xa2\x6e\xc9\x04\xf0\xfa\x9f\x7d\x3a\xc0\x72\x07\xa1\x93\x19\x11\x15\x77\x10\x22\x8f\x65\xdd\x82\xe6\x79\xcd\xdf\x5e\x5d\x73\x13\xc4\xe5\xa5\xa0\x23\x0e\x60\x69\x45\x49\x2c\xa5\xa9\x36\x5a\xc1\x84\x95\x7c\xbc\xec\xdf\xc7\x0c\x63\xf2\xe9\x33\xcf\xcc\xcc\x01\xff\x35\xc3\x84\xf3\x38\xfc\xf9\xcb\xeb\x3a\xd1\xaa\x75\xc2\x06\x76\xfe\x6a\xb8\x4d\xbe\x5e\x82\xfe\x36\xc3\xd8\x61\xd5\x8b\xd0\x82\x63\x94\x30\x58\xa5\x50\x1a\x7d\xf5\xee\xf5\x2b\xd4\x14\x09\x42\x31\x9c\xca\x9d\x7a\x93\x9a\xb9\xa8\xa2\x49\xa3\xfc\xa6\x95\x7c\x94\x51\xb3\xbe\xcb\xe8\xc7\xa4\xe7\xc5\xcc\x4d\x99\xf0\xa5\xf1\xe1\xed\x0b\xf2\x03\xa4\xc6\xec\x2c\xfa\x58\xa6\x8e\xbe\xcb\xc0\xb5\x3a\x3f\x62\xd4\x0a\xa0\xc6\x78\xa6\xdf\x65\x52\x05\xf9\x63\xc5\x65\x1a\xc6\xe4\x87\xb2\xa6\x5a\x23\xcd\x35\xfd\xb0\xad\xa6\x42\xfb\x6b\xfd\x3a\x33\xf5\x44\xcc\x58\x2d\xc2\x70\xb8\x31\x74\x84\x70\xc4\x91\x28\xcb\xfe\xab\xf2\xf0\x6a\x18\xe8\xf8\xc4\x32\xfa\x97\x19\xa0\x59\x43\x7a\x5d\x84\x0a\x70\x67\x55\x0e\x06\x68\x6d\x0b\xdd\x45\xd9\xc3\xb0\x74\xac\x6c\x85\x65\xf7\xbe\xca\xaa\xba\x4b\xc3\x11\xdb\x70\x44\x29\x6c\xc6\x05\x02\x04\x0f\x57\x1e\xf7\x98\x19\xa5\x87\xcd\x9c\x75\x31\x62\x9f\xef\x8e\xbf\xce\x24\x62\xec\x10\x93\xd6\xa0\xc9\xc5\x08\xc7\xa9\xd4\x35\x80\xf0\xc3\x58\xc7\xab\xde\xd6\xc9\x64\xdc\xe4\x95\xc5\x67\x89\x9d\x92\xeb\x8a\xda\x21\xc6\x8e\x09\xd5\x16\x90\x1a\xfd\xbe\x00\x94\xd7\x8d\x40\xc8\x4f\x99\x9c\x74\xb4\x4a\x94\x46\xf2\x37\x99\xdd\x60\x5f\x89\xd7\x3a\xd2\x5f\x69\xd5\x00\x8e\x56\x3d\xe2\x51\x97\xb8\xb4\x35\xc4\x23\x70\x85\x67\x05\x4d\x1e\x45\xc2\x71\xd8\x13\xa1\x38\x13\x27\x1c\x05\x2c\xb5\x16\x70\xd1\xde\x6e\xa7\xbd\x98\x85\x10\x25\xd5\x0e\xe4\x23\x55\x69\x24\xe8\x25\xa9\x9b\xfa\xde\x5b\x78\x7d\x1a\x82\xe6\x6f\x35\x85\x04\xbd\x23\x2f\x5a\xae\xfc\x80\xc1\x0d\x51\x04\x15\x29\x08\xdc\x80\xb6\x06\x18\x13\x51\xfd\x51\xe2\x45\x2b\xf6\x7c\x4e\x63\x4c\xfc\xb1\xbd\xa8\x08\x12\xf8\xa2\x96\xe7\x60\xe2\x7b\xeb\x2c\x04\x47\xc9\xc6\x4b\x2f\x49\xe2\xc7\x51\x98\xb2\x0b\x95\x69\xe5\xc6\x2c\x4c\x65\x26\xf1\x52\x2d\x58\x49\x33\xca\xe3\x3c\x47\x65\x44\x54\x8d\xa2\xa3\xa3\x6f\x3f\x1c\x1e\xbd\x7b\xf7\xf6\xe8\xf1\xeb\x57\xef\x0f\xbf\x7f\x7f\x74\x94\xe7\x76\x4a\x1b\xd2\x31\x81\xf8\x84\x7a\x79\x23\x09\x08\xa1\x01\x9b\x47\x31\x3b\xf1\x93\x94\xc5\x6c\xae\x55\xbf\x92\xad\x1f\x7a\xee\x7c\x6e\xfb\xb8\xe0\x58\x4c\x92\xf8\xad\xcc\x42\x17\xd8\x61\x70\xfd\xe6\x8e\x2b\x8e\x76\x8c\x36\x33\xe9\xf5\xae\x77\x2b\x8e\xa2\xb4\x77\x4b\x0e\x6f\x2f\x39\x75\xe7\xd1\xf9\xdb\x28\x4a\x71\xcd\x67\x9e\x59\xda\x03\x9f\x03\x98\x2c\xb0\xbf\xa8\x8c\x17\x5e\x0b\x32\x4a\xa9\x22\x87\x91\xa6\x8b\xaa\x47\xd7\xaa\x0b\xbe\x10\x13\x08\x6b\x8d\x0b\x21\x25\x2e\x6b\x39\x66\x8b\x28\x66\x8f\x61\xb9\x1e\x55\x5f\x69\x3a\x9e\xe8\x48\xfa\x29\x59\x60\x67\xb2\x98\x95\x4b\x4f\xcc\xec\x52\x98\xb4\xcd\x18\x88\x24\xa7\xee\xd2\x69\xb9\xc2\x28\xc8\x79\x9e\x15\x6a\x26\xfc\x98\xd1\x35\x70\x25\xe8\xe0\xcc\x4d\xdd\x18\xdc\xda\xae\x12\x47\x88\x96\xc4\xaf\x74\xb0\xaa\xdc\xd7\xa3\xb9\x7f\x06\xa6\xa4\xfe\x1c\x2c\xbb\x9b\x9c\xb4\xf4\xc0\xad\x9d\xdd\xb7\xe7\xfe\x59\x9e\xac\xdc\x10\xf7\x71\x51\x00\x6f\xfc\x8a\xb7\xd6\x5c\x31\x12\x39\xfc\xf9\xf6\xef\xe7\xfe\x3c\x3d\x95\x9f\x65\x40\x02\x15\x22\x4c\x44\x40\x17\x59\xef\xec\x42\xe0\xf9\xd4\xdd\xb4\x14\x5b\xbb\xd0\xd1\x77\xe0\x30\xda\x41\x88\x04\x91\x3b\x87\x08\xe4\x83\x02\xa2\xcb\xaf\xb2\x94\xcd\x9d\xaf\x32\xfb\xab\xcc\x5e\x17\xe4\x56\x68\x4f\xd0\x09\x4b\xdf\x47\x1f\x59\x88\x66\x18\x93\x35\x18\x95\xf1\x7d\x61\xde\x60\x88\x66\xd0\x9b\x38\x11\xf5\x44\x5e\x81\xdf\x24\xcf\x79\x3b\x98\x9c\x73\x04\x39\x6b\xd9\xdf\xea\xe1\x0a\xaa\x48\x58\xfa\x21\x61\x31\x04\xd1\x27\xcb\x28\x0b\xd3\x6a\x73\x08\xfc\x95\xf1\x9c\xa2\x8e\x71\xb5\x54\xf9\x01\x3b\xf0\x22\xbb\x49\x5b\xc3\x82\x08\x0f\x89\x89\xb3\x96\xd9\x37\xad\xb6\x84\xf3\x7e\xbe\xfc\x55\xca\x0e\xc4\x74\x32\x51\x08\xfa\x30\xc2\xe9\x00\xa0\xa4\xdd\x16\x90\xe9\x2d\x8e\x9d\x5b\xd2\x41\x07\x89\xa9\xbd\x89\x9e\x84\xc5\x67\x2c\xce\xf3\x73\x3f\x9c\x47\xe7\xbd\x20\x12\xa6\x57\x52\x4e\x82\x3b\xa8\x1f\xb3\x65\x94\xb2\xde\xea\x74\xd5\x9f\xbb\x67\x7d\xd1\x7a\xd2\x47\x1d\xa3\x97\x1d\xd4\x1f\xee\x3e\xe8\xad\xc2\x13\x34\x0a\x7b\xc2\x78\xda\x46\x07\xe2\x02\xfb\x57\xa8\x11\x11\xf4\x88\xb9\x31\x8b\x2d\x59\x52\x8d\x2a\xdf\xdb\x55\x89\xef\xbb\x6f\xd9\x2f\x19\x4b\x52\x36\xef\x7e\xe7\xa7\xa7\x88\xa0\xef\x5f\xbe\xf8\x32\x4d\x57\x32\x1d\x61\x02\x96\x6e\x76\x4c\xd6\xca\xb6\x2b\x2c\x70\x2f\x3d\x65\x61\x2d\xa8\xdc\xc2\x4e\x7b\xd1\x47\x6d\x0d\xd1\x3b\x0e\xa2\x63\x1b\xd8\x9c\x3b\x83\x3b\x70\xe1\xcc\x37\x8a\x2c\x31\xa2\x44\xeb\x08\xd1\x4c\x9b\xb6\x43\x16\xcb\x8b\xe6\xcc\x42\x7a\x1d\x50\x25\xf9\x16\xd9\xd0\x34\x33\x86\x9b\xb0\xea\x78\xa5\x63\x89\xe9\x0f\x6f\x5f\xd4\x59\x4a\x3b\x05\x51\x04\xc6\x3d\x21\x9e\xaa\x55\x5a\x1f\xf7\x4a\x33\x7c\x41\x89\x02\xd6\x63\xd0\x85\x1d\xe8\x89\x25\xbf\x5b\xa2\xa4\xe5\x2f\xdd\x13\xb0\xb2\xb7\xf8\xa8\x59\x68\x47\x75\x88\xc9\x61\x24\x3b\xc8\xb1\x76\x20\x66\x00\x4b\x12\xf7\x04\xfc\xe1\xca\x9b\xa7\x1a\x15\x17\xc2\xab\x6f\x1a\x6c\xca\x34\x84\x3b\x54\x9a\xf6\x6e\x89\xfe\x1d\x06\x0c\xc4\x95\x21\x4d\x7b\x47\x09\x0b\x16\xbd\x23\x2f\xcf\x0d\xdd\x58\x49\xbb\xe3\xd0\x4e\x7b\x20\x4c\x5d\xa7\xee\x89\x83\x3c\xb5\x09\xa1\x82\x4c\x52\xd5\xf8\x38\xb4\x51\xe4\x75\x93\x95\x1f\x86\x2c\x46\x04\x4c\x8c\x91\xe8\x61\x57\xe6\x41\x24\x49\x2f\x03\xe6\x20\xb1\x60\x71\x8a\xeb\xc1\x63\x07\xad\x2e\x46\xd6\x29\xf3\x4f\x4e\xd3\x7a\x32\x22\x6e\x9a\xc6\x7c\x5a\xfa\xbf\x32\x07\x25\x4b\x37\x08\x10\x41\x6e\xec\xbb\xdd\xc0\x3d\x66\x01\x72\xd2\xde\x2d\x30\xd4\xbb\x48\x6d\xf4\x42\x36\xc5\x4f\xd8\x8e\x80\xc9\x95\x8b\xf8\x06\x48\x6c\xae\x2b\x17\x10\xc9\x76\x49\x12\x7b\x4e\x5a\x19\x58\x82\xf8\x50\x74\xf9\xae\x80\xa4\xc2\x09\x5f\xb3\x8b\x02\xcf\xc8\x10\x3b\x69\xef\x88\xd9\xb8\x18\xa5\x41\xef\xe8\xdc\x4f\x4f\xf9\x22\xbd\x5a\x01\x63\x53\x86\x65\x60\xc1\x3f\x35\x9b\x1f\x06\x7f\x13\x36\x9f\x05\xff\x88\x6c\xbe\x09\xd5\xdf\x81\xcd\x17\x7c\x49\x1c\x68\xbe\xc4\xf3\xf8\xe6\x97\xbc\xf0\x93\xf4\x6d\x74\x8e\x88\x9e\x94\x89\xb3\x16\x9b\xaa\xf3\x4d\x66\xaf\x05\xff\xe5\xa4\x01\xa9\x71\xdf\xce\x64\x56\x48\x87\x27\xe4\xc7\x4c\x3d\xb5\x86\x9b\x4f\x95\x3f\xb8\x50\xac\x90\x2b\x20\x90\x5c\x87\xe8\x91\xc1\x75\x0c\xb6\xb3\x1a\x5e\x16\x73\xfe\xfa\x6d\x24\xcd\x18\x4c\x06\x23\x0c\x6c\xf1\x4f\xf1\x18\x7c\xa2\x21\x82\xb4\x18\x15\xb6\x2c\xce\x6f\x3c\x0f\x6d\x8d\x05\x44\x26\x08\xc2\xaf\x22\x82\x12\x16\xc0\x16\xa1\xbf\x29\xe6\xc4\x4f\x64\xd2\x3b\x99\x63\x1b\x9b\x52\xaf\x41\x47\xc4\x10\xbb\xbc\x48\xc5\xfb\x5d\x70\xfc\xc0\xb3\xca\x8c\x2f\xf8\x62\xb4\xe1\x35\x41\x70\x23\xe5\xfa\x24\x5a\xb7\x3e\x5f\x5b\xb2\x26\xab\x30\xc2\x9f\x98\x79\x9f\x87\x29\x8b\x57\x51\xe0\xa6\xcc\x4e\x89\x46\xb8\x09\x45\x6f\xee\x27\xab\xc0\xbd\x84\xa5\x08\x5c\x54\x17\x98\x88\xd5\xbd\xd2\x3d\xb5\xb1\x73\xb6\x26\x79\x5c\xe2\xdf\xc6\x25\xdb\x63\xa2\xfe\x15\x47\x7d\x72\x1a\x9d\xbf\x14\xfb\x0d\x20\xf1\x45\x0d\xe3\xef\x5f\x3f\x7b\xf6\xe2\xf0\xe8\xdd\xe1\x8b\xc3\xc7\xef\x9f\xbf\x7e\x75\x74\xf0\xf8\xf1\xeb\x0f\xaf\xde\x6b\x8c\x7b\xa7\x6e\x78\xc2\x60\x9c\xb7\xb0\x52\xb2\xdb\x3f\x86\xf6\x57\x61\x6f\xe9\xc6\x1f\xcb\x19\x64\x29\x0c\x1a\xd1\xd0\xbe\x0a\x7b\xe7\xb1\xbb\x32\xa6\x59\x28\x5d\x6e\x8d\xb0\xd4\xab\x0f\x7b\xab\x98\x9d\xd1\x50\xf8\xd3\x11\xca\xf5\x03\x15\x67\x31\x8b\xe4\x96\xda\x4b\x15\x87\xc3\xb3\xd1\xdb\xe4\x9d\x6b\xaf\x55\xac\x5f\xd6\xab\x50\x9b\x64\xc5\x08\x98\xb1\xab\x51\x38\xca\x32\x7f\xee\x30\x3d\x0e\xfe\x9c\x70\x02\x3c\xf2\xe7\x4e\x5a\xf0\x73\x04\x6f\xf7\xb6\xb3\x3b\x80\x38\x2b\xe0\xe9\x8a\x85\x29\x96\x0c\xca\x18\xa2\xb4\xf1\xe9\xd1\x2b\xa3\x39\xf7\x78\x05\xcf\xe7\x84\xf5\x8c\x09\x42\x19\x24\x27\xbd\x85\x1f\xce\xed\x26\xf1\x12\x6f\x9b\x52\x1a\xf1\x65\xda\x61\x3d\x63\xd0\xec\x75\xea\xa7\x01\x73\x98\x41\x7d\x4f\x5d\x7e\xdc\xb6\xd2\xc8\x12\x83\x63\xf1\xda\x7b\x08\x93\x39\x4b\x3c\x27\x96\xf0\xbd\x67\x17\x29\x11\x8f\x0e\x9a\xf3\x7c\x31\x52\x9d\xba\xab\x42\x58\xce\x75\xf8\xca\xb0\x97\xa4\x60\x96\x52\x60\x08\xa7\x8a\xb1\x74\x56\x53\x27\xb7\xe6\xc9\x71\x25\x15\x30\x5b\x5b\x92\x6f\xa7\x02\x56\xa7\x02\x26\xa8\x80\x6d\xa3\x82\xb4\x42\x05\x4c\x51\xc1\x91\x41\x05\xe9\x8d\xa9\x20\x35\xa8\xc0\x18\x7b\x7f\x61\xef\x0e\x86\x2d\x30\x4f\x62\x95\xe1\xe7\x4c\x23\xb4\xf8\xb0\xb4\x9f\xe4\x24\xc2\x09\x82\x44\x34\x86\x80\x43\x26\x7b\x10\x61\x6d\x85\x14\x99\x71\x0b\x74\x36\x5d\xe3\x03\xa5\x53\xa6\x2c\x0d\xdd\xe3\x38\x5b\x41\xcc\x09\xb8\x42\x95\xd0\x3d\xe0\xdd\x33\xa8\x2c\xbd\x21\x95\xc5\x06\xbd\x26\x93\xc1\x4c\xd2\x6c\x81\x65\xbd\x0f\x37\x89\x83\x29\xe2\x00\x43\x9f\x02\x13\xa6\x28\xa4\x90\x11\x28\xa2\xbf\x9e\x57\x15\x7c\x5e\xca\xd9\x95\x6e\xcc\xb7\xc3\x89\x99\xe2\x31\xce\x31\xca\x24\xef\x94\x79\x1f\x8f\xa3\x0b\x44\xd6\x92\xf5\x53\xe1\x0e\x36\x36\x08\x02\xec\xa5\x93\xf6\x36\x97\x79\x82\x4e\xfd\x39\x53\xfc\x27\x3f\x83\x47\xa1\x23\x17\x3c\xa7\x81\xe7\x4a\x7b\xdb\x56\x4b\x5b\x93\x0f\x2e\x24\x37\x49\xd2\xde\xd1\x99\x2d\xbc\x0f\x36\x76\x43\x33\xb4\xb2\x07\x55\xde\xb4\x61\x6f\xc8\xf3\x32\x39\x0a\xdf\xc4\x6c\xe9\x27\x2c\x79\xe7\x2e\x65\x9f\x78\x1e\x25\x65\x30\xc9\x59\x4a\x16\x6e\xdf\xbd\x09\x64\xeb\x79\xb4\x7c\x23\xe5\x24\xec\x22\x7d\x2c\xfc\x87\x70\xd6\x38\xb1\xaf\x6f\x1e\x56\x8f\xbf\xbe\xfa\x4a\xa7\x51\x17\xfd\x49\xd5\x2e\x5d\x3f\xb8\xb6\x2a\x49\x61\xc7\x59\x9a\xf2\x73\xf5\x5a\xb0\x5c\x8f\x03\x37\x49\x1c\x24\x6b\x4a\xba\x22\x4e\xbc\x20\xa9\x6e\x1a\xfb\x27\x7c\x75\x55\xc7\x10\x7f\x7e\x4d\xce\x2e\x3f\x1c\x19\x03\x74\xc6\xcf\x41\x9c\xd8\x1c\x14\xbb\xe7\xa8\x28\x00\x8a\x64\xe5\x6e\x00\x90\x7d\xec\x2e\x02\x76\x61\xc9\xbf\xdd\xa5\x3f\x9f\x07\xcc\xaa\xb5\x26\x57\x05\x78\x13\xe7\x3b\xde\xdf\x69\x68\xc9\xff\x78\xf3\x80\x19\x63\xf9\x18\x57\xde\xcc\x21\xa8\x9c\xcc\x24\xe7\x03\x35\x63\xdc\x31\x2b\x55\xd8\xf4\x3d\x40\x9c\x44\x86\x60\x75\xd9\xc5\xca\x0d\xe7\x47\xcb\x28\x66\xea\xd8\x77\xea\xcf\xe7\x2c\x44\x0e\x4a\xe3\x8c\x21\x49\x9b\xb3\xcd\xc1\x99\xc7\xd1\xca\x98\x25\xfc\xb5\xeb\xcf\xd1\x36\x14\xf3\xef\xf3\xe8\x3c\xac\xe3\x38\x8d\x4e\x4e\xf8\xa9\xf5\xb3\x4f\x1a\x99\x65\x34\x67\x0e\xf2\x02\xdf\xfb\xc8\x19\xd8\x20\x4a\x58\x37\x0a\xbb\x22\xc1\x41\x88\x28\xb1\xfa\x7a\xce\x02\xf7\xf2\x4b\x7f\xce\x9c\x41\x21\x07\x30\x0b\x1a\x86\x2f\xf0\x13\x7e\xe6\x4e\x7b\x47\x81\x2d\x57\x6c\xd2\x74\xc0\x0b\x6d\x14\xf8\xf2\xb8\xcb\xf8\xa6\x04\x55\x8a\xb5\xea\x6a\xaa\xd4\x18\x50\xc3\x1f\xda\x08\xbc\x57\xf3\x79\xe2\xc7\xcc\x4b\xfd\x33\x96\x38\x13\x39\x34\xbc\x8b\x01\x22\xb1\x7b\x0e\x83\x8d\xce\xba\x32\x45\x47\x90\x29\xc9\x82\xb0\x8b\x55\xcc\x92\x04\x48\xd5\x48\x47\xc5\x8c\x54\x40\x8a\xbc\x6e\xec\xce\xfd\x48\x4d\x23\x39\x7a\x42\xab\x0f\xbe\xa0\x82\x94\x93\x56\x7a\xef\x23\xb0\xae\x33\xbe\x7c\x1d\xfd\x62\xd7\x5a\xc6\x95\xe5\x79\x62\x72\x8f\xd5\x7d\x90\x19\xe1\x3e\xc2\xaa\x93\x0a\xc9\xc9\xda\x1c\xa1\xb8\x98\x95\x6b\x41\x49\xc6\xc6\xfc\xa8\xcc\x82\x0a\xad\x73\x6a\x9f\x61\x38\xa4\x92\x01\x7f\xba\x76\x59\xad\x93\x01\x9f\x4d\x5d\x8f\xf1\xd3\x81\x98\xa1\x8a\xe8\xe4\xdf\x43\x2d\xb6\x31\xa6\x94\x10\x7d\x88\x0c\x90\xd6\x95\xd2\x1d\x44\x9a\x09\x42\xb0\x2a\x5d\x3f\x9c\xfb\x9e\x9b\x46\x71\x99\xbf\x32\x3b\x63\xe6\xce\x2f\x91\xb9\x0c\x25\x99\x27\xfc\x99\x6f\x15\xd1\xc8\x55\xdf\xf2\x13\xcb\xe5\x14\xc5\x4f\x2b\xa6\xbc\x66\x2b\xc8\x73\x3f\xf9\x34\x98\xcb\x02\x15\xa0\xe7\x6c\x15\x33\x0f\x9a\x35\x21\x97\x9c\xee\x8d\x00\x3f\x0e\x22\x4e\x6e\x00\x36\xac\x3e\x64\x88\x8b\x51\x74\x95\xf8\xc7\xff\xe7\x16\xff\xb8\x7f\x1b\xf1\x8f\xff\x0f\x29\xfe\xf1\xff\x23\xc4\x3f\x5e\xa3\xf8\xa7\x26\xfb\xa9\x0a\x86\x4c\x21\x50\x74\xa5\x10\x28\x0e\xfe\xb8\x10\x48\x2d\xcf\x22\xe8\x44\x55\x08\xa4\x45\x3b\xae\x12\xea\x54\x84\x08\x6e\xcc\x0e\x82\x40\xa5\x28\xce\x1b\x44\x08\x4a\x30\xe1\x06\xb6\xab\xa4\x12\x95\xb2\x62\x5f\x16\x65\xfc\x28\x3c\x08\x82\x46\x39\xc5\xdb\xc3\x77\x87\xef\x15\xbb\xfd\xae\xe4\xc0\x21\xb3\xb8\x54\x7c\xc2\x92\x34\x8e\x2e\x37\x44\x26\xdb\x8a\xf2\xd3\x8b\x50\xed\xfe\x53\xce\x2e\x70\x77\x68\x1e\x59\x4a\xa6\x45\x70\x69\x9c\x5d\x98\xfb\x67\x3e\x1f\x46\xa4\x98\x3c\xbd\x4f\x40\x98\xc2\xda\x99\x67\xdb\x29\x48\xd5\x9b\x9c\xc6\x7e\xf8\x91\xd7\x2b\x36\xd6\x53\xe6\xce\x8d\x8a\xb7\x9f\x92\x9a\x07\x4c\x1f\x95\x36\xd8\x3d\x37\x08\xe0\x5a\x23\x41\xf8\xca\x43\x53\xda\xdb\x1c\xce\x1b\x9d\x3a\xae\xee\xd0\xcd\x0a\x9b\x45\xc8\x95\x07\x82\xb2\x7f\x1f\xa4\x86\x21\xc2\xd7\x9f\x31\xfe\x8a\x66\x9e\x08\x3e\xc2\xfa\x3b\x34\x75\xc8\x4f\x39\x7f\xe3\x36\xde\x0a\xee\xff\xa6\x4d\x34\x8f\xea\x4d\x1b\x3b\x28\xb9\x0b\x73\x9f\xde\xd2\xb2\x9c\x46\x92\xbd\x56\x4b\x5b\xa3\x4e\x17\x3f\x83\x2b\xa6\x83\x73\xe5\x62\xba\x55\x39\x16\x95\x0e\xe7\x02\x7f\xae\x38\x10\x2d\xc6\x2d\x20\x7e\xa9\x04\x49\xb0\x0f\x49\x03\xfb\x20\x96\xfe\x2c\xa0\xc6\x4a\x9e\x5c\xb9\x92\x7b\x9f\xb0\x92\xc3\x22\x16\x04\xb4\xd5\x3a\x8c\xda\xed\x6a\xc8\xa9\xc3\xc8\x88\xa2\xbd\xf0\x43\x37\x08\x2e\x85\xca\xc6\x3a\x3d\x65\x61\xc5\xa7\x7a\x51\x51\xe4\x03\x75\x41\x5c\x72\x3e\x8b\xa0\xc4\x9d\xbd\x68\xd4\x33\x12\x3c\x4c\xbb\x8d\x12\x78\xa8\x7f\xd0\x9e\xed\xc7\x4d\xc2\x29\xe9\x36\xab\x31\xd0\x63\xda\x6e\x5f\xd1\x5c\x5a\x89\x0b\x4a\xa9\x4e\x6f\xa9\xe7\x12\x07\x63\x05\x9b\xa3\x1b\xc4\x76\x6a\xa8\xf1\xcd\x83\xd2\xc1\x90\x70\xf4\x56\xf7\x7e\x9e\xe6\x79\x6a\xda\x1f\x09\x5d\x0e\x65\x38\xc4\x68\xa9\x65\x0f\x36\x0b\x4e\xe9\x1a\x8c\xda\x8c\x02\x1a\x71\x0d\xe8\xda\x6b\xef\xd4\x4d\x0c\xae\xc2\x46\x62\xdd\x18\x57\x33\x09\x2e\xc2\x2d\xaf\xce\x19\x26\x21\xdb\xe2\x45\x5e\x44\x07\x3e\xce\x52\x15\xba\x71\x6e\x94\x03\x9f\x98\x06\x0e\x56\x81\xde\x07\x37\x5d\xfb\xb7\xdb\xda\x16\xcb\x74\xf2\x5f\xf5\xf8\x0f\xa1\xc6\x6e\x66\xfe\x55\xfa\xd3\xb6\xfc\xd0\x62\x65\x18\xeb\x74\x12\xce\xda\x6d\x1b\x62\x93\xb1\x49\x58\x86\xd8\x32\x14\xe6\x4e\x4d\xa2\x3c\xfd\xa7\x25\xca\x65\x50\x71\xc7\x3a\x02\x22\x25\x06\x61\x9d\x06\x36\xc3\x63\x10\x52\x2f\xfd\x30\xcf\x07\x10\xb9\x79\xe9\x5e\x60\xc7\x0e\x2b\xde\x87\xcd\x28\x6a\x93\xdd\x19\x96\x31\x2e\xb5\xc7\x32\x08\x0d\x0f\xee\x3d\xfb\x9f\xf7\x7a\x79\xaf\x8f\xb5\x37\xcf\xd2\xa9\x1c\x0d\xdb\x6d\x5b\x0f\x54\x9c\xe7\xd1\x1e\x8d\x71\x61\xc6\x12\x7f\x13\x47\x4b\x3f\x61\x46\x30\xf1\x98\x55\x94\xb7\x82\xa0\x20\x6b\xb9\x22\x35\x5c\x2d\x7d\x2b\xed\x09\xa3\xd4\xd6\x75\xf1\x43\x4c\x63\xc4\xb4\xca\xd5\x1b\xe8\x8c\x84\xe3\x06\x19\xc0\xcf\xbe\xcd\x48\x6a\x6f\xea\x95\x18\xd1\x82\x31\x2e\x9c\x94\x7c\x6a\x71\xa9\xe6\x22\x4a\xc3\xc6\xd8\xe0\x72\xfa\x30\xca\xf3\xa6\xf5\x38\xcf\x59\x6a\x9b\x1f\x08\x92\x5f\x50\xb5\xfb\x9b\x45\xc5\xf0\x9d\x05\x74\x2d\x19\xf6\xa3\x34\xe0\x3c\x3b\x71\x83\x20\x3a\x3f\xca\xf8\xce\x92\x78\x51\xcc\x12\xa7\x35\x94\x89\x69\xec\xfa\x81\x1f\x9e\x1c\xcd\xa3\xd4\x69\x0d\x05\x0f\x7c\x12\xd0\xfe\x4f\xb6\x3d\x19\x74\x1f\xce\xf2\xc9\xb0\xfb\x70\x26\x1e\x87\xf0\x67\xbd\x5b\xe4\xbb\x93\x41\xf7\x8e\x4c\xdd\xbd\x3b\x19\x74\xef\xce\xf0\xb4\x87\xd7\xb7\x8b\x4f\x2d\x75\xab\x4f\x2e\x03\xe1\x30\xf9\xe1\x41\xf7\xe9\x6c\x3d\x24\x77\x8a\x5b\x7d\xbf\xdc\x6b\x8e\xcb\x45\xb8\x61\x15\x69\x5c\x81\x86\xb3\xea\xe2\x82\xc0\xdd\x84\x98\x28\x2d\x9b\x29\x9d\xfa\xd2\xcd\x2e\x34\x42\xee\xe0\x3c\x87\x87\x7b\x22\xba\xd3\x1d\xe1\xf5\x0d\xec\xe4\x4f\x02\xe9\xae\x4e\x15\x69\x0d\x47\x2a\xd8\x6f\xe9\x01\x17\x42\x6f\xd6\x83\xc8\x28\x7a\xec\x42\xd4\x68\x45\x5c\x93\xdb\xb3\x3d\xba\x7b\xf7\x2e\x38\x04\xb9\x27\x5b\x12\x32\x81\x49\x3a\x13\xbe\xaf\xfc\xd0\x0b\xb2\x39\x4b\x6c\xf4\x39\x12\x66\xe2\xbb\x2d\xb8\x7d\xd4\x6d\xf2\x74\xe5\x49\x57\xc3\x05\xee\x1f\x26\x83\x99\x51\xde\x41\xb8\xf2\x1d\x8c\xa4\xe3\xc9\x70\xa6\x53\xc5\x75\x0e\x85\x72\xb2\x72\x07\xe2\xfe\x40\xfc\x82\xe3\xc0\x8e\x26\x51\xe9\xcb\x97\xdc\x81\xf0\xdd\xe3\xfb\xce\x03\x08\xe3\xa6\xc6\xc3\xab\xb6\xe2\x38\x60\x8c\x5d\x86\x58\x50\x29\xbd\x24\x3b\x4e\xd2\x18\x1c\xf3\x8d\xed\x48\x59\x67\x93\xf2\xc9\x07\xff\x92\xf5\xfc\xca\x7b\x5f\x77\x17\x43\xcc\x5b\xe1\x4f\x48\xfd\x85\x32\x7a\x0f\xa9\xc5\x59\xe8\x74\x12\xac\x7a\x1e\x4d\x92\x59\xbb\x9d\xf0\x0d\xac\xcc\x21\xbd\xf1\xfa\x46\x17\x68\x6b\x50\xba\xe0\x6d\xb7\x13\x5e\xb4\xcc\xad\x4d\x8c\x5b\x97\x92\x3a\x20\x88\x43\x59\x5e\x8e\xb5\x3f\xd6\xf8\xa1\x43\x47\x47\x52\xa0\xd4\x2b\x34\xf6\x35\xb9\x9f\x07\xd5\xd8\xd7\x55\x4d\x3b\x38\x90\xf7\xfc\x44\xc4\xe2\x4a\x4b\x1f\xc4\x05\x98\xec\x57\x09\x8f\xf7\xb6\x41\xbd\x59\xec\x38\x79\xde\xb2\x6b\xbb\x1e\xdf\x73\xa5\x10\x24\x2d\x5d\xd5\x0a\x2a\x07\xa7\xcc\xad\x01\x89\x38\x3d\xf8\x32\xb0\x24\xc4\xd1\x52\xe8\x76\x89\x47\xd3\x49\xad\xca\x99\x8d\x21\x74\x8e\xed\x52\x4f\xc6\x30\x92\x51\x6e\xda\x6d\x5b\xb9\x49\x96\x41\x02\x48\x8b\xe5\xb9\x32\xb5\x6a\xf1\xf9\x30\x8a\x61\x40\x4b\x23\xd2\x88\x83\xe0\xd3\xb4\x90\x4b\x9e\x08\x14\x26\x0c\xa5\x29\xf5\x7a\x02\xe4\x3c\x57\x4f\x36\xd6\x39\x39\x95\x4a\xb6\xcc\x2f\x4a\x69\x17\x60\xaa\x01\x71\xad\xd4\xf4\x3b\xbc\xc1\xf6\x29\xbc\x1f\xc8\xf8\xdd\x15\x11\x60\xb9\x32\x2b\xb3\x18\x15\xdb\x4d\x79\x9d\x26\x9c\x7a\xd0\x6b\xbd\x65\x87\x1b\x3c\xa0\x70\x81\x59\xe3\xf0\xc4\xb2\xf4\xd2\x5d\x41\x99\x3c\x47\xef\x98\x28\xae\xc1\x01\xf2\x58\xc4\xd1\x52\x45\xa8\x3b\xd0\x31\xae\x44\x91\xfe\x4f\xf6\xd8\xf9\xe0\xe7\xcf\x71\x98\xda\x63\xe7\x41\x3e\xbc\x97\xdf\xde\xc5\xf6\xd8\x79\x1c\xb8\xcb\x15\x9b\xe3\x31\x54\x72\xab\xaf\x9c\x9c\xd7\xba\xba\x81\x31\xbd\xe1\x55\xd9\x4d\xed\x5c\x29\x4d\xd9\x72\x95\x5a\x69\x64\xcd\x99\xe8\x4d\x16\x33\x2b\x8c\xc2\xae\x0a\x83\xa7\x19\xe8\xde\x34\x7c\x1e\x5a\x51\x3c\x67\x31\xcf\x7f\xcc\x74\xa4\x3c\x02\x05\x5c\x0e\x99\x25\x38\x9d\xc4\x5a\x66\x49\x6a\x9d\xba\x67\xcc\x72\xad\x06\xba\x93\x01\xd2\xc1\x07\xbb\xc1\x3e\xc9\x6e\xac\xa5\xab\x5c\x96\xe7\x6c\x5f\xad\x2a\x18\xfc\xe3\xea\xb7\x92\x1b\x85\xa8\x96\xbc\x83\x62\xde\x31\x3c\x0a\xf7\x18\xf8\xcc\x8d\x39\x47\xca\xd9\xd2\x32\x76\x0d\x2f\x71\x11\xd0\xb5\xd8\x61\xe5\xb5\xc1\x11\x70\xe8\xad\xa1\x12\xa6\x6d\xa4\xcb\x4d\x3a\x5d\x3c\x38\x02\xe7\x29\x47\x2b\x37\x4e\x05\xab\x64\x6e\xe6\x05\x39\x84\xdd\x79\xf2\xd3\xf4\x62\x30\xe8\x4e\x2f\x86\x4f\xa7\x17\xf7\x9f\x76\xa7\x17\x0f\x9f\x4e\xbd\xef\x67\x1d\xbc\x67\xf7\x3a\x78\xff\x56\xdf\x27\xaf\x61\x63\x75\xbb\xbf\x4e\xe7\xad\xcf\xa6\xb7\x3e\x6f\xef\x4c\xbf\x98\x76\xa6\xdd\x69\x9f\x4e\xc7\xd3\x9f\x8e\xfe\xcb\x7a\x9a\x17\xff\x32\xeb\xf0\xbc\xef\xca\xbc\x10\x99\xe0\x48\xb4\x32\x4d\xa6\x17\x83\x61\x77\x7a\x31\x78\x30\xbd\x18\x1c\x4f\x2f\x06\xde\xf4\x62\xc0\x78\xbb\x8b\xe9\xc5\xfd\xc5\xf4\x62\x77\x38\xbd\xd8\xbd\xdd\x9d\x5e\xdc\x3d\x9e\x5e\xdc\x9d\x77\xa7\x17\xf7\xd9\x2c\xb7\xa7\xd3\x89\x2a\xf9\xd0\x28\x09\xdf\x17\x33\x8c\xbf\xe0\x8d\x3e\xbe\x11\x80\xd3\x6c\x30\x38\x18\x74\xa7\xd9\x93\xfb\x4f\x9f\x4e\xb3\xa7\x0f\x21\x88\xc1\xd3\x27\x8f\xf9\xcb\x93\xa7\xf0\xf2\xf4\xf0\xa9\xe8\xc7\xcf\x7f\x0d\xdc\x37\x6d\xe9\x9a\xee\xdd\xb4\x1a\x81\x85\x92\xd3\x79\x13\xe8\xe5\x47\xf0\x2a\x36\xa3\xab\xc0\x66\xe4\x22\xc0\xb8\xd7\x44\x38\x79\xce\x7a\x9b\x64\xa6\x04\xf2\xca\x3e\xe1\x30\x10\xde\x2d\xb4\xfa\x15\x3d\x0f\xec\x90\xdc\x16\x26\xc6\x34\xe2\x27\x81\x94\x46\x93\xdd\x19\x89\x7b\x2c\x9c\x27\xdf\xf9\xe9\x29\x88\x53\xe4\xe5\x83\xde\xac\x63\x23\xa4\x03\x69\x35\x79\xc2\x95\x16\x11\x3f\x21\x4e\x85\xe8\x56\xdf\x87\xa8\x59\x63\xc6\xd9\x30\xf0\x1f\xd0\x0a\x7b\x69\xec\x2f\xed\x2a\x3f\xd2\x9f\x4c\x7b\x68\xb4\xb7\x3f\x2b\x97\x1d\x58\x85\x59\x95\xab\xb1\x55\x80\xc1\x1d\xb4\x83\xcb\x7d\x54\xa7\x4e\xa7\x65\x7a\xd9\x80\xda\x65\x07\x85\x1d\x1b\xa9\x6a\xf7\x66\x8d\xa8\x2d\xf3\x01\x1c\x3d\xff\x24\x8c\x62\x76\xb4\x74\x2f\x8e\x94\xb7\x1b\xed\x6c\x78\xf7\xee\x9d\x2a\x57\xe8\x97\x1c\xda\x5f\x10\x26\x2e\xf5\x25\x87\xe2\x51\x5f\x9a\xc3\xf3\xf4\x84\xba\x35\x8f\xac\x00\x8e\x50\x58\x3a\x4a\x56\xcc\xf3\x17\xbe\x77\x24\x8d\x50\xfc\x08\x9c\x07\x9d\x2c\x5d\x3f\xe8\x79\xd1\x52\x79\x00\x3a\x89\xa2\x93\x80\x55\x52\xb1\x18\x90\x8c\xda\x1e\xf5\x6a\xbe\x84\x14\x60\x1d\x84\x27\x03\x60\x34\x5b\xcb\xc0\xce\xb4\xb3\x5b\xd4\x43\xe0\xed\x76\xbd\xf4\x43\xe7\x1e\x59\xba\x17\xce\xed\x41\x61\x0c\x97\x5a\x15\x03\x9a\x19\xac\x2f\x59\xd0\xc1\x68\xb1\x17\x28\x76\x6b\x21\xa2\x1d\xb4\xde\x49\xd6\x28\x98\x2c\x0c\xd6\xa8\x90\xcd\x7a\x64\xcd\x1b\xb8\x77\xa7\xc0\x79\xce\x13\x5c\x91\xb0\x7b\xf7\x4e\x51\xa5\x90\x56\x75\x8b\xae\x4e\x90\x33\x3e\x41\x36\x4f\x34\xed\xb6\xf4\xa0\x3c\x49\xcd\x30\x14\xc2\x68\x16\x68\x9a\x1f\x03\x06\x24\x35\xc8\xda\x58\xf4\x4d\xce\xbe\x29\xc2\x02\x9f\x53\x93\x78\xa6\xa8\xe0\xde\xed\x0a\xc0\x25\x59\xa5\xc1\x5c\x05\x41\x96\xf1\x1a\xe4\x44\x50\x3a\x60\x2d\xbe\x64\xf1\x65\x30\x1b\x0c\xdc\x61\x77\x9a\x2d\x16\x8b\xc5\x6c\xbd\x4b\x8a\xfc\x22\xe4\x1f\x06\xdd\x87\x5d\x78\xc7\xb7\xfa\x7e\x2d\xfe\x84\x9e\x40\xc9\x34\xdb\x1d\x0c\x76\xbb\xf0\xe7\x11\xff\xdd\x7d\xca\x7f\xef\x3e\x85\x98\xd6\x83\x69\xf6\xf4\x90\xaf\x47\x4f\x1e\xdd\x19\x4c\xb3\x27\x8f\x77\x21\x90\xcc\xc1\x43\xbe\x1a\x3d\x7d\xa2\x66\x9e\x51\x6f\xa1\x50\xe1\x13\x97\x0e\x46\x6e\xd9\x7b\x57\xc6\xe5\xf0\x69\x38\x71\x67\x44\x2d\x42\xc6\x11\x13\xbc\x36\xf9\x9a\xa8\xfa\x47\xfd\x13\xe1\x57\xb9\x25\x57\x7c\xb3\xab\xd0\xbd\x8e\xee\x9a\xbf\xd1\xb5\x6c\xb1\x18\x88\xcc\x77\x99\x02\xb4\x96\x0b\xdc\x1d\x53\x7f\x32\x98\x49\xd7\xc7\xd4\x9f\xf8\xe5\xa8\x37\x2d\x06\x2e\xa9\x9c\x94\x2b\x03\x56\xa8\x05\x48\x76\xcd\x5f\x1d\x89\x69\x59\x25\xca\xe3\xc0\x76\x65\x4e\xb7\x97\xa4\x6e\x9c\xca\xc5\x73\x82\x38\x41\xbb\xc6\x72\x3a\x43\xb5\xa3\xe3\x9c\xba\x6a\x65\x1d\x12\xb7\x3c\xd8\x8c\x44\x80\x07\x3a\x2f\xe9\xe3\x38\xb0\xe7\xc6\xb8\xf0\xd9\xb3\x83\x76\xf8\x09\x62\x32\x98\x69\xcf\x6b\xd4\xd3\x61\x74\xbc\x92\xa2\xcb\xd1\xa9\xf2\x16\xe3\x9f\xe5\xcc\xf4\xb0\x73\xa4\x1f\x35\xf9\xaf\xe8\xb6\x72\x8f\x03\xe7\x75\x40\x4e\x79\x6b\xe5\xf4\x10\xee\x3f\x4f\x4d\xf7\x9f\x1c\x29\x2b\x51\xef\xe9\x64\xb9\x79\x2e\x6a\x0d\x80\x55\xfa\x18\xd0\xb5\x5c\x5c\xcf\x4f\xfd\x94\x25\x2b\xd7\x63\x20\x8b\xd0\x1b\xe3\xdb\xea\x99\x48\xcc\x7d\x8e\x22\x5b\x2d\x00\x1f\xf9\x02\xb0\x51\xcb\x38\x95\x7b\x8d\x04\xcb\xd1\xac\x5d\xc9\x0f\xbe\x0f\x2a\x01\xd5\x95\xad\x6d\xd9\x78\x62\xab\xc5\xf4\x89\x9b\xb2\x5e\x18\x9d\xdb\xb8\xeb\x8e\xb2\x3d\xd6\x6e\x67\xfb\x74\x30\x8e\x69\xc2\xd2\xf7\xfe\x92\x45\x59\x6a\x27\x84\x75\x33\xec\xd8\x32\x2a\x43\x08\x21\x3f\x53\x79\xd1\xee\x93\x88\x1f\x52\x23\xe9\x98\xba\x90\x2c\x28\x70\x9d\xc3\x81\x14\xde\x57\x9c\x97\xf8\xe2\xf2\xd1\x70\x9f\x45\x5c\x03\x0e\x59\x20\x6c\xb7\x5b\x5a\x9b\x36\xce\x73\xbb\x0e\x12\xc6\x24\x6b\xb7\xb7\x42\x42\xbc\x42\x95\xce\x7a\x5e\xc0\xdc\xb8\xe2\x6c\x85\x97\xe4\x89\xaa\xc2\x58\x05\x9d\xc0\x05\xc9\x7a\x8b\x20\x4b\x4e\x37\xf2\x37\xb7\x44\xb6\xd7\x53\xbc\x0f\x7a\x73\x76\x1c\x65\xa1\xc7\xe8\xfb\x00\x7a\xf6\x3c\xe0\x4f\x7a\x24\x5e\xfc\x73\xeb\x5b\xdc\xfa\xdb\xe8\x5b\xbc\xf8\x87\xd4\xb7\x78\xf1\xf7\xd5\xb7\xe0\x18\x7b\xb5\xa1\x6d\x21\x4c\x8f\xd1\x36\xbb\x16\x3f\x79\x1a\xc5\xcb\xe7\xbc\x85\x93\x98\x25\x20\x36\xf5\x13\x69\x20\x59\x4d\x5e\x44\xf1\xf2\x09\xaf\x65\xad\x1d\xe3\x20\x44\x80\x29\xe3\x0f\xda\x45\x0d\x42\x10\xcb\x72\xf9\xad\x66\xe9\xca\x12\x70\x70\xd6\xc5\xf4\x9b\x2a\xab\x12\x8a\xa2\x34\xf1\xb8\x15\xd8\xb7\x1a\x35\x29\x84\xa2\xc2\x2b\x76\x2e\x13\xb5\x09\x47\xc2\xd2\x5a\xa7\x4c\x2e\x1e\x64\xe6\xf5\x6e\xd3\xb4\x20\x1e\x3f\x9e\x07\x3c\x7d\x43\xa5\xa2\x01\x23\xb4\x35\x24\xca\x4e\xb7\x5a\x97\xdd\x1a\x62\xf1\x49\x61\x8c\xde\x00\x63\xba\x40\x89\x36\xfa\xe9\x68\x93\x76\x34\x12\x23\x5b\x4c\x17\xa0\x29\x50\x96\x50\xea\x00\x36\x6e\x97\x89\x70\xa3\x5e\x49\x79\x23\xdb\xb1\xc1\x1b\xcb\x56\x84\x48\x93\xe2\xfa\xb8\xd8\x15\x5c\x6c\x5c\x26\x30\xbc\x66\x20\x1a\xd2\xe8\xb7\xc1\x14\x56\x0a\xb5\xaa\xd7\x0e\x5b\x46\x82\xaf\x3f\x05\xa9\x74\xa9\xc1\x50\xea\x6d\x50\x05\x45\xfb\x5b\xc2\x63\xfb\xb9\xf1\xad\x1c\x81\x5e\x65\x00\xea\x56\x51\xaa\x29\x4b\xf8\xf8\xb1\x8e\x99\xc5\x96\xab\xf4\x12\x61\x72\x77\x30\xc0\xa4\x35\xc4\xce\x9b\xad\x6d\xe6\xf9\xd6\x6f\x1d\xf4\x17\x79\x1e\x62\x3d\x3f\x45\x78\x7c\x03\xd8\x10\x22\x10\xac\xe8\x8f\x74\x44\xc9\xb1\x32\xad\x1d\xa2\x3b\x20\xb1\x0a\x34\x71\x13\x94\x02\x81\x6e\xc7\x67\x49\xbf\x75\x18\xa0\x85\x4f\xc2\xa4\x6a\xea\x9a\x76\xae\x41\xcc\x76\x88\x14\x56\x20\x87\xe5\xce\xe7\x9c\xd8\x36\x51\xa3\x26\xc7\x4d\xb0\xa3\x26\xec\x76\x04\x55\xa6\x74\x1d\x22\xd5\xd4\x55\x68\xba\x41\xad\x02\x23\x45\x81\x49\x14\x6e\x53\x22\xab\xcc\xc6\x42\x2a\x74\x3c\x09\xa8\x21\x6c\xd7\xf7\x7c\xa1\x7b\xe6\x9f\xb8\x20\xd2\xed\x2f\x13\x9f\x59\x93\x7b\xdd\x87\xb3\xe9\xf4\x58\x09\x3a\xd4\x77\xa0\xc2\x83\x13\x16\xd6\x62\xfc\x18\x5a\x17\x1f\xcc\x0b\x6e\xce\x65\xd0\xfd\xea\xa1\x58\x40\x12\xd2\x27\xc1\x98\xf5\x96\x6c\xee\xbb\x79\x8e\xa4\xb3\x08\xe4\xa4\x24\xa6\xbf\x04\x22\xb8\x17\xfc\xa5\x6b\x7f\x9e\x40\xe8\xd8\x77\x2c\x15\x96\xdc\xa0\x77\x22\x8e\xa7\x71\xcf\x9f\x27\x10\x50\x36\xc5\x78\x2d\xde\xdc\xf9\x9c\x33\x49\x01\xe3\xad\xb0\x5e\x02\x96\xd4\xe2\xb0\xbb\x74\x57\xed\xb6\x1d\x76\x28\x9a\x86\xfd\x2f\x3e\xb3\xc4\xb7\x0f\x6f\x5f\x50\xd4\x81\xaf\x32\x77\x32\x19\xcc\x3a\xc8\xfa\xa2\x8f\x48\x3d\xf3\x4b\x77\xb5\xf2\xc3\x13\x5e\x06\x76\x64\x33\x42\xed\xcf\x49\x14\x8e\x8e\xdd\x84\xdd\xbb\x43\x50\xe7\x38\x8d\x5c\x3b\x0b\x59\xe2\xb9\x2b\x66\x37\x44\xd8\xfa\xea\xdd\xeb\x57\x3d\x71\xbe\xf7\x17\x97\x02\x3c\x8c\x31\x16\x2d\x63\x12\xf7\x98\x50\xe2\x03\xdf\xaa\xf2\x99\xce\x23\x0f\xd8\xa7\x5e\x45\xcf\xcf\x46\x80\x1a\xb3\x14\x58\xcf\x53\xc4\x29\xaf\xef\x25\x09\x22\x12\xdd\xed\x76\x99\x25\x61\xe9\x41\x9a\xc6\xfe\x71\x96\x32\x1b\xc1\x67\x9d\x0f\x13\x7d\x61\xfe\x34\x68\xb7\xed\xa7\x41\xd9\xf6\x29\x73\xe7\x79\xae\x5f\x4f\x58\x2a\xe1\x48\x1e\x5d\xbe\x77\x4f\x5e\xf1\x2d\x49\xa8\x4d\x61\x7e\xf8\x23\x4f\x03\xe9\xd5\xe1\xf1\xa9\x1f\xcc\xcb\xde\x60\x4c\x04\xe0\xef\x4e\x19\x4b\x91\x1f\x5a\xe5\xa7\xb8\x27\x46\x5b\x5c\xc0\x84\x66\xcf\xca\x22\x3d\x2f\x01\xc3\x41\xaa\x73\x4b\xa6\xf8\x91\x70\x40\xa4\x9c\x98\x4f\x43\x24\x43\x09\x29\x4f\x2f\x82\x58\x12\xff\x57\xd6\x1d\x12\x56\x47\x2b\xaf\xf3\x55\x34\x67\xbc\x5d\x08\x39\x2e\x5b\xf6\x38\xfc\xfc\x43\x32\x8a\x26\xe9\xcc\xc4\x65\xcc\x96\xd1\x19\x13\x1d\xe4\xdf\xb0\x8e\xf9\x39\x2e\x33\xf9\x61\xc2\xe2\xf4\x11\xe8\x7f\xda\x8c\x40\x3e\xa7\xfc\x6c\x22\x89\xe1\xa2\x10\x17\x19\x05\xa7\xe5\xa7\x81\x9c\xc4\xbf\x04\x74\xad\x26\xf4\xcb\x80\xbe\x12\xc7\x90\x47\x7f\xa2\x4e\x68\xba\xc1\x5e\x49\xb5\xfe\x93\xd8\x9f\x97\x6a\x72\x27\x59\x9a\xb2\x58\x39\x47\x28\x2a\x06\x1f\x4a\x09\x94\x5d\xa4\x5d\x65\xcb\xd1\x64\x6d\x14\xb2\xf3\xae\xd6\xb6\xe7\xf9\xba\x7a\x0f\x93\xca\x77\xbc\x0a\x44\x10\xb8\xb2\xe8\x4a\x4f\x14\xc8\x49\xaf\xdc\x1f\x09\x08\x74\x4e\xa3\x00\xcc\xd0\x1b\xd5\x27\x89\xd2\xd2\x77\x1a\x79\x12\xa1\x25\xfa\x91\x5d\xce\xa3\xf3\xb0\xc1\xb6\xae\xc5\x60\x7a\x69\x2b\x6d\xf4\x91\x5d\x22\xd0\x92\x3a\xfa\x68\x43\x0c\xf6\xc7\xd1\x9c\x41\xf8\x73\x16\x23\x32\xbc\x2d\x03\xb3\xa3\x43\x48\xc0\x22\xf2\x82\xa2\x36\xc5\x68\x31\xe1\x60\x66\xce\x82\x52\xf5\x75\x83\xb9\x20\x9e\x1b\x04\xc7\xae\xf7\xb1\x02\x56\xda\xbb\x95\xb0\xd4\x2e\xf3\x0b\xdf\x11\x02\x93\x0c\x17\x15\x4b\x98\x8d\x3a\x51\xa3\xd2\xeb\x5f\x3d\x96\xb0\xf3\xaa\x81\x94\x2f\xd7\x8e\x64\xb9\xa1\x6f\x1d\x46\xa9\x33\xfa\xdf\xde\x18\x42\xdf\x6e\x3c\x80\x12\x63\x5b\x47\x4f\x7c\xbf\x6a\xe8\x36\xcc\x78\x96\x6e\x7c\xe2\x87\xdd\x0b\x98\xb3\xdd\xd8\x3f\x39\x4d\x51\xf1\x57\x8c\xb0\x62\x4c\xd4\x20\x97\xef\xd7\x8e\x73\x85\xa7\xd9\x3a\xd4\x8a\x65\xfa\x6f\x71\xb4\xb5\x37\xef\x9b\x0e\x78\x89\xbd\xad\x63\xae\xb3\x34\x0e\xbb\xa9\xd3\xdf\x6c\x11\xba\x85\x06\x94\xa2\xf0\x75\x38\xbe\xa1\x0e\xf4\x63\xe0\x3e\x11\x56\x36\x70\x81\xef\x7d\x74\xcc\x23\x62\x93\x2a\xb6\x06\xf8\x3a\xd2\x13\x19\xbb\x60\x2a\x1f\x2f\x2b\xd6\x54\xab\xd8\x5f\xba\xf1\x25\xba\x11\xb1\x68\xb0\xcc\x21\x2d\x0a\xb1\x01\x6e\x94\xd9\xe2\x6b\x48\xc2\x04\x75\xf8\x51\xd8\xf5\xc3\xee\x4a\x96\xa8\x59\x8c\x5d\x83\x7a\xe1\x69\xe8\xa2\xe2\x6a\x68\xc3\xe6\x54\xfa\xfc\xa9\xe2\x4e\x1a\xde\x5e\x39\x36\x4d\x1d\xaa\x8c\x18\xc0\x1f\x9e\x20\xec\x6c\x24\xb3\xaa\x26\xfb\x4c\x99\xcc\xdd\x80\x1d\x68\x24\x48\x40\x9c\x40\x7a\x57\x0f\x70\xcd\xf2\x72\xeb\xe0\x6b\xe3\x65\xdf\xe3\x03\xee\xce\xe7\x8d\x04\x60\x8e\x70\xa3\x69\x7c\x83\xd8\x87\x9f\xa9\x04\xd8\x69\xec\x86\x49\x00\x72\x37\x69\x8c\x2c\x10\x01\x0a\x24\x12\x12\x24\xed\x28\x05\x4a\x84\x2e\xfd\xa3\xad\xba\xf4\xcf\x2a\xba\xf4\x8f\x9a\x75\xe9\x2b\x5a\xff\x69\xbb\x9d\xda\x88\x1f\x32\xba\x67\xdd\xbb\xb7\xe7\xc3\xfb\x77\xee\xdf\x3b\x1a\xf0\x09\x2d\x1d\xe6\x4d\xc3\xcf\x6e\x30\x3f\xac\x7d\x8b\x13\x88\xb5\x9e\x86\x96\x25\x6f\x8f\x1d\x6b\x11\xb0\x8b\x11\x4f\x71\x03\xff\x04\xd4\x5c\x96\x89\x63\x09\x03\xcf\xd1\x34\x2c\xa6\x21\x22\x4b\x77\xe5\xac\xcf\x58\x0c\x4b\xd0\x6d\x22\xcf\x46\xce\x04\xf5\xc1\xc7\x46\xff\x98\x85\xac\xcf\x57\xcd\x7e\x74\x1e\x7a\x41\x94\xcd\xfb\x91\xe7\x27\xf0\xa3\x07\xb6\x9f\xf9\xfd\xd2\x56\xac\xaf\x93\xab\xf2\xcd\xde\x59\xc6\xd0\x8c\x70\x5e\x84\xa3\x82\x37\xcd\x8f\x59\x89\x83\x46\x07\x07\x77\x5e\x1c\x8c\x0e\x0f\x1e\x1f\x10\xf7\xe0\x40\x3e\x2d\x1f\xf1\xc7\x83\x83\xc7\x07\x48\x84\x26\x46\x0d\xf5\x29\x88\xd5\x54\x98\xec\xec\xa5\x6c\xb9\xe2\xe3\xba\xcf\xbb\xbe\x37\xf7\xcf\xf6\x85\x91\xec\x9e\x24\x67\xeb\xac\xeb\x2f\x28\xaa\xf3\xbf\xc8\x12\xd4\x4d\x25\x75\xef\x2b\xd3\xda\x3d\xd8\x68\xf7\x4b\x4b\xdb\xbd\xca\x3e\x6a\x5a\xe0\xfa\x73\x7a\x23\xbe\xd7\x2c\x53\x1e\xe1\x2a\xc9\xd2\xe4\x99\x36\x30\x72\x66\x36\xa7\xb2\x05\x8b\xdc\xdb\x58\xe6\x6a\x41\x63\x37\xa6\x48\xaf\x06\xd3\x1d\xc5\x3f\x4f\x77\x70\xb5\x80\x5a\x6e\x39\xea\x36\x16\x9a\x4a\xd6\xbf\xc8\x2d\xba\x07\xa4\x46\x51\x65\xf1\x35\x72\xf6\x4b\x1c\xf7\xab\x48\xfe\xf3\x70\x2e\x18\xa8\x4d\x84\x6f\xa6\x6f\x62\x7c\x33\xcf\x35\xe8\x2e\xf9\xda\x9b\xe1\x1a\x98\xdc\x7f\x00\x44\x5b\x1e\xdf\xbe\xe8\xb6\xed\xeb\xcf\x18\x07\xcd\xd4\x6c\x0e\x45\xe3\xa7\xcd\xd1\x68\xcc\x76\xcd\x80\x54\x18\xd0\x9b\x8d\x89\xe2\x46\xff\x63\x87\xa5\x5c\xb6\x14\xd6\xc5\x8a\x5f\x45\x11\x07\xb9\x02\xbc\x60\xca\xea\xa0\xff\x05\xf6\x48\x8a\x4a\xde\xac\xf2\xf9\xea\xc1\xff\x43\x38\xe8\x5f\x0b\xfc\x56\x72\xa9\x71\x7e\x95\x0e\x2b\x1e\x80\x6a\x1e\xe0\x8f\x8e\x90\xc2\xc8\x96\x91\xd9\x37\x33\xef\x95\x2c\x61\xd5\x27\x83\xda\x48\xae\x6e\xcb\xb2\x3e\xb2\x4b\x7a\x35\x17\x59\xcd\xcf\xd9\x44\xaa\xd8\xc4\xea\xa7\x9b\x8f\x95\x65\x19\xec\x25\x15\xdc\xa5\xf9\xbd\x5f\xed\x23\xf0\x0f\x8a\xa2\x1a\xba\x64\x8d\x2d\x93\xce\x24\x2b\x39\xdd\xc1\x96\xb3\xf1\x01\xf6\x8e\x2a\x0d\xf4\x35\x11\x18\x34\x6f\xec\xcd\x7d\xb9\x39\x6f\xee\xd5\xa0\x1e\xb7\x6d\x6b\xbe\xc9\x34\xd9\x4a\x69\x8a\xcd\x34\x33\xc3\x50\x6d\xe1\x5b\x2b\x95\x7a\x9c\x0a\x39\x67\xfa\x09\x04\xaa\xa8\x6e\x93\x2f\xe5\xa3\x83\xb7\xd2\x9f\x66\x55\xf7\x37\x59\xd4\xbd\x7e\xf9\xf5\x8f\xe2\x5b\x7d\xd9\xeb\x1b\xbc\xd3\x34\xdc\x13\x17\xd9\xfb\xd3\xd0\x5f\xae\xa2\x38\xb5\xfc\x44\xdc\x00\x2d\xe2\x68\x69\x4d\x77\xb4\x53\xea\x3e\x4b\xfa\x81\x7f\xdc\x97\xdf\xa7\x3b\x95\x12\xab\xf4\xf2\xca\x12\xab\xf4\xd2\x28\xa1\x74\x2f\x54\x11\xf5\x6e\x64\x59\x5b\x4b\x77\x75\x00\x4c\x74\x62\x15\xba\xee\x8c\x5d\xf0\x4c\xd3\x90\x5d\xc8\x9a\xe0\xc2\x41\x30\xc5\x70\xdd\x68\x4d\x77\xaa\x2c\xe4\x74\x87\x4c\x81\x56\x40\xce\x6f\xd9\xd8\xa2\xfb\x96\xbd\x16\x38\xda\xb8\x76\xb7\x16\x6e\x90\x30\xa2\xbe\x6e\x5e\xc0\x57\x32\xe8\xab\x78\x6b\xad\x46\x40\xdf\x30\x5b\xd3\x1d\x68\x5a\x24\x8b\xcb\xe6\x6a\x9a\xbe\x77\x86\x64\x91\x5a\x18\x35\x1b\x17\xf7\x9b\xf5\x8b\xbb\xe6\x86\x46\x9a\x3e\x54\x2f\xa8\xcd\xe6\xf8\x9f\x02\x4b\x0c\xa9\xab\x7e\xd5\x5a\xaf\xd7\x2b\x47\xc1\x2e\x11\x3b\xdd\x21\xd6\x64\xba\x53\xbf\x60\x9e\xee\xcc\x54\x4d\x96\xb5\x41\xff\x96\xed\xeb\x67\x5c\xf6\xa7\x51\x0d\xc0\xa2\x56\x99\xb9\x44\x8c\x78\x2a\x77\x38\x3e\x98\xf5\x8a\x36\x17\x35\x2a\x86\xac\x92\x6f\x73\x76\x42\x1e\x5c\xc9\xa4\x46\xd7\xa2\x65\x2b\x5b\x07\xb8\x79\x88\x9b\x07\x59\xe2\xbd\xd2\x50\x39\xd8\xcd\xcd\x35\x0d\xeb\x15\x23\x7e\xc5\x98\xeb\xd6\x0d\x94\x9a\x5b\x64\x05\xab\xfd\xbe\x15\x46\x29\x73\x38\x1c\xd6\xb1\x9f\x9e\xfb\x09\xb3\x0e\x5e\x3d\xb1\x8e\x99\xe7\xf2\xb4\x73\x66\x9d\xbb\xa1\x70\xd5\x00\xf7\xb0\x89\x34\xa7\x58\xb1\x98\xf7\x8b\xcd\x55\x55\xfe\xc2\xb2\x5b\x76\x93\xd2\x83\xd5\xb6\x36\xd4\x1e\x2a\x69\xa5\xe2\x03\xc6\x26\x72\x84\x14\xc0\xe8\xd6\x0d\x88\x81\x2f\xc3\x95\x6c\xd7\xe8\x49\x94\xad\x49\x8d\x09\xe9\xa3\x08\xd6\x91\x75\x65\xbf\x58\x58\xe5\xc7\x75\x75\x9f\xde\xb8\xcc\x35\x3f\x17\xe5\x4b\x61\xb6\xa7\x55\x2f\x36\xdb\xba\x29\xb5\x97\x35\x1a\xa3\x6d\x62\xbf\x32\xda\xbc\x07\x72\xb9\xde\xa6\x2e\x51\xe9\x99\x5a\xb8\xaf\x57\x75\xe0\x88\xaf\x5c\xa2\x97\x87\xd0\xfa\x2d\xfa\x74\x07\x13\xeb\xee\x60\x80\xeb\xe3\x5c\xed\x59\x61\x90\xe8\xa9\xeb\x7d\xbc\x14\xfd\x72\x34\x45\xa6\x91\x05\x4a\xa5\x62\x92\x24\x96\x1b\xce\xad\xf4\x94\xe9\x19\x65\xad\xdc\x38\xb5\xa2\x85\xfe\x9e\xe8\x4f\x15\x92\x95\x3b\xde\x36\x84\x58\xed\xb6\x75\x4d\x1e\xab\x63\x4d\x77\x4c\x55\x92\xe9\xce\x9f\x88\xc7\xba\xd6\xc8\xcd\xf1\x77\xc5\x22\xb4\xd1\xaa\xb9\x7e\x28\xe1\x9b\x9e\x49\x35\xda\x12\x1c\xc4\xcd\x08\x4b\x68\x8f\xdc\x1c\x1b\xe5\x8a\xd7\x80\x8a\x46\xe5\x95\x4f\xc7\xc7\x15\xc3\xfe\xa7\x82\xdb\xa8\xd9\xf2\xe7\x0c\x5f\xa5\xdd\x4f\x19\x3b\xad\xdb\x52\xdb\x05\x5e\xb8\x29\x8b\xad\x28\xb4\x92\x68\xc9\xac\x98\x25\x69\xec\x4b\xf6\x6c\xc9\xcf\x25\x1c\xdd\xa0\x44\xc1\xe6\xd6\x29\x8b\xd9\xf5\x23\xaf\x95\x70\x6e\x8e\xcd\xca\x9e\xd6\x80\xd0\x6d\x8a\x39\x7f\x0e\x4e\xeb\xad\x5f\x8d\x56\xe0\xac\x60\x3f\xd6\xda\x3d\x06\x4e\x1b\xf7\x83\x02\x04\xb6\x7b\xd3\xbe\x66\xca\x39\x83\x9e\x5e\x06\x9c\x57\xff\x5b\xca\x88\xf7\xfa\xaa\x95\x9d\x59\x41\x40\x6d\x44\x7a\xc9\x28\x70\x81\xc9\xcb\x66\xa7\x30\x1f\x82\xba\x43\x18\xad\x3e\xf4\xed\x3f\xb7\xfa\xf4\xaf\x7f\x1b\xf5\xe9\x6f\xff\x21\xd5\xa7\xbf\xfd\x8f\x70\x57\xf7\xe5\x86\x02\xf5\x23\x37\xf5\x4e\xe5\x59\x44\xc7\x54\x0a\x21\x60\xd1\xeb\xc5\xbb\x9a\xdb\xfd\x6d\xf1\x8c\x06\xca\xed\xfe\x46\xd6\x26\xf7\x73\x5b\x75\xb5\x1f\x8b\xe9\x06\xcb\x82\x71\x36\x5c\x17\xa6\xcf\xba\x75\xa2\xbc\x91\x3d\x0f\x17\xd1\x7b\x76\xb1\x45\x0f\xb8\x77\x2b\xd4\xf7\x74\x9f\xaf\x2d\x77\x29\x1c\xfb\x5b\x0a\x50\x4b\x86\x31\xd8\xfa\x2d\x91\xe1\x82\xb6\x21\xe3\x66\x11\x02\x96\x65\x80\x80\x6d\x15\x15\xb8\x20\xae\x18\x81\xe6\xae\x10\x46\x27\x33\x12\xd2\xe6\x50\x08\x1b\x13\x55\x6b\x18\xb6\xea\xfe\x47\x0b\xed\x6a\x82\xc4\x34\xdc\x1f\x90\x88\x86\x7b\x57\xc2\x36\x8a\xdb\x6d\x26\x74\xcc\xaa\x97\x8e\xc7\x9c\x6e\xba\x02\x6c\xe9\x87\x14\x29\x8f\x73\x55\xb5\x4e\xe5\xf1\x0b\x61\x79\x29\x29\xfd\x93\x9e\xba\xe1\x3c\x30\x43\x3a\x55\xaf\x1f\x25\x04\xda\x5f\x98\xad\x94\x3a\x6f\x02\x90\x14\x67\x6e\x81\xe8\x51\x10\x79\x1f\x35\x38\xa6\xe7\xd1\x4f\x86\x69\xc8\x61\x92\x06\xa3\xdb\x60\x61\x01\x4b\x99\x0e\x3d\x6e\x00\xef\x37\x83\xf7\x44\x14\x28\xe1\x83\xd7\xab\x61\x3b\x8d\xce\xcd\xd9\x23\x0f\x30\x10\x8d\xce\x33\xd2\x9d\x75\x83\x6f\x55\x79\x03\xe0\xd4\x67\x8d\x80\x03\x98\x7b\x3d\x31\x64\x17\xc7\x88\x5c\xf5\x39\x19\x5f\x37\x77\xa4\x39\x82\x73\xd5\x18\x42\xfd\x5d\x91\x71\xcb\x48\x2a\x4d\x8a\x8a\xb3\x5b\xe6\x45\xe1\x1c\xd4\x1c\xae\x42\xd9\xa9\x3f\x67\x5b\x50\xa6\x71\x76\x13\xf0\x94\x9a\x45\x33\x7c\xf2\x2b\x6e\xf2\x69\xab\xa0\x83\x32\xa2\x3a\xbd\x24\x70\x4a\x67\x86\x99\xc8\xaf\x81\x2d\xfe\x35\x58\x8a\x34\x10\x26\x22\xa8\x5a\xe1\xa7\x7b\xe1\x04\x53\x93\x66\xb2\x6a\x32\x38\x69\x5e\xbb\xa9\x06\xfa\xca\x6c\xd0\xda\x59\x08\xf9\xf8\x0e\x8d\x0b\xb2\x65\x78\xfe\xc6\x4d\x0f\x71\x19\x03\xe1\xfb\x3f\x2b\x06\x82\x54\x04\x01\xbd\x0e\x35\x53\x4a\x09\xb9\x1f\x2e\xa2\x4d\x55\x18\xc3\x1d\xbc\x56\xfa\x68\x54\x21\xb9\x89\x76\xcb\xc6\x8e\xb9\xe9\xeb\x51\x54\x23\xb5\x39\x72\xb4\xe1\xb9\xbd\x51\x53\x45\xbb\x21\xad\xfa\xbb\xbf\xb1\x1a\x54\xc0\xdc\xd8\xd2\xc0\x6d\xe8\x43\x6d\x23\xcf\x6d\x2e\x48\xaf\x52\xb8\x21\x5b\x27\x72\xc2\x31\xa9\x1d\x4c\x42\xca\x36\x0f\xee\x80\x04\xe9\xc2\x1d\xa6\xbb\x54\x86\x6a\xa6\xac\x09\xeb\xf9\xf3\x99\xd4\x8b\x72\x03\x16\xa7\x75\x6d\xb3\x74\xb9\x12\x1f\xba\x0b\xff\x82\x25\x7a\xa0\x4b\x84\xca\xb8\x37\xb2\xee\x9e\xfe\x60\x18\x05\x90\x30\x7a\x1c\x44\x09\x2b\x9d\xd0\x9a\x63\x29\x3d\x9f\x57\x6a\x51\x01\xeb\x9a\xdc\xf3\xd7\xc7\xb6\x12\xe0\x0d\xc2\xeb\x54\xaa\x12\x8b\x73\x35\xe8\x41\x73\x96\x26\xd0\xcd\xe1\x6e\x2e\x25\x97\xc8\xa2\x21\xea\x81\xe1\xd7\xbd\xa9\x24\x8c\x4f\x2d\xa2\xc1\x9f\xd0\x5f\xf1\x72\x75\x87\x65\x9e\x4f\xed\xb1\x2c\xf6\x47\xba\x2c\x8b\x36\xf7\x19\x82\xe1\x6d\xd5\x21\x64\xf5\xbe\x34\xd2\x18\x70\x22\xac\xc7\xff\x54\xbb\x70\x05\xb4\x1a\xd6\x3a\x58\x0a\x28\xe9\x6e\x1f\x54\xc3\xbe\xbf\xca\x4b\xfb\x77\xff\xdc\xc7\xde\x1f\xfe\x36\xc7\xde\xef\xfe\x21\x8f\xbd\xdf\xfd\x47\x1c\x7b\xbf\x2e\x8f\xbd\xab\x55\xb3\x73\x76\xf3\x1c\x6c\x7a\x68\xff\xfe\x53\x75\x11\xef\xdf\x3e\xde\x5d\x78\x03\xb7\xa6\x8b\xd8\xab\x2d\xf6\x93\x5a\xf6\x99\x90\x2e\xad\xdc\x39\xc4\xf8\xb5\xee\xae\x2e\xac\xe1\x60\x75\x61\xdd\x59\x5d\x58\x2d\x71\x7d\xeb\x86\x29\x08\x9c\x8e\xc1\xbf\x16\x84\xe4\xc8\x12\xc7\xba\xdd\x90\xc3\xf5\x3e\x9e\xc4\x51\x16\xce\xbb\x5e\x14\x44\xb1\x63\x7d\xb6\x58\x2c\x9a\xeb\x71\xac\xe1\xea\xc2\x4a\xa2\xc0\x9f\x5b\xf1\xc9\xb1\xbd\xbb\x7b\x87\x58\x03\x62\x0d\x70\x3d\xbf\xac\xea\xaa\x4c\x3c\xdb\x22\x0a\xd3\x2e\x2c\xa4\xd6\xb0\x37\xdc\xbd\x1b\xb3\x65\xbd\x26\xc8\x72\x2e\x63\x8b\xde\x1b\x0c\xea\xdf\x03\x3f\x64\x5d\x15\x7b\x74\xd8\xbb\x53\xfd\xfe\xf7\x53\xbf\x34\xa9\xe2\x4a\x25\xcc\xf3\x2f\xa5\xea\xe5\xc9\x63\xad\x85\x79\xef\x91\x7e\xf4\xcb\xd4\xdd\xf2\x51\xe4\x1d\x1d\x1e\x1c\x1e\x90\x07\x65\xe6\xdd\xfa\x63\x93\x22\xe7\x06\x64\x1b\xea\x9c\xa8\xa6\xce\xa9\xf4\x42\x3e\xb2\x4b\x3a\xdd\xc2\x88\x4e\xb5\x2a\xe7\x54\x6c\x82\x53\x24\xf5\x66\xa6\x35\xae\x74\xaa\x54\x49\x2a\xea\x2f\xaa\x5e\x83\xd7\x9c\x96\xea\x2c\x90\x75\x3f\xdf\xeb\xc3\x5f\x99\x66\xea\xa1\x94\x5a\x28\x65\x85\x9a\x5f\xdc\xa9\xf1\x8b\x3b\x78\x8a\x0c\xb5\x91\x29\x67\x3e\xa7\x48\x69\x8a\x4c\xb7\x9e\x6e\x4c\x80\xfa\x0d\x3a\xae\x1b\x08\xf0\xe7\x74\xba\x85\x77\x9c\x56\x15\x6a\xac\xb3\xee\x22\x8a\x21\x37\xac\xec\x7e\x68\xe9\x8c\x96\x23\x10\x2f\x12\xc4\xa6\x38\xad\xeb\x07\xc2\x02\x21\x94\xa3\xa6\x68\x2b\x63\x29\xab\xf0\xe7\x33\x5e\xad\x89\x02\xf9\xa5\x99\x69\xb4\xf2\xdc\xda\x91\x5b\xfa\xce\x14\x59\x92\x71\xd4\x03\x5c\x5b\xa1\x2a\xc0\xa9\xc1\x5b\xaf\xad\xa6\x36\x24\x4b\x69\x15\x45\x65\x70\x37\x46\x15\xd4\xb3\x4a\xcc\x3a\x12\xb5\x9b\x15\x6a\xc6\xd2\x1c\xd1\x2b\x32\x4a\x3e\xe4\x26\xf8\xa8\x33\xa4\x35\xb4\xec\x57\x6f\x98\xb7\x74\xd8\xe4\x32\xad\xa2\xa8\x74\xb7\x41\x81\xe8\x0f\xa3\x41\xf3\x9b\xd7\xe2\xa1\xca\x3e\xde\x08\x11\x75\x46\xf5\x8f\x61\xc2\x64\x3e\x6f\x84\x0a\x48\x05\x42\x6b\x54\x40\x53\x8a\x6b\x15\xac\x34\x22\xe0\xea\xbe\x6e\xa5\x7b\x07\x34\xd0\xca\xaa\xbd\x28\xac\x75\xb6\xec\xea\x66\xaf\x3e\x55\x3f\xac\x7c\xbb\x4e\x47\xcc\x54\xce\x22\xfc\xf9\x65\x96\xba\x15\x55\x2d\xd0\xd4\xba\x46\x51\x6b\xa7\x69\x87\x10\x1a\x2c\x42\xba\xaf\xee\xca\xb6\x0a\xf9\x0d\xe5\x9f\xcb\x15\x73\x2c\x29\xee\x2f\xef\xe4\xa4\x30\xbf\x76\xdb\x69\x81\x7a\xd2\x35\x75\x89\xfb\x80\x2b\xab\x2a\x6f\xf8\x4c\xd5\x32\x59\x8f\x64\xec\xca\x1b\xf0\x6d\x97\x06\xd6\xba\xd8\xa8\x4f\xdf\x21\xa8\xf2\x1b\x9b\x55\xe5\x7a\x56\xda\x42\x2b\x1d\xc1\xb9\xbe\x19\xd5\x22\xd2\x9d\xad\x97\x07\x3b\xc4\xda\xfe\x31\xd9\x21\xd6\xd5\xe2\xd1\xfa\xfd\xe7\xd6\x1b\x06\x0d\x1c\xb1\x54\x6b\xce\xd5\x75\x57\x34\x57\xf8\x5f\xb9\x43\x35\x74\x5d\x7d\xa1\xd6\x64\x56\xfd\xa2\x2a\x7f\x22\xd5\x86\x75\xe5\x74\x4b\xbc\x66\x79\xac\x52\xf1\x95\xe9\xbe\xd5\x6a\x0e\x91\xa6\x2e\x28\xaa\xed\xf9\xc9\x41\x78\x29\x2b\x53\x6d\x5a\x74\x3b\x18\xfb\xd6\x60\x7b\x05\xb2\xa5\xab\xca\xef\x5d\x8d\xc3\xaa\x4e\x43\x13\x70\x95\xcb\x77\x89\x47\x29\xf8\xaf\xe8\x36\xcd\x1d\x6b\xe7\xaa\x3b\x15\x53\xf5\xcc\xb2\x84\x8c\xb9\x76\x3f\xbf\xa3\xa4\xbe\x3b\xb8\x92\x19\xce\xec\xd6\x0e\xdc\xb6\x54\xab\x51\x82\x67\x39\xb5\x94\xea\xde\xc6\xed\x06\xa8\xd6\x36\x29\x51\x15\xdb\x11\xa0\x86\xf1\xaf\xee\xbf\xbc\xc2\xb9\x09\x02\xe0\x3e\xa7\xb9\xf7\xe5\xe5\xce\x1f\x43\x41\x55\x7f\x71\x0b\x0e\x24\x89\xcd\x9f\x48\x91\x7b\x2a\xd4\x0d\xb7\x75\x0c\x72\x69\x15\x87\x6d\xc8\xe1\xa8\xa9\x56\x69\x74\xa0\x19\x0f\x22\x73\x05\x11\x1a\x0d\xf0\xc5\xf8\xd0\x88\x80\x6d\xb7\x48\x15\x30\xcc\xea\x2b\x77\x4b\x55\x55\xba\x52\xa6\x64\xed\x88\x1b\x8f\xea\x08\xa8\x5b\xa7\xfa\x9a\x5a\x65\x3a\x76\xae\xba\x84\xaa\x56\x78\x75\xe6\x64\x23\xf7\x35\x33\xbc\xcc\x58\x25\x2c\x79\x71\x55\xd7\x44\xbc\x8a\x92\xcd\x8b\xac\x3a\x14\xcd\x23\x29\xee\xb5\x6a\x24\x5d\xc5\xa9\xbe\xe6\xaa\xd7\xd8\x34\xb2\x5b\x2f\xbb\xaa\x23\x6b\x56\x54\x54\x7b\x2d\x2f\xc4\xfe\x40\xb7\x45\xc9\x1b\xf6\x5b\x66\xbe\xaa\xe3\x4d\xc4\x64\xf4\xba\xe1\x36\x6d\xba\x45\x29\x54\x4f\x65\x5c\xce\x65\xb9\xe3\xaa\x63\x5b\x9d\x85\xb8\x5a\x97\x5b\xf3\x5e\x3b\xc4\x9a\xec\x34\xac\x27\x9c\x2d\xa8\xc2\x26\x94\xbb\xcb\xaa\x34\xcf\x57\xab\x6c\xdb\x69\xb6\x2c\xbf\x65\xf6\x5a\xb6\xe8\xcb\xf3\xf9\xa6\x56\x77\x33\xef\x64\x51\x6b\xcd\xa1\xb9\x32\x13\xb1\x26\xaa\xde\x99\x60\xdf\x4c\xfd\x67\x18\x91\x66\x9a\xfb\xbb\xc0\x03\xcb\xb6\x55\xe1\x00\xb7\x2a\x81\x59\x89\x17\xad\x18\x67\xd0\xeb\x32\xba\xff\x14\xc9\x7d\x8a\x48\xae\xd4\x76\x43\x4d\xda\x6e\x5f\x06\xa4\x2e\x22\x45\xd7\x28\xbe\x11\x33\x72\xa6\x93\x05\xa4\x6a\x82\xe2\x3c\x0b\x0c\xbd\xa0\x1f\x02\x5b\xfc\x6b\x88\x68\xe9\x27\xcf\x43\x3f\xf5\xdd\xc0\xff\x15\xee\xc6\x4f\xf4\xcc\x4c\xde\x45\xb1\xb8\x2f\x37\x99\x98\x4a\xcc\xcb\xe7\x1b\xd7\xed\xd5\xad\x42\xdf\x96\xeb\xc8\x9b\x0d\xea\x06\x9c\x74\x37\x5a\x2d\xc8\xd6\x33\xd8\x96\x2a\x36\xf8\x6a\xc1\x2c\x17\x45\x19\x9a\xf3\x87\x46\x1d\x01\x5f\xf7\x1f\xc0\x15\xb7\xd7\xf3\x4d\x4f\x90\x3a\x9b\x0e\xa7\xf9\xd5\x96\x6b\xf0\xfa\x15\x38\x13\xa9\xe5\x2d\xb8\x0e\xe3\xc4\xd4\xf5\xb1\x7a\xb8\x3a\x08\xba\x17\x05\xd9\x72\x8b\xab\x03\x77\xb5\x82\x5b\x4e\xb9\x14\x18\xa3\x3a\xde\x52\x7b\xe4\xf1\x42\xdd\x63\x57\x04\x66\x16\xe5\x36\x47\x7a\xcc\xec\x6d\xd7\xc3\x65\xb0\x72\x31\x5a\xdd\x68\xd1\xdd\x90\x9e\xa2\xab\x55\xbc\xc8\xa6\xbc\x55\x96\xa8\x8f\x68\x51\x60\xc7\x84\xc5\x93\x2e\x26\xc4\x8d\x37\x60\x58\x5e\x60\x32\xf3\xd2\xbb\x8e\x51\x31\x51\xbb\xc3\xee\x50\xe3\x15\x9e\xa2\x33\x16\x2f\x82\xe8\xbc\xeb\x66\x69\xc4\x31\xb2\x75\x4c\xce\xfd\x79\x7a\xda\x15\x91\xde\x65\xc6\x4a\x7c\xc5\x12\x2f\x9a\xee\x01\x3c\xb7\xec\x88\xf4\xfd\xe0\x08\x48\x83\xc8\x9d\xb3\x98\xf7\x64\x17\xcf\x70\x31\xfa\x6a\xab\x37\x88\x6f\x2a\xde\x20\xbe\xfa\xd4\x1b\x98\xdd\xc5\xc3\xb9\x77\xe7\xce\xfd\xda\x0d\xcc\xdf\xeb\xff\xfe\x17\xd6\xfb\xd7\x4f\x5e\x3b\xd6\xc1\x22\x65\xb1\x75\x9a\xa6\xab\xc4\xe9\xf7\x4f\xfc\xf4\x34\x3b\xee\x79\xd1\xd2\xb8\x90\x90\x0f\xdd\x39\x4b\xfc\x93\xb0\x9b\x5c\x26\x29\x5b\xf6\x57\x59\x10\xf4\xef\x0c\x1f\x58\x27\x2c\x4d\xac\x25\x8b\x4f\xd8\x7c\x1a\xa6\xa7\x2c\x66\xd6\x79\x14\xee\x08\xad\xf0\xd0\x62\x17\x69\xec\x0a\xd5\x64\x61\x85\xe1\x27\xe5\xf7\x90\xb1\x39\x67\x7f\xc3\xcb\x65\x14\x33\xeb\x8b\xfe\x34\xec\x95\x51\xb9\x95\xe0\x43\x51\x79\xf7\x38\x0d\xff\xa8\x9a\xb3\xd9\xe5\xf9\xcf\x19\x3f\x0a\x85\xd6\xeb\x27\xef\x44\x9b\x32\xe6\x3f\x84\xb0\x5f\xb2\x30\x13\xd5\x03\x75\x39\xd6\xf0\xee\x60\x75\xf1\xb7\xbc\xd1\x39\x58\xad\xae\xb8\xb7\xf9\x23\xff\x1d\x1c\xfc\xf2\xe4\x60\xd4\x79\x72\xf0\x58\x5c\xcc\x6c\xf7\xbd\xc1\xf3\x1e\x1e\x90\xf3\x32\x01\x32\xfc\xb0\x71\xa5\x23\x61\xbc\xf6\x06\xc7\x10\x32\xce\xfd\xb3\xfa\xc5\x4c\x6d\x01\xdd\xb8\xb8\x70\x57\x2b\xf3\xba\x42\x55\x5d\xde\x36\x18\xab\x69\xf5\x62\xc2\x6c\xac\x5c\x4f\xeb\xf7\x03\x5b\x6e\x48\xaa\x7c\xbc\x6a\x6b\x73\x05\x9e\xd6\x4c\xb0\x9d\x2b\x56\x5b\x3a\x45\x5b\x0f\x6e\xf5\x6a\x9a\x0a\xd7\x17\xdd\xe9\x55\xe6\xdd\xb5\xa5\x58\x89\xa7\xab\x36\xda\x9b\xd6\xd4\x70\x97\x64\x0c\xd1\x8d\x56\xe4\x3a\x4e\x6b\xc3\x6c\xae\xc9\x1b\xf2\xf9\xbd\xca\xf2\x6c\x39\x46\x7f\x5d\xdd\xcf\x7a\xe7\xea\x80\xd7\x8c\xc9\x79\x4a\x85\x06\x55\xef\xc4\x62\x5e\xc7\x45\x59\xdd\x4d\xed\xa2\x41\xe6\xfd\x8c\x1f\xff\x62\x21\xf3\x36\xe5\xdf\xef\x52\x8e\xef\x9a\xec\x5b\x16\x34\x59\x43\x99\xa1\xb7\x79\x7f\xcb\xbf\xf2\xb9\xb5\x59\x4e\x9a\x83\x6f\x2d\x59\x3a\xca\xd9\x2c\x6b\x4a\xd6\xb7\xd7\x50\xbf\xa1\xbd\x56\x6e\xbf\x5a\xed\x68\x31\xb5\x54\x4f\xb0\xd6\x8d\x8d\x92\x4a\xf7\x49\xbd\x53\x5b\xa4\xdd\xe2\x80\x29\x91\x5d\x3b\x5e\x56\x66\x3f\x3f\xa5\x6e\x30\xab\x3c\xb1\x69\xde\xd6\x0f\xb0\x30\x68\x1b\x27\xe1\xea\x7c\x33\x2d\x9a\x15\xde\x2a\xf2\xe7\x2b\xd9\xe6\xea\x31\x73\xab\x9c\x7b\x5b\x7d\x5b\x78\xe8\xbf\xea\xa8\x5f\xf2\xcd\x3b\x33\x6c\x5c\x38\x08\x36\xbb\x6e\xa0\x64\x72\xd9\x57\x9f\x4d\xf7\xff\x93\x9d\xf8\x83\xec\xc4\x35\xa7\xd1\xaf\x6f\x6a\x7b\xc5\x0f\x3c\x3f\x06\xf4\x4d\x6f\x41\xd2\x05\x8d\x7a\x42\x65\x6c\x24\xa2\x49\x36\x05\xaf\x5d\xb4\xdb\x76\xcb\x46\x73\xa9\x95\xc4\x3f\xfa\xa1\x95\x2e\xca\x98\x82\x38\xcf\x75\xc4\xd3\x74\x61\xe3\x9e\x91\x57\x86\x7d\x62\x0b\xba\x2e\x48\xb8\xd8\x3c\x7a\xd5\x15\xc3\xf6\x86\xaa\x36\x5a\x8b\xe0\x2c\x52\x1d\x19\x29\xd5\xfc\x84\xe5\x61\xcd\x0c\x7b\x1d\x2e\xc6\x21\x3b\xb7\xd2\x85\x9d\x62\xa7\x0c\xda\x3c\xe6\x00\x3a\x90\x2a\x8f\x73\x10\x7d\x33\x6d\xb7\x6d\xb6\x98\xb0\x19\x6d\x0d\x30\x61\xc5\xe8\x22\xb5\x43\x8e\x21\x81\xb0\x78\x41\x43\xa3\xc3\xd4\xec\xfd\x28\x5e\x54\x62\x29\x87\x0b\x11\xb3\x78\x41\xe3\x85\x8e\xb6\x48\xdc\x05\x45\x02\xd5\x76\xca\x92\x14\x23\xaa\x42\xbe\xa6\x0b\x1b\xf1\x24\xc4\x8f\xb1\x0b\xda\xff\x49\x64\x9b\xda\x76\xef\x0b\x3c\xc5\x93\x9f\xf0\xac\x73\xab\x3f\xfa\x31\xb0\xe3\x05\xa9\x0c\x03\x59\x83\x2c\xf2\x24\x03\xf5\x3c\xa7\x35\x20\x27\xac\xc1\x78\xe8\x04\x6c\x24\xf1\x18\xa6\x2a\x78\xad\x7c\x0d\x38\x10\xaa\xdf\xd1\x42\x45\x82\xe4\x34\x70\x6e\xb3\x05\xd1\x31\x3c\x11\x92\x51\x24\xdd\xc5\x98\xc9\x40\x3e\xf7\x49\x77\x88\x21\x30\x91\x08\xa3\xe4\x2d\x08\xba\x35\x44\x15\x6c\x86\x6a\xac\x42\x7e\x90\x7f\x9b\xda\xeb\x93\x20\x3a\xae\x84\x57\x6e\x0d\x0a\xb2\x16\x3d\x75\xc2\x45\x81\x8b\x94\xd9\x48\x85\x4a\x44\x02\xeb\xc9\x82\x06\x10\x4a\x78\xfe\x3c\x9c\xb3\x0b\x92\x2d\x68\x6b\x40\x82\x05\xfd\x86\xd9\x48\x27\x23\x3c\x32\x5e\xfc\x70\x32\x6b\xb7\x45\x4c\xc4\x21\x2e\x0b\x57\xe2\x12\xf0\x8a\x86\x05\x16\xa0\xa9\x88\xd0\x50\xc6\x88\x07\x2d\x01\xcd\x16\x79\xde\x0a\x16\x22\x18\xb4\xa8\xab\x29\xda\x76\xb2\x10\xf1\xa0\x53\x72\xb3\xb0\xe2\xa0\xb1\xfe\x28\xac\xf6\x83\x77\x7a\xb1\xa0\xad\x47\x51\xd5\xfa\xa9\x12\x43\xb3\xc0\x78\xd4\x00\x37\x3f\x52\x1a\x60\x2f\x00\xe2\x38\x5a\x3a\x5f\x7b\xd2\xa0\x67\xbe\xa0\xdf\x31\x1b\xc1\x30\x22\x4c\x56\x02\x8f\xe2\x95\xac\x0f\x1e\x3f\x3e\x7c\xf7\xee\xf5\xdb\x77\xbc\x92\x81\x33\x20\x43\x67\xb7\xc0\xe4\x74\x41\xbf\x4a\x6d\x04\x81\xdf\x58\x82\x30\x59\x2e\xe8\x64\x26\x68\x81\x9c\x2d\xe8\x4b\x37\x3d\xed\x2d\xdd\x8b\x26\x90\xea\xa8\x6c\xcd\x39\x2e\x57\x1c\x32\x28\xef\x54\x5d\xc5\xcb\xe8\xe1\x24\x22\x3e\x3d\x13\x34\x4b\x5c\x9a\xa5\xb6\x8a\x99\x85\x89\x47\xe7\xa9\x9d\x12\x17\x93\x84\x3f\xe9\x69\xcd\xc6\xae\xc3\x88\x0b\x24\xfc\x22\xb5\x7d\xdc\x6e\xdb\x9b\x11\xae\xed\x90\xfa\xe6\x54\xc5\x79\x1e\xb6\x28\x05\x68\xdb\xed\xd6\x8b\xd4\x0e\x8d\x45\x6d\x7c\x62\x87\xb8\xdd\x96\xe1\xf2\xed\x90\x86\x93\xd3\xc5\x0c\x82\xc4\xca\x58\xb3\xd8\x51\x4f\x24\xa4\xb2\x1e\x63\xf1\x2a\xe3\x94\x2e\xe5\x1c\xf3\x89\x47\x12\x11\xcf\x0a\x62\x77\x96\x1d\x08\x45\x88\x53\x27\xc4\xf6\xd9\xc2\x4e\xba\x1e\x19\x60\x4c\x22\x3a\x18\x79\x7b\xc9\xc8\xeb\x74\x48\xd4\xe9\x60\x8f\xef\x1c\x7e\xbb\x1d\x84\x36\xa0\x69\xe2\x95\x51\xe7\x55\x1c\x44\x1a\x91\x58\x99\x70\x9d\xc8\x11\x5f\xc9\x21\xbf\x94\x43\xbe\xba\x7a\xcc\x8f\xcb\x61\x25\xe7\xea\xd9\x0f\x6f\x34\xc4\x27\x7c\x88\x2f\x61\x88\x57\x57\x8f\x31\x71\x39\x36\xe8\xad\x54\x0e\x75\xc6\x87\x3a\xd1\x43\x1d\x88\xa1\xce\x30\x59\x6c\xec\x11\x2a\x1c\xd9\x62\x1c\xd2\x98\x0e\x9c\x21\x3c\xdb\x22\x26\x6a\xd6\x0d\x20\xaa\xfc\xa2\xbb\x4b\x62\x7a\xbe\xb0\x8f\x17\xb6\x97\xda\x0c\x93\x01\x26\xfc\x23\x26\x59\x27\xec\xc6\xfb\x0f\x07\x83\xfb\xc3\x87\x0f\x77\xef\xde\xb9\x7f\x67\xf0\xf0\xe1\x50\x86\xe2\x35\x02\xc6\xbe\x74\x2f\xfc\x65\xb6\x14\xfe\x21\xd8\xdc\x12\xad\x5b\xec\xc2\x03\xe6\x01\x89\xa1\x8c\xa8\xc7\xec\x84\xc4\x98\xf8\x74\x30\xf2\xf7\xe2\x91\xdf\xe9\x60\xdb\xa5\x41\xc7\xc7\x7e\x68\x25\x30\x60\xbc\xc7\xc9\xc4\x9d\x61\x33\x38\x35\x8d\x49\xb8\x17\x0b\x5d\x69\x9f\x06\x23\x7f\x2f\xeb\x8a\xe2\x1e\xf5\x3b\x21\xb1\x5d\xea\x77\x62\xa8\x64\x9c\x4c\xbc\x19\xe5\x35\x38\xe2\xc2\xc5\xe2\x09\x23\x51\xf2\xff\x25\xef\xd9\xbb\xda\x36\xb2\xff\xff\xf7\x29\x40\x87\xe3\x9d\xa9\x2f\x42\x72\x60\xc9\xca\x1d\x7c\x5c\x70\x52\x5a\x0a\x34\x90\xfd\x75\xa3\x7a\xbd\x83\x3d\x22\x6a\x64\xc9\xd5\x03\xc8\xda\xfa\xee\x7b\xe6\x29\xc9\x16\x24\x4d\x37\x3d\x39\xdb\x7f\x12\x33\x9a\x99\x3b\x73\xe7\xbe\xe7\x71\x8b\x7e\x78\x54\xec\xa6\xdd\xb8\x1f\xee\xee\x62\xf3\x3d\xdc\x75\xc7\x26\xa7\x64\x7c\x94\x62\x55\x9b\xc3\x38\x8a\x44\x5d\x01\x67\xd7\x55\x90\x76\xdd\x0f\xc3\xe2\x53\x8c\xc5\x18\x33\x3f\xec\x46\xe3\x9a\x92\x0e\xbb\x3d\x93\x74\x56\xaf\x15\x11\xe3\x82\x44\xd3\xe4\x30\x10\xb6\xc7\x43\x40\x5e\x28\xca\xa8\x25\x96\x1f\x05\xe4\xa1\xa6\x34\x2f\xb8\x3a\xfc\x39\xfb\xca\x9c\x2c\x47\xfe\x3f\xb7\xd0\xf8\x2b\xbc\xd7\xa7\x9d\xce\x36\xb2\xc4\x1b\x98\x61\xbc\xf5\x10\xe0\x4e\x67\x18\xa0\x87\x00\x64\xd9\x07\x55\xa3\xc8\xd2\x2c\x47\x3a\xd2\x1a\x90\x93\xa1\xca\x16\x7a\x11\x60\xdf\x1d\x57\x59\x9e\xb5\x72\x2b\xf5\x34\xae\x02\x52\xd8\x01\x4c\x6a\x16\x4d\xbe\x99\x21\x9b\x55\xc7\xe0\x63\x48\xc9\x1d\xa7\xc2\x84\x9c\x8b\x3c\x63\xa1\xc9\xdb\x0d\x53\xe2\x40\x46\xfc\x71\x3f\x3c\x9a\xf6\x71\x4c\x12\x7f\xda\xed\x8e\x81\xcf\xf1\x4a\x0d\x2e\x85\x18\xaf\x56\x6a\x57\x3d\x1f\xf8\x31\xa4\x7e\x3c\x1e\x7b\xfc\x5f\x23\x03\xb2\xb2\x84\xe3\x80\x2c\x59\x9c\xa7\x21\xcb\xbc\x49\x80\xb8\x39\x23\x74\xbe\xfc\xcb\xc5\xa5\x34\x01\xb2\x06\x37\xab\xb4\xcf\x5a\x89\x94\xb0\x54\x6d\x5a\x26\x77\xcc\x6d\x27\x8d\x86\x5f\x02\xf2\x8a\xdd\x8e\x1e\x16\xb5\x45\xbc\x0c\xc8\x2f\xb5\x45\x7c\x17\x90\xb0\xa1\x7d\x15\x2e\xf7\xe8\xde\x8d\xb5\x4d\x2e\xd5\x04\x4d\x60\x93\x5a\x10\x44\xf4\x36\xf3\xac\x1b\xab\x14\x77\x2a\x5e\x05\xc4\xd2\xdd\xc9\x16\x7c\x8d\xfb\xe8\x5d\xb0\x5a\xbd\xe2\x2b\xcf\x72\xb4\x31\x8a\xaa\x05\xa0\x0d\x93\xe8\x58\xc9\x1c\x93\x77\x3f\x57\xa9\x40\xb0\xb8\xf9\x26\xe0\x6b\x83\x66\xcf\xea\xb2\x2e\xff\x57\x55\xad\x64\x76\xa7\x93\xd7\x2d\x4e\x39\x04\x41\x97\xa2\x03\x4e\x98\xbf\x04\x78\x10\x4c\xb5\x85\xe5\xc5\xdc\x54\x5f\x16\x71\x46\x03\x4e\x94\x0a\x89\xd7\x75\x22\xfa\xbc\x89\xa0\x65\x0e\xbb\x26\xd1\x3e\x91\xc3\xfd\x5a\xac\xb5\x68\x74\xb6\xd1\xa8\x2d\xb7\x8c\xb4\xe8\x3a\x9d\x27\xd3\xb8\xb7\x65\x06\x97\x40\x76\xd6\x31\x11\x06\x1a\xd8\xa3\xf9\xce\xf9\x18\x3f\x35\xdf\xb9\x5a\xe2\xdf\x9e\xf5\x1c\xda\x52\x9e\x0f\x1a\x33\xf2\xfe\x0b\x89\xce\x07\x6a\x72\xda\xd3\x93\x58\x3a\x6f\xb8\x51\x1f\x9b\xea\x3c\x5b\xa4\x8c\xce\xfe\xd8\x2c\xe7\x62\xb8\x27\xad\x32\xf2\x94\xaf\xec\x6a\x75\x26\xff\xdb\x91\xff\x9d\x07\x08\x97\xf0\xba\x66\x7f\xbc\xa8\xec\x0f\xf8\x55\xfd\x0e\xa2\x24\x49\xe1\x87\x80\xec\xfd\xbc\x83\xfc\x9d\xce\x5f\xfe\x35\x5e\xfd\x3c\xfb\x79\x36\x58\x7d\xed\xff\xf3\x68\xfc\xd5\x11\xde\xbb\x85\x6f\x36\x3f\xe3\xbd\xdb\xfe\xd9\x14\x59\xca\x75\xb1\xa0\x57\xdf\x74\x01\x06\x31\xa4\x3a\x2b\x6e\x6a\xbf\x1a\xbd\x1c\xfd\x74\x39\x79\x35\xba\x3c\x1b\x1e\x8f\x26\x57\xaf\xbf\xb9\xba\x3e\xbd\x7e\x7d\x3d\xba\x9a\xbc\x3e\x3f\x19\xbd\x38\x3d\x1f\x9d\x4c\x8e\x87\x97\xd7\xaf\x5f\x8d\x20\x14\x0d\x64\xcd\xef\x47\xa3\xcb\xab\xc9\x8e\x03\x94\x24\x03\x6b\xc7\xf2\xac\x1d\x47\xdf\x96\xf7\x0d\xbc\x1a\xac\xb9\x92\x46\x21\x91\x7c\x5f\xb9\x4f\x7e\x6e\x78\xd7\x78\xd8\xe1\x20\x94\xb4\x1c\x43\x02\x29\x77\xc5\xc4\x5f\x4a\x3a\x25\x58\xcc\xa2\x84\xda\xc4\x52\x99\x0d\x36\xe9\x74\xc2\xd5\x6a\x83\x91\xd2\x4e\x67\x97\x1b\x50\xa9\xc9\x95\x40\x95\xd3\x9e\x91\x18\x31\xc8\xc5\x2e\x1d\xa4\xc2\x70\xc9\xec\x59\x12\xeb\x44\xd4\x5b\xca\x9d\x2c\x65\xca\xcf\x63\x94\x73\xb3\x4d\x4b\x54\x31\xa5\x80\xb4\x84\x14\xd2\x7e\x20\x12\x82\xaa\x9a\x29\x56\xfe\x09\x29\x6c\xe9\x27\x72\x48\x2a\x3f\xf1\x82\x14\x76\x11\x87\xd3\x64\xc6\xfa\x85\x1d\xd1\x2c\x17\xce\x12\x71\x4c\x26\xe0\xb7\x5c\x71\xf6\x65\xed\x39\x39\x99\xa2\x02\x54\x72\x71\x69\xb9\xcf\xf1\x4d\xca\xe8\x3b\x5e\xf2\x56\xaa\xcf\x39\x86\xed\x99\x2a\x15\xfe\xaa\x1a\xc8\xdc\x77\x84\x7d\x5f\x87\x73\x3e\x45\x11\x14\x79\xbd\x0c\xc3\x02\x63\x03\xfe\x0e\x6e\x89\x65\xc1\x7b\xe2\xc0\x0d\x71\xfa\x37\x55\xc2\xd9\x9b\x6e\x17\x2f\xe7\xe4\xad\x7f\x33\x36\xd2\xfa\xbe\x01\x0b\x86\xe4\x75\x80\x5e\x08\xfb\x74\x2e\xd1\x8f\x21\x32\x26\xb0\x83\xe1\x81\xf8\x63\x18\x11\xb7\x3f\xfa\x7a\xae\xfb\x1d\x75\xbb\xf8\x41\xce\xc4\xe8\x22\x74\x47\xe6\xfe\x68\x8c\x07\x77\x3a\x3e\x72\xa7\xb0\x7a\x41\xe6\xf6\x6d\x9a\x14\x8b\x8c\x63\x20\x90\x78\xba\x22\xfe\xfd\x98\x4b\xb5\x29\xcd\xd1\x03\x0c\x39\xc6\x0c\x81\x5d\x74\x3a\x57\xb2\xfb\x0b\xd9\xc5\xc4\xac\x94\xba\xf7\xa7\x9c\x9e\x2b\x8c\xa5\x75\x39\x21\x53\x74\x0f\x11\x0c\xe1\x01\x2e\x38\xa5\x0c\x8f\xc8\xfb\x4e\x07\xdd\x76\x49\xa4\xe4\xed\x7b\x18\xe2\xee\x04\xde\x93\x61\xf7\xde\x64\xbc\x55\x64\x74\xdb\x35\xb5\x70\x39\xae\xae\x49\x4e\x51\x0e\xc6\x59\x90\x03\x9f\x92\xb4\xab\x75\x20\x64\x95\x05\x55\x90\x6f\x82\x4d\x4e\x11\x19\x9f\x77\xb8\x3f\x08\x05\xf9\x21\xc0\xa0\x78\x85\x42\x51\xbf\x12\xad\x3b\x2f\xfa\xd9\x7d\xc8\x0d\x3e\x6a\x4f\xdf\xd2\x74\x98\x23\x07\xe3\xe5\x94\x66\x8c\x73\xb1\xd2\x15\x3b\x56\x5f\x94\x74\x74\xc9\x56\x2e\x0b\xfe\x65\x0a\x62\x35\x1b\x87\xa3\x42\x7c\xfb\xcb\xc6\xb7\xa9\xfa\xf2\xb5\xe5\x15\x24\xf4\xa9\x49\x93\xbc\xeb\xe2\x71\x5f\xd2\xa6\x0a\xaa\x7b\x32\xb3\x79\x97\x6a\xb7\x27\xd2\xfc\x27\xf2\x9c\x45\x47\xea\x4e\x68\x40\x7e\x0d\x50\xb4\xe7\x3a\xc6\x1e\x94\x3e\x12\xf3\x82\xaf\x49\x36\x30\xb4\x92\xf8\xc1\xae\x3b\x1e\x98\x49\xba\xd8\x93\x45\xdd\x7a\x11\x2b\x0b\x92\xf8\x11\xf7\x20\x1a\x78\x25\x84\x14\x03\xcb\xf2\x8a\x52\x3c\x2d\x20\x29\xe4\x65\x53\x6f\xeb\x55\xc3\xcb\x9c\xac\xe5\x8e\x13\xd5\x29\x31\x2f\x0a\xd4\x2f\xbf\xa6\xfa\xac\xf4\x91\xd3\xe9\x20\x4a\x58\xd7\x1a\x58\xdd\x11\xe5\x12\x02\xe2\x41\x96\xf8\xf9\x18\x51\x88\x21\xc4\x9e\x75\x2b\x95\x6e\x6e\x8a\x43\xec\xe9\x9f\x23\xca\xe5\x60\x88\x4b\xf8\xfb\x66\xc4\x11\xd8\x86\x3f\xc9\xe1\x19\xaa\x69\xc4\x1c\xeb\x7f\x78\xcb\x12\x62\xc2\xec\x1d\x99\x75\x7b\x60\x7e\x79\x96\x05\x29\xff\x20\x7d\x0e\x48\x88\xb5\x47\x17\xe1\xde\x9d\x53\x6d\xa2\xac\x9f\x7f\x80\x90\x2c\x4b\xa0\x64\x59\x6e\x90\x2d\xb3\x6f\x92\xd9\x7b\x91\x13\x5e\xfe\xac\xa5\x66\x93\x05\x83\xcb\x34\x99\x87\x19\xb3\x53\x26\x6f\x9e\xb2\xfb\x2d\xed\xb2\x86\x59\x16\xc6\xb7\xe6\x26\xc2\xd6\xd6\x82\xa6\x74\xce\x72\x96\x7a\x5b\xbc\xad\x85\xb1\x87\x98\xbd\xf3\x6b\xc1\xd2\xf7\x97\xfa\x5b\xd6\xe9\xd4\x57\x62\xf3\x7b\xdb\xd5\x56\x6e\x99\xf9\xf9\x98\x6c\xd6\xf6\xf3\x31\x37\xdc\x5f\x06\xc8\x5a\x24\x59\x6e\x41\xdc\x4d\x20\x17\x3e\x7f\x8a\x71\x09\xff\xfe\xe2\x96\x45\x3f\x4a\xf3\xa7\x5e\x96\x6f\xbf\xb8\x65\x91\x07\x73\xfe\xd4\x8b\xf2\xd3\x17\xb7\x28\xc5\x62\xf6\xa7\x17\x61\xb5\xc7\x1c\x82\xff\xed\xc7\x1c\x82\xcf\xf3\x98\x43\xf0\x45\x3e\xe6\x10\xfc\xa1\x8f\x39\x18\x24\x7f\x5f\xa7\xa1\x7e\x33\xb6\x42\x9a\xb1\x95\xd5\x4a\xfa\x35\xf9\x86\xe7\xdd\x1a\xc9\x59\xad\x50\xbc\x19\x53\xd9\xd6\xd1\x93\xfe\x93\xa1\x95\xef\x7e\x47\x68\xe5\x13\x82\x2a\x62\x30\x2d\x71\x95\xd6\x80\x91\xa8\xfc\xfb\x23\x2c\x6b\x53\x2d\x51\x8e\xf1\x6a\xc5\x3a\x9d\xbc\xd3\x51\x67\xb2\x6a\x88\xd1\x9e\xcb\x32\x16\xb2\x2d\x56\xbb\xc3\xc4\x81\xa4\x2e\xa4\xb5\x40\x5c\x66\x5e\x02\x71\xcb\xd9\xe7\xf4\xc8\x44\xf2\x06\x4b\xee\x51\x7b\xdb\x4e\xe9\xa9\x5f\x2e\xa8\xd4\x82\x7e\xda\xed\x8e\xcb\x12\xd8\xda\x23\x61\x69\x72\xbf\x95\x97\x10\x78\x49\x59\x7e\x6c\xf4\x47\x52\x09\xfb\x63\xc3\x3f\xe2\x19\x41\xa0\x64\xdb\x81\x29\xd9\x76\x2b\xac\xd4\x30\x12\xb7\x50\x32\xc2\x65\x13\x6d\x32\x6a\x1b\xdb\x31\x7b\xc8\x91\x71\x6f\x28\xc9\x45\x38\x02\xf2\x75\x1c\x4d\x39\xc8\x90\x08\x24\xad\x05\xfd\xa9\x66\xa0\xd8\x96\xdd\xac\x56\xfa\x17\xc2\xa5\x7a\x4a\x9d\xf3\xc8\x54\xed\x07\x85\x65\x59\x56\x9c\xaa\xe8\xe4\x33\x86\x68\x79\x8b\x1f\x03\xf9\xbe\x4b\xb6\xa0\x72\xb3\x5c\x44\xe6\x99\xa7\x76\x35\x3c\x0e\x1c\xaa\x53\x37\x33\x4e\x34\xe6\xd4\xf2\xb2\x84\x34\x89\x58\x26\x6b\x6d\xdc\x60\xf6\xc7\x25\xdc\xca\x33\x53\xa6\xbf\x96\xf8\x5c\x2e\x2f\xc2\xdf\x96\xd0\x38\x4a\xd5\x5e\xb5\x36\x14\xd1\x79\xf3\x7c\x53\x5b\x1b\x25\x4c\xe4\x36\x03\x32\x97\x66\x33\x6c\x67\x49\x9a\x23\xd4\x14\x59\x06\x50\x12\x5f\xa6\x8c\xdb\x0d\xd9\x15\x9d\x2b\x28\xe7\x74\xce\x84\x5d\xf1\xd8\xc7\x41\x6e\x87\x33\x3b\x4a\xa6\x34\x62\xc7\xc9\x7c\x41\x53\x86\x98\x1d\xce\xb0\xf7\x78\x87\x1b\xd5\x1f\xab\x28\x24\x3a\xd0\x94\x0d\xa3\xc8\x4c\x5b\xe1\xbc\x1d\x59\xb4\x79\x4e\x8b\x3b\xb1\x8f\xde\x83\x80\xb6\x13\x6a\xed\xdd\x3e\xd2\xc5\x91\x53\x56\xaf\xb1\x2e\xa3\x84\xce\x8e\xd7\xd7\x5c\xd0\xb3\x03\x7c\xc5\xe7\xf3\x30\xc7\xc8\x3a\xbb\x18\x9e\x4c\x8e\x2f\xce\x5f\x9c\xbe\x94\xc9\x49\xab\x05\x6e\x03\xfe\x26\x46\xdf\xc5\xf6\x9c\xa6\xef\xaa\x85\xdb\x62\xc8\x6c\xf7\x6a\xe2\xfe\x2e\xb6\xef\x53\xba\x68\x2a\x54\xce\x25\xfd\x3e\x56\xa1\x17\x66\x2f\x52\x76\x47\x98\x60\x75\x19\x7c\xd9\x72\x4c\xf0\x84\xe8\x31\x42\xca\x79\x3f\xcc\x16\x34\x9f\xbe\x05\x59\x9b\x3c\x83\x14\x59\x01\x13\xc7\x0a\xd5\x9d\x04\x19\x65\xd9\x7a\xe6\x99\xc7\x4a\x45\xcd\x03\x53\xf3\x15\xe7\x14\x5d\xed\xc0\x8b\x91\x75\x35\xba\x9e\x9c\x9e\x9f\x5e\x9f\x0e\xcf\x4e\xdf\x8c\x4e\x44\xf2\x7d\xf9\xf9\xaf\x9e\x08\xd9\xb0\x78\x66\x55\xfd\x65\x79\xb2\x40\xe2\x34\x87\x20\x05\xcc\x65\x57\x63\x0c\x9f\x82\x30\x19\xf2\xfa\xdc\x68\x2b\x12\x84\x12\x92\xdb\x69\x92\xe4\xea\x14\x25\x16\x0f\xfa\xdb\x79\xf2\x8e\xc5\x58\xe3\x75\x1f\xbe\x0d\xd0\x52\x7b\x0a\x89\x6d\xb6\x56\xc5\xee\x6d\xc6\xd2\x3b\x96\x02\x37\xcc\xbd\x65\x59\x2a\x5c\xed\x7b\x3d\xc7\x25\x84\xa0\x90\x30\x3b\x63\x31\xb7\x0e\x72\x9a\x17\xd9\x00\x51\x12\xda\x33\x9a\x53\xc3\x08\xa0\xb0\xae\x2f\x03\x5a\x40\x57\x2b\x7f\x8c\xb1\x97\x22\x2b\x7b\x9b\xdc\xff\xa0\xb2\x0a\xc3\x32\x0f\xf3\x88\x79\xd6\x0b\x1a\x46\x6c\xc6\x75\x95\x40\xb5\x39\x73\x69\x5b\x30\x63\xd9\xd4\x0b\x15\xb0\x6b\xf6\x90\x83\xfc\x69\x9e\x29\x2d\x61\xc9\x27\x2c\xb7\xdf\x3e\x61\x5d\x05\xc5\xfc\x2f\x2c\xea\x31\xfd\x1c\x8b\x7a\x53\xc4\xb3\x88\x99\x35\x7d\x75\x71\x36\xfa\x84\x05\x15\x0a\xec\x33\xaf\x66\x9e\xdc\xde\x46\xec\x4a\x1f\xf5\x1c\x46\x51\x63\x55\xa5\xbb\x63\x90\xcc\xf1\xad\xd4\xa6\x40\xb8\x50\xc8\xfd\xd8\x6e\x97\xfc\x03\x86\x1e\x7f\x8d\x56\x5c\x88\xe2\xdf\x64\xd1\xe8\xa4\x46\xf9\x27\x01\x4a\x2b\x65\x88\x4b\x68\xb9\x74\xeb\xb5\x2a\xc7\x56\xf2\xd3\xc6\x53\xed\xc4\x0d\x14\x10\x41\xf0\x38\x19\xc6\xeb\x64\x18\x4b\x32\x8c\xd7\xc8\xb0\x42\x4d\x52\xa7\xbf\x50\xe3\x06\x68\x93\x0a\x61\x4a\xfc\x31\x27\x4f\xda\x20\xc7\x8c\x7c\x1f\xa0\x70\x43\x7b\x09\xe7\x94\x83\xdd\x87\xcc\xce\x90\x59\xdb\x30\x40\xa8\x20\x99\x1d\x23\x8c\xe5\x5e\xd4\x52\x0e\x8c\xf4\x7a\x32\x6c\x5e\xf2\x2a\x11\x29\xa4\x6d\x81\xd7\x9e\xe3\xd8\x26\xa4\x6a\xe2\x3a\xaa\x89\x09\xce\xd3\x9b\xb4\x58\xe4\xc8\x9a\x26\x71\x1e\xc6\x05\xb3\xa0\xa7\xa5\xbf\x5b\xb1\x9e\x1c\x99\xeb\x80\xee\xe7\x19\xfc\x54\x93\x90\xf4\x29\x66\x52\xc3\x11\xf7\x00\xc5\x43\xa3\xcd\xf1\x79\xac\x04\x19\x5f\x99\xcc\x69\xf6\xce\x5b\x2e\x68\xfe\x36\xf3\x7c\xab\xf9\x1c\x85\x35\x2e\x0d\x57\xba\xcf\x14\x5b\xc6\x82\x27\x35\x4b\xa6\xc8\x7a\x7d\x79\x32\xbc\x1e\x69\xea\xb2\xe0\x1f\x01\xfa\x47\x80\x96\x25\x44\x8d\x0b\x9e\x15\x68\x8c\xbd\xa9\x7a\xb8\x41\x8f\x33\x32\x29\x5e\x4a\xac\xe7\xdb\x53\x78\x53\xf0\x0f\x3d\x8d\x91\x43\x88\xed\xdc\x21\xb1\x2d\x0f\xce\xb8\x0e\x86\xa7\xfa\x93\xed\x7b\x8e\xa7\xfa\xfd\x6b\xbd\xdb\x5e\x4f\x17\xf7\x0e\x1b\xe5\xfb\x1a\x5c\x6f\x9f\x83\x73\x0d\xb8\x7d\x0c\x99\xcd\x10\x2f\xd3\x5d\x1f\xae\xad\x59\xef\x10\x32\x3b\x40\x7c\x26\x41\x18\x87\xd9\x5b\xd4\x3b\xd4\x36\x82\xc3\x89\x6b\x1b\x4d\x8d\xe1\x84\x0d\xa1\x3c\x3b\x68\x12\x4a\x40\x2c\x0b\x02\xc2\x91\xae\xab\x0f\xd8\xa0\x26\xc5\xa8\xe2\x55\xad\x99\x6c\xab\x2e\xe3\x6e\xa2\x64\xfa\xae\xf6\xe9\xc9\xa6\xd9\x13\x6d\xb9\x88\x4c\xda\x45\x6a\xf0\x94\xa4\x84\x8a\xd2\xd5\xb6\x16\x54\xf1\xb8\x2c\x89\xee\x18\xda\x76\xb1\x46\xcc\x81\x46\x62\xfa\x94\x50\xfb\x98\x3e\x1d\xd3\xe7\xe1\xa6\x94\x8e\x6b\x52\x3a\x06\xe1\xbc\xf8\xfe\x3e\xf4\xf6\xa1\x77\x08\xcf\x9c\x31\xf8\xae\x03\xee\xe1\x78\x6c\x24\xf8\x7a\x4a\xae\x4f\x17\x8c\xbf\x5f\x1c\x2a\x0c\xad\xc9\xbc\xa4\x92\x92\xe1\x9a\x96\x4e\x1b\x62\x50\xd3\xa7\x66\xb1\x03\xf8\x7b\x4d\xa2\xa4\x1f\x25\x51\x92\x78\xb2\x50\x3e\xca\x24\xa3\xf3\x89\xfa\x30\x11\xf7\x71\x98\xe1\x3b\x58\xa4\x2c\x60\x69\xca\x66\x1b\x5f\x44\x6a\x3a\x26\xb3\x02\x81\xce\x63\x33\x59\xa4\x89\xb8\xd8\xb7\x34\x49\xea\x98\x49\x72\x53\x6a\xf9\x35\x61\x4a\x8a\x6c\x3b\xa0\x2e\x47\xac\x77\x5f\x89\xac\x03\xce\x6a\x3d\xc7\xdd\x26\x04\x51\x25\xb7\xb4\x2d\x61\x98\xee\x6f\x4d\x9e\x4b\x90\x75\xf9\xfa\xea\xdb\xc9\xf9\xe8\xff\x2b\x89\x46\x85\xd1\xf1\xdb\x68\xef\x6f\x5a\xae\xb8\x07\x0d\x31\xe6\xae\xcb\x77\xb7\x29\xcd\x7a\x18\xc2\x0f\x9a\x2f\xea\x4e\x9d\xe1\xed\x4f\xe6\x42\x19\x85\xb4\x73\x33\x6c\xf7\xc0\xdb\x50\x53\x1f\x66\x5e\xb7\xc5\x1c\x6a\x65\xb4\x1e\xb8\x6e\x8d\xb5\x9a\x8f\x7a\x7c\xba\xb9\xfb\x31\x16\xc7\x47\x1a\xbe\xf1\x1a\x6f\x19\x2b\xec\x51\x2e\xa3\xca\xe2\x88\x1b\xac\x36\xe5\x16\x47\xda\x62\x71\x30\x6d\x71\x4c\xd7\x2d\x8e\x8c\x4c\xeb\x16\x07\x6b\xaa\x41\x4d\xa1\xdc\x2e\x11\x46\x87\xee\xe9\xb9\x36\xb6\x5d\x17\xfe\x5d\x63\xe7\xf8\x29\x76\x0e\x67\x5e\x61\x87\xb3\x4a\xbd\xbb\xda\xea\x8e\xd6\xac\xee\xd5\xaa\xe7\xec\x13\x42\x22\xad\xf2\x13\x64\x9d\x8c\xce\x46\x75\x95\x5f\x88\x38\x07\x5d\x53\xc2\x45\x5d\xa9\xeb\x31\x3e\x6f\x70\xc3\x81\xa7\x26\xe1\x1e\x00\xe3\x6c\xc0\x14\x1b\x3c\xc7\xf0\x54\x77\xaa\xf9\x73\x8f\xb5\xe9\x74\x47\x17\xf7\x0e\xd6\x74\xbd\x82\xd6\xeb\x71\x68\xae\x81\xb6\xcf\x2d\x08\x86\x58\x4d\xa7\x1f\x54\x66\xbd\x6c\x72\x00\x53\xa1\xd3\x99\xd1\xe9\x07\xba\xee\x73\xa9\xd3\x69\x5d\xa7\xeb\x68\x41\x6f\x5d\xa7\x73\x24\xeb\x9a\x75\x8d\xac\xce\x40\xb7\xaa\xf2\xe6\x37\xae\x8f\x1f\x91\x11\x4f\xeb\x63\xf6\x5b\xf4\x71\xcf\xab\x44\xe2\x13\xfa\xf8\x23\xfa\xac\xf4\xf1\xfe\x07\xbc\xa6\x9a\x3e\xee\x41\xef\x00\x7a\xcf\xc7\xe0\x3f\x07\xf7\xa0\x92\x19\x25\xcc\xf5\x5b\x3f\xde\xb2\x16\x41\x5a\xd3\xca\x3a\xb0\x48\x58\x09\x6b\xb1\x96\x8d\x9a\xb5\xb8\xa2\xae\xae\xa7\xba\x51\xd7\x5c\x0f\x56\x15\x85\xe7\xb9\x51\x4b\x38\x96\xbc\xca\xf5\xc5\xcb\x97\x67\xa3\x0a\x61\xba\xe3\xb6\x0b\x0b\x6d\x01\x3a\x7d\x58\x8e\xe1\x7e\x7c\xb4\xeb\x0e\x5a\xaa\xc8\x1b\x10\x28\x06\x17\x7b\x2d\x9f\x05\x0f\x31\x2c\x47\xbb\xe1\x0a\x6e\x8c\x7c\xbd\x3d\x9f\x44\xd3\xc0\x7f\x64\xe8\x86\x36\xdb\x2e\x43\x35\xa2\xb8\x33\x11\x46\x0d\x67\x25\xc6\xfd\x5a\xbb\x6a\x1e\x22\x16\xf8\x18\xc9\x35\x77\x29\x36\xc7\xeb\x8f\x4b\x58\xd7\xe0\x8f\xae\x62\x85\x9d\xa6\x44\xfb\xef\xcc\xf1\xd1\x09\xe2\xb2\x2c\xe1\x4d\xb0\x9e\x54\xac\x99\x6e\x43\xa5\x0f\xb0\x72\xf6\x90\xef\xde\x4d\x69\x3a\xb3\x20\xcc\x5e\x84\x11\x1b\xcd\xc2\x3c\x49\xbd\x6d\x17\xd8\x43\xce\xe2\x4c\xf0\x82\x3f\x36\xfb\x41\x74\xb1\x38\x8d\x83\xc4\x7b\x13\x40\x9a\x14\x39\xcb\x3c\x5f\x41\xaa\xfa\xe6\x0e\x9f\x67\xed\x35\x5f\x75\xa7\x8b\x85\xf7\x63\x54\x96\x63\x88\xe9\xdd\xa9\xb8\x63\xea\x6f\x8e\x71\x9a\xc4\x3f\xd0\x9c\xa5\x21\x8d\xbc\x37\x81\x78\x08\x56\xc2\xf1\x1e\x85\xa2\x0f\x01\xf2\xea\x33\xb0\xf6\x2c\xcc\x81\x64\x79\x92\x32\xef\xc7\x40\x1c\xf0\xfa\xbf\xff\x04\x00\x00\xff\xff\xe0\x41\x85\x9e\x11\x35\x02\x00") - -func init() { - err := CTX.Err() - if err != nil { - panic(err) - } - - var f webdav.File - - var rb *bytes.Reader - var r *gzip.Reader - - rb = bytes.NewReader(FileAccountsJs) - r, err = gzip.NewReader(rb) - if err != nil { - panic(err) - } - - err = r.Close() - if err != nil { - panic(err) - } - - f, err = FS.OpenFile(CTX, "accounts.js", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777) - if err != nil { - panic(err) - } - - _, err = io.Copy(f, r) - if err != nil { - panic(err) - } - - err = f.Close() - if err != nil { - panic(err) - } - - Handler = &webdav.Handler{ - FileSystem: FS, - LockSystem: webdav.NewMemLS(), - } - -} - -// Open a file -func (hfs *HTTPFS) Open(path string) (http.File, error) { - path = hfs.Prefix + path - - f, err := FS.OpenFile(CTX, path, os.O_RDONLY, 0644) - if err != nil { - return nil, err - } - - return f, nil -} - -// ReadFile is adapTed from ioutil -func ReadFile(path string) ([]byte, error) { - f, err := FS.OpenFile(CTX, path, os.O_RDONLY, 0644) - if err != nil { - return nil, err - } - - buf := bytes.NewBuffer(make([]byte, 0, bytes.MinRead)) - - // If the buffer overflows, we will get bytes.ErrTooLarge. - // Return that as an error. Any other panic remains. - defer func() { - e := recover() - if e == nil { - return - } - if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge { - err = panicErr - } else { - panic(e) - } - }() - _, err = buf.ReadFrom(f) - return buf.Bytes(), err -} - -// WriteFile is adapTed from ioutil -func WriteFile(filename string, data []byte, perm os.FileMode) error { - f, err := FS.OpenFile(CTX, filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm) - if err != nil { - return err - } - n, err := f.Write(data) - if err == nil && n < len(data) { - err = io.ErrShortWrite - } - if err1 := f.Close(); err == nil { - err = err1 - } - return err -} - -// WalkDirs looks for files in the given dir and returns a list of files in it -// usage for all files in the b0x: WalkDirs("", false) -func WalkDirs(name string, includeDirsInList bool, files ...string) ([]string, error) { - f, err := FS.OpenFile(CTX, name, os.O_RDONLY, 0) - if err != nil { - return nil, err - } - - fileInfos, err := f.Readdir(0) - if err != nil { - return nil, err - } - - err = f.Close() - if err != nil { - return nil, err - } - - for _, info := range fileInfos { - filename := path.Join(name, info.Name()) - - if includeDirsInList || !info.IsDir() { - files = append(files, filename) - } - - if info.IsDir() { - files, err = WalkDirs(filename, includeDirsInList, files...) - if err != nil { - return nil, err - } - } - } - - return files, nil -} diff --git a/accounts/pkg/assets/embed.yml b/accounts/pkg/assets/embed.yml deleted file mode 100644 index 6dcfc266a9..0000000000 --- a/accounts/pkg/assets/embed.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -pkg: "assets" -dest: "." -output: "embed.go" -fmt: true -noprefix: true - -compression: - compress: true - -custom: - - files: - - "../../assets/" - base: "../../assets/" - prefix: "" - -... diff --git a/accounts/pkg/assets/option.go b/accounts/pkg/assets/option.go deleted file mode 100644 index 0ebcdba1db..0000000000 --- a/accounts/pkg/assets/option.go +++ /dev/null @@ -1,40 +0,0 @@ -package assets - -import ( - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/ocis-pkg/log" -) - -// Option defines a single option function. -type Option func(o *Options) - -// Options defines the available options for this package. -type Options struct { - Logger log.Logger - Config *config.Config -} - -// newOptions initializes the available default options. -func newOptions(opts ...Option) Options { - opt := Options{} - - for _, o := range opts { - o(&opt) - } - - return opt -} - -// Logger provides a function to set the logger option. -func Logger(val log.Logger) Option { - return func(o *Options) { - o.Logger = val - } -} - -// Config provides a function to set the config option. -func Config(val *config.Config) Option { - return func(o *Options) { - o.Config = val - } -} diff --git a/accounts/pkg/command/add_account.go b/accounts/pkg/command/add_account.go deleted file mode 100644 index 25b341fed3..0000000000 --- a/accounts/pkg/command/add_account.go +++ /dev/null @@ -1,56 +0,0 @@ -package command - -import ( - "fmt" - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v2/client/grpc" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/flagset" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" -) - -// AddAccount command creates a new account -func AddAccount(cfg *config.Config) *cli.Command { - a := &accounts.Account{ - PasswordProfile: &accounts.PasswordProfile{}, - } - return &cli.Command{ - Name: "add", - Usage: "Create a new account", - Aliases: []string{"create", "a"}, - Flags: flagset.AddAccountWithConfig(cfg, a), - Before: func(c *cli.Context) error { - // Write value of username to the flags beneath, as preferred name - // and on-premises-sam-account-name is probably confusing for users. - if username := c.String("username"); username != "" { - if !c.IsSet("on-premises-sam-account-name") { - if err := c.Set("on-premises-sam-account-name", username); err != nil { - return err - } - } - - if !c.IsSet("preferred-name") { - if err := c.Set("preferred-name", username); err != nil { - return err - } - } - } - - return nil - - }, - Action: func(c *cli.Context) error { - accSvcID := cfg.GRPC.Namespace + "." + cfg.Server.Name - accSvc := accounts.NewAccountsService(accSvcID, grpc.NewClient()) - _, err := accSvc.CreateAccount(c.Context, &accounts.CreateAccountRequest{ - Account: a, - }) - - if err != nil { - fmt.Println(fmt.Errorf("could not create account %w", err)) - return err - } - - return nil - }} -} diff --git a/accounts/pkg/command/inspect_account.go b/accounts/pkg/command/inspect_account.go deleted file mode 100644 index 849ea0289e..0000000000 --- a/accounts/pkg/command/inspect_account.go +++ /dev/null @@ -1,76 +0,0 @@ -package command - -import ( - "fmt" - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v2/client/grpc" - tw "github.com/olekukonko/tablewriter" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/flagset" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "os" - "strconv" -) - -// InspectAccount command shows detailed information about a specific account. -func InspectAccount(cfg *config.Config) *cli.Command { - return &cli.Command{ - Name: "inspect", - Usage: "Show detailed data on an existing account", - ArgsUsage: "id", - Flags: flagset.InspectAccountWithConfig(cfg), - Action: func(c *cli.Context) error { - accServiceID := cfg.GRPC.Namespace + "." + cfg.Server.Name - if c.NArg() != 1 { - fmt.Println("Please provide a user-id") - os.Exit(1) - } - - uid := c.Args().First() - accSvc := accounts.NewAccountsService(accServiceID, grpc.NewClient()) - acc, err := accSvc.GetAccount(c.Context, &accounts.GetAccountRequest{ - Id: uid, - }) - - if err != nil { - fmt.Println(fmt.Errorf("could not view account %w", err)) - return err - } - - buildAccountInspectTable(acc).Render() - return nil - }} -} - -func buildAccountInspectTable(acc *accounts.Account) *tw.Table { - table := tw.NewWriter(os.Stdout) - table.SetAutoMergeCells(true) - table.AppendBulk([][]string{ - {"ID", acc.Id}, - {"Mail", acc.Mail}, - {"DisplayName", acc.DisplayName}, - {"PreferredName", acc.PreferredName}, - {"AccountEnabled", strconv.FormatBool(acc.AccountEnabled)}, - {"CreationType", acc.CreationType}, - {"CreatedDateTime", acc.CreatedDateTime.String()}, - {"Description", acc.Description}, - {"ExternalUserState", acc.ExternalUserState}, - {"UidNumber", fmt.Sprintf("%+d", acc.UidNumber)}, - {"GidNumber", fmt.Sprintf("%+d", acc.GidNumber)}, - {"IsResourceAccount", strconv.FormatBool(acc.IsResourceAccount)}, - {"OnPremisesDistinguishedName", acc.OnPremisesDistinguishedName}, - {"OnPremisesDomainName", acc.OnPremisesDomainName}, - {"OnPremisesImmutableId", acc.OnPremisesImmutableId}, - {"OnPremisesSamAccountName", acc.OnPremisesSamAccountName}, - {"OnPremisesSecurityIdentifier", acc.OnPremisesSecurityIdentifier}, - {"OnPremisesUserPrincipalName", acc.OnPremisesUserPrincipalName}, - {"RefreshTokenValidFromDateTime", acc.RefreshTokensValidFromDateTime.String()}, - }) - - // Merged cell with group memberships - for k := range acc.MemberOf { - table.Append([]string{"MemberOf", acc.MemberOf[k].DisplayName}) - } - - return table -} diff --git a/accounts/pkg/command/list_accounts.go b/accounts/pkg/command/list_accounts.go deleted file mode 100644 index b6b69b249f..0000000000 --- a/accounts/pkg/command/list_accounts.go +++ /dev/null @@ -1,50 +0,0 @@ -package command - -import ( - "fmt" - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v2/client/grpc" - tw "github.com/olekukonko/tablewriter" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/flagset" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "os" - "strconv" -) - -// ListAccounts command lists all accounts -func ListAccounts(cfg *config.Config) *cli.Command { - return &cli.Command{ - Name: "list", - Usage: "List existing accounts", - Aliases: []string{"ls"}, - Flags: flagset.ListAccountsWithConfig(cfg), - Action: func(c *cli.Context) error { - accSvcID := cfg.GRPC.Namespace + "." + cfg.Server.Name - accSvc := accounts.NewAccountsService(accSvcID, grpc.NewClient()) - resp, err := accSvc.ListAccounts(c.Context, &accounts.ListAccountsRequest{}) - - if err != nil { - fmt.Println(fmt.Errorf("could not list accounts %w", err)) - return err - } - - buildAccountsListTable(resp.Accounts).Render() - return nil - }} -} - -// buildAccountsListTable creates an ascii table for printing on the cli -func buildAccountsListTable(accs []*accounts.Account) *tw.Table { - table := tw.NewWriter(os.Stdout) - table.SetHeader([]string{"Id", "DisplayName", "Mail", "AccountEnabled"}) - table.SetAutoFormatHeaders(false) - for _, acc := range accs { - table.Append([]string{ - acc.Id, - acc.DisplayName, - acc.Mail, - strconv.FormatBool(acc.AccountEnabled)}) - } - return table -} diff --git a/accounts/pkg/command/remove_account.go b/accounts/pkg/command/remove_account.go deleted file mode 100644 index 32cacd7fac..0000000000 --- a/accounts/pkg/command/remove_account.go +++ /dev/null @@ -1,39 +0,0 @@ -package command - -import ( - "fmt" - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v2/client/grpc" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/flagset" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "os" -) - -// RemoveAccount command deletes an existing account. -func RemoveAccount(cfg *config.Config) *cli.Command { - return &cli.Command{ - Name: "remove", - Usage: "Removes an existing account", - ArgsUsage: "id", - Aliases: []string{"rm"}, - Flags: flagset.RemoveAccountWithConfig(cfg), - Action: func(c *cli.Context) error { - accServiceID := cfg.GRPC.Namespace + "." + cfg.Server.Name - if c.NArg() != 1 { - fmt.Println("Please provide a user-id") - os.Exit(1) - } - - uid := c.Args().First() - accSvc := accounts.NewAccountsService(accServiceID, grpc.NewClient()) - _, err := accSvc.DeleteAccount(c.Context, &accounts.DeleteAccountRequest{Id: uid}) - - if err != nil { - fmt.Println(fmt.Errorf("could not delete account %w", err)) - return err - } - - return nil - }} -} diff --git a/accounts/pkg/command/root.go b/accounts/pkg/command/root.go deleted file mode 100644 index 2234e91c33..0000000000 --- a/accounts/pkg/command/root.go +++ /dev/null @@ -1,117 +0,0 @@ -package command - -import ( - "os" - "strings" - - "github.com/owncloud/ocis/accounts/pkg/flagset" - - "github.com/micro/cli/v2" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/version" - "github.com/owncloud/ocis/ocis-pkg/log" - "github.com/spf13/viper" -) - -var ( - defaultConfigPaths = []string{"/etc/ocis", "$HOME/.ocis", "./config"} - defaultFilename = "accounts" -) - -// Execute is the entry point for the ocis-accounts command. -func Execute() error { - cfg := config.New() - app := &cli.App{ - Name: "ocis-accounts", - Version: version.String, - Usage: "Provide accounts and groups for oCIS", - Compiled: version.Compiled(), - - Authors: []*cli.Author{ - { - Name: "ownCloud GmbH", - Email: "support@owncloud.com", - }, - }, - - Flags: flagset.RootWithConfig(cfg), - - Before: func(c *cli.Context) error { - return ParseConfig(c, cfg) - }, - - Commands: []*cli.Command{ - Server(cfg), - AddAccount(cfg), - UpdateAccount(cfg), - ListAccounts(cfg), - InspectAccount(cfg), - RemoveAccount(cfg), - }, - } - - cli.HelpFlag = &cli.BoolFlag{ - Name: "help,h", - Usage: "Show the help", - } - - cli.VersionFlag = &cli.BoolFlag{ - Name: "version,v", - Usage: "Print the version", - } - - return app.Run(os.Args) -} - -// NewLogger initializes a service-specific logger instance. -func NewLogger(cfg *config.Config) log.Logger { - return log.NewLogger( - log.Name("accounts"), - log.Level(cfg.Log.Level), - log.Pretty(cfg.Log.Pretty), - log.Color(cfg.Log.Color), - ) -} - -// ParseConfig loads accounts configuration from Viper known paths. -func ParseConfig(c *cli.Context, cfg *config.Config) error { - logger := NewLogger(cfg) - - viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - viper.SetEnvPrefix("ACCOUNTS") - viper.AutomaticEnv() - - if c.IsSet("config-file") { - viper.SetConfigFile(c.String("config-file")) - } else { - viper.SetConfigName(defaultFilename) - - for _, v := range defaultConfigPaths { - viper.AddConfigPath(v) - } - } - - if err := viper.ReadInConfig(); err != nil { - switch err.(type) { - case viper.ConfigFileNotFoundError: - logger.Info(). - Msg("Continue without config") - case viper.UnsupportedConfigError: - logger.Fatal(). - Err(err). - Msg("Unsupported config type") - default: - logger.Fatal(). - Err(err). - Msg("Failed to read config") - } - } - - if err := viper.Unmarshal(&cfg); err != nil { - logger.Fatal(). - Err(err). - Msg("Failed to parse config") - } - - return nil -} diff --git a/accounts/pkg/command/server.go b/accounts/pkg/command/server.go deleted file mode 100644 index c5bc96c56d..0000000000 --- a/accounts/pkg/command/server.go +++ /dev/null @@ -1,114 +0,0 @@ -package command - -import ( - "context" - "os" - "os/signal" - "strings" - - "github.com/micro/cli/v2" - "github.com/oklog/run" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/flagset" - "github.com/owncloud/ocis/accounts/pkg/metrics" - "github.com/owncloud/ocis/accounts/pkg/server/grpc" - "github.com/owncloud/ocis/accounts/pkg/server/http" - svc "github.com/owncloud/ocis/accounts/pkg/service/v0" -) - -// Server is the entry point for the server command. -func Server(cfg *config.Config) *cli.Command { - return &cli.Command{ - Name: "server", - Usage: "Start ocis accounts service", - Description: "uses an LDAP server as the storage backend", - Flags: flagset.ServerWithConfig(cfg), - Before: func(ctx *cli.Context) error { - if cfg.HTTP.Root != "/" { - cfg.HTTP.Root = strings.TrimSuffix(cfg.HTTP.Root, "/") - } - - // When running on single binary mode the before hook from the root command won't get called. We manually - // call this before hook from ocis command, so the configuration can be loaded. - return ParseConfig(ctx, cfg) - }, - Action: func(c *cli.Context) error { - logger := NewLogger(cfg) - - var ( - gr = run.Group{} - ctx, cancel = context.WithCancel(context.Background()) - mtrcs = metrics.New() - ) - - defer cancel() - - handler, err := svc.New(svc.Logger(logger), svc.Config(cfg)) - if err != nil { - logger.Fatal().Err(err).Msg("could not initialize service handler") - } - - { - server := http.Server( - http.Logger(logger), - http.Name(cfg.Server.Name), - http.Context(ctx), - http.Config(cfg), - http.Metrics(mtrcs), - http.Flags(flagset.RootWithConfig(cfg)), - http.Flags(flagset.ServerWithConfig(cfg)), - http.Handler(handler), - ) - - gr.Add(server.Run, func(_ error) { - logger.Info(). - Str("server", "http"). - Msg("Shutting down server") - - cancel() - }) - } - - { - server := grpc.Server( - grpc.Logger(logger), - grpc.Name(cfg.Server.Name), - grpc.Context(ctx), - grpc.Config(cfg), - grpc.Metrics(mtrcs), - grpc.Handler(handler), - ) - - gr.Add(func() error { - logger.Info().Str("service", server.Name()).Msg("Reporting settings bundles to settings service") - go svc.RegisterSettingsBundles(&logger) - go svc.RegisterPermissions(&logger) - return server.Run() - }, func(_ error) { - logger.Info(). - Str("server", "grpc"). - Msg("Shutting down server") - - cancel() - }) - } - - { - stop := make(chan os.Signal, 1) - - gr.Add(func() error { - signal.Notify(stop, os.Interrupt) - - <-stop - - return nil - }, func(err error) { - close(stop) - cancel() - }) - } - - return gr.Run() - }, - } -} diff --git a/accounts/pkg/command/update_account.go b/accounts/pkg/command/update_account.go deleted file mode 100644 index 7c867aebac..0000000000 --- a/accounts/pkg/command/update_account.go +++ /dev/null @@ -1,87 +0,0 @@ -package command - -import ( - "errors" - "fmt" - "github.com/micro/cli/v2" - "github.com/micro/go-micro/v2/client/grpc" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/flagset" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "google.golang.org/genproto/protobuf/field_mask" -) - -// UpdateAccount command for modifying accounts including password policies -func UpdateAccount(cfg *config.Config) *cli.Command { - a := &accounts.Account{ - PasswordProfile: &accounts.PasswordProfile{}, - } - return &cli.Command{ - Name: "update", - Usage: "Make changes to an existing account", - ArgsUsage: "id", - Flags: flagset.UpdateAccountWithConfig(cfg, a), - Before: func(c *cli.Context) error { - if len(c.StringSlice("password_policies")) > 0 { - // StringSliceFlag doesn't support Destination - a.PasswordProfile.PasswordPolicies = c.StringSlice("password_policies") - } - - if c.NArg() != 1 { - return errors.New("missing account-id") - } - - if c.NumFlags() == 0 { - return errors.New("missing attribute-flags for update") - } - - return nil - }, - Action: func(c *cli.Context) error { - a.Id = c.Args().First() - accSvcID := cfg.GRPC.Namespace + "." + cfg.Server.Name - accSvc := accounts.NewAccountsService(accSvcID, grpc.NewClient()) - _, err := accSvc.UpdateAccount(c.Context, &accounts.UpdateAccountRequest{ - Account: a, - UpdateMask: buildAccUpdateMask(c.FlagNames()), - }) - - if err != nil { - fmt.Println(fmt.Errorf("could not update account %w", err)) - return err - } - - return nil - }} -} - -// buildAccUpdateMask by mapping passed update flags to account fieldNames. -// -// The UpdateMask is passed with the update-request to the server so that -// only the modified values are transferred. -func buildAccUpdateMask(setFlags []string) *field_mask.FieldMask { - var flagToPath = map[string]string{ - "enabled": "AccountEnabled", - "displayname": "DisplayName", - "preferred-name": "PreferredName", - "uidnumber": "UidNumber", - "gidnumber": "GidNumber", - "mail": "Mail", - "description": "Description", - "password": "PasswordProfile.Password", - "password-policies": "PasswordProfile.PasswordPolicies", - "force-password-change": "PasswordProfile.ForceChangePasswordNextSignIn", - "force-password-change-mfa": "PasswordProfile.ForceChangePasswordNextSignInWithMfa", - "on-premises-sam-account-name": "OnPremisesSamAccountName", - } - - updatedPaths := make([]string, 0) - - for _, v := range setFlags { - if _, ok := flagToPath[v]; ok { - updatedPaths = append(updatedPaths, flagToPath[v]) - } - } - - return &field_mask.FieldMask{Paths: updatedPaths} -} diff --git a/accounts/pkg/config/config.go b/accounts/pkg/config/config.go deleted file mode 100644 index 5c6f88a7d4..0000000000 --- a/accounts/pkg/config/config.go +++ /dev/null @@ -1,77 +0,0 @@ -// Package config should be moved to internal -package config - -// LDAP defines the available ldap configuration. -type LDAP struct { - Hostname string - Port int - BaseDN string - UserFilter string - GroupFilter string - BindDN string - BindPassword string - IDP string - Schema LDAPSchema -} - -// LDAPSchema defines the available ldap schema configuration. -type LDAPSchema struct { - AccountID string - Identities string - Username string - DisplayName string - Mail string - Groups string -} - -// HTTP defines the available http configuration. -type HTTP struct { - Addr string - Namespace string - Root string -} - -// GRPC defines the available grpc configuration. -type GRPC struct { - Addr string - Namespace string -} - -// Server configures a server. -type Server struct { - Name string - AccountsDataPath string -} - -// Asset defines the available asset configuration. -type Asset struct { - Path string -} - -// TokenManager is the config for using the reva token manager -type TokenManager struct { - JWTSecret string -} - -// Log defines the available logging configuration. -type Log struct { - Level string - Pretty bool - Color bool -} - -// Config merges all Account config parameters. -type Config struct { - LDAP LDAP - HTTP HTTP - GRPC GRPC - Server Server - Asset Asset - Log Log - TokenManager TokenManager -} - -// New returns a new config. -func New() *Config { - return &Config{} -} diff --git a/accounts/pkg/flagset/flagset.go b/accounts/pkg/flagset/flagset.go deleted file mode 100644 index 4e0b41212b..0000000000 --- a/accounts/pkg/flagset/flagset.go +++ /dev/null @@ -1,335 +0,0 @@ -package flagset - -import ( - "github.com/micro/cli/v2" - "github.com/owncloud/ocis/accounts/pkg/config" - accounts "github.com/owncloud/ocis/accounts/pkg/proto/v0" -) - -// RootWithConfig applies cfg to the root flagset -func RootWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "log-level", - Value: "info", - Usage: "Set logging level", - EnvVars: []string{"ACCOUNTS_LOG_LEVEL"}, - Destination: &cfg.Log.Level, - }, - &cli.BoolFlag{ - Value: true, - Name: "log-pretty", - Usage: "Enable pretty logging", - EnvVars: []string{"ACCOUNTS_LOG_PRETTY"}, - Destination: &cfg.Log.Pretty, - }, - &cli.BoolFlag{ - Value: true, - Name: "log-color", - Usage: "Enable colored logging", - EnvVars: []string{"ACCOUNTS_LOG_COLOR"}, - Destination: &cfg.Log.Color, - }, - } -} - -// ServerWithConfig applies cfg to the root flagset -func ServerWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "http-namespace", - Value: "com.owncloud.web", - Usage: "Set the base namespace for the http namespace", - EnvVars: []string{"ACCOUNTS_HTTP_NAMESPACE"}, - Destination: &cfg.HTTP.Namespace, - }, - &cli.StringFlag{ - Name: "http-addr", - Value: "0.0.0.0:9181", - Usage: "Address to bind http server", - EnvVars: []string{"ACCOUNTS_HTTP_ADDR"}, - Destination: &cfg.HTTP.Addr, - }, - &cli.StringFlag{ - Name: "http-root", - Value: "/", - Usage: "Root path of http server", - EnvVars: []string{"ACCOUNTS_HTTP_ROOT"}, - Destination: &cfg.HTTP.Root, - }, - &cli.StringFlag{ - Name: "grpc-namespace", - Value: "com.owncloud.api", - Usage: "Set the base namespace for the grpc namespace", - EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, - Destination: &cfg.GRPC.Namespace, - }, - &cli.StringFlag{ - Name: "grpc-addr", - Value: "0.0.0.0:9180", - Usage: "Address to bind grpc server", - EnvVars: []string{"ACCOUNTS_GRPC_ADDR"}, - Destination: &cfg.GRPC.Addr, - }, - &cli.StringFlag{ - Name: "name", - Value: "accounts", - Usage: "service name", - EnvVars: []string{"ACCOUNTS_NAME"}, - Destination: &cfg.Server.Name, - }, - &cli.StringFlag{ - Name: "accounts-data-path", - Value: "/var/tmp/ocis-accounts", - Usage: "accounts folder", - EnvVars: []string{"ACCOUNTS_DATA_PATH"}, - Destination: &cfg.Server.AccountsDataPath, - }, - &cli.StringFlag{ - Name: "asset-path", - Value: "", - Usage: "Path to custom assets", - EnvVars: []string{"ACCOUNTS_ASSET_PATH"}, - Destination: &cfg.Asset.Path, - }, - &cli.StringFlag{ - Name: "jwt-secret", - Value: "Pive-Fumkiu4", - Usage: "Used to create JWT to talk to reva, should equal reva's jwt-secret", - EnvVars: []string{"ACCOUNTS_JWT_SECRET"}, - Destination: &cfg.TokenManager.JWTSecret, - }, - } -} - -// UpdateAccountWithConfig applies update command flags to cfg -func UpdateAccountWithConfig(cfg *config.Config, a *accounts.Account) []cli.Flag { - if a.PasswordProfile == nil { - a.PasswordProfile = &accounts.PasswordProfile{} - } - - return []cli.Flag{ - &cli.StringFlag{ - Name: "grpc-namespace", - Value: "com.owncloud.api", - Usage: "Set the base namespace for the grpc namespace", - EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, - Destination: &cfg.GRPC.Namespace, - }, - &cli.StringFlag{ - Name: "name", - Value: "accounts", - Usage: "service name", - EnvVars: []string{"ACCOUNTS_NAME"}, - Destination: &cfg.Server.Name, - }, - &cli.BoolFlag{ - Name: "enabled", - Usage: "Enable the account", - Destination: &a.AccountEnabled, - }, - &cli.StringFlag{ - Name: "displayname", - Usage: "Set the displayname for the account", - Destination: &a.DisplayName, - }, - &cli.StringFlag{ - Name: "preferred-name", - Usage: "Set the preferred-name for the account", - Destination: &a.PreferredName, - }, - &cli.StringFlag{ - Name: "on-premises-sam-account-name", - Usage: "Set the on-premises-sam-account-name", - Destination: &a.OnPremisesSamAccountName, - }, - &cli.Int64Flag{ - Name: "uidnumber", - Usage: "Set the uidnumber for the account", - Destination: &a.UidNumber, - }, - &cli.Int64Flag{ - Name: "gidnumber", - Usage: "Set the gidnumber for the account", - Destination: &a.GidNumber, - }, - &cli.StringFlag{ - Name: "mail", - Usage: "Set the mail for the account", - Destination: &a.Mail, - }, - &cli.StringFlag{ - Name: "description", - Usage: "Set the description for the account", - Destination: &a.Description, - }, - &cli.StringFlag{ - Name: "password", - Usage: "Set the password for the account", - Destination: &a.PasswordProfile.Password, - // TODO read password from ENV? - }, - &cli.StringSliceFlag{ - Name: "password-policies", - Usage: "Possible policies: DisableStrongPassword, DisablePasswordExpiration", - }, - &cli.BoolFlag{ - Name: "force-password-change", - Usage: "Force password change on next sign-in", - Destination: &a.PasswordProfile.ForceChangePasswordNextSignIn, - }, - &cli.BoolFlag{ - Name: "force-password-change-mfa", - Usage: "Force password change on next sign-in with mfa", - Destination: &a.PasswordProfile.ForceChangePasswordNextSignInWithMfa, - }, - } -} - -// AddAccountWithConfig applies create command flags to cfg -func AddAccountWithConfig(cfg *config.Config, a *accounts.Account) []cli.Flag { - if a.PasswordProfile == nil { - a.PasswordProfile = &accounts.PasswordProfile{} - } - - return []cli.Flag{ - &cli.StringFlag{ - Name: "grpc-namespace", - Value: "com.owncloud.api", - Usage: "Set the base namespace for the grpc namespace", - EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, - Destination: &cfg.GRPC.Namespace, - }, - &cli.StringFlag{ - Name: "name", - Value: "accounts", - Usage: "service name", - EnvVars: []string{"ACCOUNTS_NAME"}, - Destination: &cfg.Server.Name, - }, - &cli.BoolFlag{ - Name: "enabled", - Usage: "Enable the account", - Destination: &a.AccountEnabled, - }, - &cli.StringFlag{ - Name: "displayname", - Usage: "Set the displayname for the account", - Destination: &a.DisplayName, - }, - &cli.StringFlag{ - Name: "username", - Usage: "Username will be written to preferred-name and on_premises_sam_account_name", - }, - &cli.StringFlag{ - Name: "preferred-name", - Usage: "Set the preferred-name for the account", - Destination: &a.PreferredName, - }, - &cli.StringFlag{ - Name: "on-premises-sam-account-name", - Usage: "Set the on-premises-sam-account-name", - Destination: &a.OnPremisesSamAccountName, - }, - &cli.Int64Flag{ - Name: "uidnumber", - Usage: "Set the uidnumber for the account", - Destination: &a.UidNumber, - }, - &cli.Int64Flag{ - Name: "gidnumber", - Usage: "Set the gidnumber for the account", - Destination: &a.GidNumber, - }, - &cli.StringFlag{ - Name: "mail", - Usage: "Set the mail for the account", - Destination: &a.Mail, - }, - &cli.StringFlag{ - Name: "description", - Usage: "Set the description for the account", - Destination: &a.Description, - }, - &cli.StringFlag{ - Name: "password", - Usage: "Set the password for the account", - Destination: &a.PasswordProfile.Password, - // TODO read password from ENV? - }, - &cli.StringSliceFlag{ - Name: "password-policies", - Usage: "Possible policies: DisableStrongPassword, DisablePasswordExpiration", - }, - &cli.BoolFlag{ - Name: "force-password-change", - Usage: "Force password change on next sign-in", - Destination: &a.PasswordProfile.ForceChangePasswordNextSignIn, - }, - &cli.BoolFlag{ - Name: "force-password-change-mfa", - Usage: "Force password change on next sign-in with mfa", - Destination: &a.PasswordProfile.ForceChangePasswordNextSignInWithMfa, - }, - } -} - -// ListAccountsWithConfig applies list command flags to cfg -func ListAccountsWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "grpc-namespace", - Value: "com.owncloud.api", - Usage: "Set the base namespace for the grpc namespace", - EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, - Destination: &cfg.GRPC.Namespace, - }, - &cli.StringFlag{ - Name: "name", - Value: "accounts", - Usage: "service name", - EnvVars: []string{"ACCOUNTS_NAME"}, - Destination: &cfg.Server.Name, - }, - } -} - -// RemoveAccountWithConfig applies remove command flags to cfg -func RemoveAccountWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "grpc-namespace", - Value: "com.owncloud.api", - Usage: "Set the base namespace for the grpc namespace", - EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, - Destination: &cfg.GRPC.Namespace, - }, - &cli.StringFlag{ - Name: "name", - Value: "accounts", - Usage: "service name", - EnvVars: []string{"ACCOUNTS_NAME"}, - Destination: &cfg.Server.Name, - }, - } -} - -// InspectAccountWithConfig applies inspect command flags to cfg -func InspectAccountWithConfig(cfg *config.Config) []cli.Flag { - return []cli.Flag{ - &cli.StringFlag{ - Name: "grpc-namespace", - Value: "com.owncloud.api", - Usage: "Set the base namespace for the grpc namespace", - EnvVars: []string{"ACCOUNTS_GRPC_NAMESPACE"}, - Destination: &cfg.GRPC.Namespace, - }, - &cli.StringFlag{ - Name: "name", - Value: "accounts", - Usage: "service name", - EnvVars: []string{"ACCOUNTS_NAME"}, - Destination: &cfg.Server.Name, - }, - } -} diff --git a/accounts/pkg/metrics/metrics.go b/accounts/pkg/metrics/metrics.go deleted file mode 100644 index 0712724271..0000000000 --- a/accounts/pkg/metrics/metrics.go +++ /dev/null @@ -1,22 +0,0 @@ -package metrics - -var ( - // Namespace defines the namespace for the defines metrics. - Namespace = "ocis" - - // Subsystem defines the subsystem for the defines metrics. - Subsystem = "accounts" -) - -// Metrics defines the available metrics of this service. -type Metrics struct { - // Counter *prometheus.CounterVec -} - -// New initializes the available metrics. -func New() *Metrics { - m := &Metrics{ - } - // TODO: implement metrics - return m -} diff --git a/accounts/pkg/proto/v0/accounts.mock.go b/accounts/pkg/proto/v0/accounts.mock.go deleted file mode 100644 index 42f5e8276d..0000000000 --- a/accounts/pkg/proto/v0/accounts.mock.go +++ /dev/null @@ -1,89 +0,0 @@ -package proto - -import ( - context "context" - - empty "github.com/golang/protobuf/ptypes/empty" - client "github.com/micro/go-micro/v2/client" -) - -// MockAccountsService can be used to write tests -/* -To creata a mock overwrite the functions of an instance like this: - -```go -func mockAccSvc(retErr bool) proto.AccountsService { - if retErr { - return &proto.MockAccountsService{ - ListFunc: func(ctx context.Context, in *proto.ListAccountsRequest, opts ...client.CallOption) (out *proto.ListAccountsResponse, err error) { - return nil, fmt.Errorf("error returned by mockAccountsService LIST") - }, - } - } - - return &proto.MockAccountsService{ - ListFunc: func(ctx context.Context, in *proto.ListAccountsRequest, opts ...client.CallOption) (out *proto.ListAccountsResponse, err error) { - return &proto.ListAccountsResponse{ - Accounts: []*proto.Account{ - { - Id: "yay", - }, - }, - }, nil - }, - } -} -``` -*/ -type MockAccountsService struct { - ListFunc func(ctx context.Context, in *ListAccountsRequest, opts ...client.CallOption) (*ListAccountsResponse, error) - GetFunc func(ctx context.Context, in *GetAccountRequest, opts ...client.CallOption) (*Account, error) - CreateFunc func(ctx context.Context, in *CreateAccountRequest, opts ...client.CallOption) (*Account, error) - UpdateFunc func(ctx context.Context, in *UpdateAccountRequest, opts ...client.CallOption) (*Account, error) - DeleteFunc func(ctx context.Context, in *DeleteAccountRequest, opts ...client.CallOption) (*empty.Empty, error) -} - -// ListAccounts will panic if the function has been called, but not mocked -func (m MockAccountsService) ListAccounts(ctx context.Context, in *ListAccountsRequest, opts ...client.CallOption) (*ListAccountsResponse, error) { - if m.ListFunc != nil { - return m.ListFunc(ctx, in, opts...) - } - - panic("ListFunc was called in test but not mocked") -} - -// GetAccount will panic if the function has been called, but not mocked -func (m MockAccountsService) GetAccount(ctx context.Context, in *GetAccountRequest, opts ...client.CallOption) (*Account, error) { - if m.GetFunc != nil { - return m.GetFunc(ctx, in, opts...) - } - - panic("GetFunc was called in test but not mocked") -} - -// CreateAccount will panic if the function has been called, but not mocked -func (m MockAccountsService) CreateAccount(ctx context.Context, in *CreateAccountRequest, opts ...client.CallOption) (*Account, error) { - if m.CreateFunc != nil { - return m.CreateFunc(ctx, in, opts...) - } - - panic("CreateFunc was called in test but not mocked") -} - -// UpdateAccount will panic if the function has been called, but not mocked -func (m MockAccountsService) UpdateAccount(ctx context.Context, in *UpdateAccountRequest, opts ...client.CallOption) (*Account, error) { - if m.UpdateFunc != nil { - return m.UpdateFunc(ctx, in, opts...) - } - - panic("UpdateFunc was called in test but not mocked") -} - -// DeleteAccount will panic if the function has been called, but not mocked -func (m MockAccountsService) DeleteAccount(ctx context.Context, in *DeleteAccountRequest, opts ...client.CallOption) (*empty.Empty, error) { - if m.DeleteFunc != nil { - return m.DeleteFunc(ctx, in, opts...) - } - - panic("DeleteFunc was called in test but not mocked") -} diff --git a/accounts/pkg/proto/v0/accounts.pb.go b/accounts/pkg/proto/v0/accounts.pb.go deleted file mode 100644 index a7991a4b7d..0000000000 --- a/accounts/pkg/proto/v0/accounts.pb.go +++ /dev/null @@ -1,1821 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// source: accounts.proto - -package proto - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - _ "github.com/golang/protobuf/ptypes/empty" - timestamp "github.com/golang/protobuf/ptypes/timestamp" - _ "google.golang.org/genproto/googleapis/api/annotations" - field_mask "google.golang.org/genproto/protobuf/field_mask" - math "math" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -type ListAccountsRequest struct { - // Optional. The maximum number of accounts to return in the response - PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. A pagination token returned from a previous call to `Get` - // that indicates from where search should continue - PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Used to specify a subset of fields that should be - // returned by a get operation or modified by an update operation. - FieldMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` - // Optional. Search criteria used to select the accounts to return. - // If no search criteria is specified then all accounts will be - // returned - // - // TODO update query language - // Query expressions can be used to restrict results based upon - // the account properties where the operators `=`, `NOT`, `AND` and `OR` - // can be used along with the suffix wildcard symbol `*`. - // - // The string properties in a query expression should use escaped quotes - // for values that include whitespace to prevent unexpected behavior. - // - // Some example queries are: - // - // * Query `display_name=Th*` returns accounts whose display_name - // starts with "Th" - // * Query `email=foo@example.com` returns accounts with - // `email` set to `foo@example.com` - // * Query `display_name=\\"Test String\\"` returns accounts with - // display names that include both "Test" and "String" - Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListAccountsRequest) Reset() { *m = ListAccountsRequest{} } -func (m *ListAccountsRequest) String() string { return proto.CompactTextString(m) } -func (*ListAccountsRequest) ProtoMessage() {} -func (*ListAccountsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{0} -} - -func (m *ListAccountsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListAccountsRequest.Unmarshal(m, b) -} -func (m *ListAccountsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListAccountsRequest.Marshal(b, m, deterministic) -} -func (m *ListAccountsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListAccountsRequest.Merge(m, src) -} -func (m *ListAccountsRequest) XXX_Size() int { - return xxx_messageInfo_ListAccountsRequest.Size(m) -} -func (m *ListAccountsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListAccountsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListAccountsRequest proto.InternalMessageInfo - -func (m *ListAccountsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize - } - return 0 -} - -func (m *ListAccountsRequest) GetPageToken() string { - if m != nil { - return m.PageToken - } - return "" -} - -func (m *ListAccountsRequest) GetFieldMask() *field_mask.FieldMask { - if m != nil { - return m.FieldMask - } - return nil -} - -func (m *ListAccountsRequest) GetQuery() string { - if m != nil { - return m.Query - } - return "" -} - -type ListAccountsResponse struct { - // The field name should match the noun "accounts" in the method name. There - // will be a maximum number of items returned based on the page_size field - // in the request - Accounts []*Account `protobuf:"bytes,1,rep,name=accounts,proto3" json:"accounts,omitempty"` - // Token to retrieve the next page of results, or empty if there are no - // more results in the list - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListAccountsResponse) Reset() { *m = ListAccountsResponse{} } -func (m *ListAccountsResponse) String() string { return proto.CompactTextString(m) } -func (*ListAccountsResponse) ProtoMessage() {} -func (*ListAccountsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{1} -} - -func (m *ListAccountsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListAccountsResponse.Unmarshal(m, b) -} -func (m *ListAccountsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListAccountsResponse.Marshal(b, m, deterministic) -} -func (m *ListAccountsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListAccountsResponse.Merge(m, src) -} -func (m *ListAccountsResponse) XXX_Size() int { - return xxx_messageInfo_ListAccountsResponse.Size(m) -} -func (m *ListAccountsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListAccountsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListAccountsResponse proto.InternalMessageInfo - -func (m *ListAccountsResponse) GetAccounts() []*Account { - if m != nil { - return m.Accounts - } - return nil -} - -func (m *ListAccountsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken - } - return "" -} - -type GetAccountRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetAccountRequest) Reset() { *m = GetAccountRequest{} } -func (m *GetAccountRequest) String() string { return proto.CompactTextString(m) } -func (*GetAccountRequest) ProtoMessage() {} -func (*GetAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{2} -} - -func (m *GetAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetAccountRequest.Unmarshal(m, b) -} -func (m *GetAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetAccountRequest.Marshal(b, m, deterministic) -} -func (m *GetAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetAccountRequest.Merge(m, src) -} -func (m *GetAccountRequest) XXX_Size() int { - return xxx_messageInfo_GetAccountRequest.Size(m) -} -func (m *GetAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetAccountRequest proto.InternalMessageInfo - -func (m *GetAccountRequest) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -type CreateAccountRequest struct { - // The account resource to create - Account *Account `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CreateAccountRequest) Reset() { *m = CreateAccountRequest{} } -func (m *CreateAccountRequest) String() string { return proto.CompactTextString(m) } -func (*CreateAccountRequest) ProtoMessage() {} -func (*CreateAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{3} -} - -func (m *CreateAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateAccountRequest.Unmarshal(m, b) -} -func (m *CreateAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateAccountRequest.Marshal(b, m, deterministic) -} -func (m *CreateAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateAccountRequest.Merge(m, src) -} -func (m *CreateAccountRequest) XXX_Size() int { - return xxx_messageInfo_CreateAccountRequest.Size(m) -} -func (m *CreateAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_CreateAccountRequest proto.InternalMessageInfo - -func (m *CreateAccountRequest) GetAccount() *Account { - if m != nil { - return m.Account - } - return nil -} - -type UpdateAccountRequest struct { - // The account resource which replaces the resource on the server - Account *Account `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"` - // The update mask applies to the resource. For the `FieldMask` definition, - // see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UpdateAccountRequest) Reset() { *m = UpdateAccountRequest{} } -func (m *UpdateAccountRequest) String() string { return proto.CompactTextString(m) } -func (*UpdateAccountRequest) ProtoMessage() {} -func (*UpdateAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{4} -} - -func (m *UpdateAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UpdateAccountRequest.Unmarshal(m, b) -} -func (m *UpdateAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UpdateAccountRequest.Marshal(b, m, deterministic) -} -func (m *UpdateAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateAccountRequest.Merge(m, src) -} -func (m *UpdateAccountRequest) XXX_Size() int { - return xxx_messageInfo_UpdateAccountRequest.Size(m) -} -func (m *UpdateAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_UpdateAccountRequest proto.InternalMessageInfo - -func (m *UpdateAccountRequest) GetAccount() *Account { - if m != nil { - return m.Account - } - return nil -} - -func (m *UpdateAccountRequest) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask - } - return nil -} - -type DeleteAccountRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DeleteAccountRequest) Reset() { *m = DeleteAccountRequest{} } -func (m *DeleteAccountRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteAccountRequest) ProtoMessage() {} -func (*DeleteAccountRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{5} -} - -func (m *DeleteAccountRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteAccountRequest.Unmarshal(m, b) -} -func (m *DeleteAccountRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteAccountRequest.Marshal(b, m, deterministic) -} -func (m *DeleteAccountRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteAccountRequest.Merge(m, src) -} -func (m *DeleteAccountRequest) XXX_Size() int { - return xxx_messageInfo_DeleteAccountRequest.Size(m) -} -func (m *DeleteAccountRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteAccountRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteAccountRequest proto.InternalMessageInfo - -func (m *DeleteAccountRequest) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -// Account follows the properties of the ms graph api user resuorce. -// See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties -type Account struct { - // The unique identifier for the user. Key. Not nullable. Non reassignable. Read-only. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // *true* if the account is enabled; otherwise, *false*. This property is required when a user is created. Supports $filter. - AccountEnabled bool `protobuf:"varint,2,opt,name=account_enabled,json=accountEnabled,proto3" json:"account_enabled,omitempty"` - // A resource account is also known as a /disabled user object/ in Azure AD, and can be used to represent resources in general. - // In Exchange it might be used to represent conference rooms, for example, and allow them to have a phone number. - // You could give printers or machines with a sync client resource accounts as well. - // A resource account can be homed in Microsoft 365 or on premises using Skype for Business Server 2019. - // *true* if the user is a resource account; otherwise, *false*. Null value should be considered false. - IsResourceAccount bool `protobuf:"varint,3,opt,name=is_resource_account,json=isResourceAccount,proto3" json:"is_resource_account,omitempty"` - // Indicates whether the account was created as - // - a regular school or work account ("" / emptystring), - // - a local account, fully managed by ocis (LocalAccount), includes synced accounts or - // - an external account (Invitation), - // - self-service sign-up using email verification (EmailVerified). Read-only. - CreationType string `protobuf:"bytes,4,opt,name=creation_type,json=creationType,proto3" json:"creation_type,omitempty"` - // Represents the identities that can be used to sign in to this account. - // An identity can be provided by OCIS (also known as a local account), by organizations, or by social identity providers such as Facebook, Google, and Microsoft, and is tied to an account. - // May contain multiple items with the same signInType value. Supports $filter. - Identities []*Identities `protobuf:"bytes,5,rep,name=identities,proto3" json:"identities,omitempty"` - // The name displayed in the address book for the account. - // This is usually the combination of the user's first name, middle initial and last name. - // This property is required when a user is created and it cannot be cleared during updates. - // Supports $filter and $orderby. - // posixaccount MUST cn - DisplayName string `protobuf:"bytes,6,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - // The username - // posixaccount MUST uid - PreferredName string `protobuf:"bytes,7,opt,name=preferred_name,json=preferredName,proto3" json:"preferred_name,omitempty"` - // TODO rename to on_premise_? or move to extension? see https://docs.microsoft.com/en-us/graph/extensibility-open-users - // used for exposing the user using ldap - // posixaccount MUST uidnumber - UidNumber int64 `protobuf:"varint,8,opt,name=uid_number,json=uidNumber,proto3" json:"uid_number,omitempty"` - // used for exposing the user using ldap - // posixaccount MUST gidnumber - GidNumber int64 `protobuf:"varint,9,opt,name=gid_number,json=gidNumber,proto3" json:"gid_number,omitempty"` - // The SMTP address for the user, for example, "jeff@contoso.onmicrosoft.com". Read-Only. Supports $filter. - // inetorgperson MAY mail - Mail string `protobuf:"bytes,10,opt,name=mail,proto3" json:"mail,omitempty"` - // A description, useful for resource accounts - // posixaccount MAY description - Description string `protobuf:"bytes,11,opt,name=description,proto3" json:"description,omitempty"` - // Specifies the password profile for the user. - // The profile contains the user’s password. This property is required when a user is created. - // The password in the profile must satisfy minimum requirements as specified by the passwordPolicies property. - // By default, a strong password is required. - // posixaccount MAY authPassword - PasswordProfile *PasswordProfile `protobuf:"bytes,12,opt,name=password_profile,json=passwordProfile,proto3" json:"password_profile,omitempty"` - // The groups, directory roles and administrative units that the user is a member of. Read-only. Nullable. - // should we only respond with repeated strings of ids? no clients should a proper filter mask! - MemberOf []*Group `protobuf:"bytes,13,rep,name=memberOf,proto3" json:"memberOf,omitempty"` - // The created date of the account object. - CreatedDateTime *timestamp.Timestamp `protobuf:"bytes,16,opt,name=created_date_time,json=createdDateTime,proto3" json:"created_date_time,omitempty"` - // The date and time the user was deleted. Returned only on $select. - DeletedDateTime *timestamp.Timestamp `protobuf:"bytes,17,opt,name=deleted_date_time,json=deletedDateTime,proto3" json:"deleted_date_time,omitempty"` - // *true* if this object is synced from an on-premises directory; - // *false* if this object was originally synced from an on-premises directory but is no longer synced; - // null if this object has never been synced from an on-premises directory (default). Read-only - OnPremisesSyncEnabled bool `protobuf:"varint,20,opt,name=on_premises_sync_enabled,json=onPremisesSyncEnabled,proto3" json:"on_premises_sync_enabled,omitempty"` - // This property is used to associate an on-premises LDAP user to the ocis account object. - // This property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property. - // Important: The $ and _ characters cannot be used when specifying this property. Supports $filter. - OnPremisesImmutableId string `protobuf:"bytes,21,opt,name=on_premises_immutable_id,json=onPremisesImmutableId,proto3" json:"on_premises_immutable_id,omitempty"` - // Contains the on-premises security identifier (SID) for the user that was synchronized from on-premises to the cloud. Read-only. - OnPremisesSecurityIdentifier string `protobuf:"bytes,22,opt,name=on_premises_security_identifier,json=onPremisesSecurityIdentifier,proto3" json:"on_premises_security_identifier,omitempty"` - // Contains the on-premises LDAP `distinguished name` or `DN`. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - OnPremisesDistinguishedName string `protobuf:"bytes,23,opt,name=on_premises_distinguished_name,json=onPremisesDistinguishedName,proto3" json:"on_premises_distinguished_name,omitempty"` - // Contains the on-premises `samAccountName` synchronized from the on-premises directory. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - OnPremisesSamAccountName string `protobuf:"bytes,24,opt,name=on_premises_sam_account_name,json=onPremisesSamAccountName,proto3" json:"on_premises_sam_account_name,omitempty"` - // Contains the on-premises `domainFQDN`, also called `dnsDomainName` synchronized from the on-premises directory - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - OnPremisesDomainName string `protobuf:"bytes,25,opt,name=on_premises_domain_name,json=onPremisesDomainName,proto3" json:"on_premises_domain_name,omitempty"` - // Contains the on-premises userPrincipalName synchronized from the on-premises directory. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - OnPremisesUserPrincipalName string `protobuf:"bytes,26,opt,name=on_premises_user_principal_name,json=onPremisesUserPrincipalName,proto3" json:"on_premises_user_principal_name,omitempty"` - // Indicates the last time at which the object was synced with the on-premises directory; Read-only. - OnPremisesLastSyncDateTime *timestamp.Timestamp `protobuf:"bytes,28,opt,name=on_premises_last_sync_date_time,json=onPremisesLastSyncDateTime,proto3" json:"on_premises_last_sync_date_time,omitempty"` - // Errors when using synchronization during provisioning. - OnPremisesProvisioningErrors []*OnPremisesProvisioningError `protobuf:"bytes,29,rep,name=on_premises_provisioning_errors,json=onPremisesProvisioningErrors,proto3" json:"on_premises_provisioning_errors,omitempty"` - // For an external user invited to the tenant using the invitation API, this property represents the invited user's invitation status. - // For invited users, the state can be `PendingAcceptance` or `Accepted`, or "" / emptystring for all other users. - // Returned only on $select. Supports $filter with the supported values. For example: $filter=externalUserState eq 'PendingAcceptance'. - ExternalUserState string `protobuf:"bytes,40,opt,name=external_user_state,json=externalUserState,proto3" json:"external_user_state,omitempty"` - // Shows the timestamp for the latest change to the externalUserState property. Returned only on $select. - ExternalUserStateChangeDateTime *timestamp.Timestamp `protobuf:"bytes,41,opt,name=external_user_state_change_date_time,json=externalUserStateChangeDateTime,proto3" json:"external_user_state_change_date_time,omitempty"` - // Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get - // an error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph). - // If this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint. - // Returned only on $select. Read-only. Use invalidateAllRefreshTokens to reset. - RefreshTokensValidFromDateTime *timestamp.Timestamp `protobuf:"bytes,60,opt,name=refresh_tokens_valid_from_date_time,json=refreshTokensValidFromDateTime,proto3" json:"refresh_tokens_valid_from_date_time,omitempty"` - // Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get - // an error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph). - // If this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint. - // Read-only. Use revokeSignInSessions to reset. - SignInSessionsValidFromDateTime *timestamp.Timestamp `protobuf:"bytes,61,opt,name=sign_in_sessions_valid_from_date_time,json=signInSessionsValidFromDateTime,proto3" json:"sign_in_sessions_valid_from_date_time,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Account) Reset() { *m = Account{} } -func (m *Account) String() string { return proto.CompactTextString(m) } -func (*Account) ProtoMessage() {} -func (*Account) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{6} -} - -func (m *Account) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Account.Unmarshal(m, b) -} -func (m *Account) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Account.Marshal(b, m, deterministic) -} -func (m *Account) XXX_Merge(src proto.Message) { - xxx_messageInfo_Account.Merge(m, src) -} -func (m *Account) XXX_Size() int { - return xxx_messageInfo_Account.Size(m) -} -func (m *Account) XXX_DiscardUnknown() { - xxx_messageInfo_Account.DiscardUnknown(m) -} - -var xxx_messageInfo_Account proto.InternalMessageInfo - -func (m *Account) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -func (m *Account) GetAccountEnabled() bool { - if m != nil { - return m.AccountEnabled - } - return false -} - -func (m *Account) GetIsResourceAccount() bool { - if m != nil { - return m.IsResourceAccount - } - return false -} - -func (m *Account) GetCreationType() string { - if m != nil { - return m.CreationType - } - return "" -} - -func (m *Account) GetIdentities() []*Identities { - if m != nil { - return m.Identities - } - return nil -} - -func (m *Account) GetDisplayName() string { - if m != nil { - return m.DisplayName - } - return "" -} - -func (m *Account) GetPreferredName() string { - if m != nil { - return m.PreferredName - } - return "" -} - -func (m *Account) GetUidNumber() int64 { - if m != nil { - return m.UidNumber - } - return 0 -} - -func (m *Account) GetGidNumber() int64 { - if m != nil { - return m.GidNumber - } - return 0 -} - -func (m *Account) GetMail() string { - if m != nil { - return m.Mail - } - return "" -} - -func (m *Account) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Account) GetPasswordProfile() *PasswordProfile { - if m != nil { - return m.PasswordProfile - } - return nil -} - -func (m *Account) GetMemberOf() []*Group { - if m != nil { - return m.MemberOf - } - return nil -} - -func (m *Account) GetCreatedDateTime() *timestamp.Timestamp { - if m != nil { - return m.CreatedDateTime - } - return nil -} - -func (m *Account) GetDeletedDateTime() *timestamp.Timestamp { - if m != nil { - return m.DeletedDateTime - } - return nil -} - -func (m *Account) GetOnPremisesSyncEnabled() bool { - if m != nil { - return m.OnPremisesSyncEnabled - } - return false -} - -func (m *Account) GetOnPremisesImmutableId() string { - if m != nil { - return m.OnPremisesImmutableId - } - return "" -} - -func (m *Account) GetOnPremisesSecurityIdentifier() string { - if m != nil { - return m.OnPremisesSecurityIdentifier - } - return "" -} - -func (m *Account) GetOnPremisesDistinguishedName() string { - if m != nil { - return m.OnPremisesDistinguishedName - } - return "" -} - -func (m *Account) GetOnPremisesSamAccountName() string { - if m != nil { - return m.OnPremisesSamAccountName - } - return "" -} - -func (m *Account) GetOnPremisesDomainName() string { - if m != nil { - return m.OnPremisesDomainName - } - return "" -} - -func (m *Account) GetOnPremisesUserPrincipalName() string { - if m != nil { - return m.OnPremisesUserPrincipalName - } - return "" -} - -func (m *Account) GetOnPremisesLastSyncDateTime() *timestamp.Timestamp { - if m != nil { - return m.OnPremisesLastSyncDateTime - } - return nil -} - -func (m *Account) GetOnPremisesProvisioningErrors() []*OnPremisesProvisioningError { - if m != nil { - return m.OnPremisesProvisioningErrors - } - return nil -} - -func (m *Account) GetExternalUserState() string { - if m != nil { - return m.ExternalUserState - } - return "" -} - -func (m *Account) GetExternalUserStateChangeDateTime() *timestamp.Timestamp { - if m != nil { - return m.ExternalUserStateChangeDateTime - } - return nil -} - -func (m *Account) GetRefreshTokensValidFromDateTime() *timestamp.Timestamp { - if m != nil { - return m.RefreshTokensValidFromDateTime - } - return nil -} - -func (m *Account) GetSignInSessionsValidFromDateTime() *timestamp.Timestamp { - if m != nil { - return m.SignInSessionsValidFromDateTime - } - return nil -} - -// Identities Represents an identity used to sign in to a user account. -// An identity can be provided by ocis, by organizations, or by social identity providers such as Facebook, Google, or Microsoft, that are tied to a user account. -// This enables the user to sign in to the user account with any of those associated identities. -// They are also used to keep a history of old usernames. -type Identities struct { - // Specifies the user sign-in types in your directory, such as `emailAddress`, `userName` or `federated`. - // Here, federated represents a unique identifier for a user from an issuer, that can be in any format chosen by the issuer. - // Additional validation is enforced on *issuer_assigned_id* when the sign-in type is set to `emailAddress` or `userName`. - // This property can also be set to any custom string. - SignInType string `protobuf:"bytes,1,opt,name=sign_in_type,json=signInType,proto3" json:"sign_in_type,omitempty"` - // Specifies the issuer of the identity, for example facebook.com. - // For local accounts (where signInType is not federated), this property is - // the local B2C tenant default domain name, for example contoso.onmicrosoft.com. - // For external users from other Azure AD organization, this will be the domain of - // the federated organization, for example contoso.com. - // Supports $filter. 512 character limit. - Issuer string `protobuf:"bytes,2,opt,name=issuer,proto3" json:"issuer,omitempty"` - // Specifies the unique identifier assigned to the user by the issuer. The combination of *issuer* and *issuerAssignedId* must be unique within the organization. Represents the sign-in name for the user, when signInType is set to emailAddress or userName (also known as local accounts). - // When *signInType* is set to: - // * `emailAddress`, (or starts with `emailAddress` like `emailAddress1`) *issuerAssignedId* must be a valid email address - // * `userName`, issuer_assigned_id must be a valid local part of an email address - // Supports $filter. 512 character limit. - IssuerAssignedId string `protobuf:"bytes,3,opt,name=issuer_assigned_id,json=issuerAssignedId,proto3" json:"issuer_assigned_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Identities) Reset() { *m = Identities{} } -func (m *Identities) String() string { return proto.CompactTextString(m) } -func (*Identities) ProtoMessage() {} -func (*Identities) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{7} -} - -func (m *Identities) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Identities.Unmarshal(m, b) -} -func (m *Identities) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Identities.Marshal(b, m, deterministic) -} -func (m *Identities) XXX_Merge(src proto.Message) { - xxx_messageInfo_Identities.Merge(m, src) -} -func (m *Identities) XXX_Size() int { - return xxx_messageInfo_Identities.Size(m) -} -func (m *Identities) XXX_DiscardUnknown() { - xxx_messageInfo_Identities.DiscardUnknown(m) -} - -var xxx_messageInfo_Identities proto.InternalMessageInfo - -func (m *Identities) GetSignInType() string { - if m != nil { - return m.SignInType - } - return "" -} - -func (m *Identities) GetIssuer() string { - if m != nil { - return m.Issuer - } - return "" -} - -func (m *Identities) GetIssuerAssignedId() string { - if m != nil { - return m.IssuerAssignedId - } - return "" -} - -type PasswordProfile struct { - // The password for the user. This property is required when a user is created. - // It can be updated, but the user will be required to change the password on the next login. - // The password must satisfy minimum requirements as specified by the user’s passwordPolicies property. By default, a strong password is required. - Password string `protobuf:"bytes,1,opt,name=password,proto3" json:"password,omitempty"` - // The time when this account last changed their password. - LastPasswordChangeDateTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=last_password_change_date_time,json=lastPasswordChangeDateTime,proto3" json:"last_password_change_date_time,omitempty"` - // Specifies password policies for the user. - //This value is an enumeration with one possible value being “DisableStrongPassword”, which allows weaker passwords than the default policy to be specified. - // “DisablePasswordExpiration” can also be specified. - PasswordPolicies []string `protobuf:"bytes,3,rep,name=password_policies,json=passwordPolicies,proto3" json:"password_policies,omitempty"` - // *true* if the user must change her password on the next login; otherwise false. - ForceChangePasswordNextSignIn bool `protobuf:"varint,4,opt,name=force_change_password_next_sign_in,json=forceChangePasswordNextSignIn,proto3" json:"force_change_password_next_sign_in,omitempty"` - // If *true*, at next sign-in, the user must perform a multi-factor authentication (MFA) before being forced to change their password. The behavior is identical to forceChangePasswordNextSignIn except that the user is required to first perform a multi-factor authentication before password change. After a password change, this property will be automatically reset to false. If not set, default is false. - ForceChangePasswordNextSignInWithMfa bool `protobuf:"varint,5,opt,name=force_change_password_next_sign_in_with_mfa,json=forceChangePasswordNextSignInWithMfa,proto3" json:"force_change_password_next_sign_in_with_mfa,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *PasswordProfile) Reset() { *m = PasswordProfile{} } -func (m *PasswordProfile) String() string { return proto.CompactTextString(m) } -func (*PasswordProfile) ProtoMessage() {} -func (*PasswordProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{8} -} - -func (m *PasswordProfile) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_PasswordProfile.Unmarshal(m, b) -} -func (m *PasswordProfile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_PasswordProfile.Marshal(b, m, deterministic) -} -func (m *PasswordProfile) XXX_Merge(src proto.Message) { - xxx_messageInfo_PasswordProfile.Merge(m, src) -} -func (m *PasswordProfile) XXX_Size() int { - return xxx_messageInfo_PasswordProfile.Size(m) -} -func (m *PasswordProfile) XXX_DiscardUnknown() { - xxx_messageInfo_PasswordProfile.DiscardUnknown(m) -} - -var xxx_messageInfo_PasswordProfile proto.InternalMessageInfo - -func (m *PasswordProfile) GetPassword() string { - if m != nil { - return m.Password - } - return "" -} - -func (m *PasswordProfile) GetLastPasswordChangeDateTime() *timestamp.Timestamp { - if m != nil { - return m.LastPasswordChangeDateTime - } - return nil -} - -func (m *PasswordProfile) GetPasswordPolicies() []string { - if m != nil { - return m.PasswordPolicies - } - return nil -} - -func (m *PasswordProfile) GetForceChangePasswordNextSignIn() bool { - if m != nil { - return m.ForceChangePasswordNextSignIn - } - return false -} - -func (m *PasswordProfile) GetForceChangePasswordNextSignInWithMfa() bool { - if m != nil { - return m.ForceChangePasswordNextSignInWithMfa - } - return false -} - -type ListGroupsRequest struct { - // Optional. The maximum number of groups to return in the response - PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. A pagination token returned from a previous call to `Get` - // that indicates from where search should continue - PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Used to specify a subset of fields that should be - // returned by a get operation or modified by an update operation. - FieldMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` - // Optional. Search criteria used to select the groups to return. - // If no search criteria is specified then all groups will be - // returned - // - // TODO update query language - // Query expressions can be used to restrict results based upon - // the account properties where the operators `=`, `NOT`, `AND` and `OR` - // can be used along with the suffix wildcard symbol `*`. - // - // The string properties in a query expression should use escaped quotes - // for values that include whitespace to prevent unexpected behavior. - // - // Some example queries are: - // - // * Query `display_name=Th*` returns accounts whose display_name - // starts with "Th" - // * Query `display_name=\\"Test String\\"` returns groups with - // display names that include both "Test" and "String" - Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListGroupsRequest) Reset() { *m = ListGroupsRequest{} } -func (m *ListGroupsRequest) String() string { return proto.CompactTextString(m) } -func (*ListGroupsRequest) ProtoMessage() {} -func (*ListGroupsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{9} -} - -func (m *ListGroupsRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListGroupsRequest.Unmarshal(m, b) -} -func (m *ListGroupsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListGroupsRequest.Marshal(b, m, deterministic) -} -func (m *ListGroupsRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListGroupsRequest.Merge(m, src) -} -func (m *ListGroupsRequest) XXX_Size() int { - return xxx_messageInfo_ListGroupsRequest.Size(m) -} -func (m *ListGroupsRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListGroupsRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListGroupsRequest proto.InternalMessageInfo - -func (m *ListGroupsRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize - } - return 0 -} - -func (m *ListGroupsRequest) GetPageToken() string { - if m != nil { - return m.PageToken - } - return "" -} - -func (m *ListGroupsRequest) GetFieldMask() *field_mask.FieldMask { - if m != nil { - return m.FieldMask - } - return nil -} - -func (m *ListGroupsRequest) GetQuery() string { - if m != nil { - return m.Query - } - return "" -} - -type ListGroupsResponse struct { - // The field name should match the noun "group" in the method name. There - // will be a maximum number of items returned based on the page_size field - // in the request - Groups []*Group `protobuf:"bytes,1,rep,name=groups,proto3" json:"groups,omitempty"` - // Token to retrieve the next page of results, or empty if there are no - // more results in the list - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListGroupsResponse) Reset() { *m = ListGroupsResponse{} } -func (m *ListGroupsResponse) String() string { return proto.CompactTextString(m) } -func (*ListGroupsResponse) ProtoMessage() {} -func (*ListGroupsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{10} -} - -func (m *ListGroupsResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListGroupsResponse.Unmarshal(m, b) -} -func (m *ListGroupsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListGroupsResponse.Marshal(b, m, deterministic) -} -func (m *ListGroupsResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListGroupsResponse.Merge(m, src) -} -func (m *ListGroupsResponse) XXX_Size() int { - return xxx_messageInfo_ListGroupsResponse.Size(m) -} -func (m *ListGroupsResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListGroupsResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListGroupsResponse proto.InternalMessageInfo - -func (m *ListGroupsResponse) GetGroups() []*Group { - if m != nil { - return m.Groups - } - return nil -} - -func (m *ListGroupsResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken - } - return "" -} - -type GetGroupRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *GetGroupRequest) Reset() { *m = GetGroupRequest{} } -func (m *GetGroupRequest) String() string { return proto.CompactTextString(m) } -func (*GetGroupRequest) ProtoMessage() {} -func (*GetGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{11} -} - -func (m *GetGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_GetGroupRequest.Unmarshal(m, b) -} -func (m *GetGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_GetGroupRequest.Marshal(b, m, deterministic) -} -func (m *GetGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_GetGroupRequest.Merge(m, src) -} -func (m *GetGroupRequest) XXX_Size() int { - return xxx_messageInfo_GetGroupRequest.Size(m) -} -func (m *GetGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_GetGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_GetGroupRequest proto.InternalMessageInfo - -func (m *GetGroupRequest) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -type CreateGroupRequest struct { - // The account resource to create - Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *CreateGroupRequest) Reset() { *m = CreateGroupRequest{} } -func (m *CreateGroupRequest) String() string { return proto.CompactTextString(m) } -func (*CreateGroupRequest) ProtoMessage() {} -func (*CreateGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{12} -} - -func (m *CreateGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_CreateGroupRequest.Unmarshal(m, b) -} -func (m *CreateGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_CreateGroupRequest.Marshal(b, m, deterministic) -} -func (m *CreateGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_CreateGroupRequest.Merge(m, src) -} -func (m *CreateGroupRequest) XXX_Size() int { - return xxx_messageInfo_CreateGroupRequest.Size(m) -} -func (m *CreateGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_CreateGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_CreateGroupRequest proto.InternalMessageInfo - -func (m *CreateGroupRequest) GetGroup() *Group { - if m != nil { - return m.Group - } - return nil -} - -type UpdateGroupRequest struct { - // The group resource which replaces the resource on the server - Group *Group `protobuf:"bytes,1,opt,name=group,proto3" json:"group,omitempty"` - // The update mask applies to the resource. For the `FieldMask` definition, - // see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask - UpdateMask *field_mask.FieldMask `protobuf:"bytes,2,opt,name=update_mask,json=updateMask,proto3" json:"update_mask,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *UpdateGroupRequest) Reset() { *m = UpdateGroupRequest{} } -func (m *UpdateGroupRequest) String() string { return proto.CompactTextString(m) } -func (*UpdateGroupRequest) ProtoMessage() {} -func (*UpdateGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{13} -} - -func (m *UpdateGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_UpdateGroupRequest.Unmarshal(m, b) -} -func (m *UpdateGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_UpdateGroupRequest.Marshal(b, m, deterministic) -} -func (m *UpdateGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_UpdateGroupRequest.Merge(m, src) -} -func (m *UpdateGroupRequest) XXX_Size() int { - return xxx_messageInfo_UpdateGroupRequest.Size(m) -} -func (m *UpdateGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_UpdateGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_UpdateGroupRequest proto.InternalMessageInfo - -func (m *UpdateGroupRequest) GetGroup() *Group { - if m != nil { - return m.Group - } - return nil -} - -func (m *UpdateGroupRequest) GetUpdateMask() *field_mask.FieldMask { - if m != nil { - return m.UpdateMask - } - return nil -} - -type DeleteGroupRequest struct { - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DeleteGroupRequest) Reset() { *m = DeleteGroupRequest{} } -func (m *DeleteGroupRequest) String() string { return proto.CompactTextString(m) } -func (*DeleteGroupRequest) ProtoMessage() {} -func (*DeleteGroupRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{14} -} - -func (m *DeleteGroupRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DeleteGroupRequest.Unmarshal(m, b) -} -func (m *DeleteGroupRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DeleteGroupRequest.Marshal(b, m, deterministic) -} -func (m *DeleteGroupRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_DeleteGroupRequest.Merge(m, src) -} -func (m *DeleteGroupRequest) XXX_Size() int { - return xxx_messageInfo_DeleteGroupRequest.Size(m) -} -func (m *DeleteGroupRequest) XXX_DiscardUnknown() { - xxx_messageInfo_DeleteGroupRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_DeleteGroupRequest proto.InternalMessageInfo - -func (m *DeleteGroupRequest) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -type AddMemberRequest struct { - // The id of the group to add a member to - GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - // The account id to add - AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *AddMemberRequest) Reset() { *m = AddMemberRequest{} } -func (m *AddMemberRequest) String() string { return proto.CompactTextString(m) } -func (*AddMemberRequest) ProtoMessage() {} -func (*AddMemberRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{15} -} - -func (m *AddMemberRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_AddMemberRequest.Unmarshal(m, b) -} -func (m *AddMemberRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_AddMemberRequest.Marshal(b, m, deterministic) -} -func (m *AddMemberRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_AddMemberRequest.Merge(m, src) -} -func (m *AddMemberRequest) XXX_Size() int { - return xxx_messageInfo_AddMemberRequest.Size(m) -} -func (m *AddMemberRequest) XXX_DiscardUnknown() { - xxx_messageInfo_AddMemberRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_AddMemberRequest proto.InternalMessageInfo - -func (m *AddMemberRequest) GetGroupId() string { - if m != nil { - return m.GroupId - } - return "" -} - -func (m *AddMemberRequest) GetAccountId() string { - if m != nil { - return m.AccountId - } - return "" -} - -type RemoveMemberRequest struct { - // The id of the group to remove a member from - GroupId string `protobuf:"bytes,1,opt,name=group_id,json=groupId,proto3" json:"group_id,omitempty"` - // The account id to remove - AccountId string `protobuf:"bytes,2,opt,name=account_id,json=accountId,proto3" json:"account_id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *RemoveMemberRequest) Reset() { *m = RemoveMemberRequest{} } -func (m *RemoveMemberRequest) String() string { return proto.CompactTextString(m) } -func (*RemoveMemberRequest) ProtoMessage() {} -func (*RemoveMemberRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{16} -} - -func (m *RemoveMemberRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_RemoveMemberRequest.Unmarshal(m, b) -} -func (m *RemoveMemberRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_RemoveMemberRequest.Marshal(b, m, deterministic) -} -func (m *RemoveMemberRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_RemoveMemberRequest.Merge(m, src) -} -func (m *RemoveMemberRequest) XXX_Size() int { - return xxx_messageInfo_RemoveMemberRequest.Size(m) -} -func (m *RemoveMemberRequest) XXX_DiscardUnknown() { - xxx_messageInfo_RemoveMemberRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_RemoveMemberRequest proto.InternalMessageInfo - -func (m *RemoveMemberRequest) GetGroupId() string { - if m != nil { - return m.GroupId - } - return "" -} - -func (m *RemoveMemberRequest) GetAccountId() string { - if m != nil { - return m.AccountId - } - return "" -} - -type ListMembersRequest struct { - PageSize int32 `protobuf:"varint,1,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` - // Optional. A pagination token returned from a previous call to `Get` - // that indicates from where search should continue - PageToken string `protobuf:"bytes,2,opt,name=page_token,json=pageToken,proto3" json:"page_token,omitempty"` - // Optional. Used to specify a subset of fields that should be - // returned by a get operation or modified by an update operation. - FieldMask *field_mask.FieldMask `protobuf:"bytes,3,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` - // Optional. Search criteria used to select the groups to return. - // If no search criteria is specified then all groups will be - // returned - // - // TODO update query language - // Query expressions can be used to restrict results based upon - // the account properties where the operators `=`, `NOT`, `AND` and `OR` - // can be used along with the suffix wildcard symbol `*`. - // - // The string properties in a query expression should use escaped quotes - // for values that include whitespace to prevent unexpected behavior. - // - // Some example queries are: - // - // * Query `display_name=Th*` returns accounts whose display_name - // starts with "Th" - // * Query `display_name=\\"Test String\\"` returns groups with - // display names that include both "Test" and "String" - Query string `protobuf:"bytes,4,opt,name=query,proto3" json:"query,omitempty"` - // The id of the group to list members from - Id string `protobuf:"bytes,5,opt,name=id,proto3" json:"id,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListMembersRequest) Reset() { *m = ListMembersRequest{} } -func (m *ListMembersRequest) String() string { return proto.CompactTextString(m) } -func (*ListMembersRequest) ProtoMessage() {} -func (*ListMembersRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{17} -} - -func (m *ListMembersRequest) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListMembersRequest.Unmarshal(m, b) -} -func (m *ListMembersRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListMembersRequest.Marshal(b, m, deterministic) -} -func (m *ListMembersRequest) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListMembersRequest.Merge(m, src) -} -func (m *ListMembersRequest) XXX_Size() int { - return xxx_messageInfo_ListMembersRequest.Size(m) -} -func (m *ListMembersRequest) XXX_DiscardUnknown() { - xxx_messageInfo_ListMembersRequest.DiscardUnknown(m) -} - -var xxx_messageInfo_ListMembersRequest proto.InternalMessageInfo - -func (m *ListMembersRequest) GetPageSize() int32 { - if m != nil { - return m.PageSize - } - return 0 -} - -func (m *ListMembersRequest) GetPageToken() string { - if m != nil { - return m.PageToken - } - return "" -} - -func (m *ListMembersRequest) GetFieldMask() *field_mask.FieldMask { - if m != nil { - return m.FieldMask - } - return nil -} - -func (m *ListMembersRequest) GetQuery() string { - if m != nil { - return m.Query - } - return "" -} - -func (m *ListMembersRequest) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -type ListMembersResponse struct { - // The field name should match the noun "members" in the method name. There - // will be a maximum number of items returned based on the page_size field - // in the request - Members []*Account `protobuf:"bytes,1,rep,name=members,proto3" json:"members,omitempty"` - // Token to retrieve the next page of results, or empty if there are no - // more results in the list - NextPageToken string `protobuf:"bytes,2,opt,name=next_page_token,json=nextPageToken,proto3" json:"next_page_token,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ListMembersResponse) Reset() { *m = ListMembersResponse{} } -func (m *ListMembersResponse) String() string { return proto.CompactTextString(m) } -func (*ListMembersResponse) ProtoMessage() {} -func (*ListMembersResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{18} -} - -func (m *ListMembersResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ListMembersResponse.Unmarshal(m, b) -} -func (m *ListMembersResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ListMembersResponse.Marshal(b, m, deterministic) -} -func (m *ListMembersResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_ListMembersResponse.Merge(m, src) -} -func (m *ListMembersResponse) XXX_Size() int { - return xxx_messageInfo_ListMembersResponse.Size(m) -} -func (m *ListMembersResponse) XXX_DiscardUnknown() { - xxx_messageInfo_ListMembersResponse.DiscardUnknown(m) -} - -var xxx_messageInfo_ListMembersResponse proto.InternalMessageInfo - -func (m *ListMembersResponse) GetMembers() []*Account { - if m != nil { - return m.Members - } - return nil -} - -func (m *ListMembersResponse) GetNextPageToken() string { - if m != nil { - return m.NextPageToken - } - return "" -} - -type Group struct { - // The unique identifier for the group. - // Returned by default. Inherited from directoryObject. Key. Not nullable. Read-only. - Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` - // The display name for the group. This property is required when a group is created and cannot be cleared during updates. - // Returned by default. Supports $filter and $orderby. - // groupofnames MUST cn - DisplayName string `protobuf:"bytes,2,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"` - // Users, contacts, and groups that are members of this group. HTTP Methods: GET (supported for all groups), POST (supported for security groups and mail-enabled security groups), DELETE (supported only for security groups) Read-only. Nullable. - // TODO accounts (users) only for now, we can add groups with the dedicated message using oneof construct later - Members []*Account `protobuf:"bytes,3,rep,name=members,proto3" json:"members,omitempty"` - // groupofnames MAY businessCategory - // groupofnames MAY o - // groupofnames MAY ou - // groupofnames MAY owner, SINGLE-VALUE but there might be multiple owners - Owners []*Account `protobuf:"bytes,4,rep,name=owners,proto3" json:"owners,omitempty"` - // An optional description for the group. Returned by default. - // groupofnames MAY description - Description string `protobuf:"bytes,5,opt,name=description,proto3" json:"description,omitempty"` - // used for exposing the user using ldap - // posixgroup MUST gidnumber - GidNumber int64 `protobuf:"varint,6,opt,name=gid_number,json=gidNumber,proto3" json:"gid_number,omitempty"` - // Timestamp of when the group was created. The value cannot be modified and is automatically populated when the group is created - // Returned by default. Read-only. - CreatedDateTime *timestamp.Timestamp `protobuf:"bytes,7,opt,name=created_date_time,json=createdDateTime,proto3" json:"created_date_time,omitempty"` - // For some Azure Active Directory objects (user, group, application), if the object is deleted, it is first logically deleted, and this property is updated with the date and time when the object was deleted. Otherwise this property is null. If the object is restored, this property is updated to null. - // Returned by default. Read-only. - DeletedDateTime *timestamp.Timestamp `protobuf:"bytes,8,opt,name=deleted_date_time,json=deletedDateTime,proto3" json:"deleted_date_time,omitempty"` - // Timestamp of when the group is set to expire. The value cannot be modified and is automatically populated when the group is created. - // Returned by default. Read-only. - ExpirationDateTime *timestamp.Timestamp `protobuf:"bytes,9,opt,name=expiration_date_time,json=expirationDateTime,proto3" json:"expiration_date_time,omitempty"` - // True if the group is not displayed in certain parts of the Outlook user interface: - // in the Address Book, in address lists for selecting message recipients, and in the Browse Groups dialog for searching groups; false otherwise. Default value is false. - // Returned only on $select. - HideFromAddressLists bool `protobuf:"varint,10,opt,name=hide_from_address_lists,json=hideFromAddressLists,proto3" json:"hide_from_address_lists,omitempty"` - // Specifies the visibility of an Office 365 group. Possible values are: Private, Public, or Hiddenmembership; blank values are treated as public. See group visibility options to learn more. - // Visibility can be set only when a group is created; it is not editable. - // Returned by default. - Visibility string `protobuf:"bytes,11,opt,name=visibility,proto3" json:"visibility,omitempty"` - // *true* if this group is synced from an on-premises directory; - // *false* if this group was originally synced from an on-premises directory but is no longer synced; - // null if this object has never been synced from an on-premises directory (default). - // Returned by default. Read-only. Supports $filter. - OnPremisesSyncEnabled bool `protobuf:"varint,20,opt,name=on_premises_sync_enabled,json=onPremisesSyncEnabled,proto3" json:"on_premises_sync_enabled,omitempty"` - // This property is used to associate an on-premises LDAP user to the ocis account object. - // This property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property. - // Important: The $ and _ characters cannot be used when specifying this property. Supports $filter. - OnPremisesImmutableId string `protobuf:"bytes,21,opt,name=on_premises_immutable_id,json=onPremisesImmutableId,proto3" json:"on_premises_immutable_id,omitempty"` - // Contains the on-premises security identifier (SID) for the group that was synchronized from on-premises to the cloud. Returned by default. Read-only. - OnPremisesSecurityIdentifier string `protobuf:"bytes,22,opt,name=on_premises_security_identifier,json=onPremisesSecurityIdentifier,proto3" json:"on_premises_security_identifier,omitempty"` - // Contains the on-premises LDAP `distinguished name` or `DN`. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - OnPremisesDistinguishedName string `protobuf:"bytes,23,opt,name=on_premises_distinguished_name,json=onPremisesDistinguishedName,proto3" json:"on_premises_distinguished_name,omitempty"` - // Contains the on-premises `samAccountName` synchronized from the on-premises directory. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Returned by default. Read-only. - OnPremisesSamAccountName string `protobuf:"bytes,24,opt,name=on_premises_sam_account_name,json=onPremisesSamAccountName,proto3" json:"on_premises_sam_account_name,omitempty"` - // Contains the on-premises domain FQDN, also called dnsDomainName synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. - // Returned by default. Read-only. - OnPremisesDomainName string `protobuf:"bytes,25,opt,name=on_premises_domain_name,json=onPremisesDomainName,proto3" json:"on_premises_domain_name,omitempty"` - // Contains the on-premises netBios name synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. - // Returned by default. Read-only. - OnPremisesNetBiosName string `protobuf:"bytes,26,opt,name=on_premises_net_bios_name,json=onPremisesNetBiosName,proto3" json:"on_premises_net_bios_name,omitempty"` - // Indicates the last time at which the group was synced with the on-premises directory. - // Returned by default. Read-only. Supports $filter. - OnPremisesLastSyncDateTime string `protobuf:"bytes,27,opt,name=on_premises_last_sync_date_time,json=onPremisesLastSyncDateTime,proto3" json:"on_premises_last_sync_date_time,omitempty"` - // Errors when using synchronization during provisioning. - OnPremisesProvisioningErrors []*OnPremisesProvisioningError `protobuf:"bytes,28,rep,name=on_premises_provisioning_errors,json=onPremisesProvisioningErrors,proto3" json:"on_premises_provisioning_errors,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *Group) Reset() { *m = Group{} } -func (m *Group) String() string { return proto.CompactTextString(m) } -func (*Group) ProtoMessage() {} -func (*Group) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{19} -} - -func (m *Group) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_Group.Unmarshal(m, b) -} -func (m *Group) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_Group.Marshal(b, m, deterministic) -} -func (m *Group) XXX_Merge(src proto.Message) { - xxx_messageInfo_Group.Merge(m, src) -} -func (m *Group) XXX_Size() int { - return xxx_messageInfo_Group.Size(m) -} -func (m *Group) XXX_DiscardUnknown() { - xxx_messageInfo_Group.DiscardUnknown(m) -} - -var xxx_messageInfo_Group proto.InternalMessageInfo - -func (m *Group) GetId() string { - if m != nil { - return m.Id - } - return "" -} - -func (m *Group) GetDisplayName() string { - if m != nil { - return m.DisplayName - } - return "" -} - -func (m *Group) GetMembers() []*Account { - if m != nil { - return m.Members - } - return nil -} - -func (m *Group) GetOwners() []*Account { - if m != nil { - return m.Owners - } - return nil -} - -func (m *Group) GetDescription() string { - if m != nil { - return m.Description - } - return "" -} - -func (m *Group) GetGidNumber() int64 { - if m != nil { - return m.GidNumber - } - return 0 -} - -func (m *Group) GetCreatedDateTime() *timestamp.Timestamp { - if m != nil { - return m.CreatedDateTime - } - return nil -} - -func (m *Group) GetDeletedDateTime() *timestamp.Timestamp { - if m != nil { - return m.DeletedDateTime - } - return nil -} - -func (m *Group) GetExpirationDateTime() *timestamp.Timestamp { - if m != nil { - return m.ExpirationDateTime - } - return nil -} - -func (m *Group) GetHideFromAddressLists() bool { - if m != nil { - return m.HideFromAddressLists - } - return false -} - -func (m *Group) GetVisibility() string { - if m != nil { - return m.Visibility - } - return "" -} - -func (m *Group) GetOnPremisesSyncEnabled() bool { - if m != nil { - return m.OnPremisesSyncEnabled - } - return false -} - -func (m *Group) GetOnPremisesImmutableId() string { - if m != nil { - return m.OnPremisesImmutableId - } - return "" -} - -func (m *Group) GetOnPremisesSecurityIdentifier() string { - if m != nil { - return m.OnPremisesSecurityIdentifier - } - return "" -} - -func (m *Group) GetOnPremisesDistinguishedName() string { - if m != nil { - return m.OnPremisesDistinguishedName - } - return "" -} - -func (m *Group) GetOnPremisesSamAccountName() string { - if m != nil { - return m.OnPremisesSamAccountName - } - return "" -} - -func (m *Group) GetOnPremisesDomainName() string { - if m != nil { - return m.OnPremisesDomainName - } - return "" -} - -func (m *Group) GetOnPremisesNetBiosName() string { - if m != nil { - return m.OnPremisesNetBiosName - } - return "" -} - -func (m *Group) GetOnPremisesLastSyncDateTime() string { - if m != nil { - return m.OnPremisesLastSyncDateTime - } - return "" -} - -func (m *Group) GetOnPremisesProvisioningErrors() []*OnPremisesProvisioningError { - if m != nil { - return m.OnPremisesProvisioningErrors - } - return nil -} - -type OnPremisesProvisioningError struct { - // Category of the provisioning error. Note: Currently, there is only one possible value. Possible value: PropertyConflict - indicates a property value is not unique. Other objects contain the same value for the property. - Category string `protobuf:"bytes,1,opt,name=category,proto3" json:"category,omitempty"` - // The date and time at which the error occurred. - OccurredDateTime *timestamp.Timestamp `protobuf:"bytes,2,opt,name=occurred_date_time,json=occurredDateTime,proto3" json:"occurred_date_time,omitempty"` - // Name of the directory property causing the error. Current possible values: UserPrincipalName or ProxyAddress - PropertyCausingError string `protobuf:"bytes,3,opt,name=property_causing_error,json=propertyCausingError,proto3" json:"property_causing_error,omitempty"` - // Value of the property causing the error. - Value string `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *OnPremisesProvisioningError) Reset() { *m = OnPremisesProvisioningError{} } -func (m *OnPremisesProvisioningError) String() string { return proto.CompactTextString(m) } -func (*OnPremisesProvisioningError) ProtoMessage() {} -func (*OnPremisesProvisioningError) Descriptor() ([]byte, []int) { - return fileDescriptor_e1e7723af4c007b7, []int{20} -} - -func (m *OnPremisesProvisioningError) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_OnPremisesProvisioningError.Unmarshal(m, b) -} -func (m *OnPremisesProvisioningError) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_OnPremisesProvisioningError.Marshal(b, m, deterministic) -} -func (m *OnPremisesProvisioningError) XXX_Merge(src proto.Message) { - xxx_messageInfo_OnPremisesProvisioningError.Merge(m, src) -} -func (m *OnPremisesProvisioningError) XXX_Size() int { - return xxx_messageInfo_OnPremisesProvisioningError.Size(m) -} -func (m *OnPremisesProvisioningError) XXX_DiscardUnknown() { - xxx_messageInfo_OnPremisesProvisioningError.DiscardUnknown(m) -} - -var xxx_messageInfo_OnPremisesProvisioningError proto.InternalMessageInfo - -func (m *OnPremisesProvisioningError) GetCategory() string { - if m != nil { - return m.Category - } - return "" -} - -func (m *OnPremisesProvisioningError) GetOccurredDateTime() *timestamp.Timestamp { - if m != nil { - return m.OccurredDateTime - } - return nil -} - -func (m *OnPremisesProvisioningError) GetPropertyCausingError() string { - if m != nil { - return m.PropertyCausingError - } - return "" -} - -func (m *OnPremisesProvisioningError) GetValue() string { - if m != nil { - return m.Value - } - return "" -} - -func init() { - proto.RegisterType((*ListAccountsRequest)(nil), "settings.ListAccountsRequest") - proto.RegisterType((*ListAccountsResponse)(nil), "settings.ListAccountsResponse") - proto.RegisterType((*GetAccountRequest)(nil), "settings.GetAccountRequest") - proto.RegisterType((*CreateAccountRequest)(nil), "settings.CreateAccountRequest") - proto.RegisterType((*UpdateAccountRequest)(nil), "settings.UpdateAccountRequest") - proto.RegisterType((*DeleteAccountRequest)(nil), "settings.DeleteAccountRequest") - proto.RegisterType((*Account)(nil), "settings.Account") - proto.RegisterType((*Identities)(nil), "settings.Identities") - proto.RegisterType((*PasswordProfile)(nil), "settings.PasswordProfile") - proto.RegisterType((*ListGroupsRequest)(nil), "settings.ListGroupsRequest") - proto.RegisterType((*ListGroupsResponse)(nil), "settings.ListGroupsResponse") - proto.RegisterType((*GetGroupRequest)(nil), "settings.GetGroupRequest") - proto.RegisterType((*CreateGroupRequest)(nil), "settings.CreateGroupRequest") - proto.RegisterType((*UpdateGroupRequest)(nil), "settings.UpdateGroupRequest") - proto.RegisterType((*DeleteGroupRequest)(nil), "settings.DeleteGroupRequest") - proto.RegisterType((*AddMemberRequest)(nil), "settings.AddMemberRequest") - proto.RegisterType((*RemoveMemberRequest)(nil), "settings.RemoveMemberRequest") - proto.RegisterType((*ListMembersRequest)(nil), "settings.ListMembersRequest") - proto.RegisterType((*ListMembersResponse)(nil), "settings.ListMembersResponse") - proto.RegisterType((*Group)(nil), "settings.Group") - proto.RegisterType((*OnPremisesProvisioningError)(nil), "settings.OnPremisesProvisioningError") -} - -func init() { proto.RegisterFile("accounts.proto", fileDescriptor_e1e7723af4c007b7) } - -var fileDescriptor_e1e7723af4c007b7 = []byte{ - // 1980 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, - 0x15, 0x06, 0x45, 0x53, 0x22, 0x0f, 0x25, 0x4b, 0x1a, 0x33, 0xf6, 0x8a, 0xfa, 0x31, 0xbd, 0xb6, - 0x6c, 0xd9, 0xaa, 0xa5, 0xc0, 0x89, 0xd1, 0xd6, 0x6e, 0x8a, 0xca, 0x92, 0xed, 0x12, 0xf0, 0x8f, - 0x40, 0x39, 0x2d, 0xda, 0x8b, 0x2c, 0x56, 0xdc, 0x21, 0x35, 0x31, 0xf7, 0x27, 0x33, 0xb3, 0xb2, - 0x98, 0x20, 0x40, 0xd0, 0xab, 0x5e, 0x16, 0xe8, 0x83, 0x14, 0x7d, 0x83, 0xde, 0xf7, 0xa2, 0x17, - 0x7d, 0x81, 0x5c, 0xf4, 0xaa, 0x4f, 0x51, 0xcc, 0xdf, 0xee, 0x72, 0x97, 0x14, 0x1d, 0xdb, 0x40, - 0x11, 0x20, 0x57, 0xe2, 0xce, 0xf9, 0xce, 0xf9, 0xce, 0x9c, 0x39, 0x3b, 0xf3, 0xed, 0x08, 0x2e, - 0xba, 0xdd, 0x6e, 0x18, 0x07, 0x9c, 0xed, 0x44, 0x34, 0xe4, 0x21, 0xaa, 0x32, 0xcc, 0x39, 0x09, - 0xfa, 0xac, 0x79, 0xb5, 0x1f, 0x86, 0xfd, 0x01, 0xde, 0x75, 0x23, 0xb2, 0xdb, 0x23, 0x78, 0xe0, - 0x39, 0xc7, 0xf8, 0xc4, 0x3d, 0x25, 0x21, 0x55, 0xd0, 0xe6, 0x5a, 0x06, 0xe0, 0x06, 0x41, 0xc8, - 0x5d, 0x4e, 0xc2, 0x40, 0x07, 0x6a, 0xae, 0x6a, 0xab, 0x7c, 0x3a, 0x8e, 0x7b, 0xbb, 0xd8, 0x8f, - 0xf8, 0x50, 0x1b, 0x5b, 0x79, 0xa3, 0x22, 0xf0, 0x5d, 0xf6, 0x5a, 0x23, 0xae, 0xe6, 0x11, 0x9c, - 0xf8, 0x98, 0x71, 0xd7, 0x8f, 0x14, 0xc0, 0xfe, 0x7b, 0x09, 0x2e, 0x3d, 0x23, 0x8c, 0xef, 0xe9, - 0xfc, 0x3b, 0xf8, 0xab, 0x18, 0x33, 0x8e, 0x5a, 0x50, 0x8b, 0xdc, 0x3e, 0x76, 0x18, 0xf9, 0x1a, - 0x5b, 0xa5, 0x56, 0x69, 0xab, 0xf2, 0xa8, 0xfc, 0xfd, 0x5e, 0xa9, 0x53, 0x15, 0xa3, 0x47, 0xe4, - 0x6b, 0x8c, 0x6c, 0x00, 0x89, 0xe0, 0xe1, 0x6b, 0x1c, 0x58, 0x33, 0xad, 0xd2, 0x56, 0x4d, 0x41, - 0xa4, 0xe3, 0x2b, 0x31, 0x8a, 0x7e, 0x09, 0x90, 0xa6, 0x64, 0x95, 0x5b, 0xa5, 0xad, 0xfa, 0xbd, - 0xe6, 0x8e, 0xca, 0x69, 0xc7, 0xe4, 0xb4, 0xf3, 0x44, 0x40, 0x9e, 0xbb, 0xec, 0x75, 0xa7, 0xd6, - 0x33, 0x3f, 0xd1, 0x0a, 0x54, 0xbe, 0x8a, 0x31, 0x1d, 0x5a, 0x17, 0xd2, 0xc8, 0x6a, 0xc4, 0xf6, - 0xa1, 0x31, 0x9a, 0x32, 0x8b, 0xc2, 0x80, 0x61, 0x74, 0x17, 0xaa, 0x66, 0x19, 0xac, 0x52, 0xab, - 0xbc, 0x55, 0xbf, 0xb7, 0xbc, 0x63, 0xd6, 0x61, 0x47, 0xa3, 0x3b, 0x09, 0x04, 0xdd, 0x84, 0xc5, - 0x00, 0x9f, 0x71, 0x27, 0x3f, 0x8b, 0xce, 0x82, 0x18, 0x3e, 0x34, 0x93, 0xb0, 0xaf, 0xc3, 0xf2, - 0x53, 0x6c, 0xd8, 0x4c, 0x7d, 0x2e, 0xc2, 0x0c, 0xf1, 0x64, 0x61, 0x6a, 0x9d, 0x19, 0xe2, 0xd9, - 0xfb, 0xd0, 0xd8, 0xa7, 0xd8, 0xe5, 0x38, 0x87, 0xdb, 0x86, 0x39, 0x4d, 0x28, 0xc1, 0x63, 0x53, - 0x32, 0x08, 0xfb, 0xbb, 0x12, 0x34, 0x3e, 0x8f, 0xbc, 0xf7, 0x8b, 0x82, 0x1e, 0x42, 0x3d, 0x96, - 0x41, 0x54, 0xd5, 0x67, 0xa6, 0x56, 0x1d, 0x14, 0x5c, 0xfc, 0xb6, 0x6f, 0x42, 0xe3, 0x00, 0x0f, - 0x70, 0x21, 0x83, 0xfc, 0x7c, 0xff, 0xbc, 0x00, 0x73, 0x1a, 0x92, 0xb7, 0xa1, 0x5b, 0xb0, 0xa8, - 0x73, 0x71, 0x70, 0xe0, 0x1e, 0x0f, 0xb0, 0x27, 0x93, 0xa8, 0x76, 0xcc, 0x5b, 0xf2, 0x58, 0x8d, - 0xa2, 0x1d, 0xb8, 0x44, 0x98, 0x43, 0x31, 0x0b, 0x63, 0xda, 0xc5, 0x8e, 0x99, 0x62, 0x59, 0x82, - 0x97, 0x89, 0x58, 0x59, 0x69, 0x31, 0x44, 0xd7, 0x61, 0xa1, 0x2b, 0x8a, 0x4c, 0xc2, 0xc0, 0xe1, - 0xc3, 0x08, 0xab, 0xde, 0xe8, 0xcc, 0x9b, 0xc1, 0x57, 0xc3, 0x08, 0xa3, 0x4f, 0x01, 0x88, 0x87, - 0x03, 0x4e, 0x38, 0xc1, 0xcc, 0xaa, 0xc8, 0x3e, 0x68, 0xa4, 0xe5, 0x6a, 0x27, 0xb6, 0x4e, 0x06, - 0x87, 0xae, 0xc1, 0xbc, 0x47, 0x58, 0x34, 0x70, 0x87, 0x4e, 0xe0, 0xfa, 0xd8, 0x9a, 0x95, 0x91, - 0xeb, 0x7a, 0xec, 0x85, 0xeb, 0x63, 0xb4, 0x09, 0x17, 0x23, 0x8a, 0x7b, 0x98, 0x52, 0xec, 0x29, - 0xd0, 0x9c, 0x6a, 0x97, 0x64, 0x54, 0xc2, 0xd6, 0x01, 0x62, 0xe2, 0x39, 0x41, 0xec, 0x1f, 0x63, - 0x6a, 0x55, 0x5b, 0xa5, 0xad, 0x72, 0xa7, 0x16, 0x13, 0xef, 0x85, 0x1c, 0x10, 0xe6, 0x7e, 0x6a, - 0xae, 0x29, 0x73, 0x3f, 0x31, 0x23, 0xb8, 0xe0, 0xbb, 0x64, 0x60, 0x81, 0x0c, 0x2d, 0x7f, 0xa3, - 0x16, 0xd4, 0x3d, 0xcc, 0xba, 0x94, 0x44, 0x62, 0x92, 0x56, 0x5d, 0xa7, 0x96, 0x0e, 0xa1, 0x03, - 0x58, 0x8a, 0x5c, 0xc6, 0xde, 0x84, 0xd4, 0x73, 0x22, 0x1a, 0xf6, 0xc8, 0x00, 0x5b, 0xf3, 0x72, - 0xdd, 0x57, 0xd2, 0x99, 0x1f, 0x6a, 0xc4, 0xa1, 0x02, 0x74, 0x16, 0xa3, 0xd1, 0x01, 0xb4, 0x0d, - 0x55, 0x1f, 0x8b, 0x2c, 0x5e, 0xf6, 0xac, 0x05, 0x59, 0xb7, 0xc5, 0xd4, 0xfb, 0x29, 0x0d, 0xe3, - 0xa8, 0x93, 0x00, 0xd0, 0x13, 0x58, 0x96, 0x65, 0xc7, 0x9e, 0x23, 0x7b, 0x4d, 0x6c, 0x2c, 0xd6, - 0xd2, 0x84, 0x5e, 0x7b, 0x65, 0x76, 0x9d, 0xce, 0xa2, 0x76, 0x3a, 0x70, 0x39, 0x16, 0xa3, 0x22, - 0x8e, 0x27, 0x1b, 0x2e, 0x1b, 0x67, 0x79, 0x7a, 0x1c, 0xed, 0x94, 0xc4, 0xf9, 0x39, 0x58, 0x61, - 0xe0, 0x44, 0x14, 0xfb, 0x84, 0x61, 0xe6, 0xb0, 0x61, 0xd0, 0x4d, 0xba, 0xaf, 0x21, 0x1b, 0xea, - 0xa3, 0x30, 0x38, 0xd4, 0xe6, 0xa3, 0x61, 0xd0, 0x35, 0x4d, 0x98, 0x73, 0x24, 0xbe, 0x1f, 0x73, - 0x61, 0x71, 0x88, 0x67, 0x7d, 0x24, 0x4b, 0x9d, 0x71, 0x6c, 0x1b, 0x6b, 0xdb, 0x43, 0x8f, 0xe1, - 0xea, 0x08, 0x23, 0xee, 0xc6, 0x94, 0xf0, 0xa1, 0xa3, 0xba, 0xaa, 0x47, 0x30, 0xb5, 0x2e, 0x4b, - 0xff, 0xb5, 0x0c, 0xb1, 0x06, 0xb5, 0x13, 0x0c, 0xda, 0x87, 0x8d, 0x6c, 0x18, 0x8f, 0x30, 0x51, - 0xf0, 0x98, 0xb0, 0x13, 0xd3, 0x66, 0x57, 0x64, 0x94, 0xd5, 0x34, 0xca, 0x41, 0x16, 0x23, 0x9b, - 0xee, 0xd7, 0xb0, 0x36, 0x92, 0x8b, 0xeb, 0x9b, 0xb7, 0x49, 0x85, 0xb0, 0x64, 0x08, 0x2b, 0x93, - 0x88, 0xeb, 0xeb, 0xb7, 0x4a, 0xfa, 0xdf, 0x87, 0x2b, 0x23, 0x49, 0x84, 0xbe, 0x4b, 0x02, 0xe5, - 0xba, 0x22, 0x5d, 0x1b, 0x19, 0x76, 0x69, 0x94, 0x6e, 0x07, 0xa3, 0x25, 0x88, 0x19, 0xa6, 0x4e, - 0x44, 0x49, 0xd0, 0x25, 0x91, 0x3b, 0x50, 0xee, 0xcd, 0x7c, 0xf2, 0x9f, 0x33, 0x4c, 0x0f, 0x0d, - 0x46, 0x46, 0x71, 0x46, 0xa3, 0x0c, 0x5c, 0xc6, 0xd5, 0xfa, 0xa5, 0x0d, 0xb1, 0x36, 0xb5, 0x21, - 0x9a, 0x29, 0xc3, 0x33, 0x97, 0x71, 0xb1, 0xc2, 0x49, 0x6f, 0x0c, 0x46, 0x09, 0x22, 0x1a, 0x9e, - 0x12, 0x46, 0xc2, 0x80, 0x04, 0x7d, 0x07, 0x53, 0x1a, 0x52, 0x66, 0xad, 0xcb, 0x7e, 0xdf, 0x4c, - 0xfb, 0xfd, 0x65, 0x12, 0xee, 0x30, 0x03, 0x7f, 0x2c, 0xd0, 0xd9, 0x05, 0x2d, 0x18, 0x99, 0xd8, - 0xd5, 0xf0, 0x19, 0xc7, 0x34, 0x70, 0x07, 0xaa, 0x22, 0x8c, 0xbb, 0x1c, 0x5b, 0x5b, 0xb2, 0x10, - 0xcb, 0xc6, 0x24, 0xca, 0x70, 0x24, 0x0c, 0x88, 0xc0, 0x8d, 0x31, 0x78, 0xa7, 0x7b, 0xe2, 0x06, - 0x7d, 0x9c, 0xa9, 0xc1, 0xed, 0xa9, 0x35, 0xb8, 0x5a, 0x08, 0xbe, 0x2f, 0x83, 0x24, 0x85, 0xe8, - 0xc3, 0x75, 0x8a, 0x7b, 0x14, 0xb3, 0x13, 0x75, 0xe0, 0x31, 0xe7, 0xd4, 0x1d, 0x10, 0xcf, 0xe9, - 0xd1, 0xd0, 0xcf, 0x30, 0xfd, 0x6a, 0x2a, 0xd3, 0x86, 0x0e, 0x23, 0x4f, 0x48, 0xf6, 0x3b, 0x11, - 0xe4, 0x09, 0x0d, 0xfd, 0x84, 0xe8, 0x4b, 0xd8, 0x64, 0xa4, 0x1f, 0x38, 0x24, 0x70, 0x18, 0x66, - 0xa2, 0x3e, 0x13, 0xa8, 0x3e, 0x9b, 0x3e, 0x29, 0x11, 0xa8, 0x1d, 0x1c, 0xe9, 0x30, 0x05, 0x2e, - 0x9b, 0x03, 0xa4, 0x9b, 0x3a, 0x6a, 0xc1, 0xbc, 0x61, 0x96, 0x47, 0x84, 0x3a, 0x96, 0x40, 0x05, - 0x91, 0x07, 0xc4, 0x65, 0x98, 0x25, 0x8c, 0xc5, 0x98, 0xea, 0xe3, 0x5e, 0x3f, 0xa1, 0x9f, 0x01, - 0x52, 0xbf, 0x1c, 0x97, 0x09, 0x38, 0xf6, 0xc4, 0x16, 0x50, 0x96, 0x98, 0x25, 0x65, 0xd9, 0xd3, - 0x86, 0xb6, 0x67, 0x7f, 0x3f, 0x03, 0x8b, 0xb9, 0x1d, 0x15, 0x35, 0xa1, 0x6a, 0xf6, 0x54, 0xcd, - 0x9b, 0x3c, 0xa3, 0x2f, 0x60, 0x43, 0x36, 0x76, 0xb2, 0x4f, 0x17, 0xd6, 0x77, 0x66, 0x7a, 0x8f, - 0x8b, 0x08, 0x86, 0x34, 0xb7, 0xb4, 0xdb, 0xb0, 0x9c, 0x1e, 0x01, 0xe1, 0x80, 0x74, 0xc5, 0xe9, - 0x57, 0x6e, 0x95, 0x45, 0xf2, 0xc9, 0x46, 0xaf, 0xc7, 0x51, 0x1b, 0xec, 0x5e, 0x28, 0x8e, 0x5c, - 0x9d, 0x44, 0xe2, 0x29, 0x05, 0x91, 0xae, 0x9f, 0x3c, 0x5d, 0xab, 0x9d, 0x75, 0x89, 0x54, 0x6c, - 0x86, 0xfb, 0x05, 0x3e, 0xe3, 0x47, 0xb2, 0xa2, 0xe8, 0x0f, 0xb0, 0x3d, 0x3d, 0x94, 0xf3, 0x86, - 0xf0, 0x13, 0xc7, 0xef, 0xb9, 0x56, 0x45, 0xc6, 0xbc, 0x71, 0x6e, 0xcc, 0xdf, 0x13, 0x7e, 0xf2, - 0xbc, 0xe7, 0xda, 0x7f, 0x2b, 0xc1, 0xb2, 0x10, 0x7a, 0xf2, 0xe8, 0xf9, 0x51, 0x28, 0x53, 0x0c, - 0x28, 0x9b, 0xb0, 0xd6, 0xa5, 0xb7, 0x60, 0xb6, 0x2f, 0x47, 0xb4, 0x2a, 0x2d, 0x9c, 0xaa, 0xda, - 0xfc, 0xd6, 0x8a, 0xf4, 0x1a, 0x2c, 0x3e, 0xc5, 0x8a, 0x65, 0x92, 0x3e, 0x7b, 0x08, 0x48, 0xe9, - 0xd1, 0x11, 0xd4, 0x26, 0x54, 0x24, 0x95, 0x56, 0x91, 0x85, 0x44, 0x94, 0xd5, 0x3e, 0x03, 0xa4, - 0x64, 0xe8, 0x3b, 0x38, 0xbf, 0x9f, 0xfc, 0xbc, 0x01, 0x48, 0xc9, 0xcf, 0x73, 0x27, 0xf7, 0x0c, - 0x96, 0xf6, 0x3c, 0xef, 0xb9, 0x94, 0x22, 0x06, 0xb3, 0x02, 0x55, 0xc9, 0xef, 0x24, 0xc8, 0x39, - 0xf9, 0xdc, 0xf6, 0x84, 0xe4, 0x32, 0x87, 0x21, 0xf1, 0x74, 0x45, 0x6b, 0x7a, 0xa4, 0xed, 0xd9, - 0x2f, 0xe1, 0x52, 0x07, 0xfb, 0xe1, 0x29, 0xfe, 0x50, 0x01, 0xff, 0x51, 0x52, 0x6d, 0xa0, 0xe2, - 0xfd, 0x18, 0x1a, 0x57, 0x57, 0xb8, 0x92, 0x54, 0xf8, 0x4b, 0xf5, 0x55, 0x98, 0xcc, 0x40, 0x77, - 0xf2, 0x36, 0xcc, 0x29, 0x01, 0x78, 0xce, 0x07, 0x96, 0x41, 0xbc, 0x75, 0x37, 0xff, 0xb7, 0x0a, - 0x15, 0xb9, 0xdc, 0x85, 0x0f, 0x89, 0xbc, 0x28, 0x9f, 0x29, 0x8a, 0xf2, 0x4c, 0x46, 0xe5, 0xa9, - 0x19, 0xdd, 0x86, 0xd9, 0xf0, 0x4d, 0x20, 0xb0, 0x17, 0x26, 0x61, 0x35, 0x20, 0xaf, 0xb9, 0x2b, - 0x45, 0xcd, 0x3d, 0x2a, 0xe4, 0x67, 0xf3, 0x42, 0x7e, 0xac, 0x3e, 0x9e, 0xfb, 0x40, 0xfa, 0xb8, - 0xfa, 0xc3, 0xf5, 0xf1, 0x33, 0x68, 0xe0, 0xb3, 0x88, 0x50, 0xf5, 0xf5, 0x94, 0x86, 0xaa, 0x4d, - 0x0d, 0x85, 0x52, 0xbf, 0x24, 0xda, 0x7d, 0xb8, 0x72, 0x42, 0x3c, 0xac, 0x4e, 0x73, 0xd7, 0xf3, - 0x28, 0x66, 0xcc, 0x19, 0x10, 0xc6, 0x99, 0xfc, 0x72, 0xa9, 0x76, 0x1a, 0xc2, 0x2c, 0x8e, 0xe9, - 0x3d, 0x65, 0x14, 0xdd, 0xc4, 0xd0, 0x06, 0x80, 0x50, 0x4b, 0xc7, 0x64, 0x40, 0xf8, 0x50, 0x7f, - 0xc8, 0x64, 0x46, 0x7e, 0x12, 0xf1, 0xff, 0x0f, 0x11, 0xff, 0x0b, 0x58, 0xc9, 0xba, 0x05, 0x98, - 0x3b, 0xc7, 0x24, 0x64, 0x59, 0xf9, 0x9e, 0x29, 0xde, 0x0b, 0xcc, 0x1f, 0x91, 0x90, 0x49, 0xcf, - 0xfd, 0xe9, 0xc2, 0x7d, 0x55, 0xfa, 0xbf, 0xa7, 0x38, 0x5f, 0xfb, 0x60, 0xe2, 0xdc, 0xfe, 0x57, - 0x09, 0x56, 0xcf, 0xf1, 0x16, 0x12, 0xae, 0xeb, 0x72, 0xdc, 0x0f, 0xe9, 0xd0, 0x48, 0x38, 0xf3, - 0x8c, 0x7e, 0x0b, 0x28, 0xec, 0x76, 0x63, 0xf9, 0xfd, 0xff, 0x43, 0x64, 0xdb, 0x92, 0xf1, 0x4a, - 0xe6, 0xfc, 0x29, 0x5c, 0x8e, 0x68, 0x18, 0x61, 0xca, 0x87, 0x4e, 0xd7, 0x8d, 0x59, 0x32, 0x57, - 0x2d, 0x37, 0x1b, 0xc6, 0xba, 0xaf, 0x8c, 0x2a, 0xb7, 0x06, 0x54, 0x4e, 0xdd, 0x41, 0x6c, 0xae, - 0x3d, 0xd4, 0xc3, 0xbd, 0x7f, 0x5e, 0x80, 0x45, 0x73, 0x15, 0x76, 0x84, 0xe9, 0x29, 0xe9, 0x62, - 0x74, 0x06, 0xf3, 0xd9, 0x1b, 0x32, 0xb4, 0x9e, 0x96, 0x6e, 0xcc, 0x65, 0x5f, 0x73, 0x63, 0x92, - 0x59, 0x6d, 0xfb, 0xf6, 0xed, 0x3f, 0xfd, 0xfb, 0x3f, 0x7f, 0x9d, 0xb9, 0x6e, 0x6f, 0xc8, 0x4b, - 0xca, 0xd3, 0x8f, 0x77, 0xcd, 0x1d, 0x5a, 0xf2, 0xe3, 0xae, 0x78, 0xf7, 0x1f, 0x94, 0xee, 0xa0, - 0x1e, 0x40, 0x7a, 0x59, 0x86, 0x56, 0x33, 0x1a, 0x21, 0x7f, 0x85, 0xd6, 0x2c, 0xee, 0xbe, 0xf6, - 0x96, 0x24, 0xb2, 0xed, 0xf5, 0xc9, 0x44, 0x7d, 0x2c, 0x79, 0x42, 0x58, 0x18, 0xb9, 0x6f, 0x43, - 0x99, 0x39, 0x8c, 0xbb, 0x88, 0x1b, 0xc7, 0xb6, 0x2d, 0xd9, 0x36, 0xed, 0xd6, 0x64, 0x36, 0xb5, - 0x1b, 0x6b, 0xc2, 0x91, 0xab, 0xb9, 0x2c, 0xe1, 0xb8, 0x3b, 0xbb, 0x77, 0x24, 0x54, 0x5a, 0x48, - 0x10, 0x72, 0x58, 0x18, 0xb9, 0x89, 0xcb, 0x12, 0x8e, 0xbb, 0xa2, 0x6b, 0x5e, 0x2e, 0xb4, 0xe0, - 0x63, 0x3f, 0xe2, 0xc3, 0xb7, 0x61, 0x55, 0x87, 0xc5, 0x83, 0xd2, 0x9d, 0x7b, 0x7f, 0x99, 0x83, - 0x05, 0x25, 0x5f, 0x4d, 0x2f, 0x45, 0x00, 0xa9, 0xa6, 0xcd, 0xae, 0x68, 0x41, 0x9a, 0x37, 0xd7, - 0xc6, 0x1b, 0x75, 0x17, 0xdd, 0x92, 0x79, 0x5c, 0xb3, 0xd7, 0x0a, 0x79, 0x28, 0xf9, 0x9b, 0xf4, - 0xd0, 0x17, 0x50, 0x35, 0xf2, 0x16, 0xad, 0x8c, 0x74, 0x50, 0x56, 0x15, 0x36, 0xf3, 0x02, 0xd4, - 0xbe, 0x29, 0x09, 0x5a, 0xf6, 0xea, 0x24, 0x02, 0xdd, 0x3b, 0x7d, 0xa8, 0x67, 0xb4, 0x31, 0x5a, - 0xcb, 0x77, 0xce, 0xf9, 0x2c, 0x93, 0x5f, 0x06, 0xcd, 0x92, 0xf6, 0x4c, 0x1f, 0xea, 0x19, 0x1d, - 0x9d, 0x25, 0x2a, 0xca, 0xeb, 0x77, 0x20, 0x4a, 0x7b, 0x25, 0x80, 0x7a, 0x46, 0x36, 0x67, 0x89, - 0x8a, 0x6a, 0x7a, 0x62, 0x9f, 0x4c, 0xe5, 0x4b, 0xba, 0x04, 0xf9, 0x50, 0x4b, 0x04, 0x38, 0x6a, - 0x66, 0x1a, 0x3d, 0xa7, 0xca, 0x8b, 0x93, 0xfa, 0x44, 0x92, 0xdc, 0xb5, 0xb7, 0x0c, 0x89, 0x8a, - 0xbd, 0xfb, 0x8d, 0xd1, 0xda, 0x9f, 0xdd, 0xf9, 0x76, 0x57, 0xeb, 0xb5, 0xdd, 0x1b, 0x14, 0xf7, - 0x04, 0xdd, 0x77, 0x25, 0x98, 0xcf, 0x4a, 0xf4, 0xec, 0x7e, 0x36, 0x46, 0xba, 0x17, 0x59, 0x7f, - 0x23, 0x59, 0x1f, 0xd8, 0xf7, 0xdf, 0x86, 0xf5, 0x9b, 0x54, 0xdb, 0x7f, 0x9b, 0xa4, 0x30, 0x84, - 0x7a, 0x46, 0x10, 0xa3, 0x5c, 0xa7, 0x8f, 0x2a, 0xfd, 0xe6, 0xfa, 0x04, 0xab, 0x7e, 0x11, 0xee, - 0xca, 0x6c, 0x6e, 0xd9, 0x76, 0x3e, 0x9b, 0xb1, 0xb3, 0x7f, 0xd4, 0xf8, 0x23, 0x8a, 0x5e, 0xf7, - 0xd5, 0xbf, 0x70, 0x76, 0x4f, 0x3f, 0x7e, 0xa8, 0x96, 0x6d, 0x56, 0xfe, 0xf9, 0xe4, 0x7f, 0x01, - 0x00, 0x00, 0xff, 0xff, 0x52, 0x6c, 0xdb, 0xd1, 0x7a, 0x1a, 0x00, 0x00, -} diff --git a/accounts/pkg/proto/v0/accounts.pb.micro.go b/accounts/pkg/proto/v0/accounts.pb.micro.go deleted file mode 100644 index 2fd6dfd27f..0000000000 --- a/accounts/pkg/proto/v0/accounts.pb.micro.go +++ /dev/null @@ -1,553 +0,0 @@ -// Code generated by protoc-gen-micro. DO NOT EDIT. -// source: accounts.proto - -package proto - -import ( - fmt "fmt" - proto "github.com/golang/protobuf/proto" - empty "github.com/golang/protobuf/ptypes/empty" - _ "github.com/golang/protobuf/ptypes/timestamp" - _ "google.golang.org/genproto/googleapis/api/annotations" - _ "google.golang.org/genproto/protobuf/field_mask" - math "math" -) - -import ( - context "context" - api "github.com/micro/go-micro/v2/api" - client "github.com/micro/go-micro/v2/client" - server "github.com/micro/go-micro/v2/server" -) - -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf - -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package - -// Reference imports to suppress errors if they are not otherwise used. -var _ api.Endpoint -var _ context.Context -var _ client.Option -var _ server.Option - -// Api Endpoints for AccountsService service - -func NewAccountsServiceEndpoints() []*api.Endpoint { - return []*api.Endpoint{ - &api.Endpoint{ - Name: "AccountsService.ListAccounts", - Path: []string{"/api/v0/accounts/accounts-list"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "AccountsService.GetAccount", - Path: []string{"/api/v0/accounts/accounts-get"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "AccountsService.CreateAccount", - Path: []string{"/api/v0/accounts/accounts-create"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "AccountsService.UpdateAccount", - Path: []string{"/api/v0/accounts/accounts-update"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "AccountsService.DeleteAccount", - Path: []string{"/api/v0/accounts/accounts-delete"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - } -} - -// Client API for AccountsService service - -type AccountsService interface { - // Lists accounts - ListAccounts(ctx context.Context, in *ListAccountsRequest, opts ...client.CallOption) (*ListAccountsResponse, error) - // Gets an account - GetAccount(ctx context.Context, in *GetAccountRequest, opts ...client.CallOption) (*Account, error) - // Creates an account - CreateAccount(ctx context.Context, in *CreateAccountRequest, opts ...client.CallOption) (*Account, error) - // Updates an account - UpdateAccount(ctx context.Context, in *UpdateAccountRequest, opts ...client.CallOption) (*Account, error) - // Deletes an account - DeleteAccount(ctx context.Context, in *DeleteAccountRequest, opts ...client.CallOption) (*empty.Empty, error) -} - -type accountsService struct { - c client.Client - name string -} - -func NewAccountsService(name string, c client.Client) AccountsService { - return &accountsService{ - c: c, - name: name, - } -} - -func (c *accountsService) ListAccounts(ctx context.Context, in *ListAccountsRequest, opts ...client.CallOption) (*ListAccountsResponse, error) { - req := c.c.NewRequest(c.name, "AccountsService.ListAccounts", in) - out := new(ListAccountsResponse) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *accountsService) GetAccount(ctx context.Context, in *GetAccountRequest, opts ...client.CallOption) (*Account, error) { - req := c.c.NewRequest(c.name, "AccountsService.GetAccount", in) - out := new(Account) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *accountsService) CreateAccount(ctx context.Context, in *CreateAccountRequest, opts ...client.CallOption) (*Account, error) { - req := c.c.NewRequest(c.name, "AccountsService.CreateAccount", in) - out := new(Account) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *accountsService) UpdateAccount(ctx context.Context, in *UpdateAccountRequest, opts ...client.CallOption) (*Account, error) { - req := c.c.NewRequest(c.name, "AccountsService.UpdateAccount", in) - out := new(Account) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *accountsService) DeleteAccount(ctx context.Context, in *DeleteAccountRequest, opts ...client.CallOption) (*empty.Empty, error) { - req := c.c.NewRequest(c.name, "AccountsService.DeleteAccount", in) - out := new(empty.Empty) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for AccountsService service - -type AccountsServiceHandler interface { - // Lists accounts - ListAccounts(context.Context, *ListAccountsRequest, *ListAccountsResponse) error - // Gets an account - GetAccount(context.Context, *GetAccountRequest, *Account) error - // Creates an account - CreateAccount(context.Context, *CreateAccountRequest, *Account) error - // Updates an account - UpdateAccount(context.Context, *UpdateAccountRequest, *Account) error - // Deletes an account - DeleteAccount(context.Context, *DeleteAccountRequest, *empty.Empty) error -} - -func RegisterAccountsServiceHandler(s server.Server, hdlr AccountsServiceHandler, opts ...server.HandlerOption) error { - type accountsService interface { - ListAccounts(ctx context.Context, in *ListAccountsRequest, out *ListAccountsResponse) error - GetAccount(ctx context.Context, in *GetAccountRequest, out *Account) error - CreateAccount(ctx context.Context, in *CreateAccountRequest, out *Account) error - UpdateAccount(ctx context.Context, in *UpdateAccountRequest, out *Account) error - DeleteAccount(ctx context.Context, in *DeleteAccountRequest, out *empty.Empty) error - } - type AccountsService struct { - accountsService - } - h := &accountsServiceHandler{hdlr} - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "AccountsService.ListAccounts", - Path: []string{"/api/v0/accounts/accounts-list"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "AccountsService.GetAccount", - Path: []string{"/api/v0/accounts/accounts-get"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "AccountsService.CreateAccount", - Path: []string{"/api/v0/accounts/accounts-create"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "AccountsService.UpdateAccount", - Path: []string{"/api/v0/accounts/accounts-update"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "AccountsService.DeleteAccount", - Path: []string{"/api/v0/accounts/accounts-delete"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - return s.Handle(s.NewHandler(&AccountsService{h}, opts...)) -} - -type accountsServiceHandler struct { - AccountsServiceHandler -} - -func (h *accountsServiceHandler) ListAccounts(ctx context.Context, in *ListAccountsRequest, out *ListAccountsResponse) error { - return h.AccountsServiceHandler.ListAccounts(ctx, in, out) -} - -func (h *accountsServiceHandler) GetAccount(ctx context.Context, in *GetAccountRequest, out *Account) error { - return h.AccountsServiceHandler.GetAccount(ctx, in, out) -} - -func (h *accountsServiceHandler) CreateAccount(ctx context.Context, in *CreateAccountRequest, out *Account) error { - return h.AccountsServiceHandler.CreateAccount(ctx, in, out) -} - -func (h *accountsServiceHandler) UpdateAccount(ctx context.Context, in *UpdateAccountRequest, out *Account) error { - return h.AccountsServiceHandler.UpdateAccount(ctx, in, out) -} - -func (h *accountsServiceHandler) DeleteAccount(ctx context.Context, in *DeleteAccountRequest, out *empty.Empty) error { - return h.AccountsServiceHandler.DeleteAccount(ctx, in, out) -} - -// Api Endpoints for GroupsService service - -func NewGroupsServiceEndpoints() []*api.Endpoint { - return []*api.Endpoint{ - &api.Endpoint{ - Name: "GroupsService.ListGroups", - Path: []string{"/api/v0/accounts/groups-list"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.GetGroup", - Path: []string{"/api/v0/accounts/groups-get"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.CreateGroup", - Path: []string{"/api/v0/accounts/groups-create"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.UpdateGroup", - Path: []string{"/api/v0/accounts/groups-update"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.DeleteGroup", - Path: []string{"/api/v0/accounts/groups-delete"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.AddMember", - Path: []string{"/api/v0/groups/{group_id=*}/members/$ref"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.RemoveMember", - Path: []string{"/api/v0/groups/{group_id=*}/members/{account_id}/$ref"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - &api.Endpoint{ - Name: "GroupsService.ListMembers", - Path: []string{"/api/v0/groups/{id=*}/members/$ref"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - }, - } -} - -// Client API for GroupsService service - -type GroupsService interface { - // Lists groups - ListGroups(ctx context.Context, in *ListGroupsRequest, opts ...client.CallOption) (*ListGroupsResponse, error) - // Gets an groups - GetGroup(ctx context.Context, in *GetGroupRequest, opts ...client.CallOption) (*Group, error) - // Creates a group - CreateGroup(ctx context.Context, in *CreateGroupRequest, opts ...client.CallOption) (*Group, error) - // Updates a group - UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...client.CallOption) (*Group, error) - // Deletes a group - DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...client.CallOption) (*empty.Empty, error) - // group:addmember https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http - AddMember(ctx context.Context, in *AddMemberRequest, opts ...client.CallOption) (*Group, error) - // group:removemember https://docs.microsoft.com/en-us/graph/api/group-delete-members?view=graph-rest-1.0 - RemoveMember(ctx context.Context, in *RemoveMemberRequest, opts ...client.CallOption) (*Group, error) - // group:listmembers https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0 - ListMembers(ctx context.Context, in *ListMembersRequest, opts ...client.CallOption) (*ListMembersResponse, error) -} - -type groupsService struct { - c client.Client - name string -} - -func NewGroupsService(name string, c client.Client) GroupsService { - return &groupsService{ - c: c, - name: name, - } -} - -func (c *groupsService) ListGroups(ctx context.Context, in *ListGroupsRequest, opts ...client.CallOption) (*ListGroupsResponse, error) { - req := c.c.NewRequest(c.name, "GroupsService.ListGroups", in) - out := new(ListGroupsResponse) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) GetGroup(ctx context.Context, in *GetGroupRequest, opts ...client.CallOption) (*Group, error) { - req := c.c.NewRequest(c.name, "GroupsService.GetGroup", in) - out := new(Group) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) CreateGroup(ctx context.Context, in *CreateGroupRequest, opts ...client.CallOption) (*Group, error) { - req := c.c.NewRequest(c.name, "GroupsService.CreateGroup", in) - out := new(Group) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) UpdateGroup(ctx context.Context, in *UpdateGroupRequest, opts ...client.CallOption) (*Group, error) { - req := c.c.NewRequest(c.name, "GroupsService.UpdateGroup", in) - out := new(Group) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) DeleteGroup(ctx context.Context, in *DeleteGroupRequest, opts ...client.CallOption) (*empty.Empty, error) { - req := c.c.NewRequest(c.name, "GroupsService.DeleteGroup", in) - out := new(empty.Empty) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) AddMember(ctx context.Context, in *AddMemberRequest, opts ...client.CallOption) (*Group, error) { - req := c.c.NewRequest(c.name, "GroupsService.AddMember", in) - out := new(Group) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) RemoveMember(ctx context.Context, in *RemoveMemberRequest, opts ...client.CallOption) (*Group, error) { - req := c.c.NewRequest(c.name, "GroupsService.RemoveMember", in) - out := new(Group) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *groupsService) ListMembers(ctx context.Context, in *ListMembersRequest, opts ...client.CallOption) (*ListMembersResponse, error) { - req := c.c.NewRequest(c.name, "GroupsService.ListMembers", in) - out := new(ListMembersResponse) - err := c.c.Call(ctx, req, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -// Server API for GroupsService service - -type GroupsServiceHandler interface { - // Lists groups - ListGroups(context.Context, *ListGroupsRequest, *ListGroupsResponse) error - // Gets an groups - GetGroup(context.Context, *GetGroupRequest, *Group) error - // Creates a group - CreateGroup(context.Context, *CreateGroupRequest, *Group) error - // Updates a group - UpdateGroup(context.Context, *UpdateGroupRequest, *Group) error - // Deletes a group - DeleteGroup(context.Context, *DeleteGroupRequest, *empty.Empty) error - // group:addmember https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http - AddMember(context.Context, *AddMemberRequest, *Group) error - // group:removemember https://docs.microsoft.com/en-us/graph/api/group-delete-members?view=graph-rest-1.0 - RemoveMember(context.Context, *RemoveMemberRequest, *Group) error - // group:listmembers https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0 - ListMembers(context.Context, *ListMembersRequest, *ListMembersResponse) error -} - -func RegisterGroupsServiceHandler(s server.Server, hdlr GroupsServiceHandler, opts ...server.HandlerOption) error { - type groupsService interface { - ListGroups(ctx context.Context, in *ListGroupsRequest, out *ListGroupsResponse) error - GetGroup(ctx context.Context, in *GetGroupRequest, out *Group) error - CreateGroup(ctx context.Context, in *CreateGroupRequest, out *Group) error - UpdateGroup(ctx context.Context, in *UpdateGroupRequest, out *Group) error - DeleteGroup(ctx context.Context, in *DeleteGroupRequest, out *empty.Empty) error - AddMember(ctx context.Context, in *AddMemberRequest, out *Group) error - RemoveMember(ctx context.Context, in *RemoveMemberRequest, out *Group) error - ListMembers(ctx context.Context, in *ListMembersRequest, out *ListMembersResponse) error - } - type GroupsService struct { - groupsService - } - h := &groupsServiceHandler{hdlr} - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.ListGroups", - Path: []string{"/api/v0/accounts/groups-list"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.GetGroup", - Path: []string{"/api/v0/accounts/groups-get"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.CreateGroup", - Path: []string{"/api/v0/accounts/groups-create"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.UpdateGroup", - Path: []string{"/api/v0/accounts/groups-update"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.DeleteGroup", - Path: []string{"/api/v0/accounts/groups-delete"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.AddMember", - Path: []string{"/api/v0/groups/{group_id=*}/members/$ref"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.RemoveMember", - Path: []string{"/api/v0/groups/{group_id=*}/members/{account_id}/$ref"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - opts = append(opts, api.WithEndpoint(&api.Endpoint{ - Name: "GroupsService.ListMembers", - Path: []string{"/api/v0/groups/{id=*}/members/$ref"}, - Method: []string{"POST"}, - Body: "*", - Handler: "rpc", - })) - return s.Handle(s.NewHandler(&GroupsService{h}, opts...)) -} - -type groupsServiceHandler struct { - GroupsServiceHandler -} - -func (h *groupsServiceHandler) ListGroups(ctx context.Context, in *ListGroupsRequest, out *ListGroupsResponse) error { - return h.GroupsServiceHandler.ListGroups(ctx, in, out) -} - -func (h *groupsServiceHandler) GetGroup(ctx context.Context, in *GetGroupRequest, out *Group) error { - return h.GroupsServiceHandler.GetGroup(ctx, in, out) -} - -func (h *groupsServiceHandler) CreateGroup(ctx context.Context, in *CreateGroupRequest, out *Group) error { - return h.GroupsServiceHandler.CreateGroup(ctx, in, out) -} - -func (h *groupsServiceHandler) UpdateGroup(ctx context.Context, in *UpdateGroupRequest, out *Group) error { - return h.GroupsServiceHandler.UpdateGroup(ctx, in, out) -} - -func (h *groupsServiceHandler) DeleteGroup(ctx context.Context, in *DeleteGroupRequest, out *empty.Empty) error { - return h.GroupsServiceHandler.DeleteGroup(ctx, in, out) -} - -func (h *groupsServiceHandler) AddMember(ctx context.Context, in *AddMemberRequest, out *Group) error { - return h.GroupsServiceHandler.AddMember(ctx, in, out) -} - -func (h *groupsServiceHandler) RemoveMember(ctx context.Context, in *RemoveMemberRequest, out *Group) error { - return h.GroupsServiceHandler.RemoveMember(ctx, in, out) -} - -func (h *groupsServiceHandler) ListMembers(ctx context.Context, in *ListMembersRequest, out *ListMembersResponse) error { - return h.GroupsServiceHandler.ListMembers(ctx, in, out) -} diff --git a/accounts/pkg/proto/v0/accounts.pb.micro_test.go b/accounts/pkg/proto/v0/accounts.pb.micro_test.go deleted file mode 100644 index 02775d65da..0000000000 --- a/accounts/pkg/proto/v0/accounts.pb.micro_test.go +++ /dev/null @@ -1,1162 +0,0 @@ -package proto_test - -import ( - "context" - "errors" - "fmt" - "log" - "os" - "path/filepath" - "testing" - - "github.com/golang/protobuf/ptypes/empty" - "github.com/micro/go-micro/v2/client" - merrors "github.com/micro/go-micro/v2/errors" - "github.com/owncloud/ocis/accounts/pkg/command" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/proto/v0" - svc "github.com/owncloud/ocis/accounts/pkg/service/v0" - "github.com/owncloud/ocis/ocis-pkg/service/grpc" - settings "github.com/owncloud/ocis/settings/pkg/proto/v0" - "github.com/stretchr/testify/assert" - "google.golang.org/genproto/protobuf/field_mask" - "google.golang.org/protobuf/types/known/timestamppb" -) - -var service = grpc.Service{} - -const dataPath = "./accounts-store" - -var newCreatedAccounts = []string{} -var newCreatedGroups = []string{} - -var mockedRoleAssignment = map[string]string{} - -func getAccount(user string) *proto.Account { - switch user { - case "user1": - return &proto.Account{ - Id: "f9149a32-2b8e-4f04-9e8d-937d81712b9a", - AccountEnabled: true, - IsResourceAccount: true, - CreationType: "", - DisplayName: "User One", - PreferredName: "user1", - OnPremisesSamAccountName: "user1", - UidNumber: 20009, - GidNumber: 30000, - Mail: "user1@example.com", - Identities: []*proto.Identities{nil}, - PasswordProfile: &proto.PasswordProfile{Password: "heysdjfsdlk"}, - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, // users - }, - } - case "user2": - return &proto.Account{ - Id: "e9149a32-2b8e-4f04-9e8d-937d81712b9a", - AccountEnabled: true, - IsResourceAccount: true, - CreationType: "", - DisplayName: "User Two", - PreferredName: "user2", - OnPremisesSamAccountName: "user2", - UidNumber: 20009, - GidNumber: 30000, - Mail: "user2@example.com", - Identities: []*proto.Identities{nil}, - PasswordProfile: &proto.PasswordProfile{Password: "hello123"}, - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, // users - }, - } - default: - return &proto.Account{ - Id: fmt.Sprintf("new-id-%s", user), - AccountEnabled: true, - IsResourceAccount: true, - CreationType: "", - DisplayName: "Regular User", - PreferredName: user, - UidNumber: 2, - Mail: fmt.Sprintf("%s@example.com", user), - Identities: []*proto.Identities{nil}, - } - } -} - -func getGroup(group string) *proto.Group { - switch group { - case "sysusers": - return &proto.Group{Id: "34f38767-c937-4eb6-b847-1c175829a2a0", GidNumber: 15000, OnPremisesSamAccountName: "sysusers", DisplayName: "Technical users", Description: "A group for technical users. They should not show up in sharing dialogs.", Members: []*proto.Account{ - {Id: "820ba2a1-3f54-4538-80a4-2d73007e30bf"}, // konnectd - {Id: "bc596f3c-c955-4328-80a0-60d018b4ad57"}, // reva - }} - case "users": - return &proto.Group{Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa", GidNumber: 30000, OnPremisesSamAccountName: "users", DisplayName: "Users", Description: "A group every normal user belongs to.", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - case "sailing-lovers": - return &proto.Group{Id: "6040aa17-9c64-4fef-9bd0-77234d71bad0", GidNumber: 30001, OnPremisesSamAccountName: "sailing-lovers", DisplayName: "Sailing lovers", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - }} - case "violin-haters": - return &proto.Group{Id: "dd58e5ec-842e-498b-8800-61f2ec6f911f", GidNumber: 30002, OnPremisesSamAccountName: "violin-haters", DisplayName: "Violin haters", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - }} - case "radium-lovers": - return &proto.Group{Id: "7b87fd49-286e-4a5f-bafd-c535d5dd997a", GidNumber: 30003, OnPremisesSamAccountName: "radium-lovers", DisplayName: "Radium lovers", Members: []*proto.Account{ - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - }} - case "polonium-lovers": - return &proto.Group{Id: "cedc21aa-4072-4614-8676-fa9165f598ff", GidNumber: 30004, OnPremisesSamAccountName: "polonium-lovers", DisplayName: "Polonium lovers", Members: []*proto.Account{ - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - }} - case "quantum-lovers": - return &proto.Group{Id: "a1726108-01f8-4c30-88df-2b1a9d1cba1a", GidNumber: 30005, OnPremisesSamAccountName: "quantum-lovers", DisplayName: "Quantum lovers", Members: []*proto.Account{ - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - case "philosophy-haters": - return &proto.Group{Id: "167cbee2-0518-455a-bfb2-031fe0621e5d", GidNumber: 30006, OnPremisesSamAccountName: "philosophy-haters", DisplayName: "Philosophy haters", Members: []*proto.Account{ - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - case "physics-lovers": - return &proto.Group{Id: "262982c1-2362-4afa-bfdf-8cbfef64a06e", GidNumber: 30007, OnPremisesSamAccountName: "physics-lovers", DisplayName: "Physics lovers", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - } - return nil -} - -func getTestGroups(group string) *proto.Group { - switch group { - case "grp1": - return &proto.Group{Id: "0779f828-4df8-41d6-82dd-40020d9fd0ef", GidNumber: 40000, OnPremisesSamAccountName: "grp1", DisplayName: "Group One", Description: "One group", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - }} - case "grp2": - return &proto.Group{Id: "f446fb0a-5e57-4812-9f47-9c1ebca99b5a", GidNumber: 40001, OnPremisesSamAccountName: "grp2", DisplayName: "Group Two", Description: "Two Group", Members: []*proto.Account{ - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - case "grp3": - return &proto.Group{Id: "cae8b5d5-d133-4d95-8595-fe33a5051017", GidNumber: 40002, OnPremisesSamAccountName: "grp3", DisplayName: "Group Three", Description: "Three Group", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - } - return nil -} - -func init() { - service = grpc.NewService( - grpc.Namespace("com.owncloud.api"), - grpc.Name("accounts"), - grpc.Address("localhost:9180"), - ) - - cfg := config.New() - cfg.Server.AccountsDataPath = dataPath - var hdlr *svc.Service - var err error - - if hdlr, err = svc.New(svc.Logger(command.NewLogger(cfg)), svc.Config(cfg), svc.RoleService(buildRoleServiceMock())); err != nil { - log.Fatalf("Could not create new service") - } - - err = proto.RegisterAccountsServiceHandler(service.Server(), hdlr) - if err != nil { - log.Fatal("could not register the Accounts handler") - } - err = proto.RegisterGroupsServiceHandler(service.Server(), hdlr) - if err != nil { - log.Fatal("could not register the Groups handler") - } - - err = service.Server().Start() - if err != nil { - log.Fatal(err) - } -} - -func buildRoleServiceMock() settings.RoleService { - return settings.MockRoleService{ - AssignRoleToUserFunc: func(ctx context.Context, req *settings.AssignRoleToUserRequest, opts ...client.CallOption) (res *settings.AssignRoleToUserResponse, err error) { - mockedRoleAssignment[req.AccountUuid] = req.RoleId - return &settings.AssignRoleToUserResponse{ - Assignment: &settings.UserRoleAssignment{ - AccountUuid: req.AccountUuid, - RoleId: req.RoleId, - }, - }, nil - }, - } -} - -func cleanUp(t *testing.T) { - datastore := filepath.Join(dataPath, "accounts") - - for _, id := range newCreatedAccounts { - path := filepath.Join(datastore, id) - if _, err := os.Stat(path); os.IsNotExist(err) { - continue - } - _, err := deleteAccount(t, id) - checkNoError(t, err) - } - - datastore = filepath.Join(dataPath, "groups") - - for _, id := range newCreatedGroups { - path := filepath.Join(datastore, id) - if _, err := os.Stat(path); os.IsNotExist(err) { - continue - } - _, err := deleteGroup(t, id) - checkNoError(t, err) - } - - newCreatedAccounts = []string{} - newCreatedGroups = []string{} -} - -func assertUserExists(t *testing.T, account *proto.Account) { - resp, _ := listAccounts(t) - assertResponseContainsUser(t, resp, account) -} - -func assertResponseContainsUser(t *testing.T, response *proto.ListAccountsResponse, account *proto.Account) { - var result *proto.Account - for _, a := range response.Accounts { - if a.Id == account.Id { - result = account - } - } - if result == nil { - t.Fatalf("Account not found in response: %s", account.PreferredName) - } - assertAccountsSame(t, account, result) -} - -func assertResponseNotContainsUser(t *testing.T, response *proto.ListAccountsResponse, account *proto.Account) { - for _, a := range response.Accounts { - if a.Id == account.Id || a.PreferredName == account.PreferredName { - t.Fatal("Account was not expected to be present in the response, but was found.") - } - } -} - -func assertAccountsSame(t *testing.T, acc1, acc2 *proto.Account) { - assert.Equal(t, acc1.Id, acc2.Id) - assert.Equal(t, acc1.AccountEnabled, acc2.AccountEnabled) - assert.Equal(t, acc1.IsResourceAccount, acc2.IsResourceAccount) - assert.Equal(t, acc1.CreationType, acc2.CreationType) - assert.Equal(t, acc1.DisplayName, acc2.DisplayName) - assert.Equal(t, acc1.PreferredName, acc2.PreferredName) - assert.Equal(t, acc1.UidNumber, acc2.UidNumber) - assert.Equal(t, acc1.OnPremisesSamAccountName, acc2.OnPremisesSamAccountName) - assert.Equal(t, acc1.GidNumber, acc2.GidNumber) - assert.Equal(t, acc1.Mail, acc2.Mail) -} - -func assertResponseContainsGroup(t *testing.T, response *proto.ListGroupsResponse, group *proto.Group) { - var result *proto.Group - for _, g := range response.Groups { - if g.Id == group.Id { - result = g - } - } - if result == nil { - t.Fatalf("Group not found in response: %s", group.GetDisplayName()) - } - assertGroupsSame(t, group, result) -} - -func assertResponseNotContainsGroup(t *testing.T, response *proto.ListGroupsResponse, group *proto.Group) { - for _, g := range response.Groups { - if g.Id == group.Id && g.DisplayName == group.DisplayName { - t.Fatal("Group was not expected to be present in the response, but was found.") - } - } -} - -func assertGroupsSame(t *testing.T, grp1, grp2 *proto.Group) { - assert.Equal(t, grp1.Id, grp2.Id) - assert.Equal(t, grp1.GidNumber, grp2.GidNumber) - assert.Equal(t, grp1.OnPremisesSamAccountName, grp2.OnPremisesSamAccountName) - assert.Equal(t, grp1.DisplayName, grp2.DisplayName) - - assert.Equal(t, len(grp1.Members), len(grp2.Members)) - for _, m := range grp1.Members { - assertGroupHasMember(t, grp2, m.Id) - } -} - -func assertGroupHasMember(t *testing.T, grp *proto.Group, memberId string) { - for _, m := range grp.Members { - if m.Id == memberId { - return - } - } - - t.Fatalf("Member with id %s expected to be in group '%s', but not found", memberId, grp.DisplayName) -} - -func checkNoError(t *testing.T, err error) { - if err != nil { - t.Fatalf("Expected Error to be nil but got %s", err) - } -} - -func createAccount(t *testing.T, user string) (*proto.Account, error) { - client := service.Client() - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - - account := getAccount(user) - request := &proto.CreateAccountRequest{Account: account} - res, err := cl.CreateAccount(context.Background(), request) - if err == nil { - newCreatedAccounts = append(newCreatedAccounts, account.Id) - } - return res, err -} - -func createGroup(t *testing.T, group *proto.Group) (*proto.Group, error) { - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - request := &proto.CreateGroupRequest{Group: group} - res, err := cl.CreateGroup(context.Background(), request) - if err == nil { - newCreatedGroups = append(newCreatedGroups, group.Id) - } - return res, err -} - -func updateAccount(t *testing.T, account *proto.Account, updateArray []string) (*proto.Account, error) { - client := service.Client() - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - - updateMask := &field_mask.FieldMask{ - Paths: updateArray, - } - request := &proto.UpdateAccountRequest{Account: account, UpdateMask: updateMask} - res, err := cl.UpdateAccount(context.Background(), request) - - return res, err -} - -func listAccounts(t *testing.T) (*proto.ListAccountsResponse, error) { - request := &proto.ListAccountsRequest{} - client := service.Client() - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - - response, err := cl.ListAccounts(context.Background(), request) - return response, err -} - -func listGroups(t *testing.T) *proto.ListGroupsResponse { - request := &proto.ListGroupsRequest{} - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - response, err := cl.ListGroups(context.Background(), request) - checkNoError(t, err) - return response -} - -func deleteAccount(t *testing.T, id string) (*empty.Empty, error) { - client := service.Client() - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - - req := &proto.DeleteAccountRequest{Id: id} - res, err := cl.DeleteAccount(context.Background(), req) - return res, err -} - -func deleteGroup(t *testing.T, id string) (*empty.Empty, error) { - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.DeleteGroupRequest{Id: id} - res, err := cl.DeleteGroup(context.Background(), req) - return res, err -} - -// https://github.com/owncloud/ocis/accounts/issues/61 -func TestCreateAccount(t *testing.T) { - - resp, err := createAccount(t, "user1") - checkNoError(t, err) - assertUserExists(t, getAccount("user1")) - assert.IsType(t, &proto.Account{}, resp) - // Account is not returned in response - // assertAccountsSame(t, getAccount("user1"), resp) - - resp, err = createAccount(t, "user2") - checkNoError(t, err) - assertUserExists(t, getAccount("user2")) - assert.IsType(t, &proto.Account{}, resp) - // Account is not returned in response - // assertAccountsSame(t, getAccount("user2"), resp) - - cleanUp(t) -} - -func TestCreateExistingUser(t *testing.T) { - createAccount(t, "user1") - res, err := createAccount(t, "user1") - - assert.Empty(t, res) - assert.Error(t, err) - assert.Equal(t, merrors.BadRequest(".", "account already exists"), err) - - cleanUp(t) -} - -// All tests fail after running this -// https://github.com/owncloud/ocis/accounts/issues/62 -func TestCreateAccountInvalidUserName(t *testing.T) { - - resp, err := listAccounts(t) - checkNoError(t, err) - numAccounts := len(resp.GetAccounts()) - - testData := []string{ - "", - "0", - "#&@#", - ".._$%203", - } - - for _, userName := range testData { - _, err := createAccount(t, userName) - - // Should give error - if err == nil { - t.Fatalf("Expected an Error when creating user '%s' but got nil", userName) - } - } - - // resp should have the same number of accounts - resp, err = listAccounts(t) - checkNoError(t, err) - - assert.Equal(t, numAccounts, len(resp.GetAccounts())) - - cleanUp(t) -} - -func TestUpdateAccount(t *testing.T) { - _, _ = createAccount(t, "user1") - - tests := []struct { - name string - userAccount *proto.Account - }{ - { - "Update user (demonstration of updatable fields)", - &proto.Account{ - DisplayName: "Alice Hansen", - PreferredName: "Wonderful Alice", - OnPremisesDistinguishedName: "Alice", - UidNumber: 20010, - GidNumber: 30001, - Mail: "alice@example.com", - }, - }, - { - "Update user with unicode data", - &proto.Account{ - DisplayName: "एलिस हेन्सेन", - PreferredName: "अद्भुत एलिस", - OnPremisesDistinguishedName: "एलिस", - UidNumber: 20010, - GidNumber: 30001, - Mail: "एलिस@उदाहरण.com", - }, - }, - { - "Update user with empty data values", - &proto.Account{ - DisplayName: "", - PreferredName: "", - OnPremisesDistinguishedName: "", - UidNumber: 0, - GidNumber: 0, - Mail: "", - }, - }, - { - "Update user with strange data", - &proto.Account{ - DisplayName: "12345", - PreferredName: "12345", - OnPremisesDistinguishedName: "54321", - UidNumber: 1000, - GidNumber: 1000, - // No email validation - // https://github.com/owncloud/ocis/accounts/issues/77 - Mail: "1.2@3.c_@", - }, - }, - } - - for _, tt := range tests { - // updatable fields for type Account - updateMask := []string{ - "AccountEnabled", - "IsResourceAccount", - "DisplayName", - "PreferredName", - "OnPremisesSamAccountName", - "UidNumber", - "GidNumber", - "Mail", - } - - t.Run(tt.name, func(t *testing.T) { - tt.userAccount.Id = "f9149a32-2b8e-4f04-9e8d-937d81712b9a" - tt.userAccount.AccountEnabled = false - tt.userAccount.IsResourceAccount = false - resp, err := updateAccount(t, tt.userAccount, updateMask) - - checkNoError(t, err) - - assert.IsType(t, &proto.Account{}, resp) - assertAccountsSame(t, tt.userAccount, resp) - assertUserExists(t, tt.userAccount) - }) - } - - cleanUp(t) -} - -func TestUpdateNonUpdatableFieldsInAccount(t *testing.T) { - _, _ = createAccount(t, "user1") - - tests := []struct { - name string - updateMask []string - userAccount *proto.Account - }{ - { - "Try to update creation type", - []string{ - "CreationType", - }, - &proto.Account{ - CreationType: "Type Test", - }, - }, - { - "Try to update password profile", - []string{ - "PasswordProfile", - }, - &proto.Account{ - PasswordProfile: &proto.PasswordProfile{Password: "new password"}, - }, - }, - { - "Try to update member of", - []string{ - "MemberOf", - }, - &proto.Account{ - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, - }, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - tt.userAccount.Id = "f9149a32-2b8e-4f04-9e8d-937d81712b9a" - res, err := updateAccount(t, tt.userAccount, tt.updateMask) - if err == nil { - t.Fatalf("Expected error while updating non updatable field, but found none.") - } - assert.IsType(t, &proto.Account{}, res) - assert.Empty(t, res) - assert.Error(t, err) - - var e *merrors.Error - - if errors.As(err, &e) { - assert.EqualValues(t, 400, e.Code) - assert.Equal(t, "Bad Request", e.Status) - - errMsg := fmt.Sprintf("can not update field %s, either unknown or readonly", tt.updateMask[0]) - assert.Equal(t, errMsg, e.Detail) - } else { - t.Fatal("Expected merror errors but found something else.") - } - }) - } -} - -func TestListAccounts(t *testing.T) { - createAccount(t, "user1") - createAccount(t, "user2") - - resp, err := listAccounts(t) - checkNoError(t, err) - - assert.IsType(t, &proto.ListAccountsResponse{}, resp) - assert.Equal(t, 8, len(resp.Accounts)) - - assertResponseContainsUser(t, resp, getAccount("user1")) - assertResponseContainsUser(t, resp, getAccount("user2")) - - cleanUp(t) -} - -func TestListWithoutUserCreation(t *testing.T) { - resp, err := listAccounts(t) - - checkNoError(t, err) - - // Only 5 default users - assert.Equal(t, 6, len(resp.Accounts)) - cleanUp(t) -} - -func TestGetAccount(t *testing.T) { - createAccount(t, "user1") - - req := &proto.GetAccountRequest{Id: getAccount("user1").Id} - - client := service.Client() - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - - resp, err := cl.GetAccount(context.Background(), req) - - checkNoError(t, err) - assert.IsType(t, &proto.Account{}, resp) - assertAccountsSame(t, getAccount("user1"), resp) - - cleanUp(t) -} - -func TestDeleteAccount(t *testing.T) { - createAccount(t, "user1") - createAccount(t, "user2") - - req := &proto.DeleteAccountRequest{Id: getAccount("user1").Id} - - client := service.Client() - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - - resp, err := cl.DeleteAccount(context.Background(), req) - checkNoError(t, err) - assert.IsType(t, resp, &empty.Empty{}) - - // Check the account doesn't exists anymore - accountList, _ := listAccounts(t) - assertResponseContainsUser(t, accountList, getAccount("user2")) - assertResponseNotContainsUser(t, accountList, getAccount("user1")) - - cleanUp(t) -} - -func TestListGroups(t *testing.T) { - req := &proto.ListGroupsRequest{} - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - resp, err := cl.ListGroups(context.Background(), req) - checkNoError(t, err) - assert.IsType(t, &proto.ListGroupsResponse{}, resp) - assert.Equal(t, len(resp.Groups), 9) - - groups := []string{ - "sysusers", - "users", - "sailing-lovers", - "violin-haters", - "radium-lovers", - "polonium-lovers", - "quantum-lovers", - "philosophy-haters", - "physics-lovers", - } - - for _, g := range groups { - assertResponseContainsGroup(t, resp, getGroup(g)) - } - cleanUp(t) -} - -func TestGetGroups(t *testing.T) { - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - groups := []string{ - "sysusers", - "users", - "sailing-lovers", - "violin-haters", - "radium-lovers", - "polonium-lovers", - "quantum-lovers", - "philosophy-haters", - "physics-lovers", - } - - for _, g := range groups { - group := getGroup(g) - req := &proto.GetGroupRequest{Id: group.Id} - resp, err := cl.GetGroup(context.Background(), req) - - checkNoError(t, err) - assert.IsType(t, &proto.Group{}, resp) - assertGroupsSame(t, group, resp) - } - cleanUp(t) -} - -// https://github.com/owncloud/ocis/accounts/issues/61 -func TestCreateGroup(t *testing.T) { - group := &proto.Group{Id: "2d58e5ec-842e-498b-8800-61f2ec6f911f", GidNumber: 30042, OnPremisesSamAccountName: "quantum-group", DisplayName: "Quantum Group", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }} - - res, err := createGroup(t, group) - checkNoError(t, err) - - assert.IsType(t, &proto.Group{}, res) - - // Should return the group but does not - // assertGroupsSame(t, res, group) - - groupsResponse := listGroups(t) - assertResponseContainsGroup(t, groupsResponse, group) - cleanUp(t) -} - -func TestGetGroupInvalidID(t *testing.T) { - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.GetGroupRequest{Id: "42"} - resp, err := cl.GetGroup(context.Background(), req) - - assert.IsType(t, &proto.Group{}, resp) - assert.Empty(t, resp) - assert.Error(t, err) - assert.Equal(t, merrors.NotFound(".", "could not read group: open accounts-store/groups/42: no such file or directory"), err) - cleanUp(t) -} - -func TestDeleteGroup(t *testing.T) { - grp1 := getTestGroups("grp1") - grp2 := getTestGroups("grp2") - grp3 := getTestGroups("grp3") - createGroup(t, grp1) - createGroup(t, grp2) - createGroup(t, grp3) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.DeleteGroupRequest{Id: grp1.Id} - res, err := cl.DeleteGroup(context.Background(), req) - assert.IsType(t, res, &empty.Empty{}) - checkNoError(t, err) - - req = &proto.DeleteGroupRequest{Id: grp2.Id} - res, err = cl.DeleteGroup(context.Background(), req) - assert.IsType(t, res, &empty.Empty{}) - checkNoError(t, err) - - groupsResponse := listGroups(t) - assertResponseNotContainsGroup(t, groupsResponse, grp1) - assertResponseNotContainsGroup(t, groupsResponse, grp2) - assertResponseContainsGroup(t, groupsResponse, grp3) - cleanUp(t) -} - -func TestDeleteGroupNotExisting(t *testing.T) { - invalidIds := []string{ - "$@dsfd", - "42", - "happyString", - "0ed84f08-aa0a-46e4-8e42-f0a5d6e1b059", - " ", - } - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - for _, id := range invalidIds { - req := &proto.DeleteGroupRequest{Id: id} - res, err := cl.DeleteGroup(context.Background(), req) - assert.IsType(t, &empty.Empty{}, res) - assert.Empty(t, res) - assert.Error(t, err) - assert.Equal(t, merrors.NotFound(".", "could not read group: open accounts-store/groups/%v: no such file or directory", id), err) - } - cleanUp(t) -} - -func TestDeleteGroupInvalidId(t *testing.T) { - invalidIds := map[string]string{ - ".": ".", - "hello/world": "hello/world", - "/new-id": "/new-id", - "/new-id/": "/new-id", - "/0ed84f08-aa0a-46e4-8e42-f0a5d6e1b059": "/0ed84f08-aa0a-46e4-8e42-f0a5d6e1b059", - "": ".", - } - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - for id, val := range invalidIds { - req := &proto.DeleteGroupRequest{Id: id} - res, err := cl.DeleteGroup(context.Background(), req) - assert.IsType(t, &empty.Empty{}, res) - assert.Empty(t, res) - assert.Error(t, err) - assert.Equal(t, merrors.InternalServerError(".", "could not clean up group id: invalid id %v", val), err) - } - cleanUp(t) -} - -func TestUpdateGroup(t *testing.T) { - grp1 := getTestGroups("grp1") - createGroup(t, grp1) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - updateGrp := &proto.Group{ - Id: grp1.Id, - } - - req := &proto.UpdateGroupRequest{Group: updateGrp} - - res, err := cl.UpdateGroup(context.Background(), req) - - assert.IsType(t, &proto.Group{}, res) - assert.Empty(t, res) - assert.Error(t, err) - assert.Equal(t, merrors.InternalServerError(".", "not implemented"), err) - cleanUp(t) -} - -// https://github.com/owncloud/ocis/accounts/issues/61 -func TestAddMember(t *testing.T) { - grp1 := getTestGroups("grp1") - account := getAccount("user1") - - updatedGroup := grp1 - updatedGroup.Members = append(updatedGroup.Members, &proto.Account{Id: account.Id}) - - createGroup(t, grp1) - createAccount(t, account.PreferredName) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.AddMemberRequest{GroupId: grp1.Id, AccountId: account.Id} - - res, err := cl.AddMember(context.Background(), req) - checkNoError(t, err) - - assert.IsType(t, &proto.Group{}, res) - - // Should return the group but returns empty - // assertGroupsSame(t, updatedGroup, res) - - resp := listGroups(t) - assertResponseContainsGroup(t, resp, updatedGroup) - - cleanUp(t) -} - -// https://github.com/owncloud/ocis/accounts/issues/62 -func TestAddMemberAlreadyInGroup(t *testing.T) { - grp1 := getTestGroups("grp1") - account := getAccount("user1") - - updatedGroup := grp1 - updatedGroup.Members = append(updatedGroup.Members, &proto.Account{Id: account.Id}) - - createGroup(t, grp1) - createAccount(t, account.PreferredName) - - addMemberToGroup(t, grp1.Id, account.Id) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.AddMemberRequest{GroupId: grp1.Id, AccountId: account.Id} - - res, err := cl.AddMember(context.Background(), req) - - // Should Give Error - checkNoError(t, err) - assert.IsType(t, &proto.Group{}, res) - //assert.Equal(t, proto.Group{}, *res) - //assertGroupsSame(t, updatedGroup, res) - - // Check the group is truly updated - resp := listGroups(t) - assertResponseContainsGroup(t, resp, updatedGroup) - - cleanUp(t) -} - -func TestAddMemberNonExisting(t *testing.T) { - grp1 := getTestGroups("grp1") - - createGroup(t, grp1) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - invalidIds := []string{ - "$@dsfd", - "42", - "happyString", - "0ed84f08-aa0a-46e4-8e42-f0a5d6e1b059", - " ", - } - - for _, id := range invalidIds { - req := &proto.AddMemberRequest{GroupId: grp1.Id, AccountId: id} - - res, err := cl.AddMember(context.Background(), req) - assert.IsType(t, &proto.Group{}, res) - assert.Empty(t, res) - assert.Error(t, err) - assert.Equal(t, merrors.NotFound(".", "could not read account: open accounts-store/accounts/%v: no such file or directory", id), err) - } - - // Check group is not changed - resp := listGroups(t) - assertResponseContainsGroup(t, resp, grp1) - - cleanUp(t) -} - -func addMemberToGroup(t *testing.T, groupId, memberId string) (*proto.Group, error) { - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.AddMemberRequest{GroupId: groupId, AccountId: memberId} - - res, err := cl.AddMember(context.Background(), req) - - return res, err -} - -// https://github.com/owncloud/ocis/accounts/issues/61 -func TestRemoveMember(t *testing.T) { - grp1 := getTestGroups("grp1") - account := getAccount("user1") - - createGroup(t, grp1) - createAccount(t, account.PreferredName) - - addMemberToGroup(t, grp1.Id, account.Id) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.RemoveMemberRequest{GroupId: grp1.Id, AccountId: account.Id} - - res, err := cl.RemoveMember(context.Background(), req) - checkNoError(t, err) - - assert.IsType(t, &proto.Group{}, res) - //assert.Equal(t, proto.Group{}, *res) - // assertGroupsSame(t, grp1, res) - - resp := listGroups(t) - assertResponseContainsGroup(t, resp, grp1) - - cleanUp(t) -} - -func TestRemoveMemberNonExistingUser(t *testing.T) { - grp1 := getTestGroups("grp1") - - createGroup(t, grp1) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - invalidIds := []string{ - "$@dsfd", - "42", - "happyString", - "0ed84f08-aa0a-46e4-8e42-f0a5d6e1b059", - " ", - } - - for _, id := range invalidIds { - req := &proto.RemoveMemberRequest{GroupId: grp1.Id, AccountId: id} - - res, err := cl.RemoveMember(context.Background(), req) - assert.IsType(t, &proto.Group{}, res) - assert.Empty(t, res) - assert.Error(t, err) - assert.Equal(t, merrors.NotFound(".", "could not read account: open accounts-store/accounts/%v: no such file or directory", id), err) - } - - // Check group is not changed - resp := listGroups(t) - assertResponseContainsGroup(t, resp, grp1) - cleanUp(t) -} - -// https://github.com/owncloud/ocis/accounts/issues/62 -func TestRemoveMemberNotInGroup(t *testing.T) { - grp1 := getTestGroups("grp1") - account := getAccount("user1") - - createGroup(t, grp1) - createAccount(t, account.PreferredName) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.RemoveMemberRequest{GroupId: grp1.Id, AccountId: account.Id} - - res, err := cl.RemoveMember(context.Background(), req) - - // Should give an error - checkNoError(t, err) - assert.IsType(t, &proto.Group{}, res) - - //assert.Error(t, err) - //assert.Equal(t, merrors.NotFound(".", "User not found in the group"), err) - - // Check group is not changed - resp := listGroups(t) - assertResponseContainsGroup(t, resp, grp1) - cleanUp(t) -} - -func TestListMembers(t *testing.T) { - groups := []string{ - "sysusers", - "users", - "sailing-lovers", - "violin-haters", - "radium-lovers", - "polonium-lovers", - "quantum-lovers", - "philosophy-haters", - "physics-lovers", - } - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - for _, group := range groups { - expectedGroup := getGroup(group) - req := &proto.ListMembersRequest{Id: expectedGroup.Id} - - res, err := cl.ListMembers(context.Background(), req) - checkNoError(t, err) - - assert.Equal(t, len(res.Members), len(expectedGroup.Members)) - - for _, member := range expectedGroup.Members { - found := false - for _, resMember := range res.Members { - if resMember.Id == member.Id { - found = true - break - } - } - - if !found { - t.Fatalf("Group with Id %v Expected to be in response but not found", member.Id) - } - } - } - cleanUp(t) -} - -func TestListMembersEmptyGroup(t *testing.T) { - group := &proto.Group{Id: "5d58e5ec-842e-498b-8800-61f2ec6f911c", GidNumber: 30002, OnPremisesSamAccountName: "quantum-group", DisplayName: "Quantum Group", Members: []*proto.Account{}} - - createGroup(t, group) - - client := service.Client() - cl := proto.NewGroupsService("com.owncloud.api.accounts", client) - - req := &proto.ListMembersRequest{Id: group.Id} - - res, err := cl.ListMembers(context.Background(), req) - - checkNoError(t, err) - assert.Empty(t, res.Members) - - cleanUp(t) -} - -func TestAccountUpdateMask(t *testing.T) { - createAccount(t, "user1") - user1 := getAccount("user1") - client := service.Client() - req := &proto.UpdateAccountRequest{ - // We only want to update the display-name, rest should be ignored - UpdateMask: &field_mask.FieldMask{Paths: []string{"DisplayName"}}, - Account: &proto.Account{ - Id: user1.Id, - DisplayName: "ShouldBeUpdated", - PreferredName: "ShouldStaySame", - }} - - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - res, err := cl.UpdateAccount(context.Background(), req) - checkNoError(t, err) - - assert.Equal(t, "ShouldBeUpdated", res.DisplayName) - assert.Equal(t, user1.PreferredName, res.PreferredName) - - cleanUp(t) -} - -func TestAccountUpdateReadOnlyField(t *testing.T) { - createAccount(t, "user1") - user1 := getAccount("user1") - client := service.Client() - req := &proto.UpdateAccountRequest{ - // We only want to update the display-name, rest should be ignored - UpdateMask: &field_mask.FieldMask{Paths: []string{"CreatedDateTime"}}, - Account: &proto.Account{ - Id: user1.Id, - CreatedDateTime: timestamppb.Now(), - }} - - cl := proto.NewAccountsService("com.owncloud.api.accounts", client) - res, err := cl.UpdateAccount(context.Background(), req) - assert.Nil(t, res) - assert.Error(t, err) - - var e *merrors.Error - - if errors.As(err, &e) { - assert.EqualValues(t, 400, e.Code) - assert.Equal(t, "Bad Request", e.Status) - } else { - t.Fatal("Unexpected error type") - } - - cleanUp(t) -} diff --git a/accounts/pkg/proto/v0/accounts.pb.web.go b/accounts/pkg/proto/v0/accounts.pb.web.go deleted file mode 100644 index 5caafddfef..0000000000 --- a/accounts/pkg/proto/v0/accounts.pb.web.go +++ /dev/null @@ -1,1129 +0,0 @@ -// Code generated by protoc-gen-microweb. DO NOT EDIT. -// source: proto.proto - -package proto - -import ( - "bytes" - "encoding/json" - "net/http" - - "github.com/go-chi/chi" - "github.com/go-chi/render" - "github.com/golang/protobuf/jsonpb" - - "github.com/golang/protobuf/ptypes/empty" -) - -type webAccountsServiceHandler struct { - r chi.Router - h AccountsServiceHandler -} - -func (h *webAccountsServiceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - h.r.ServeHTTP(w, r) -} - -func (h *webAccountsServiceHandler) ListAccounts(w http.ResponseWriter, r *http.Request) { - - req := &ListAccountsRequest{} - - resp := &ListAccountsResponse{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.ListAccounts( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webAccountsServiceHandler) GetAccount(w http.ResponseWriter, r *http.Request) { - - req := &GetAccountRequest{} - - resp := &Account{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.GetAccount( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webAccountsServiceHandler) CreateAccount(w http.ResponseWriter, r *http.Request) { - - req := &CreateAccountRequest{} - - resp := &Account{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.CreateAccount( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webAccountsServiceHandler) UpdateAccount(w http.ResponseWriter, r *http.Request) { - - req := &UpdateAccountRequest{} - - resp := &Account{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.UpdateAccount( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webAccountsServiceHandler) DeleteAccount(w http.ResponseWriter, r *http.Request) { - - req := &DeleteAccountRequest{} - resp := &empty.Empty{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.DeleteAccount( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusNoContent) - render.NoContent(w, r) -} - -func RegisterAccountsServiceWeb(r chi.Router, i AccountsServiceHandler, middlewares ...func(http.Handler) http.Handler) { - handler := &webAccountsServiceHandler{ - r: r, - h: i, - } - - r.MethodFunc("POST", "/api/v0/accounts/accounts-list", handler.ListAccounts) - r.MethodFunc("POST", "/api/v0/accounts/accounts-get", handler.GetAccount) - r.MethodFunc("POST", "/api/v0/accounts/accounts-create", handler.CreateAccount) - r.MethodFunc("POST", "/api/v0/accounts/accounts-update", handler.UpdateAccount) - r.MethodFunc("POST", "/api/v0/accounts/accounts-delete", handler.DeleteAccount) -} - -type webGroupsServiceHandler struct { - r chi.Router - h GroupsServiceHandler -} - -func (h *webGroupsServiceHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - h.r.ServeHTTP(w, r) -} - -func (h *webGroupsServiceHandler) ListGroups(w http.ResponseWriter, r *http.Request) { - - req := &ListGroupsRequest{} - - resp := &ListGroupsResponse{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.ListGroups( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webGroupsServiceHandler) GetGroup(w http.ResponseWriter, r *http.Request) { - - req := &GetGroupRequest{} - - resp := &Group{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.GetGroup( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webGroupsServiceHandler) CreateGroup(w http.ResponseWriter, r *http.Request) { - - req := &CreateGroupRequest{} - - resp := &Group{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.CreateGroup( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webGroupsServiceHandler) UpdateGroup(w http.ResponseWriter, r *http.Request) { - - req := &UpdateGroupRequest{} - - resp := &Group{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.UpdateGroup( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webGroupsServiceHandler) DeleteGroup(w http.ResponseWriter, r *http.Request) { - - req := &DeleteGroupRequest{} - resp := &empty.Empty{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.DeleteGroup( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusNoContent) - render.NoContent(w, r) -} - -func (h *webGroupsServiceHandler) AddMember(w http.ResponseWriter, r *http.Request) { - - req := &AddMemberRequest{} - - resp := &Group{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.AddMember( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webGroupsServiceHandler) RemoveMember(w http.ResponseWriter, r *http.Request) { - - req := &RemoveMemberRequest{} - - resp := &Group{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.RemoveMember( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func (h *webGroupsServiceHandler) ListMembers(w http.ResponseWriter, r *http.Request) { - - req := &ListMembersRequest{} - - resp := &ListMembersResponse{} - - if err := json.NewDecoder(r.Body).Decode(&req); err != nil { - http.Error(w, err.Error(), http.StatusPreconditionFailed) - return - } - - if err := h.h.ListMembers( - r.Context(), - req, - resp, - ); err != nil { - http.Error(w, err.Error(), http.StatusBadRequest) - return - } - - render.Status(r, http.StatusCreated) - render.JSON(w, r, resp) -} - -func RegisterGroupsServiceWeb(r chi.Router, i GroupsServiceHandler, middlewares ...func(http.Handler) http.Handler) { - handler := &webGroupsServiceHandler{ - r: r, - h: i, - } - - r.MethodFunc("POST", "/api/v0/accounts/groups-list", handler.ListGroups) - r.MethodFunc("POST", "/api/v0/accounts/groups-get", handler.GetGroup) - r.MethodFunc("POST", "/api/v0/accounts/groups-create", handler.CreateGroup) - r.MethodFunc("POST", "/api/v0/accounts/groups-update", handler.UpdateGroup) - r.MethodFunc("POST", "/api/v0/accounts/groups-delete", handler.DeleteGroup) - r.MethodFunc("POST", "/api/v0/groups/{group_id=*}/members/$ref", handler.AddMember) - r.MethodFunc("POST", "/api/v0/groups/{group_id=*}/members/{account_id}/$ref", handler.RemoveMember) - r.MethodFunc("POST", "/api/v0/groups/{id=*}/members/$ref", handler.ListMembers) -} - -// ListAccountsRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of ListAccountsRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListAccountsRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *ListAccountsRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := ListAccountsRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*ListAccountsRequest)(nil) - -// ListAccountsRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of ListAccountsRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListAccountsRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *ListAccountsRequest) UnmarshalJSON(b []byte) error { - return ListAccountsRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*ListAccountsRequest)(nil) - -// ListAccountsResponseJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of ListAccountsResponse. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListAccountsResponseJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *ListAccountsResponse) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := ListAccountsResponseJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*ListAccountsResponse)(nil) - -// ListAccountsResponseJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of ListAccountsResponse. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListAccountsResponseJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *ListAccountsResponse) UnmarshalJSON(b []byte) error { - return ListAccountsResponseJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*ListAccountsResponse)(nil) - -// GetAccountRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of GetAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var GetAccountRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *GetAccountRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := GetAccountRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*GetAccountRequest)(nil) - -// GetAccountRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of GetAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var GetAccountRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *GetAccountRequest) UnmarshalJSON(b []byte) error { - return GetAccountRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*GetAccountRequest)(nil) - -// CreateAccountRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of CreateAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var CreateAccountRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *CreateAccountRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := CreateAccountRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*CreateAccountRequest)(nil) - -// CreateAccountRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of CreateAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var CreateAccountRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *CreateAccountRequest) UnmarshalJSON(b []byte) error { - return CreateAccountRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*CreateAccountRequest)(nil) - -// UpdateAccountRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of UpdateAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var UpdateAccountRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *UpdateAccountRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := UpdateAccountRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*UpdateAccountRequest)(nil) - -// UpdateAccountRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of UpdateAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var UpdateAccountRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *UpdateAccountRequest) UnmarshalJSON(b []byte) error { - return UpdateAccountRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*UpdateAccountRequest)(nil) - -// DeleteAccountRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of DeleteAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var DeleteAccountRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *DeleteAccountRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := DeleteAccountRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*DeleteAccountRequest)(nil) - -// DeleteAccountRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of DeleteAccountRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var DeleteAccountRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *DeleteAccountRequest) UnmarshalJSON(b []byte) error { - return DeleteAccountRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*DeleteAccountRequest)(nil) - -// AccountJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of Account. This struct is safe to replace or modify but -// should not be done so concurrently. -var AccountJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *Account) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := AccountJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*Account)(nil) - -// AccountJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of Account. This struct is safe to replace or modify but -// should not be done so concurrently. -var AccountJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *Account) UnmarshalJSON(b []byte) error { - return AccountJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*Account)(nil) - -// IdentitiesJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of Identities. This struct is safe to replace or modify but -// should not be done so concurrently. -var IdentitiesJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *Identities) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := IdentitiesJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*Identities)(nil) - -// IdentitiesJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of Identities. This struct is safe to replace or modify but -// should not be done so concurrently. -var IdentitiesJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *Identities) UnmarshalJSON(b []byte) error { - return IdentitiesJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*Identities)(nil) - -// PasswordProfileJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of PasswordProfile. This struct is safe to replace or modify but -// should not be done so concurrently. -var PasswordProfileJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *PasswordProfile) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := PasswordProfileJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*PasswordProfile)(nil) - -// PasswordProfileJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of PasswordProfile. This struct is safe to replace or modify but -// should not be done so concurrently. -var PasswordProfileJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *PasswordProfile) UnmarshalJSON(b []byte) error { - return PasswordProfileJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*PasswordProfile)(nil) - -// ListGroupsRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of ListGroupsRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListGroupsRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *ListGroupsRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := ListGroupsRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*ListGroupsRequest)(nil) - -// ListGroupsRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of ListGroupsRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListGroupsRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *ListGroupsRequest) UnmarshalJSON(b []byte) error { - return ListGroupsRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*ListGroupsRequest)(nil) - -// ListGroupsResponseJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of ListGroupsResponse. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListGroupsResponseJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *ListGroupsResponse) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := ListGroupsResponseJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*ListGroupsResponse)(nil) - -// ListGroupsResponseJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of ListGroupsResponse. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListGroupsResponseJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *ListGroupsResponse) UnmarshalJSON(b []byte) error { - return ListGroupsResponseJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*ListGroupsResponse)(nil) - -// GetGroupRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of GetGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var GetGroupRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *GetGroupRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := GetGroupRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*GetGroupRequest)(nil) - -// GetGroupRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of GetGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var GetGroupRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *GetGroupRequest) UnmarshalJSON(b []byte) error { - return GetGroupRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*GetGroupRequest)(nil) - -// CreateGroupRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of CreateGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var CreateGroupRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *CreateGroupRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := CreateGroupRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*CreateGroupRequest)(nil) - -// CreateGroupRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of CreateGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var CreateGroupRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *CreateGroupRequest) UnmarshalJSON(b []byte) error { - return CreateGroupRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*CreateGroupRequest)(nil) - -// UpdateGroupRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of UpdateGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var UpdateGroupRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *UpdateGroupRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := UpdateGroupRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*UpdateGroupRequest)(nil) - -// UpdateGroupRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of UpdateGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var UpdateGroupRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *UpdateGroupRequest) UnmarshalJSON(b []byte) error { - return UpdateGroupRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*UpdateGroupRequest)(nil) - -// DeleteGroupRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of DeleteGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var DeleteGroupRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *DeleteGroupRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := DeleteGroupRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*DeleteGroupRequest)(nil) - -// DeleteGroupRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of DeleteGroupRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var DeleteGroupRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *DeleteGroupRequest) UnmarshalJSON(b []byte) error { - return DeleteGroupRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*DeleteGroupRequest)(nil) - -// AddMemberRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of AddMemberRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var AddMemberRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *AddMemberRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := AddMemberRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*AddMemberRequest)(nil) - -// AddMemberRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of AddMemberRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var AddMemberRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *AddMemberRequest) UnmarshalJSON(b []byte) error { - return AddMemberRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*AddMemberRequest)(nil) - -// RemoveMemberRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of RemoveMemberRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var RemoveMemberRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *RemoveMemberRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := RemoveMemberRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*RemoveMemberRequest)(nil) - -// RemoveMemberRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of RemoveMemberRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var RemoveMemberRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *RemoveMemberRequest) UnmarshalJSON(b []byte) error { - return RemoveMemberRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*RemoveMemberRequest)(nil) - -// ListMembersRequestJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of ListMembersRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListMembersRequestJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *ListMembersRequest) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := ListMembersRequestJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*ListMembersRequest)(nil) - -// ListMembersRequestJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of ListMembersRequest. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListMembersRequestJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *ListMembersRequest) UnmarshalJSON(b []byte) error { - return ListMembersRequestJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*ListMembersRequest)(nil) - -// ListMembersResponseJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of ListMembersResponse. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListMembersResponseJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *ListMembersResponse) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := ListMembersResponseJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*ListMembersResponse)(nil) - -// ListMembersResponseJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of ListMembersResponse. This struct is safe to replace or modify but -// should not be done so concurrently. -var ListMembersResponseJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *ListMembersResponse) UnmarshalJSON(b []byte) error { - return ListMembersResponseJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*ListMembersResponse)(nil) - -// GroupJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of Group. This struct is safe to replace or modify but -// should not be done so concurrently. -var GroupJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *Group) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := GroupJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*Group)(nil) - -// GroupJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of Group. This struct is safe to replace or modify but -// should not be done so concurrently. -var GroupJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *Group) UnmarshalJSON(b []byte) error { - return GroupJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*Group)(nil) - -// OnPremisesProvisioningErrorJSONMarshaler describes the default jsonpb.Marshaler used by all -// instances of OnPremisesProvisioningError. This struct is safe to replace or modify but -// should not be done so concurrently. -var OnPremisesProvisioningErrorJSONMarshaler = new(jsonpb.Marshaler) - -// MarshalJSON satisfies the encoding/json Marshaler interface. This method -// uses the more correct jsonpb package to correctly marshal the message. -func (m *OnPremisesProvisioningError) MarshalJSON() ([]byte, error) { - if m == nil { - return json.Marshal(nil) - } - - buf := &bytes.Buffer{} - - if err := OnPremisesProvisioningErrorJSONMarshaler.Marshal(buf, m); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -var _ json.Marshaler = (*OnPremisesProvisioningError)(nil) - -// OnPremisesProvisioningErrorJSONUnmarshaler describes the default jsonpb.Unmarshaler used by all -// instances of OnPremisesProvisioningError. This struct is safe to replace or modify but -// should not be done so concurrently. -var OnPremisesProvisioningErrorJSONUnmarshaler = new(jsonpb.Unmarshaler) - -// UnmarshalJSON satisfies the encoding/json Unmarshaler interface. This method -// uses the more correct jsonpb package to correctly unmarshal the message. -func (m *OnPremisesProvisioningError) UnmarshalJSON(b []byte) error { - return OnPremisesProvisioningErrorJSONUnmarshaler.Unmarshal(bytes.NewReader(b), m) -} - -var _ json.Unmarshaler = (*OnPremisesProvisioningError)(nil) diff --git a/accounts/pkg/proto/v0/accounts.proto b/accounts/pkg/proto/v0/accounts.proto deleted file mode 100644 index cb26c1afde..0000000000 --- a/accounts/pkg/proto/v0/accounts.proto +++ /dev/null @@ -1,654 +0,0 @@ -syntax = "proto3"; - -option go_package = "pkg/proto/v0;proto"; - -package settings; - -import "google/api/field_behavior.proto"; -import "google/api/annotations.proto"; -import "google/protobuf/empty.proto"; -import "google/protobuf/field_mask.proto"; -import "google/protobuf/timestamp.proto"; - -// Follow recommended Methods for rpc APIs https://cloud.google.com/apis/design/resources?hl=de#methods -// https://cloud.google.com/apis/design/standard_methods?hl=de#list -// https://cloud.google.com/apis/design/naming_convention?hl=de -service AccountsService { - // Lists accounts - rpc ListAccounts(ListAccountsRequest) returns (ListAccountsResponse) { - // List method maps to HTTP GET - option (google.api.http) = { - post: "/api/v0/accounts/accounts-list", - body: "*" - }; - } - // Gets an account - rpc GetAccount(GetAccountRequest) returns (Account) { - option (google.api.http) = { - post: "/api/v0/accounts/accounts-get", - body: "*" - }; - } - // Creates an account - rpc CreateAccount(CreateAccountRequest) returns (Account) { - // Create maps to HTTP POST. URL path as the collection name. - // HTTP request body contains the resource - option (google.api.http) = { - post: "/api/v0/accounts/accounts-create" - body: "*" - }; - } - // Updates an account - rpc UpdateAccount(UpdateAccountRequest) returns (Account) { - // Update maps to HTTP PATCH. Resource name is mapped to a URL path. - // Resource is contained in the HTTP request body - option (google.api.http) = { - post: "/api/v0/accounts/accounts-update" - body: "*" - }; - }; - // Deletes an account - rpc DeleteAccount(DeleteAccountRequest) returns (google.protobuf.Empty) { - // Delete maps to HTTP DELETE. Resource name maps to the URL path. - // There is no request body - option (google.api.http) = { - post: "/api/v0/accounts/accounts-delete", - body: "*" - }; - } -} - -service GroupsService { - // Lists groups - rpc ListGroups(ListGroupsRequest) returns (ListGroupsResponse) { - // List method maps to HTTP GET - option (google.api.http) = { - post: "/api/v0/accounts/groups-list", - body: "*" - }; - } - // Gets an groups - rpc GetGroup(GetGroupRequest) returns (Group) { - option (google.api.http) = { - post: "/api/v0/accounts/groups-get", - body: "*" - }; - } - // Creates a group - rpc CreateGroup(CreateGroupRequest) returns (Group) { - // Create maps to HTTP POST. URL path as the collection name. - // HTTP request body contains the resource - option (google.api.http) = { - post: "/api/v0/accounts/groups-create" - body: "*" - }; - } - // Updates a group - rpc UpdateGroup(UpdateGroupRequest) returns (Group) { - // Update maps to HTTP PATCH. Resource name is mapped to a URL path. - // Resource is contained in the HTTP request body - option (google.api.http) = { - post: "/api/v0/accounts/groups-update" - body: "*" - }; - }; - // Deletes a group - rpc DeleteGroup(DeleteGroupRequest) returns (google.protobuf.Empty) { - // Delete maps to HTTP DELETE. Resource name maps to the URL path. - // There is no request body - option (google.api.http) = { - post: "/api/v0/accounts/groups-delete", - body: "*" - }; - } - - // additional group methods: https://docs.microsoft.com/en-us/graph/api/resources/group?view=graph-rest-1.0#methods - - // references are accessed using $ref, see http://docs.oasis-open.org/odata/odata/v4.0/cs01/part2-url-conventions/odata-v4.0-cs01-part2-url-conventions.html#_Toc365046422 - // or the stack overflow question https://stackoverflow.com/questions/49362894/why-is-the-microsoft-graph-api-using-ref-in-the-uri - - // group:addmember https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http - rpc AddMember(AddMemberRequest) returns (Group) { - // All request parameters go into body. - option (google.api.http) = { - post: "/api/v0/groups/{group_id=*}/members/$ref" - body: "*" - }; - } - // group:removemember https://docs.microsoft.com/en-us/graph/api/group-delete-members?view=graph-rest-1.0 - rpc RemoveMember(RemoveMemberRequest) returns (Group) { - // All request parameters go into body. - option (google.api.http) = { - // URLs are broken - post: "/api/v0/groups/{group_id=*}/members/{account_id}/$ref" - body: "*" - }; - } - // group:listmembers https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0 - rpc ListMembers(ListMembersRequest) returns (ListMembersResponse) { - // All request parameters go into body. - option (google.api.http) = { - // URLs are broken - post: "/api/v0/groups/{id=*}/members/$ref" - body: "*" - }; - } - -} - -message ListAccountsRequest { - // Optional. The maximum number of accounts to return in the response - int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A pagination token returned from a previous call to `Get` - // that indicates from where search should continue - string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Used to specify a subset of fields that should be - // returned by a get operation or modified by an update operation. - google.protobuf.FieldMask field_mask = 3; - - // Optional. Search criteria used to select the accounts to return. - // If no search criteria is specified then all accounts will be - // returned - // - // TODO update query language - // Query expressions can be used to restrict results based upon - // the account properties where the operators `=`, `NOT`, `AND` and `OR` - // can be used along with the suffix wildcard symbol `*`. - // - // The string properties in a query expression should use escaped quotes - // for values that include whitespace to prevent unexpected behavior. - // - // Some example queries are: - // - // * Query `display_name=Th*` returns accounts whose display_name - // starts with "Th" - // * Query `email=foo@example.com` returns accounts with - // `email` set to `foo@example.com` - // * Query `display_name=\\"Test String\\"` returns accounts with - // display names that include both "Test" and "String" - string query = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -message ListAccountsResponse { - // The field name should match the noun "accounts" in the method name. There - // will be a maximum number of items returned based on the page_size field - // in the request - repeated Account accounts = 1; - - // Token to retrieve the next page of results, or empty if there are no - // more results in the list - string next_page_token = 2; -} - -message GetAccountRequest { - string id = 1; -} - -message CreateAccountRequest { - // The account resource to create - Account account = 1; -} - -message UpdateAccountRequest { - // The account resource which replaces the resource on the server - Account account = 1; - - // The update mask applies to the resource. For the `FieldMask` definition, - // see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask - google.protobuf.FieldMask update_mask = 2; - } - -message DeleteAccountRequest { - string id = 1; -} - -// Account follows the properties of the ms graph api user resuorce. -// See https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties -message Account { - - // Note that field numbers in the range 1 through 15 take one byte to encode, including the field number and the field's type - - // The unique identifier for the user. Key. Not nullable. Non reassignable. Read-only. - string id = 1; - - // *true* if the account is enabled; otherwise, *false*. This property is required when a user is created. Supports $filter. - bool account_enabled = 2; - - // A resource account is also known as a /disabled user object/ in Azure AD, and can be used to represent resources in general. - // In Exchange it might be used to represent conference rooms, for example, and allow them to have a phone number. - // You could give printers or machines with a sync client resource accounts as well. - // A resource account can be homed in Microsoft 365 or on premises using Skype for Business Server 2019. - // *true* if the user is a resource account; otherwise, *false*. Null value should be considered false. - bool is_resource_account = 3; - - // Indicates whether the account was created as - // - a regular school or work account ("" / emptystring), - // - a local account, fully managed by ocis (LocalAccount), includes synced accounts or - // - an external account (Invitation), - // - self-service sign-up using email verification (EmailVerified). Read-only. - string creation_type = 4; - - // Represents the identities that can be used to sign in to this account. - // An identity can be provided by OCIS (also known as a local account), by organizations, or by social identity providers such as Facebook, Google, and Microsoft, and is tied to an account. - // May contain multiple items with the same signInType value. Supports $filter. - repeated Identities identities = 5; - - // posixaccount properties - - // The name displayed in the address book for the account. - // This is usually the combination of the user's first name, middle initial and last name. - // This property is required when a user is created and it cannot be cleared during updates. - // Supports $filter and $orderby. - // posixaccount MUST cn - string display_name = 6; - - // The username - // posixaccount MUST uid - string preferred_name = 7; - - // TODO rename to on_premise_? or move to extension? see https://docs.microsoft.com/en-us/graph/extensibility-open-users - // used for exposing the user using ldap - // posixaccount MUST uidnumber - int64 uid_number = 8; - - // used for exposing the user using ldap - // posixaccount MUST gidnumber - int64 gid_number = 9; - - // posixaccount MUST homedirectory - // constructed dynamically in glauth - - // posixaccount MAY loginshell - // posixaccount MAY gecos - - // For the GECOS field: - // - User's full name (or application name, if the account is for a program) -> displayname (description) - // - Building and room number or contact person -> - - // - Office telephone number -> - - // - Any other contact information (pager number, fax, etc.) -> mail - // eg "Albert Einstein (Beware! I'm doing science!),,,einstein@example.com" as the gecos - - // The SMTP address for the user, for example, "jeff@contoso.onmicrosoft.com". Read-Only. Supports $filter. - // inetorgperson MAY mail - string mail = 10; - - // A description, useful for resource accounts - // posixaccount MAY description - string description = 11; - - // Specifies the password profile for the user. - // The profile contains the user’s password. This property is required when a user is created. - // The password in the profile must satisfy minimum requirements as specified by the passwordPolicies property. - // By default, a strong password is required. - // posixaccount MAY authPassword - PasswordProfile password_profile = 12; - - // The groups, directory roles and administrative units that the user is a member of. Read-only. Nullable. - // should we only respond with repeated strings of ids? no clients should a proper filter mask! - repeated Group memberOf = 13; - - // Field numbers in the range 16 through 2047 take two bytes. So you should reserve the field numbers 1 through 15 for very frequently occurring message elements. Remember to leave some room for frequently occurring elements that might be added in the future. - - // The created date of the account object. - google.protobuf.Timestamp created_date_time = 16; - - // The date and time the user was deleted. Returned only on $select. - google.protobuf.Timestamp deleted_date_time = 17; - - // properties for sync - - // *true* if this object is synced from an on-premises directory; - // *false* if this object was originally synced from an on-premises directory but is no longer synced; - // null if this object has never been synced from an on-premises directory (default). Read-only - bool on_premises_sync_enabled = 20; - - // This property is used to associate an on-premises LDAP user to the ocis account object. - // This property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property. - // Important: The $ and _ characters cannot be used when specifying this property. Supports $filter. - string on_premises_immutable_id = 21; - - // Contains the on-premises security identifier (SID) for the user that was synchronized from on-premises to the cloud. Read-only. - string on_premises_security_identifier = 22; - - // Contains the on-premises LDAP `distinguished name` or `DN`. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - string on_premises_distinguished_name = 23; - - // Contains the on-premises `samAccountName` synchronized from the on-premises directory. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - string on_premises_sam_account_name = 24; - - // Contains the on-premises `domainFQDN`, also called `dnsDomainName` synchronized from the on-premises directory - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - string on_premises_domain_name = 25; - - // Contains the on-premises userPrincipalName synchronized from the on-premises directory. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - string on_premises_user_principal_name = 26; - - // Contains extensionAttributes 1-15 for the user. Note that the individual extension attributes are neither selectable nor filterable. - // For an onPremisesSyncEnabled user, this set of properties is mastered on-premises and is read-only. - // For a cloud-only user (where onPremisesSyncEnabled is false), these properties may be set during creation or update. - //onPremisesExtensionAttributes onPremisesExtensionAttributes = 27 - - // Indicates the last time at which the object was synced with the on-premises directory; Read-only. - google.protobuf.Timestamp on_premises_last_sync_date_time = 28; - - // Errors when using synchronization during provisioning. - repeated OnPremisesProvisioningError on_premises_provisioning_errors = 29; - - // TODO do we need to sync uidnumber and gidnumber from the external ldap? we may assign different numbers so eos has a non colliding namespace. - // we can sync them to the (uid|gid)_number fileds but what if they changed in the external ldap and now collide? - // move those properties to a posixaccount message so we can exchange that part with an external (readonly or writeable) ldap server? - - // For an external user invited to the tenant using the invitation API, this property represents the invited user's invitation status. - // For invited users, the state can be `PendingAcceptance` or `Accepted`, or "" / emptystring for all other users. - // Returned only on $select. Supports $filter with the supported values. For example: $filter=externalUserState eq 'PendingAcceptance'. - string external_user_state = 40; - - // Shows the timestamp for the latest change to the externalUserState property. Returned only on $select. - google.protobuf.Timestamp external_user_state_change_date_time = 41; - - // Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get - // an error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph). - // If this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint. - // Returned only on $select. Read-only. Use invalidateAllRefreshTokens to reset. - google.protobuf.Timestamp refresh_tokens_valid_from_date_time = 60; - - // Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get - // an error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph). - // If this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint. - // Read-only. Use revokeSignInSessions to reset. - google.protobuf.Timestamp sign_in_sessions_valid_from_date_time = 61; -} - -// Identities Represents an identity used to sign in to a user account. -// An identity can be provided by ocis, by organizations, or by social identity providers such as Facebook, Google, or Microsoft, that are tied to a user account. -// This enables the user to sign in to the user account with any of those associated identities. -// They are also used to keep a history of old usernames. -message Identities { - // Specifies the user sign-in types in your directory, such as `emailAddress`, `userName` or `federated`. - // Here, federated represents a unique identifier for a user from an issuer, that can be in any format chosen by the issuer. - // Additional validation is enforced on *issuer_assigned_id* when the sign-in type is set to `emailAddress` or `userName`. - // This property can also be set to any custom string. - string sign_in_type = 1; - - // Specifies the issuer of the identity, for example facebook.com. - // For local accounts (where signInType is not federated), this property is - // the local B2C tenant default domain name, for example contoso.onmicrosoft.com. - // For external users from other Azure AD organization, this will be the domain of - // the federated organization, for example contoso.com. - // Supports $filter. 512 character limit. - string issuer = 2; - - // Specifies the unique identifier assigned to the user by the issuer. The combination of *issuer* and *issuerAssignedId* must be unique within the organization. Represents the sign-in name for the user, when signInType is set to emailAddress or userName (also known as local accounts). - // When *signInType* is set to: - // * `emailAddress`, (or starts with `emailAddress` like `emailAddress1`) *issuerAssignedId* must be a valid email address - // * `userName`, issuer_assigned_id must be a valid local part of an email address - // Supports $filter. 512 character limit. - string issuer_assigned_id = 3; -} -message PasswordProfile { - // The password for the user. This property is required when a user is created. - // It can be updated, but the user will be required to change the password on the next login. - // The password must satisfy minimum requirements as specified by the user’s passwordPolicies property. By default, a strong password is required. - string password = 1; - - // The time when this account last changed their password. - google.protobuf.Timestamp last_password_change_date_time = 2; - - // Specifies password policies for the user. - //This value is an enumeration with one possible value being “DisableStrongPassword”, which allows weaker passwords than the default policy to be specified. - // “DisablePasswordExpiration” can also be specified. - repeated string password_policies = 3; - - // *true* if the user must change her password on the next login; otherwise false. - bool force_change_password_next_sign_in = 4; - - // If *true*, at next sign-in, the user must perform a multi-factor authentication (MFA) before being forced to change their password. The behavior is identical to forceChangePasswordNextSignIn except that the user is required to first perform a multi-factor authentication before password change. After a password change, this property will be automatically reset to false. If not set, default is false. - bool force_change_password_next_sign_in_with_mfa = 5; -} - -message ListGroupsRequest { - // Optional. The maximum number of groups to return in the response - int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A pagination token returned from a previous call to `Get` - // that indicates from where search should continue - string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Used to specify a subset of fields that should be - // returned by a get operation or modified by an update operation. - google.protobuf.FieldMask field_mask = 3; - - // Optional. Search criteria used to select the groups to return. - // If no search criteria is specified then all groups will be - // returned - // - // TODO update query language - // Query expressions can be used to restrict results based upon - // the account properties where the operators `=`, `NOT`, `AND` and `OR` - // can be used along with the suffix wildcard symbol `*`. - // - // The string properties in a query expression should use escaped quotes - // for values that include whitespace to prevent unexpected behavior. - // - // Some example queries are: - // - // * Query `display_name=Th*` returns accounts whose display_name - // starts with "Th" - // * Query `display_name=\\"Test String\\"` returns groups with - // display names that include both "Test" and "String" - string query = 4 [(google.api.field_behavior) = OPTIONAL]; -} - -message ListGroupsResponse { - // The field name should match the noun "group" in the method name. There - // will be a maximum number of items returned based on the page_size field - // in the request - repeated Group groups = 1; - - // Token to retrieve the next page of results, or empty if there are no - // more results in the list - string next_page_token = 2; -} - -message GetGroupRequest { - string id = 1; -} - -message CreateGroupRequest { - // The account resource to create - Group group = 1; -} - -message UpdateGroupRequest { - // The group resource which replaces the resource on the server - Group group = 1; - - // The update mask applies to the resource. For the `FieldMask` definition, - // see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask - google.protobuf.FieldMask update_mask = 2; - } - -message DeleteGroupRequest { - string id = 1; -} - -message AddMemberRequest { - // The id of the group to add a member to - string group_id = 1; - // The account id to add - string account_id = 2; -} - -message RemoveMemberRequest { - // The id of the group to remove a member from - string group_id = 1; - // The account id to remove - string account_id = 2; -} - -message ListMembersRequest { - int32 page_size = 1 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. A pagination token returned from a previous call to `Get` - // that indicates from where search should continue - string page_token = 2 [(google.api.field_behavior) = OPTIONAL]; - - // Optional. Used to specify a subset of fields that should be - // returned by a get operation or modified by an update operation. - google.protobuf.FieldMask field_mask = 3; - - // Optional. Search criteria used to select the groups to return. - // If no search criteria is specified then all groups will be - // returned - // - // TODO update query language - // Query expressions can be used to restrict results based upon - // the account properties where the operators `=`, `NOT`, `AND` and `OR` - // can be used along with the suffix wildcard symbol `*`. - // - // The string properties in a query expression should use escaped quotes - // for values that include whitespace to prevent unexpected behavior. - // - // Some example queries are: - // - // * Query `display_name=Th*` returns accounts whose display_name - // starts with "Th" - // * Query `display_name=\\"Test String\\"` returns groups with - // display names that include both "Test" and "String" - string query = 4 [(google.api.field_behavior) = OPTIONAL]; - - // The id of the group to list members from - string id = 5; -} - -message ListMembersResponse { - // The field name should match the noun "members" in the method name. There - // will be a maximum number of items returned based on the page_size field - // in the request - repeated Account members = 1; - - // Token to retrieve the next page of results, or empty if there are no - // more results in the list - string next_page_token = 2; -} - -message Group { - - // The unique identifier for the group. - // Returned by default. Inherited from directoryObject. Key. Not nullable. Read-only. - string id = 1; - - // groupofnames - - // The display name for the group. This property is required when a group is created and cannot be cleared during updates. - // Returned by default. Supports $filter and $orderby. - // groupofnames MUST cn - string display_name = 2; - // groupofnames MUST/MAY member - - // Users, contacts, and groups that are members of this group. HTTP Methods: GET (supported for all groups), POST (supported for security groups and mail-enabled security groups), DELETE (supported only for security groups) Read-only. Nullable. - // TODO accounts (users) only for now, we can add groups with the dedicated message using oneof construct later - repeated Account members = 3; - - // groupofnames MAY businessCategory - // groupofnames MAY o - // groupofnames MAY ou - // groupofnames MAY owner, SINGLE-VALUE but there might be multiple owners - repeated Account owners = 4; - - // An optional description for the group. Returned by default. - // groupofnames MAY description - string description = 5; - - // groupofnames MAY seeAlso - - // posixgroup - - // used for exposing the user using ldap - // posixgroup MUST gidnumber - int64 gid_number = 6; - // posixgroup MAY authPassword - // posixgroup MAY userPassword - // posixgroup MAY memberUid -> groupofnames member - // posixgroup MAY description -> groupofnames - - - // Timestamp of when the group was created. The value cannot be modified and is automatically populated when the group is created - // Returned by default. Read-only. - google.protobuf.Timestamp created_date_time = 7; - - // For some Azure Active Directory objects (user, group, application), if the object is deleted, it is first logically deleted, and this property is updated with the date and time when the object was deleted. Otherwise this property is null. If the object is restored, this property is updated to null. - // Returned by default. Read-only. - google.protobuf.Timestamp deleted_date_time = 8; - - // Timestamp of when the group is set to expire. The value cannot be modified and is automatically populated when the group is created. - // Returned by default. Read-only. - google.protobuf.Timestamp expiration_date_time = 9; - - // True if the group is not displayed in certain parts of the Outlook user interface: - // in the Address Book, in address lists for selecting message recipients, and in the Browse Groups dialog for searching groups; false otherwise. Default value is false. - // Returned only on $select. - bool hide_from_address_lists = 10; - - // Specifies the visibility of an Office 365 group. Possible values are: Private, Public, or Hiddenmembership; blank values are treated as public. See group visibility options to learn more. - // Visibility can be set only when a group is created; it is not editable. - // Returned by default. - string visibility = 11; - - // Field numbers in the range 16 through 2047 take two bytes. So you should reserve the field numbers 1 through 15 for very frequently occurring message elements. Remember to leave some room for frequently occurring elements that might be added in the future. - - // properties for sync - - // *true* if this group is synced from an on-premises directory; - // *false* if this group was originally synced from an on-premises directory but is no longer synced; - // null if this object has never been synced from an on-premises directory (default). - // Returned by default. Read-only. Supports $filter. - bool on_premises_sync_enabled = 20; - - // This property is used to associate an on-premises LDAP user to the ocis account object. - // This property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property. - // Important: The $ and _ characters cannot be used when specifying this property. Supports $filter. - string on_premises_immutable_id = 21; - - // Contains the on-premises security identifier (SID) for the group that was synchronized from on-premises to the cloud. Returned by default. Read-only. - string on_premises_security_identifier = 22; - - // Contains the on-premises LDAP `distinguished name` or `DN`. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only. - string on_premises_distinguished_name = 23; - - // Contains the on-premises `samAccountName` synchronized from the on-premises directory. - // The property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Returned by default. Read-only. - string on_premises_sam_account_name = 24; - - // Contains the on-premises domain FQDN, also called dnsDomainName synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. - // Returned by default. Read-only. - string on_premises_domain_name = 25; - - // Contains the on-premises netBios name synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect. - // Returned by default. Read-only. - string on_premises_net_bios_name = 26; - - // Indicates the last time at which the group was synced with the on-premises directory. - // Returned by default. Read-only. Supports $filter. - string on_premises_last_sync_date_time = 27; - - // Errors when using synchronization during provisioning. - repeated OnPremisesProvisioningError on_premises_provisioning_errors = 28; -} - -message OnPremisesProvisioningError { - // Category of the provisioning error. Note: Currently, there is only one possible value. Possible value: PropertyConflict - indicates a property value is not unique. Other objects contain the same value for the property. - string category = 1; - // The date and time at which the error occurred. - google.protobuf.Timestamp occurred_date_time = 2; - // Name of the directory property causing the error. Current possible values: UserPrincipalName or ProxyAddress - string property_causing_error = 3; - // Value of the property causing the error. - string value = 4; -} diff --git a/accounts/pkg/proto/v0/accounts.swagger.json b/accounts/pkg/proto/v0/accounts.swagger.json deleted file mode 100644 index 721e27f718..0000000000 --- a/accounts/pkg/proto/v0/accounts.swagger.json +++ /dev/null @@ -1,941 +0,0 @@ -{ - "swagger": "2.0", - "info": { - "title": "accounts.proto", - "version": "version not set" - }, - "consumes": [ - "application/json" - ], - "produces": [ - "application/json" - ], - "paths": { - "/api/v0/accounts/accounts-create": { - "post": { - "summary": "Creates an account", - "operationId": "CreateAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsAccount" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsCreateAccountRequest" - } - } - ], - "tags": [ - "AccountsService" - ] - } - }, - "/api/v0/accounts/accounts-delete": { - "post": { - "summary": "Deletes an account", - "operationId": "DeleteAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsDeleteAccountRequest" - } - } - ], - "tags": [ - "AccountsService" - ] - } - }, - "/api/v0/accounts/accounts-get": { - "post": { - "summary": "Gets an account", - "operationId": "GetAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsAccount" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsGetAccountRequest" - } - } - ], - "tags": [ - "AccountsService" - ] - } - }, - "/api/v0/accounts/accounts-list": { - "post": { - "summary": "Lists accounts", - "operationId": "ListAccounts", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsListAccountsResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsListAccountsRequest" - } - } - ], - "tags": [ - "AccountsService" - ] - } - }, - "/api/v0/accounts/accounts-update": { - "post": { - "summary": "Updates an account", - "operationId": "UpdateAccount", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsAccount" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsUpdateAccountRequest" - } - } - ], - "tags": [ - "AccountsService" - ] - } - }, - "/api/v0/accounts/groups-create": { - "post": { - "summary": "Creates an account", - "operationId": "CreateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsGroup" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsCreateGroupRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/accounts/groups-delete": { - "post": { - "summary": "Deletes an account", - "operationId": "DeleteGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "properties": {} - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsDeleteGroupRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/accounts/groups-get": { - "post": { - "summary": "Gets an account", - "operationId": "GetGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsGroup" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsGetGroupRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/accounts/groups-list": { - "post": { - "summary": "Lists accounts", - "operationId": "ListGroups", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsListGroupsResponse" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsListGroupsRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/accounts/groups-update": { - "post": { - "summary": "Updates an account", - "operationId": "UpdateGroup", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsGroup" - } - } - }, - "parameters": [ - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsUpdateGroupRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/groups/{group_id}/members/$ref": { - "post": { - "summary": "group:addmember https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0\u0026tabs=http", - "operationId": "AddMember", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsGroup" - } - } - }, - "parameters": [ - { - "name": "group_id", - "description": "The id of the group to add a member to", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsAddMemberRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/groups/{group_id}/members/{account_id}/$ref": { - "post": { - "summary": "group:removemember https://docs.microsoft.com/en-us/graph/api/group-delete-members?view=graph-rest-1.0", - "operationId": "RemoveMember", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsGroup" - } - } - }, - "parameters": [ - { - "name": "group_id", - "description": "The id of the group to remove a member from", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "account_id", - "description": "The account id to remove", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsRemoveMemberRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - }, - "/api/v0/groups/{id}/members/$ref": { - "post": { - "summary": "group:listmembers https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0", - "operationId": "ListMembers", - "responses": { - "200": { - "description": "A successful response.", - "schema": { - "$ref": "#/definitions/settingsListMembersResponse" - } - } - }, - "parameters": [ - { - "name": "id", - "description": "The id of the group to list members from", - "in": "path", - "required": true, - "type": "string" - }, - { - "name": "body", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/settingsListMembersRequest" - } - } - ], - "tags": [ - "GroupsService" - ] - } - } - }, - "definitions": { - "protobufFieldMask": { - "type": "object", - "properties": { - "paths": { - "type": "array", - "items": { - "type": "string" - }, - "description": "The set of field mask paths." - } - }, - "description": "paths: \"f.a\"\n paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n f {\n a : 22\n b {\n d : 1\n x : 2\n }\n y : 13\n }\n z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n f {\n a : 22\n b {\n d : 1\n }\n }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API. In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, new values will\nbe appended to the existing repeated field in the target resource. Note that\na repeated field is only allowed in the last position of a `paths` string.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then new value will be merged into the existing sub-message\nin the target resource.\n\nFor example, given the target message:\n\n f {\n b {\n d: 1\n x: 2\n }\n c: [1]\n }\n\nAnd an update message:\n\n f {\n b {\n d: 10\n }\n c: [2]\n }\n\nthen if the field mask is:\n\n paths: [\"f.b\", \"f.c\"]\n\nthen the result will be:\n\n f {\n b {\n d: 10\n x: 2\n }\n c: [1, 2]\n }\n\nAn implementation may provide options to override this default behavior for\nrepeated and message fields.\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n message Profile {\n User user = 1;\n Photo photo = 2;\n }\n message User {\n string display_name = 1;\n string address = 2;\n }\n\nIn proto a field mask for `Profile` may look as such:\n\n mask {\n paths: \"user.display_name\"\n paths: \"photo\"\n }\n\nIn JSON, the same mask is represented as below:\n\n {\n mask: \"user.displayName,photo\"\n }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n message SampleMessage {\n oneof test_oneof {\n string name = 4;\n SubMessage sub_message = 9;\n }\n }\n\nThe field mask can be:\n\n mask {\n paths: \"name\"\n }\n\nOr:\n\n mask {\n paths: \"sub_message\"\n }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.\n\n## Field Mask Verification\n\nThe implementation of any API method which has a FieldMask type field in the\nrequest should verify the included field paths, and return an\n`INVALID_ARGUMENT` error if any path is unmappable.", - "title": "`FieldMask` represents a set of symbolic field paths, for example:" - }, - "settingsAccount": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The unique identifier for the user. Key. Not nullable. Non reassignable. Read-only." - }, - "account_enabled": { - "type": "boolean", - "format": "boolean", - "description": "*true* if the account is enabled; otherwise, *false*. This property is required when a user is created. Supports $filter." - }, - "is_resource_account": { - "type": "boolean", - "format": "boolean", - "description": "A resource account is also known as a /disabled user object/ in Azure AD, and can be used to represent resources in general.\nIn Exchange it might be used to represent conference rooms, for example, and allow them to have a phone number.\nYou could give printers or machines with a sync client resource accounts as well.\nA resource account can be homed in Microsoft 365 or on premises using Skype for Business Server 2019.\n*true* if the user is a resource account; otherwise, *false*. Null value should be considered false." - }, - "creation_type": { - "type": "string", - "description": "Indicates whether the account was created as\n- a regular school or work account (\"\" / emptystring),\n- a local account, fully managed by ocis (LocalAccount), includes synced accounts or\n- an external account (Invitation),\n- self-service sign-up using email verification (EmailVerified). Read-only." - }, - "identities": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsIdentities" - }, - "description": "Represents the identities that can be used to sign in to this account.\nAn identity can be provided by OCIS (also known as a local account), by organizations, or by social identity providers such as Facebook, Google, and Microsoft, and is tied to an account.\nMay contain multiple items with the same signInType value. Supports $filter." - }, - "display_name": { - "type": "string", - "title": "The name displayed in the address book for the account.\nThis is usually the combination of the user's first name, middle initial and last name.\nThis property is required when a user is created and it cannot be cleared during updates.\nSupports $filter and $orderby.\nposixaccount MUST cn" - }, - "preferred_name": { - "type": "string", - "title": "The username\nposixaccount MUST uid" - }, - "uid_number": { - "type": "string", - "format": "int64", - "title": "TODO rename to on_premise_? or move to extension? see https://docs.microsoft.com/en-us/graph/extensibility-open-users\nused for exposing the user using ldap\nposixaccount MUST uidnumber" - }, - "gid_number": { - "type": "string", - "format": "int64", - "title": "used for exposing the user using ldap\nposixaccount MUST gidnumber" - }, - "mail": { - "type": "string", - "title": "The SMTP address for the user, for example, \"jeff@contoso.onmicrosoft.com\". Read-Only. Supports $filter.\ninetorgperson MAY mail" - }, - "description": { - "type": "string", - "title": "A description, useful for resource accounts\nposixaccount MAY description" - }, - "password_profile": { - "$ref": "#/definitions/settingsPasswordProfile", - "title": "Specifies the password profile for the user.\nThe profile contains the user’s password. This property is required when a user is created.\nThe password in the profile must satisfy minimum requirements as specified by the passwordPolicies property.\nBy default, a strong password is required.\nposixaccount MAY authPassword" - }, - "memberOf": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsGroup" - }, - "title": "The groups, directory roles and administrative units that the user is a member of. Read-only. Nullable.\nshould we only respond with repeated strings of ids? no clients should a proper filter mask!" - }, - "created_date_time": { - "type": "string", - "format": "date-time", - "description": "The created date of the account object." - }, - "deleted_date_time": { - "type": "string", - "format": "date-time", - "description": "The date and time the user was deleted. Returned only on $select." - }, - "on_premises_sync_enabled": { - "type": "boolean", - "format": "boolean", - "title": "*true* if this object is synced from an on-premises directory;\n*false* if this object was originally synced from an on-premises directory but is no longer synced;\nnull if this object has never been synced from an on-premises directory (default). Read-only" - }, - "on_premises_immutable_id": { - "type": "string", - "description": "This property is used to associate an on-premises LDAP user to the ocis account object.\nThis property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property.\nImportant: The $ and _ characters cannot be used when specifying this property. Supports $filter." - }, - "on_premises_security_identifier": { - "type": "string", - "description": "Contains the on-premises security identifier (SID) for the user that was synchronized from on-premises to the cloud. Read-only." - }, - "on_premises_distinguished_name": { - "type": "string", - "description": "Contains the on-premises LDAP `distinguished name` or `DN`.\nThe property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only." - }, - "on_premises_sam_account_name": { - "type": "string", - "description": "Contains the on-premises `samAccountName` synchronized from the on-premises directory.\nThe property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only." - }, - "on_premises_domain_name": { - "type": "string", - "description": "Contains the on-premises `domainFQDN`, also called `dnsDomainName` synchronized from the on-premises directory\nThe property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only." - }, - "on_premises_user_principal_name": { - "type": "string", - "description": "Contains the on-premises userPrincipalName synchronized from the on-premises directory.\nThe property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only." - }, - "on_premises_last_sync_date_time": { - "type": "string", - "format": "date-time", - "description": "Indicates the last time at which the object was synced with the on-premises directory; Read-only." - }, - "on_premises_provisioning_errors": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsOnPremisesProvisioningError" - }, - "description": "Errors when using synchronization during provisioning." - }, - "external_user_state": { - "type": "string", - "description": "For an external user invited to the tenant using the invitation API, this property represents the invited user's invitation status.\nFor invited users, the state can be `PendingAcceptance` or `Accepted`, or \"\" / emptystring for all other users.\nReturned only on $select. Supports $filter with the supported values. For example: $filter=externalUserState eq 'PendingAcceptance'." - }, - "external_user_state_change_date_time": { - "type": "string", - "format": "date-time", - "description": "Shows the timestamp for the latest change to the externalUserState property. Returned only on $select." - }, - "refresh_tokens_valid_from_date_time": { - "type": "string", - "format": "date-time", - "description": "Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get\nan error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph).\nIf this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint.\nReturned only on $select. Read-only. Use invalidateAllRefreshTokens to reset." - }, - "sign_in_sessions_valid_from_date_time": { - "type": "string", - "format": "date-time", - "description": "Any refresh tokens or sessions tokens (session cookies) issued before this time are invalid, and applications will get\nan error when using an invalid refresh or sessions token to acquire a delegated access token (to access APIs such as Microsoft Graph).\nIf this happens, the application will need to acquire a new refresh token by making a request to the authorize endpoint.\nRead-only. Use revokeSignInSessions to reset." - } - }, - "title": "Account follows the properties of the ms graph api user resuorce.\nSee https://docs.microsoft.com/en-us/graph/api/resources/user?view=graph-rest-1.0#properties" - }, - "settingsAddMemberRequest": { - "type": "object", - "properties": { - "group_id": { - "type": "string", - "title": "The id of the group to add a member to" - }, - "account_id": { - "type": "string", - "title": "The account id to add" - } - } - }, - "settingsCreateAccountRequest": { - "type": "object", - "properties": { - "account": { - "$ref": "#/definitions/settingsAccount", - "title": "The account resource to create" - } - } - }, - "settingsCreateGroupRequest": { - "type": "object", - "properties": { - "group": { - "$ref": "#/definitions/settingsGroup", - "title": "The account resource to create" - } - } - }, - "settingsDeleteAccountRequest": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "settingsDeleteGroupRequest": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "settingsGetAccountRequest": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "settingsGetGroupRequest": { - "type": "object", - "properties": { - "id": { - "type": "string" - } - } - }, - "settingsGroup": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "The unique identifier for the group.\nReturned by default. Inherited from directoryObject. Key. Not nullable. Read-only." - }, - "display_name": { - "type": "string", - "title": "The display name for the group. This property is required when a group is created and cannot be cleared during updates.\nReturned by default. Supports $filter and $orderby.\ngroupofnames MUST cn" - }, - "members": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsAccount" - }, - "title": "Users, contacts, and groups that are members of this group. HTTP Methods: GET (supported for all groups), POST (supported for security groups and mail-enabled security groups), DELETE (supported only for security groups) Read-only. Nullable.\nTODO accounts (users) only for now, we can add groups with the dedicated message using oneof construct later" - }, - "owners": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsAccount" - }, - "title": "groupofnames MAY businessCategory\ngroupofnames MAY o\ngroupofnames MAY ou\ngroupofnames MAY owner, SINGLE-VALUE but there might be multiple owners" - }, - "description": { - "type": "string", - "title": "An optional description for the group. Returned by default.\ngroupofnames MAY description" - }, - "gid_number": { - "type": "string", - "format": "int64", - "title": "used for exposing the user using ldap\nposixgroup MUST gidnumber" - }, - "created_date_time": { - "type": "string", - "format": "date-time", - "description": "Timestamp of when the group was created. The value cannot be modified and is automatically populated when the group is created\nReturned by default. Read-only." - }, - "deleted_date_time": { - "type": "string", - "format": "date-time", - "description": "For some Azure Active Directory objects (user, group, application), if the object is deleted, it is first logically deleted, and this property is updated with the date and time when the object was deleted. Otherwise this property is null. If the object is restored, this property is updated to null.\nReturned by default. Read-only." - }, - "expiration_date_time": { - "type": "string", - "format": "date-time", - "description": "Timestamp of when the group is set to expire. The value cannot be modified and is automatically populated when the group is created.\nReturned by default. Read-only." - }, - "hide_from_address_lists": { - "type": "boolean", - "format": "boolean", - "description": "True if the group is not displayed in certain parts of the Outlook user interface:\nin the Address Book, in address lists for selecting message recipients, and in the Browse Groups dialog for searching groups; false otherwise. Default value is false.\nReturned only on $select." - }, - "visibility": { - "type": "string", - "description": "Specifies the visibility of an Office 365 group. Possible values are: Private, Public, or Hiddenmembership; blank values are treated as public. See group visibility options to learn more.\nVisibility can be set only when a group is created; it is not editable.\nReturned by default." - }, - "on_premises_sync_enabled": { - "type": "boolean", - "format": "boolean", - "description": "*true* if this group is synced from an on-premises directory;\n*false* if this group was originally synced from an on-premises directory but is no longer synced;\nnull if this object has never been synced from an on-premises directory (default).\nReturned by default. Read-only. Supports $filter." - }, - "on_premises_immutable_id": { - "type": "string", - "description": "This property is used to associate an on-premises LDAP user to the ocis account object.\nThis property must be specified when creating a new user account in the Graph if you are using a federated domain for the user’s userPrincipalName (UPN) property.\nImportant: The $ and _ characters cannot be used when specifying this property. Supports $filter." - }, - "on_premises_security_identifier": { - "type": "string", - "description": "Contains the on-premises security identifier (SID) for the group that was synchronized from on-premises to the cloud. Returned by default. Read-only." - }, - "on_premises_distinguished_name": { - "type": "string", - "description": "Contains the on-premises LDAP `distinguished name` or `DN`.\nThe property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Read-only." - }, - "on_premises_sam_account_name": { - "type": "string", - "description": "Contains the on-premises `samAccountName` synchronized from the on-premises directory.\nThe property is only populated for customers who are synchronizing their on-premises directory to ocis-accounts. Returned by default. Read-only." - }, - "on_premises_domain_name": { - "type": "string", - "description": "Contains the on-premises domain FQDN, also called dnsDomainName synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect.\nReturned by default. Read-only." - }, - "on_premises_net_bios_name": { - "type": "string", - "description": "Contains the on-premises netBios name synchronized from the on-premises directory. The property is only populated for customers who are synchronizing their on-premises directory to Azure Active Directory via Azure AD Connect.\nReturned by default. Read-only." - }, - "on_premises_last_sync_date_time": { - "type": "string", - "description": "Indicates the last time at which the group was synced with the on-premises directory.\nReturned by default. Read-only. Supports $filter." - }, - "on_premises_provisioning_errors": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsOnPremisesProvisioningError" - }, - "description": "Errors when using synchronization during provisioning." - } - } - }, - "settingsIdentities": { - "type": "object", - "properties": { - "sign_in_type": { - "type": "string", - "description": "Specifies the user sign-in types in your directory, such as `emailAddress`, `userName` or `federated`.\nHere, federated represents a unique identifier for a user from an issuer, that can be in any format chosen by the issuer.\nAdditional validation is enforced on *issuer_assigned_id* when the sign-in type is set to `emailAddress` or `userName`.\nThis property can also be set to any custom string." - }, - "issuer": { - "type": "string", - "description": "Specifies the issuer of the identity, for example facebook.com.\nFor local accounts (where signInType is not federated), this property is\nthe local B2C tenant default domain name, for example contoso.onmicrosoft.com.\nFor external users from other Azure AD organization, this will be the domain of\nthe federated organization, for example contoso.com.\nSupports $filter. 512 character limit." - }, - "issuer_assigned_id": { - "type": "string", - "description": "Specifies the unique identifier assigned to the user by the issuer. The combination of *issuer* and *issuerAssignedId* must be unique within the organization. Represents the sign-in name for the user, when signInType is set to emailAddress or userName (also known as local accounts).\nWhen *signInType* is set to:\n* `emailAddress`, (or starts with `emailAddress` like `emailAddress1`) *issuerAssignedId* must be a valid email address\n* `userName`, issuer_assigned_id must be a valid local part of an email address\nSupports $filter. 512 character limit." - } - }, - "description": "Identities Represents an identity used to sign in to a user account.\nAn identity can be provided by ocis, by organizations, or by social identity providers such as Facebook, Google, or Microsoft, that are tied to a user account.\nThis enables the user to sign in to the user account with any of those associated identities.\nThey are also used to keep a history of old usernames." - }, - "settingsListAccountsRequest": { - "type": "object", - "properties": { - "page_size": { - "type": "integer", - "format": "int32", - "title": "Optional. The maximum number of accounts to return in the response" - }, - "page_token": { - "type": "string", - "title": "Optional. A pagination token returned from a previous call to `Get`\nthat indicates from where search should continue" - }, - "field_mask": { - "$ref": "#/definitions/protobufFieldMask", - "description": "Optional. Used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation." - }, - "query": { - "type": "string", - "description": "TODO update query language\nQuery expressions can be used to restrict results based upon\nthe account properties where the operators `=`, `NOT`, `AND` and `OR`\ncan be used along with the suffix wildcard symbol `*`.\n\nThe string properties in a query expression should use escaped quotes\nfor values that include whitespace to prevent unexpected behavior.\n\nSome example queries are:\n\n* Query `display_name=Th*` returns accounts whose display_name\nstarts with \"Th\"\n* Query `email=foo@example.com` returns accounts with\n`email` set to `foo@example.com`\n* Query `display_name=\\\\\"Test String\\\\\"` returns accounts with\ndisplay names that include both \"Test\" and \"String\"", - "title": "Optional. Search criteria used to select the accounts to return.\nIf no search criteria is specified then all accounts will be\nreturned" - } - } - }, - "settingsListAccountsResponse": { - "type": "object", - "properties": { - "accounts": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsAccount" - }, - "title": "The field name should match the noun \"accounts\" in the method name. There\nwill be a maximum number of items returned based on the page_size field\nin the request" - }, - "next_page_token": { - "type": "string", - "title": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list" - } - } - }, - "settingsListGroupsRequest": { - "type": "object", - "properties": { - "page_size": { - "type": "integer", - "format": "int32", - "title": "Optional. The maximum number of groups to return in the response" - }, - "page_token": { - "type": "string", - "title": "Optional. A pagination token returned from a previous call to `Get`\nthat indicates from where search should continue" - }, - "field_mask": { - "$ref": "#/definitions/protobufFieldMask", - "description": "Optional. Used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation." - }, - "query": { - "type": "string", - "description": "TODO update query language\nQuery expressions can be used to restrict results based upon\nthe account properties where the operators `=`, `NOT`, `AND` and `OR`\ncan be used along with the suffix wildcard symbol `*`.\n\nThe string properties in a query expression should use escaped quotes\nfor values that include whitespace to prevent unexpected behavior.\n\nSome example queries are:\n\n* Query `display_name=Th*` returns accounts whose display_name\nstarts with \"Th\"\n* Query `display_name=\\\\\"Test String\\\\\"` returns groups with\ndisplay names that include both \"Test\" and \"String\"", - "title": "Optional. Search criteria used to select the groups to return.\nIf no search criteria is specified then all groups will be\nreturned" - } - } - }, - "settingsListGroupsResponse": { - "type": "object", - "properties": { - "groups": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsGroup" - }, - "title": "The field name should match the noun \"group\" in the method name. There\nwill be a maximum number of items returned based on the page_size field\nin the request" - }, - "next_page_token": { - "type": "string", - "title": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list" - } - } - }, - "settingsListMembersRequest": { - "type": "object", - "properties": { - "page_size": { - "type": "integer", - "format": "int32" - }, - "page_token": { - "type": "string", - "title": "Optional. A pagination token returned from a previous call to `Get`\nthat indicates from where search should continue" - }, - "field_mask": { - "$ref": "#/definitions/protobufFieldMask", - "description": "Optional. Used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation." - }, - "query": { - "type": "string", - "description": "TODO update query language\nQuery expressions can be used to restrict results based upon\nthe account properties where the operators `=`, `NOT`, `AND` and `OR`\ncan be used along with the suffix wildcard symbol `*`.\n\nThe string properties in a query expression should use escaped quotes\nfor values that include whitespace to prevent unexpected behavior.\n\nSome example queries are:\n\n* Query `display_name=Th*` returns accounts whose display_name\nstarts with \"Th\"\n* Query `display_name=\\\\\"Test String\\\\\"` returns groups with\ndisplay names that include both \"Test\" and \"String\"", - "title": "Optional. Search criteria used to select the groups to return.\nIf no search criteria is specified then all groups will be\nreturned" - }, - "id": { - "type": "string", - "title": "The id of the group to list members from" - } - } - }, - "settingsListMembersResponse": { - "type": "object", - "properties": { - "members": { - "type": "array", - "items": { - "$ref": "#/definitions/settingsAccount" - }, - "title": "The field name should match the noun \"members\" in the method name. There\nwill be a maximum number of items returned based on the page_size field\nin the request" - }, - "next_page_token": { - "type": "string", - "title": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list" - } - } - }, - "settingsOnPremisesProvisioningError": { - "type": "object", - "properties": { - "category": { - "type": "string", - "description": "Category of the provisioning error. Note: Currently, there is only one possible value. Possible value: PropertyConflict - indicates a property value is not unique. Other objects contain the same value for the property." - }, - "occurred_date_time": { - "type": "string", - "format": "date-time", - "description": "The date and time at which the error occurred." - }, - "property_causing_error": { - "type": "string", - "title": "Name of the directory property causing the error. Current possible values: UserPrincipalName or ProxyAddress" - }, - "value": { - "type": "string", - "description": "Value of the property causing the error." - } - } - }, - "settingsPasswordProfile": { - "type": "object", - "properties": { - "password": { - "type": "string", - "description": "The password for the user. This property is required when a user is created.\nIt can be updated, but the user will be required to change the password on the next login.\nThe password must satisfy minimum requirements as specified by the user’s passwordPolicies property. By default, a strong password is required." - }, - "last_password_change_date_time": { - "type": "string", - "format": "date-time", - "description": "The time when this account last changed their password." - }, - "password_policies": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Specifies password policies for the user.\nThis value is an enumeration with one possible value being “DisableStrongPassword”, which allows weaker passwords than the default policy to be specified.\n“DisablePasswordExpiration” can also be specified." - }, - "force_change_password_next_sign_in": { - "type": "boolean", - "format": "boolean", - "description": "*true* if the user must change her password on the next login; otherwise false." - }, - "force_change_password_next_sign_in_with_mfa": { - "type": "boolean", - "format": "boolean", - "description": "If *true*, at next sign-in, the user must perform a multi-factor authentication (MFA) before being forced to change their password. The behavior is identical to forceChangePasswordNextSignIn except that the user is required to first perform a multi-factor authentication before password change. After a password change, this property will be automatically reset to false. If not set, default is false." - } - } - }, - "settingsRemoveMemberRequest": { - "type": "object", - "properties": { - "group_id": { - "type": "string", - "title": "The id of the group to remove a member from" - }, - "account_id": { - "type": "string", - "title": "The account id to remove" - } - } - }, - "settingsUpdateAccountRequest": { - "type": "object", - "properties": { - "account": { - "$ref": "#/definitions/settingsAccount", - "title": "The account resource which replaces the resource on the server" - }, - "update_mask": { - "$ref": "#/definitions/protobufFieldMask", - "title": "The update mask applies to the resource. For the `FieldMask` definition,\nsee https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask" - } - } - }, - "settingsUpdateGroupRequest": { - "type": "object", - "properties": { - "group": { - "$ref": "#/definitions/settingsGroup", - "title": "The group resource which replaces the resource on the server" - }, - "update_mask": { - "$ref": "#/definitions/protobufFieldMask", - "title": "The update mask applies to the resource. For the `FieldMask` definition,\nsee https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask" - } - } - } - } -} diff --git a/accounts/pkg/proto/v0/bleve.go b/accounts/pkg/proto/v0/bleve.go deleted file mode 100644 index 66188d84ba..0000000000 --- a/accounts/pkg/proto/v0/bleve.go +++ /dev/null @@ -1,13 +0,0 @@ -package proto - -// BleveAccount wraps the generated Account and adds a bleve type that is used to distinguish documents in the index -type BleveAccount struct { - Account - BleveType string `json:"bleve_type"` -} - -// BleveGroup wraps the generated Group and adds a bleve type that is used to distinguish documents in the index -type BleveGroup struct { - Group - BleveType string `json:"bleve_type"` -} diff --git a/accounts/pkg/proto/v0/staticcheck.conf b/accounts/pkg/proto/v0/staticcheck.conf deleted file mode 100644 index 5120a177a3..0000000000 --- a/accounts/pkg/proto/v0/staticcheck.conf +++ /dev/null @@ -1 +0,0 @@ -checks = ["all", "-ST1003", "-ST1000", "-SA1019"] \ No newline at end of file diff --git a/accounts/pkg/provider/bleve.go b/accounts/pkg/provider/bleve.go deleted file mode 100644 index 5657e94096..0000000000 --- a/accounts/pkg/provider/bleve.go +++ /dev/null @@ -1,128 +0,0 @@ -package provider - -import ( - "errors" - "fmt" - "strconv" - "strings" - - "github.com/CiscoM31/godata" - "github.com/blevesearch/bleve" - "github.com/blevesearch/bleve/search/query" -) - -func init() { - // add (ap)prox filter - godata.GlobalFilterTokenizer = FilterTokenizer() - godata.GlobalFilterParser.DefineOperator("ap", 2, godata.OpAssociationLeft, 4, false) -} - -// BuildBleveQuery converts a GoDataFilterQuery into a bleve query -func BuildBleveQuery(r *godata.GoDataFilterQuery) (query.Query, error) { - return recursiveBuildQuery(r.Tree) -} - -// Builds the filter recursively using DFS -func recursiveBuildQuery(n *godata.ParseNode) (query.Query, error) { - if n.Token.Type == godata.FilterTokenFunc { - switch n.Token.Value { - case "startswith": - if len(n.Children) != 2 { - return nil, errors.New("startswith match must have two children") - } - if n.Children[0].Token.Type != godata.FilterTokenLiteral { - return nil, errors.New("startswith expected a literal as the first param") - } - if n.Children[1].Token.Type != godata.FilterTokenString { - return nil, errors.New("startswith expected a string as the second param") - } // remove enclosing ' of string tokens (looks like 'some ol'' string') - value := n.Children[1].Token.Value[1 : len(n.Children[1].Token.Value)-1] - // unescape '' as ' - unescaped := strings.ReplaceAll(value, "''", "'") - q := bleve.NewPrefixQuery(unescaped) - q.SetField(n.Children[0].Token.Value) - return q, nil - // TODO contains as regex? - // TODO endswith as regex? - default: - return nil, godata.NotImplementedError(n.Token.Value + " is not implemented.") - } - } - if n.Token.Type == godata.FilterTokenLogical { - switch n.Token.Value { - case "eq": - if len(n.Children) != 2 { - return nil, errors.New("equality match must have two children") - } - if n.Children[0].Token.Type != godata.FilterTokenLiteral { - return nil, errors.New("equality expected a literal on the lhs") - } - if n.Children[1].Token.Type == godata.FilterTokenString { - // for escape rules see http://docs.oasis-open.org/odata/odata/v4.01/cs01/part2-url-conventions/odata-v4.01-cs01-part2-url-conventions.html#sec_URLComponents - // remove enclosing ' of string tokens (looks like 'some ol'' string') - value := n.Children[1].Token.Value[1 : len(n.Children[1].Token.Value)-1] - // unescape '' as ' - unescaped := strings.ReplaceAll(value, "''", "'") - // use a match query, so the field mapping, e.g. lowercase is applied to the value - // remember we defined the field mapping for `preferred_name` to be lowercase - // a term query like `preferred_name eq 'Artur'` would use `Artur` to search in the index and come up empty - // a match query will apply the field mapping (lowercasing `Artur` to `artur`) before doing the search - // TODO there is a mismatch between the LDAP and odata filters: - // - LDAP matching rules depend on the attribute: see https://ldapwiki.com/wiki/MatchingRule - // - odata has functions like `startswith`, `contains`, `tolower`, `toupper`, `matchesPattern` andy more: see http://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_BuiltinQueryFunctions - // - ocis-glauth should do the mapping between LDAP and odata filter - q := bleve.NewMatchQuery(unescaped) - q.SetField(n.Children[0].Token.Value) - return q, nil - } else if n.Children[1].Token.Type == godata.FilterTokenInteger { - v, err := strconv.ParseFloat(n.Children[1].Token.Value, 64) - if err != nil { - return nil, err - } - incl := true - q := bleve.NewNumericRangeInclusiveQuery(&v, &v, &incl, &incl) - q.SetField(n.Children[0].Token.Value) - return q, nil - } - return nil, fmt.Errorf("equality expected a string or int on the rhs, got %d", n.Children[1].Token.Type) - case "and": - q := query.NewConjunctionQuery([]query.Query{}) - for _, child := range n.Children { - subQuery, err := recursiveBuildQuery(child) - if err != nil { - return nil, err - } - if subQuery != nil { - q.AddQuery(subQuery) - } - } - return q, nil - case "or": - q := query.NewDisjunctionQuery([]query.Query{}) - for _, child := range n.Children { - subQuery, err := recursiveBuildQuery(child) - if err != nil { - return nil, err - } - if subQuery != nil { - q.AddQuery(subQuery) - } - } - return q, nil - case "Not": - if len(n.Children) != 1 { - return nil, errors.New("not filter must have only one child") - } - subQuery, err := recursiveBuildQuery(n.Children[0]) - if err != nil { - return nil, err - } - q := query.NewBooleanQuery(nil, nil, []query.Query{subQuery}) - return q, nil - default: - return nil, godata.NotImplementedError(n.Token.Value + " is not implemented.") - } - } - - return nil, godata.NotImplementedError(n.Token.Value + " is not implemented.") -} diff --git a/accounts/pkg/provider/tokenizer.go b/accounts/pkg/provider/tokenizer.go deleted file mode 100644 index f4d7c59eff..0000000000 --- a/accounts/pkg/provider/tokenizer.go +++ /dev/null @@ -1,38 +0,0 @@ -package provider - -import "github.com/CiscoM31/godata" - -// FilterTokenizer creates a tokenizer capable of tokenizing filter statements -// TODO disable tokens we don't handle anyway -func FilterTokenizer() *godata.Tokenizer { - t := godata.Tokenizer{} - t.Add("^[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}T[0-9]{2,2}:[0-9]{2,2}(:[0-9]{2,2}(.[0-9]+)?)?(Z|[+-][0-9]{2,2}:[0-9]{2,2})", godata.FilterTokenDateTime) - t.Add("^-?[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2}", godata.FilterTokenDate) - t.Add("^[0-9]{2,2}:[0-9]{2,2}(:[0-9]{2,2}(.[0-9]+)?)?", godata.FilterTokenTime) - t.Add("^\\(", godata.FilterTokenOpenParen) - t.Add("^\\)", godata.FilterTokenCloseParen) - t.Add("^/", godata.FilterTokenNav) - t.Add("^:", godata.FilterTokenColon) - t.Add("^,", godata.FilterTokenComma) - t.Add("^(geo.distance|geo.intersects|geo.length)", godata.FilterTokenFunc) - t.Add("^(substringof|substring|length|indexof)", godata.FilterTokenFunc) - // only change from the global tokenizer is the added ap - t.Add("^(eq|ne|gt|ge|lt|le|and|or|not|has|in|ap)", godata.FilterTokenLogical) - t.Add("^(add|sub|mul|divby|div|mod)", godata.FilterTokenOp) - t.Add("^(contains|endswith|startswith|tolower|toupper|"+ - "trim|concat|year|month|day|hour|minute|second|fractionalseconds|date|"+ - "time|totaloffsetminutes|now|maxdatetime|mindatetime|totalseconds|round|"+ - "floor|ceiling|isof|cast)", godata.FilterTokenFunc) - t.Add("^(any|all)", godata.FilterTokenLambda) - t.Add("^null", godata.FilterTokenNull) - t.Add("^\\$it", godata.FilterTokenIt) - t.Add("^\\$root", godata.FilterTokenRoot) - t.Add("^-?[0-9]+\\.[0-9]+", godata.FilterTokenFloat) - t.Add("^-?[0-9]+", godata.FilterTokenInteger) - t.Add("^'(''|[^'])*'", godata.FilterTokenString) - t.Add("^(true|false)", godata.FilterTokenBoolean) - t.Add("^@*[a-zA-Z][a-zA-Z0-9_.]*", godata.FilterTokenLiteral) // The optional '@' character is used to identify parameter aliases - t.Ignore("^ ", godata.FilterTokenWhitespace) - - return &t -} diff --git a/accounts/pkg/server/grpc/option.go b/accounts/pkg/server/grpc/option.go deleted file mode 100644 index 86d158f6f4..0000000000 --- a/accounts/pkg/server/grpc/option.go +++ /dev/null @@ -1,85 +0,0 @@ -package grpc - -import ( - "context" - - "github.com/micro/cli/v2" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/metrics" - svc "github.com/owncloud/ocis/accounts/pkg/service/v0" - "github.com/owncloud/ocis/ocis-pkg/log" -) - -// Option defines a single option function. -type Option func(o *Options) - -// Options defines the available options for this package. -type Options struct { - Name string - Logger log.Logger - Context context.Context - Config *config.Config - Metrics *metrics.Metrics - Flags []cli.Flag - Handler *svc.Service -} - -// newOptions initializes the available default options. -func newOptions(opts ...Option) Options { - opt := Options{} - - for _, o := range opts { - o(&opt) - } - - return opt -} - -// Name provides a name for the service. -func Name(val string) Option { - return func(o *Options) { - o.Name = val - } -} - -// Logger provides a function to set the logger option. -func Logger(val log.Logger) Option { - return func(o *Options) { - o.Logger = val - } -} - -// Context provides a function to set the context option. -func Context(val context.Context) Option { - return func(o *Options) { - o.Context = val - } -} - -// Config provides a function to set the config option. -func Config(val *config.Config) Option { - return func(o *Options) { - o.Config = val - } -} - -// Metrics provides a function to set the metrics option. -func Metrics(val *metrics.Metrics) Option { - return func(o *Options) { - o.Metrics = val - } -} - -// Flags provides a function to set the flags option. -func Flags(val []cli.Flag) Option { - return func(o *Options) { - o.Flags = append(o.Flags, val...) - } -} - -// Handler provides a function to set the handler option. -func Handler(val *svc.Service) Option { - return func(o *Options) { - o.Handler = val - } -} diff --git a/accounts/pkg/server/grpc/server.go b/accounts/pkg/server/grpc/server.go deleted file mode 100644 index 13f7c2e8d2..0000000000 --- a/accounts/pkg/server/grpc/server.go +++ /dev/null @@ -1,31 +0,0 @@ -package grpc - -import ( - "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "github.com/owncloud/ocis/ocis-pkg/service/grpc" -) - -// Server initializes a new go-micro service ready to run -func Server(opts ...Option) grpc.Service { - options := newOptions(opts...) - handler := options.Handler - - service := grpc.NewService( - grpc.Name(options.Config.Server.Name), - grpc.Context(options.Context), - grpc.Address(options.Config.GRPC.Addr), - grpc.Namespace(options.Config.GRPC.Namespace), - grpc.Logger(options.Logger), - grpc.Flags(options.Flags...), - ) - - if err := proto.RegisterAccountsServiceHandler(service.Server(), handler); err != nil { - options.Logger.Fatal().Err(err).Msg("could not register service handler") - } - if err := proto.RegisterGroupsServiceHandler(service.Server(), handler); err != nil { - options.Logger.Fatal().Err(err).Msg("could not register groups handler") - } - - service.Init() - return service -} diff --git a/accounts/pkg/server/http/option.go b/accounts/pkg/server/http/option.go deleted file mode 100644 index 664a2cdfe8..0000000000 --- a/accounts/pkg/server/http/option.go +++ /dev/null @@ -1,85 +0,0 @@ -package http - -import ( - "context" - - "github.com/micro/cli/v2" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/metrics" - svc "github.com/owncloud/ocis/accounts/pkg/service/v0" - "github.com/owncloud/ocis/ocis-pkg/log" -) - -// Option defines a single option function. -type Option func(o *Options) - -// Options defines the available options for this package. -type Options struct { - Name string - Logger log.Logger - Context context.Context - Config *config.Config - Metrics *metrics.Metrics - Flags []cli.Flag - Handler *svc.Service -} - -// newOptions initializes the available default options. -func newOptions(opts ...Option) Options { - opt := Options{} - - for _, o := range opts { - o(&opt) - } - - return opt -} - -// Name provides a name for the service. -func Name(val string) Option { - return func(o *Options) { - o.Name = val - } -} - -// Logger provides a function to set the logger option. -func Logger(val log.Logger) Option { - return func(o *Options) { - o.Logger = val - } -} - -// Context provides a function to set the context option. -func Context(val context.Context) Option { - return func(o *Options) { - o.Context = val - } -} - -// Config provides a function to set the config option. -func Config(val *config.Config) Option { - return func(o *Options) { - o.Config = val - } -} - -// Metrics provides a function to set the metrics option. -func Metrics(val *metrics.Metrics) Option { - return func(o *Options) { - o.Metrics = val - } -} - -// Flags provides a function to set the flags option. -func Flags(val []cli.Flag) Option { - return func(o *Options) { - o.Flags = append(o.Flags, val...) - } -} - -// Handler provides a function to set the handler option. -func Handler(val *svc.Service) Option { - return func(o *Options) { - o.Handler = val - } -} diff --git a/accounts/pkg/server/http/server.go b/accounts/pkg/server/http/server.go deleted file mode 100644 index 1b420390d0..0000000000 --- a/accounts/pkg/server/http/server.go +++ /dev/null @@ -1,71 +0,0 @@ -package http - -import ( - "github.com/go-chi/chi" - "github.com/owncloud/ocis/accounts/pkg/assets" - "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "github.com/owncloud/ocis/accounts/pkg/version" - "github.com/owncloud/ocis/ocis-pkg/account" - "github.com/owncloud/ocis/ocis-pkg/middleware" - "github.com/owncloud/ocis/ocis-pkg/service/http" -) - -// Server initializes the http service and server. -func Server(opts ...Option) http.Service { - options := newOptions(opts...) - handler := options.Handler - - service := http.NewService( - http.Logger(options.Logger), - http.Name(options.Name), - http.Version(version.String), - http.Address(options.Config.HTTP.Addr), - http.Namespace(options.Config.HTTP.Namespace), - http.Context(options.Context), - http.Flags(options.Flags...), - ) - - mux := chi.NewMux() - - mux.Use(middleware.RealIP) - mux.Use(middleware.RequestID) - mux.Use(middleware.Cache) - mux.Use(middleware.Cors) - mux.Use(middleware.Secure) - mux.Use(middleware.ExtractAccountUUID( - account.Logger(options.Logger), - account.JWTSecret(options.Config.TokenManager.JWTSecret)), - ) - - mux.Use(middleware.Version( - options.Name, - version.String, - )) - - mux.Use(middleware.Logger( - options.Logger, - )) - - mux.Use(middleware.Static( - options.Config.HTTP.Root, - assets.New( - assets.Logger(options.Logger), - assets.Config(options.Config), - ), - )) - - mux.Route(options.Config.HTTP.Root, func(r chi.Router) { - proto.RegisterAccountsServiceWeb(r, handler) - proto.RegisterGroupsServiceWeb(r, handler) - }) - - service.Handle( - "/", - mux, - ) - - if err := service.Init(); err != nil { - panic(err) - } - return service -} diff --git a/accounts/pkg/service/v0/accounts.go b/accounts/pkg/service/v0/accounts.go deleted file mode 100644 index a6a3429277..0000000000 --- a/accounts/pkg/service/v0/accounts.go +++ /dev/null @@ -1,676 +0,0 @@ -package service - -import ( - "context" - "encoding/json" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "regexp" - "sync" - "time" - - "github.com/CiscoM31/godata" - "github.com/blevesearch/bleve" - "github.com/gofrs/uuid" - "github.com/golang/protobuf/ptypes/empty" - fieldmask_utils "github.com/mennanov/fieldmask-utils" - merrors "github.com/micro/go-micro/v2/errors" - "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "github.com/owncloud/ocis/accounts/pkg/provider" - "github.com/owncloud/ocis/ocis-pkg/roles" - settings "github.com/owncloud/ocis/settings/pkg/proto/v0" - settings_svc "github.com/owncloud/ocis/settings/pkg/service/v0" - "github.com/rs/zerolog" - "golang.org/x/crypto/bcrypt" - "google.golang.org/genproto/protobuf/field_mask" - "google.golang.org/protobuf/types/known/timestamppb" -) - -const ( - _hashDifficulty = 12 -) - -// accLock mutually exclude readers from writers on account files -var accLock sync.Mutex - -func (s Service) indexAccounts(path string) (err error) { - var f *os.File - if f, err = os.Open(path); err != nil { - s.log.Error().Err(err).Str("dir", path).Msg("could not open accounts folder") - return - } - list, err := f.Readdir(-1) - f.Close() - if err != nil { - s.log.Error().Err(err).Str("dir", path).Msg("could not list accounts folder") - return - } - for _, file := range list { - err = s.indexAccount(file.Name()) - if err != nil { - s.log.Error().Err(err).Str("file", file.Name()).Msg("could not index account") - } - } - - return -} - -func (s Service) indexAccount(id string) error { - a := &proto.BleveAccount{ - BleveType: "account", - } - if err := s.loadAccount(id, &a.Account); err != nil { - s.log.Error().Err(err).Str("account", id).Msg("could not load account") - return err - } - s.log.Debug().Interface("account", a).Msg("found account") - if err := s.index.Index(a.Id, a); err != nil { - s.log.Error().Err(err).Interface("account", a).Msg("could not index account") - return err - } - return nil -} - -// an auth request is currently hardcoded and has to match this regex -// login eq \"teddy\" and password eq \"F&1!b90t111!\" -var authQuery = regexp.MustCompile(`^login eq '(.*)' and password eq '(.*)'$`) // TODO how is ' escaped in the password? - -func (s Service) loadAccount(id string, a *proto.Account) (err error) { - path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", id) - - var data []byte - if data, err = ioutil.ReadFile(path); err != nil { - return merrors.NotFound(s.id, "could not read account: %v", err.Error()) - } - - if err = json.Unmarshal(data, a); err != nil { - return merrors.InternalServerError(s.id, "could not unmarshal account: %v", err.Error()) - } - return -} - -func (s Service) writeAccount(a *proto.Account) (err error) { - // leave only the group id - s.deflateMemberOf(a) - - var bytes []byte - if bytes, err = json.Marshal(a); err != nil { - return merrors.InternalServerError(s.id, "could not marshal account: %v", err.Error()) - } - - path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", a.Id) - - if err = ioutil.WriteFile(path, bytes, 0600); err != nil { - return merrors.InternalServerError(s.id, "could not write account: %v", err.Error()) - } - return -} - -func (s Service) expandMemberOf(a *proto.Account) { - if a == nil { - return - } - expanded := []*proto.Group{} - for i := range a.MemberOf { - g := &proto.Group{} - // TODO resolve by name, when a create or update is issued they may not have an id? fall back to searching the group id in the index? - if err := s.loadGroup(a.MemberOf[i].Id, g); err == nil { - g.Members = nil // always hide members when expanding - expanded = append(expanded, g) - } else { - // log errors but continue execution for now - s.log.Error().Err(err).Str("id", a.MemberOf[i].Id).Msg("could not load group") - } - } - a.MemberOf = expanded -} - -// deflateMemberOf replaces the groups of a user with an instance that only contains the id -func (s Service) deflateMemberOf(a *proto.Account) { - if a == nil { - return - } - deflated := []*proto.Group{} - for i := range a.MemberOf { - if a.MemberOf[i].Id != "" { - deflated = append(deflated, &proto.Group{Id: a.MemberOf[i].Id}) - } else { - // TODO fetch and use an id when group only has a name but no id - s.log.Error().Str("id", a.Id).Interface("group", a.MemberOf[i]).Msg("resolving groups by name is not implemented yet") - } - } - a.MemberOf = deflated -} - -func (s Service) passwordIsValid(hash string, pwd string) (ok bool) { - defer func() { - if r := recover(); r != nil { - s.log.Error().Err(fmt.Errorf("%s", r)).Str("hash", hash).Msg("password lib panicked") - } - }() - - return bcrypt.CompareHashAndPassword([]byte(hash), []byte(pwd)) == nil -} - -func (s Service) accountExists(ctx context.Context, username, mail, id string) (exists bool, err error) { - // only search for accounts - tq := bleve.NewTermQuery("account") - tq.SetField("bleve_type") - query := bleve.NewConjunctionQuery(tq) - - // parse the query like an odata filter - var q *godata.GoDataFilterQuery - queryUsername := fmt.Sprintf("on_premises_sam_account_name eq '%s'", username) - queryMail := fmt.Sprintf("mail eq '%s'", mail) - queryID := fmt.Sprintf("id eq '%s'", id) - if q, err = godata.ParseFilterString(queryUsername + " or " + queryMail + " or " + queryID); err != nil { - s.log.Error().Err(err).Msg("could not parse query") - return false, merrors.InternalServerError(s.id, "could not parse query: %v", err.Error()) - } - - // convert to bleve query - bq, err := provider.BuildBleveQuery(q) - if err != nil { - s.log.Error().Err(err).Msg("could not build bleve query") - return false, merrors.InternalServerError(s.id, "could not build bleve query: %v", err.Error()) - } - query.AddQuery(bq) - - searchRequest := bleve.NewSearchRequest(query) - var searchResult *bleve.SearchResult - searchResult, err = s.index.Search(searchRequest) - if err != nil { - s.log.Error().Err(err).Msg("could not execute bleve search") - return false, merrors.InternalServerError(s.id, "could not execute bleve search: %v", err.Error()) - } - - return searchResult.Total > 0, nil -} - -func (s Service) hasAccountManagementPermissions(ctx context.Context) bool { - // get roles from context - roleIDs, ok := roles.ReadRoleIDsFromContext(ctx) - if !ok { - /** - * FIXME: with this we are skipping permission checks on all requests that are coming in without roleIDs in the - * metadata context. This is a huge security impairment, as that's the case not only for grpc requests but also - * for unauthenticated http requests and http requests coming in without hitting the ocis-proxy first. - */ - return true - } - - // check if permission is present in roles of the authenticated account - return s.RoleManager.FindPermissionByID(ctx, roleIDs, AccountManagementPermissionID) != nil -} - -// ListAccounts implements the AccountsServiceHandler interface -// the query contains account properties -func (s Service) ListAccounts(ctx context.Context, in *proto.ListAccountsRequest, out *proto.ListAccountsResponse) (err error) { - if !s.hasAccountManagementPermissions(ctx) { - return merrors.Forbidden(s.id, "no permission for ListAccounts") - } - - accLock.Lock() - defer accLock.Unlock() - var password string - - // check if this looks like an auth request - match := authQuery.FindStringSubmatch(in.Query) - if len(match) == 3 { - in.Query = fmt.Sprintf("on_premises_sam_account_name eq '%s'", match[1]) // todo fetch email? make query configurable - password = match[2] - if password == "" { - return merrors.Unauthorized(s.id, "password must not be empty") - } - } - - // only search for accounts - tq := bleve.NewTermQuery("account") - tq.SetField("bleve_type") - - query := bleve.NewConjunctionQuery(tq) - - if in.Query != "" { - // parse the query like an odata filter - var q *godata.GoDataFilterQuery - if q, err = godata.ParseFilterString(in.Query); err != nil { - s.log.Error().Err(err).Msg("could not parse query") - return merrors.InternalServerError(s.id, "could not parse query: %v", err.Error()) - } - - // convert to bleve query - bq, err := provider.BuildBleveQuery(q) - if err != nil { - s.log.Error().Err(err).Msg("could not build bleve query") - return merrors.InternalServerError(s.id, "could not build bleve query: %v", err.Error()) - } - query.AddQuery(bq) - } - - s.log.Debug().Interface("query", query).Msg("using query") - - searchRequest := bleve.NewSearchRequest(query) - var searchResult *bleve.SearchResult - searchResult, err = s.index.Search(searchRequest) - if err != nil { - s.log.Error().Err(err).Msg("could not execute bleve search") - return merrors.InternalServerError(s.id, "could not execute bleve search: %v", err.Error()) - } - - s.log.Debug().Interface("result", searchResult).Msg("result") - - out.Accounts = make([]*proto.Account, 0) - - for _, hit := range searchResult.Hits { - a := &proto.Account{} - if err = s.loadAccount(hit.ID, a); err != nil { - s.log.Error().Err(err).Str("account", hit.ID).Msg("could not load account, skipping") - continue - } - var currentHash string - if a.PasswordProfile != nil { - currentHash = a.PasswordProfile.Password - } - - s.debugLogAccount(a).Msg("found account") - - if password != "" { - if a.PasswordProfile == nil { - s.debugLogAccount(a).Msg("no password profile") - return merrors.Unauthorized(s.id, "invalid password") - } - if !s.passwordIsValid(currentHash, password) { - return merrors.Unauthorized(s.id, "invalid password") - } - } - // TODO add groups if requested - // if in.FieldMask ... - s.expandMemberOf(a) - - // remove password before returning - if a.PasswordProfile != nil { - a.PasswordProfile.Password = "" - } - - out.Accounts = append(out.Accounts, a) - } - - return -} - -// GetAccount implements the AccountsServiceHandler interface -func (s Service) GetAccount(ctx context.Context, in *proto.GetAccountRequest, out *proto.Account) (err error) { - if !s.hasAccountManagementPermissions(ctx) { - return merrors.Forbidden(s.id, "no permission for GetAccount") - } - - accLock.Lock() - defer accLock.Unlock() - var id string - if id, err = cleanupID(in.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - - if err = s.loadAccount(id, out); err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not load account") - return - } - - s.debugLogAccount(out).Msg("found account") - - // TODO add groups if requested - // if in.FieldMask ... - s.expandMemberOf(out) - - // remove password - if out.PasswordProfile != nil { - out.PasswordProfile.Password = "" - } - - return -} - -// CreateAccount implements the AccountsServiceHandler interface -func (s Service) CreateAccount(ctx context.Context, in *proto.CreateAccountRequest, out *proto.Account) (err error) { - if !s.hasAccountManagementPermissions(ctx) { - return merrors.Forbidden(s.id, "no permission for CreateAccount") - } - - accLock.Lock() - defer accLock.Unlock() - var id string - var acc = in.Account - if acc == nil { - return merrors.BadRequest(s.id, "account missing") - } - if acc.Id == "" { - acc.Id = uuid.Must(uuid.NewV4()).String() - } - if !s.isValidUsername(acc.PreferredName) { - return merrors.BadRequest(s.id, "preferred_name '%s' must be at least the local part of an email", acc.PreferredName) - } - if !s.isValidEmail(acc.Mail) { - return merrors.BadRequest(s.id, "mail '%s' must be a valid email", acc.Mail) - } - - if id, err = cleanupID(acc.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - - exists, err := s.accountExists(ctx, acc.PreferredName, acc.Mail, acc.Id) - if err != nil { - return merrors.InternalServerError(s.id, "could not check if account exists: %v", err.Error()) - } - if exists { - return merrors.BadRequest(s.id, "account already exists") - } - - if acc.PasswordProfile != nil { - if acc.PasswordProfile.Password != "" { - // encrypt password - hashed, err := bcrypt.GenerateFromPassword([]byte(acc.PasswordProfile.Password), _hashDifficulty) - if err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not hash password") - return merrors.InternalServerError(s.id, "could not hash password: %v", err.Error()) - } - acc.PasswordProfile.Password = string(hashed) - } - - if err := passwordPoliciesValid(acc.PasswordProfile.PasswordPolicies); err != nil { - return merrors.BadRequest(s.id, "%s", err) - } - } - - // extract group id - // TODO groups should be ignored during create, use groups.AddMember? return error? - - // write and index account - note: don't do anything else in between! - if err = s.writeAccount(acc); err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not persist new account") - s.debugLogAccount(acc).Msg("could not persist new account") - return - } - if err = s.indexAccount(acc.Id); err != nil { - return merrors.InternalServerError(s.id, "could not index new account: %v", err.Error()) - } - s.log.Debug().Interface("account", acc).Msg("account after indexing") - - if acc.PasswordProfile != nil { - acc.PasswordProfile.Password = "" - } - - { - out.Id = acc.Id - out.Mail = acc.Mail - out.PreferredName = acc.PreferredName - out.AccountEnabled = acc.AccountEnabled - out.DisplayName = acc.DisplayName - out.OnPremisesSamAccountName = acc.OnPremisesSamAccountName - } - - // TODO: assign user role to all new users for now, as create Account request does not have any role field - if s.RoleService == nil { - return merrors.InternalServerError(s.id, "could not assign role to account: roleService not configured") - } - if _, err = s.RoleService.AssignRoleToUser(ctx, &settings.AssignRoleToUserRequest{ - AccountUuid: acc.Id, - RoleId: settings_svc.BundleUUIDRoleUser, - }); err != nil { - return merrors.InternalServerError(s.id, "could not assign role to account: %v", err.Error()) - } - - return -} - -// UpdateAccount implements the AccountsServiceHandler interface -// read only fields are ignored -// TODO how can we unset specific values? using the update mask -func (s Service) UpdateAccount(ctx context.Context, in *proto.UpdateAccountRequest, out *proto.Account) (err error) { - if !s.hasAccountManagementPermissions(ctx) { - return merrors.Forbidden(s.id, "no permission for UpdateAccount") - } - - accLock.Lock() - defer accLock.Unlock() - var id string - if in.Account == nil { - return merrors.BadRequest(s.id, "account missing") - } - if in.Account.Id == "" { - return merrors.BadRequest(s.id, "account id missing") - } - - if id, err = cleanupID(in.Account.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - - path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", id) - - if err = s.loadAccount(id, out); err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not load account") - return - } - - t := time.Now() - tsnow := ×tamppb.Timestamp{ - Seconds: t.Unix(), - Nanos: int32(t.Nanosecond()), - } - - validMask, err := validateUpdate(in.UpdateMask, updatableAccountPaths) - if err != nil { - return merrors.BadRequest(s.id, "%s", err) - } - - if err := fieldmask_utils.StructToStruct(validMask, in.Account, out); err != nil { - return merrors.InternalServerError(s.id, "%s", err) - } - - if in.Account.PasswordProfile != nil { - if out.PasswordProfile == nil { - out.PasswordProfile = &proto.PasswordProfile{} - } - if in.Account.PasswordProfile.Password != "" { - // encrypt password - hashed, err := bcrypt.GenerateFromPassword([]byte(in.Account.PasswordProfile.Password), _hashDifficulty) - if err != nil { - in.Account.PasswordProfile.Password = "" - s.log.Error().Err(err).Str("id", id).Msg("could not hash password") - return merrors.InternalServerError(s.id, "could not hash password: %v", err.Error()) - } - out.PasswordProfile.Password = string(hashed) - in.Account.PasswordProfile.Password = "" - } - - if err := passwordPoliciesValid(in.Account.PasswordProfile.PasswordPolicies); err != nil { - return merrors.BadRequest(s.id, "%s", err) - } - - // lastPasswordChangeDateTime calculated, see password - out.PasswordProfile.LastPasswordChangeDateTime = tsnow - } - - // out.RefreshTokensValidFromDateTime TODO use to invalidate all existing sessions - // out.SignInSessionsValidFromDateTime TODO use to invalidate all existing sessions - - // ... TODO on prem for sync - - if out.ExternalUserState != in.Account.ExternalUserState { - out.ExternalUserState = in.Account.ExternalUserState - out.ExternalUserStateChangeDateTime = tsnow - } - - if err = s.writeAccount(out); err != nil { - s.log.Error().Err(err).Str("id", out.Id).Msg("could not persist updated account") - return - } - - if err = s.indexAccount(id); err != nil { - s.log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not index new account") - return merrors.InternalServerError(s.id, "could not index updated account: %v", err.Error()) - } - - // remove password - if out.PasswordProfile != nil { - out.PasswordProfile.Password = "" - } - - return -} - -// whitelist of all paths/fields which can be updated by clients -var updatableAccountPaths = map[string]struct{}{ - "AccountEnabled": {}, - "IsResourceAccount": {}, - "Identities": {}, - "DisplayName": {}, - "PreferredName": {}, - "UidNumber": {}, - "GidNumber": {}, - "Description": {}, - "Mail": {}, // read only?, - "PasswordProfile.Password": {}, - "PasswordProfile.PasswordPolicies": {}, - "PasswordProfile.ForceChangePasswordNextSignIn": {}, - "PasswordProfile.ForceChangePasswordNextSignInWithMfa": {}, - "OnPremisesSyncEnabled": {}, - "OnPremisesSamAccountName": {}, -} - -// DeleteAccount implements the AccountsServiceHandler interface -func (s Service) DeleteAccount(ctx context.Context, in *proto.DeleteAccountRequest, out *empty.Empty) (err error) { - if !s.hasAccountManagementPermissions(ctx) { - return merrors.Forbidden(s.id, "no permission for DeleteAccount") - } - - accLock.Lock() - defer accLock.Unlock() - var id string - if id, err = cleanupID(in.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - path := filepath.Join(s.Config.Server.AccountsDataPath, "accounts", id) - - a := &proto.Account{} - if err = s.loadAccount(id, a); err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not load account") - return - } - - // delete member relationship in groups - for i := range a.MemberOf { - err = s.RemoveMember(ctx, &proto.RemoveMemberRequest{ - GroupId: a.MemberOf[i].Id, - AccountId: id, - }, a.MemberOf[i]) - if err != nil { - s.log.Error().Err(err).Str("accountid", id).Str("groupid", a.MemberOf[i].Id).Msg("could not remove group member, skipping") - } - } - - if err = os.Remove(path); err != nil { - s.log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove account") - return merrors.InternalServerError(s.id, "could not remove account: %v", err.Error()) - } - - if err = s.index.Delete(id); err != nil { - s.log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove account from index") - return merrors.InternalServerError(s.id, "could not remove account from index: %v", err.Error()) - } - - s.log.Info().Str("id", id).Msg("deleted account") - return -} - -// We want to allow email addresses as usernames so they show up when using them in ACLs on storages that allow intergration with our glauth LDAP service -// so we are adding a few restrictions from https://stackoverflow.com/questions/6949667/what-are-the-real-rules-for-linux-usernames-on-centos-6-and-rhel-6 -// names should not start with numbers -var usernameRegex = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]*(@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)*$") - -func (s Service) isValidUsername(e string) bool { - if len(e) < 1 && len(e) > 254 { - return false - } - return usernameRegex.MatchString(e) -} - -// regex from https://www.w3.org/TR/2016/REC-html51-20161101/sec-forms.html#valid-e-mail-address -var emailRegex = regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$") - -func (s Service) isValidEmail(e string) bool { - if len(e) < 3 && len(e) > 254 { - return false - } - return emailRegex.MatchString(e) -} - -const ( - policyDisableStrongPassword = "DisableStrongPassword" - policyDisablePasswordExpiration = "DisablePasswordExpiration" -) - -func passwordPoliciesValid(policies []string) error { - for _, v := range policies { - if v != policyDisableStrongPassword && v != policyDisablePasswordExpiration { - return fmt.Errorf("invalid password-policy %s", v) - } - } - - return nil -} - -// validateUpdate takes a update field-mask and validates it against a whitelist of updatable paths. -// Returns a FieldFilter on success which can be passed to the fieldmask_utils..StructToStruct. An error is returned -// if the mask tries to update no whitelisted fields. -// -// Given an empty or nil mask we assume that the client wants to update all whitelisted fields. -// -func validateUpdate(mask *field_mask.FieldMask, updatablePaths map[string]struct{}) (fieldmask_utils.FieldFilterContainer, error) { - nop := func(s string) string { return s } - // Assume that the client wants to update all updatable path if - // no field-mask is given, so we create a mask with all paths - if mask == nil || len(mask.Paths) == 0 { - paths := make([]string, 0, len(updatablePaths)) - for fieldName := range updatablePaths { - paths = append(paths, fieldName) - } - - return fieldmask_utils.MaskFromPaths(paths, nop) - } - - // Check that only allowed fields are updated - for _, v := range mask.Paths { - if _, ok := updatablePaths[v]; !ok { - return nil, fmt.Errorf("can not update field %s, either unknown or readonly", v) - } - } - - return fieldmask_utils.MaskFromPaths(mask.Paths, nop) -} - -// debugLogAccount returns a debug-log event with detailed account-info, and filtered password data -func (s Service) debugLogAccount(a *proto.Account) *zerolog.Event { - return s.log.Debug().Fields(map[string]interface{}{ - "Id": a.Id, - "Mail": a.Mail, - "DisplayName": a.DisplayName, - "AccountEnabled": a.AccountEnabled, - "IsResourceAccount": a.IsResourceAccount, - "Identities": a.Identities, - "PreferredName": a.PreferredName, - "UidNumber": a.UidNumber, - "GidNumber": a.GidNumber, - "Description": a.Description, - "OnPremisesSyncEnabled": a.OnPremisesSyncEnabled, - "OnPremisesSamAccountName": a.OnPremisesSamAccountName, - "OnPremisesUserPrincipalName": a.OnPremisesUserPrincipalName, - "OnPremisesSecurityIdentifier": a.OnPremisesSecurityIdentifier, - "OnPremisesDistinguishedName": a.OnPremisesDistinguishedName, - "OnPremisesLastSyncDateTime": a.OnPremisesLastSyncDateTime, - "MemberOf": a.MemberOf, - "CreatedDateTime": a.CreatedDateTime, - "DeletedDateTime": a.DeletedDateTime, - }) -} diff --git a/accounts/pkg/service/v0/accounts_permission_test.go b/accounts/pkg/service/v0/accounts_permission_test.go deleted file mode 100644 index 5d2c66abaa..0000000000 --- a/accounts/pkg/service/v0/accounts_permission_test.go +++ /dev/null @@ -1,366 +0,0 @@ -package service -// -//import ( -// "context" -// "encoding/json" -// "log" -// "net/http" -// "os" -// "testing" -// "time" -// -// "github.com/golang/protobuf/ptypes/empty" -// "github.com/micro/go-micro/v2/client" -// merrors "github.com/micro/go-micro/v2/errors" -// "github.com/micro/go-micro/v2/metadata" -// "github.com/owncloud/ocis/accounts/pkg/config" -// "github.com/owncloud/ocis/accounts/pkg/proto/v0" -// olog "github.com/owncloud/ocis/ocis-pkg/log" -// "github.com/owncloud/ocis/ocis-pkg/middleware" -// "github.com/owncloud/ocis/ocis-pkg/roles" -// settings "github.com/owncloud/ocis/settings/pkg/proto/v0" -// ssvc "github.com/owncloud/ocis/settings/pkg/service/v0" -// "github.com/stretchr/testify/assert" -//) -// -//const dataPath = "/var/tmp/ocis-accounts-tests" -// -//var ( -// roleServiceMock settings.RoleService -// s *Service -//) -// -//func init() { -// cfg := config.New() -// cfg.Server.Name = "accounts" -// cfg.Server.AccountsDataPath = dataPath -// logger := olog.NewLogger(olog.Color(true), olog.Pretty(true)) -// roleServiceMock = buildRoleServiceMock() -// roleManager := roles.NewManager( -// roles.Logger(logger), -// roles.RoleService(roleServiceMock), -// roles.CacheTTL(time.Hour), -// roles.CacheSize(1024), -// ) -// s, _ = New( -// Logger(logger), -// Config(cfg), -// RoleService(roleServiceMock), -// RoleManager(&roleManager), -// ) -//} -// -//func setup() (teardown func()) { -// return func() { -// if err := os.RemoveAll(dataPath); err != nil { -// log.Printf("could not delete data root: %s", dataPath) -// } else { -// log.Println("data root deleted") -// } -// } -//} -// -//// TestPermissionsListAccounts checks permission handling on ListAccounts -//func TestPermissionsListAccounts(t *testing.T) { -// var scenarios = []struct { -// name string -// roleIDs []string -// query string -// permissionError error -// }{ -// // TODO: remove this test when https://github.com/owncloud/ocis/accounts/pull/111 is merged -// // replace with two tests: -// // 1: "ListAccounts fails with 403 when roleIDs don't exist in context" -// // 2: "ListAccounts fails with 403 when ('no admin role in context' AND 'empty query')" -// { -// "ListAccounts succeeds when no roleIDs in context", -// nil, -// "", -// nil, -// }, -// { -// "ListAccounts fails when no admin roleID in context", -// []string{ssvc.BundleUUIDRoleUser, ssvc.BundleUUIDRoleGuest}, -// "", -// merrors.Forbidden(s.id, "no permission for ListAccounts"), -// }, -// { -// "ListAccounts succeeds when admin roleID in context", -// []string{ssvc.BundleUUIDRoleAdmin}, -// "", -// nil, -// }, -// } -// -// for _, scenario := range scenarios { -// t.Run(scenario.name, func(t *testing.T) { -// teardown := setup() -// defer teardown() -// -// ctx := buildTestCtx(t, scenario.roleIDs) -// request := &proto.ListAccountsRequest{ -// Query: scenario.query, -// } -// response := &proto.ListAccountsResponse{} -// err := s.ListAccounts(ctx, request, response) -// if scenario.permissionError != nil { -// assert.Equal(t, scenario.permissionError, err) -// } else if err != nil { -// // we are only checking permissions here, so just check that the error code is not 403 -// merr := merrors.FromError(err) -// assert.NotEqual(t, http.StatusForbidden, merr.GetCode()) -// } -// }) -// } -//} -// -//// TestPermissionsGetAccount checks permission handling on GetAccount -//// TODO: remove this test function entirely, when https://github.com/owncloud/ocis/accounts/pull/111 is merged. GetAccount will not have permission checks for the time being. -//func TestPermissionsGetAccount(t *testing.T) { -// var scenarios = []struct { -// name string -// roleIDs []string -// permissionError error -// }{ -// { -// "GetAccount succeeds when no role IDs in context", -// nil, -// nil, -// }, -// { -// "GetAccount fails when no admin roleID in context", -// []string{ssvc.BundleUUIDRoleUser, ssvc.BundleUUIDRoleGuest}, -// merrors.Forbidden(s.id, "no permission for GetAccount"), -// }, -// { -// "GetAccount succeeds when admin roleID in context", -// []string{ssvc.BundleUUIDRoleAdmin}, -// nil, -// }, -// } -// -// for _, scenario := range scenarios { -// t.Run(scenario.name, func(t *testing.T) { -// teardown := setup() -// defer teardown() -// -// ctx := buildTestCtx(t, scenario.roleIDs) -// request := &proto.GetAccountRequest{} -// response := &proto.Account{} -// err := s.GetAccount(ctx, request, response) -// if scenario.permissionError != nil { -// assert.Equal(t, scenario.permissionError, err) -// } else if err != nil { -// // we are only checking permissions here, so just check that the error code is not 403 -// merr := merrors.FromError(err) -// assert.NotEqual(t, http.StatusForbidden, merr.GetCode()) -// } -// }) -// } -//} -// -//// TestPermissionsCreateAccount checks permission handling on CreateAccount -//func TestPermissionsCreateAccount(t *testing.T) { -// var scenarios = []struct { -// name string -// roleIDs []string -// permissionError error -// }{ -// // TODO: remove this test when https://github.com/owncloud/ocis/accounts/pull/111 is merged -// // replace with two tests: -// // 1: "CreateAccount fails with 403 when roleIDs don't exist in context" -// // 2: "CreateAccount fails with 403 when no admin role in context" -// { -// "CreateAccount succeeds when no role IDs in context", -// nil, -// nil, -// }, -// { -// "CreateAccount fails when no admin roleID in context", -// []string{ssvc.BundleUUIDRoleUser, ssvc.BundleUUIDRoleGuest}, -// merrors.Forbidden(s.id, "no permission for CreateAccount"), -// }, -// { -// "CreateAccount succeeds when admin roleID in context", -// []string{ssvc.BundleUUIDRoleAdmin}, -// nil, -// }, -// } -// -// for _, scenario := range scenarios { -// t.Run(scenario.name, func(t *testing.T) { -// teardown := setup() -// defer teardown() -// -// ctx := buildTestCtx(t, scenario.roleIDs) -// request := &proto.CreateAccountRequest{} -// response := &proto.Account{} -// err := s.CreateAccount(ctx, request, response) -// if scenario.permissionError != nil { -// assert.Equal(t, scenario.permissionError, err) -// } else if err != nil { -// // we are only checking permissions here, so just check that the error code is not 403 -// merr := merrors.FromError(err) -// assert.NotEqual(t, http.StatusForbidden, merr.GetCode()) -// } -// }) -// } -//} -// -//// TestPermissionsUpdateAccount checks permission handling on UpdateAccount -//func TestPermissionsUpdateAccount(t *testing.T) { -// var scenarios = []struct { -// name string -// roleIDs []string -// permissionError error -// }{ -// // TODO: remove this test when https://github.com/owncloud/ocis/accounts/pull/111 is merged -// // replace with two tests: -// // 1: "UpdateAccount fails with 403 when roleIDs don't exist in context" -// // 2: "UpdateAccount fails with 403 when no admin role in context" -// { -// "UpdateAccount succeeds when no role IDs in context", -// nil, -// nil, -// }, -// { -// "UpdateAccount fails when no admin roleID in context", -// []string{ssvc.BundleUUIDRoleUser, ssvc.BundleUUIDRoleGuest}, -// merrors.Forbidden(s.id, "no permission for UpdateAccount"), -// }, -// { -// "UpdateAccount succeeds when admin roleID in context", -// []string{ssvc.BundleUUIDRoleAdmin}, -// nil, -// }, -// } -// -// for _, scenario := range scenarios { -// t.Run(scenario.name, func(t *testing.T) { -// teardown := setup() -// defer teardown() -// -// ctx := buildTestCtx(t, scenario.roleIDs) -// request := &proto.UpdateAccountRequest{} -// response := &proto.Account{} -// err := s.UpdateAccount(ctx, request, response) -// if scenario.permissionError != nil { -// assert.Equal(t, scenario.permissionError, err) -// } else if err != nil { -// // we are only checking permissions here, so just check that the error code is not 403 -// merr := merrors.FromError(err) -// assert.NotEqual(t, http.StatusForbidden, merr.GetCode()) -// } -// }) -// } -//} -// -//// TestPermissionsDeleteAccount checks permission handling on DeleteAccount -//func TestPermissionsDeleteAccount(t *testing.T) { -// var scenarios = []struct { -// name string -// roleIDs []string -// permissionError error -// }{ -// // TODO: remove this test when https://github.com/owncloud/ocis/accounts/pull/111 is merged -// // replace with two tests: -// // 1: "DeleteAccount fails with 403 when roleIDs don't exist in context" -// // 2: "DeleteAccount fails with 403 when no admin role in context" -// { -// "DeleteAccount succeeds when no role IDs in context", -// nil, -// nil, -// }, -// { -// "DeleteAccount fails when no admin roleID in context", -// []string{ssvc.BundleUUIDRoleUser, ssvc.BundleUUIDRoleGuest}, -// merrors.Forbidden(s.id, "no permission for DeleteAccount"), -// }, -// { -// "DeleteAccount succeeds when admin roleID in context", -// []string{ssvc.BundleUUIDRoleAdmin}, -// nil, -// }, -// } -// -// for _, scenario := range scenarios { -// t.Run(scenario.name, func(t *testing.T) { -// teardown := setup() -// defer teardown() -// -// ctx := buildTestCtx(t, scenario.roleIDs) -// request := &proto.DeleteAccountRequest{} -// response := &empty.Empty{} -// err := s.DeleteAccount(ctx, request, response) -// if scenario.permissionError != nil { -// assert.Equal(t, scenario.permissionError, err) -// } else if err != nil { -// // we are only checking permissions here, so just check that the error code is not 403 -// merr := merrors.FromError(err) -// assert.NotEqual(t, http.StatusForbidden, merr.GetCode()) -// } -// }) -// } -//} -// -//func buildTestCtx(t *testing.T, roleIDs []string) context.Context { -// ctx := context.Background() -// if roleIDs != nil { -// roleIDs, err := json.Marshal(roleIDs) -// assert.NoError(t, err) -// ctx = metadata.Set(ctx, middleware.RoleIDs, string(roleIDs)) -// } -// return ctx -//} -// -//func buildRoleServiceMock() settings.RoleService { -// defaultRoles := map[string]*settings.Bundle{ -// ssvc.BundleUUIDRoleAdmin: { -// Id: ssvc.BundleUUIDRoleAdmin, -// Type: settings.Bundle_TYPE_ROLE, -// Resource: &settings.Resource{ -// Type: settings.Resource_TYPE_SYSTEM, -// }, -// Settings: []*settings.Setting{ -// { -// Id: AccountManagementPermissionID, -// }, -// }, -// }, -// ssvc.BundleUUIDRoleUser: { -// Id: ssvc.BundleUUIDRoleUser, -// Type: settings.Bundle_TYPE_ROLE, -// Resource: &settings.Resource{ -// Type: settings.Resource_TYPE_SYSTEM, -// }, -// Settings: []*settings.Setting{}, -// }, -// ssvc.BundleUUIDRoleGuest: { -// Id: ssvc.BundleUUIDRoleGuest, -// Type: settings.Bundle_TYPE_ROLE, -// Resource: &settings.Resource{ -// Type: settings.Resource_TYPE_SYSTEM, -// }, -// Settings: []*settings.Setting{}, -// }, -// } -// return settings.MockRoleService{ -// ListRolesFunc: func(ctx context.Context, req *settings.ListBundlesRequest, opts ...client.CallOption) (res *settings.ListBundlesResponse, err error) { -// payload := make([]*settings.Bundle, 0) -// for _, roleID := range req.BundleIds { -// if defaultRoles[roleID] != nil { -// payload = append(payload, defaultRoles[roleID]) -// } -// } -// return &settings.ListBundlesResponse{ -// Bundles: payload, -// }, nil -// }, -// AssignRoleToUserFunc: func(ctx context.Context, req *settings.AssignRoleToUserRequest, opts ...client.CallOption) (res *settings.AssignRoleToUserResponse, err error) { -// // mock can be empty. function is called during service start. actual role assignments not needed for the tests. -// return &settings.AssignRoleToUserResponse{ -// Assignment: &settings.UserRoleAssignment{}, -// }, nil -// }, -// } -//} diff --git a/accounts/pkg/service/v0/groups.go b/accounts/pkg/service/v0/groups.go deleted file mode 100644 index 19727ad468..0000000000 --- a/accounts/pkg/service/v0/groups.go +++ /dev/null @@ -1,431 +0,0 @@ -package service - -import ( - "context" - "encoding/json" - "io/ioutil" - "os" - "path/filepath" - "sync" - - "github.com/CiscoM31/godata" - "github.com/blevesearch/bleve" - "github.com/gofrs/uuid" - "github.com/golang/protobuf/ptypes/empty" - merrors "github.com/micro/go-micro/v2/errors" - "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "github.com/owncloud/ocis/accounts/pkg/provider" -) - -// accLock mutually exclude readers from writers on group files -var groupLock sync.Mutex - -func (s Service) indexGroups(path string) (err error) { - var f *os.File - if f, err = os.Open(path); err != nil { - s.log.Error().Err(err).Str("dir", path).Msg("could not open groups folder") - return - } - list, err := f.Readdir(-1) - f.Close() - if err != nil { - s.log.Error().Err(err).Str("dir", path).Msg("could not list groups folder") - return - } - for _, file := range list { - err = s.indexGroup(file.Name()) - if err != nil { - s.log.Error().Err(err).Str("file", file.Name()).Msg("could not index account") - } - } - - return -} - -func (s Service) indexGroup(id string) error { - g := &proto.BleveGroup{ - BleveType: "group", - } - if err := s.loadGroup(id, &g.Group); err != nil { - s.log.Error().Err(err).Str("group", id).Msg("could not load group") - return err - } - s.log.Debug().Interface("group", g).Msg("found group") - if err := s.index.Index(g.Id, g); err != nil { - s.log.Error().Err(err).Interface("group", g).Msg("could not index group") - return err - } - return nil -} - -func (s Service) loadGroup(id string, g *proto.Group) (err error) { - path := filepath.Join(s.Config.Server.AccountsDataPath, "groups", id) - - groupLock.Lock() - defer groupLock.Unlock() - var data []byte - if data, err = ioutil.ReadFile(path); err != nil { - return merrors.NotFound(s.id, "could not read group: %v", err.Error()) - } - - if err = json.Unmarshal(data, g); err != nil { - return merrors.InternalServerError(s.id, "could not unmarshal group: %v", err.Error()) - } - - return -} - -func (s Service) writeGroup(g *proto.Group) (err error) { - - // leave only the member id - s.deflateMembers(g) - - var bytes []byte - if bytes, err = json.Marshal(g); err != nil { - return merrors.InternalServerError(s.id, "could not marshal group: %v", err.Error()) - } - - path := filepath.Join(s.Config.Server.AccountsDataPath, "groups", g.Id) - - groupLock.Lock() - defer groupLock.Unlock() - if err = ioutil.WriteFile(path, bytes, 0600); err != nil { - return merrors.InternalServerError(s.id, "could not write group: %v", err.Error()) - } - return -} - -func (s Service) expandMembers(g *proto.Group) { - if g == nil { - return - } - expanded := []*proto.Account{} - for i := range g.Members { - // TODO resolve by name, when a create or update is issued they may not have an id? fall back to searching the group id in the index? - a := &proto.Account{} - if err := s.loadAccount(g.Members[i].Id, a); err == nil { - expanded = append(expanded, a) - } else { - // log errors but continue execution for now - s.log.Error().Err(err).Str("id", g.Members[i].Id).Msg("could not load account") - } - } - g.Members = expanded -} - -// deflateMembers replaces the users of a group with an instance that only contains the id -func (s Service) deflateMembers(g *proto.Group) { - if g == nil { - return - } - deflated := []*proto.Account{} - for i := range g.Members { - if g.Members[i].Id != "" { - deflated = append(deflated, &proto.Account{Id: g.Members[i].Id}) - } else { - // TODO fetch and use an id when group only has a name but no id - s.log.Error().Str("id", g.Id).Interface("account", g.Members[i]).Msg("resolving members by name is not implemented yet") - } - } - g.Members = deflated -} - -// ListGroups implements the GroupsServiceHandler interface -func (s Service) ListGroups(c context.Context, in *proto.ListGroupsRequest, out *proto.ListGroupsResponse) (err error) { - - // only search for groups - tq := bleve.NewTermQuery("group") - tq.SetField("bleve_type") - - query := bleve.NewConjunctionQuery(tq) - - if in.Query != "" { - // parse the query like an odata filter - var q *godata.GoDataFilterQuery - if q, err = godata.ParseFilterString(in.Query); err != nil { - s.log.Error().Err(err).Msg("could not parse query") - return merrors.InternalServerError(s.id, "could not parse query: %v", err.Error()) - } - - // convert to bleve query - bq, err := provider.BuildBleveQuery(q) - if err != nil { - s.log.Error().Err(err).Msg("could not build bleve query") - return merrors.InternalServerError(s.id, "could not build bleve query: %v", err.Error()) - } - query.AddQuery(bq) - } - - s.log.Debug().Interface("query", query).Msg("using query") - - searchRequest := bleve.NewSearchRequest(query) - var searchResult *bleve.SearchResult - searchResult, err = s.index.Search(searchRequest) - if err != nil { - s.log.Error().Err(err).Msg("could not execute bleve search") - return merrors.InternalServerError(s.id, "could not execute bleve search: %v", err.Error()) - } - - s.log.Debug().Interface("result", searchResult).Msg("result") - - out.Groups = make([]*proto.Group, 0) - - for _, hit := range searchResult.Hits { - - g := &proto.Group{} - if err = s.loadGroup(hit.ID, g); err != nil { - s.log.Error().Err(err).Str("group", hit.ID).Msg("could not load group, skipping") - continue - } - s.log.Debug().Interface("group", g).Msg("found group") - - // TODO add accounts if requested - // if in.FieldMask ... - s.expandMembers(g) - - out.Groups = append(out.Groups, g) - } - - return -} - -// GetGroup implements the GroupsServiceHandler interface -func (s Service) GetGroup(c context.Context, in *proto.GetGroupRequest, out *proto.Group) (err error) { - var id string - if id, err = cleanupID(in.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up group id: %v", err.Error()) - } - - if err = s.loadGroup(id, out); err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not load group") - return - } - s.log.Debug().Interface("group", out).Msg("found group") - - // TODO only add accounts if requested - // if in.FieldMask ... - s.expandMembers(out) - - return -} - -// CreateGroup implements the GroupsServiceHandler interface -func (s Service) CreateGroup(c context.Context, in *proto.CreateGroupRequest, out *proto.Group) (err error) { - var id string - if in.Group == nil { - return merrors.BadRequest(s.id, "account missing") - } - if in.Group.Id == "" { - in.Group.Id = uuid.Must(uuid.NewV4()).String() - } - - if id, err = cleanupID(in.Group.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - - // extract member id - s.deflateMembers(in.Group) - - if err = s.writeGroup(in.Group); err != nil { - s.log.Error().Err(err).Interface("group", in.Group).Msg("could not persist new group") - return - } - - if err = s.indexGroup(id); err != nil { - return merrors.InternalServerError(s.id, "could not index new group: %v", err.Error()) - } - - return -} - -// UpdateGroup implements the GroupsServiceHandler interface -func (s Service) UpdateGroup(c context.Context, in *proto.UpdateGroupRequest, out *proto.Group) (err error) { - return merrors.InternalServerError(s.id, "not implemented") -} - -// DeleteGroup implements the GroupsServiceHandler interface -func (s Service) DeleteGroup(c context.Context, in *proto.DeleteGroupRequest, out *empty.Empty) (err error) { - var id string - if id, err = cleanupID(in.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up group id: %v", err.Error()) - } - path := filepath.Join(s.Config.Server.AccountsDataPath, "groups", id) - - g := &proto.Group{} - if err = s.loadGroup(id, g); err != nil { - s.log.Error().Err(err).Str("id", id).Msg("could not load account") - return - } - - // delete memberof relationship in users - for i := range g.Members { - err = s.RemoveMember(c, &proto.RemoveMemberRequest{ - AccountId: g.Members[i].Id, - GroupId: id, - }, g) - if err != nil { - s.log.Error().Err(err).Str("groupid", id).Str("accountid", g.Members[i].Id).Msg("could not remove account memberof, skipping") - } - } - if err = os.Remove(path); err != nil { - s.log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove group") - return merrors.InternalServerError(s.id, "could not remove group: %v", err.Error()) - } - - if err = s.index.Delete(id); err != nil { - s.log.Error().Err(err).Str("id", id).Str("path", path).Msg("could not remove group from index") - return merrors.InternalServerError(s.id, "could not remove group from index: %v", err.Error()) - } - - s.log.Info().Str("id", id).Msg("deleted group") - return -} - -// AddMember implements the GroupsServiceHandler interface -func (s Service) AddMember(c context.Context, in *proto.AddMemberRequest, out *proto.Group) (err error) { - - // cleanup ids - var groupID string - if groupID, err = cleanupID(in.GroupId); err != nil { - return merrors.InternalServerError(s.id, "could not clean up group id: %v", err.Error()) - } - - var accountID string - if accountID, err = cleanupID(in.AccountId); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - - // load structs - a := &proto.Account{} - if err = s.loadAccount(accountID, a); err != nil { - s.log.Error().Err(err).Str("id", accountID).Msg("could not load account") - return - } - - g := &proto.Group{} - if err = s.loadGroup(groupID, g); err != nil { - s.log.Error().Err(err).Str("id", groupID).Msg("could not load group") - return - } - - // check if we need to add the account to the group - alreadyRelated := false - for i := range g.Members { - if g.Members[i].Id == a.Id { - alreadyRelated = true - } - } - if !alreadyRelated { - g.Members = append(g.Members, a) - } - - // check if we need to add the group to the account - alreadyRelated = false - for i := range a.MemberOf { - if a.MemberOf[i].Id == g.Id { - alreadyRelated = true - break - } - } - if !alreadyRelated { - a.MemberOf = append(a.MemberOf, g) - } - - if err = s.writeAccount(a); err != nil { - s.log.Error().Err(err).Interface("account", a).Msg("could not persist account") - return - } - if err = s.writeGroup(g); err != nil { - s.log.Error().Err(err).Interface("group", g).Msg("could not persist group") - return - } - // FIXME update index! - // TODO rollback changes when only one of them failed? - // TODO store relation in another file? - // TODO return error if they are already related? - return nil -} - -// RemoveMember implements the GroupsServiceHandler interface -func (s Service) RemoveMember(c context.Context, in *proto.RemoveMemberRequest, out *proto.Group) (err error) { - - // cleanup ids - var groupID string - if groupID, err = cleanupID(in.GroupId); err != nil { - return merrors.InternalServerError(s.id, "could not clean up group id: %v", err.Error()) - } - - var accountID string - if accountID, err = cleanupID(in.AccountId); err != nil { - return merrors.InternalServerError(s.id, "could not clean up account id: %v", err.Error()) - } - - // load structs - a := &proto.Account{} - if err = s.loadAccount(accountID, a); err != nil { - s.log.Error().Err(err).Str("id", accountID).Msg("could not load account") - return - } - - g := &proto.Group{} - if err = s.loadGroup(groupID, g); err != nil { - s.log.Error().Err(err).Str("id", groupID).Msg("could not load group") - return - } - - //remove the account from the group if it exists - newMembers := []*proto.Account{} - for i := range g.Members { - if g.Members[i].Id != a.Id { - newMembers = append(newMembers, g.Members[i]) - } - } - g.Members = newMembers - - // remove the group from the account if it exists - newGroups := []*proto.Group{} - for i := range a.MemberOf { - if a.MemberOf[i].Id != g.Id { - newGroups = append(newGroups, a.MemberOf[i]) - } - } - a.MemberOf = newGroups - - if err = s.writeAccount(a); err != nil { - s.log.Error().Err(err).Interface("account", a).Msg("could not persist account") - return - } - if err = s.writeGroup(g); err != nil { - s.log.Error().Err(err).Interface("group", g).Msg("could not persist group") - return - } - // FIXME update index! - // TODO rollback changes when only one of them failed? - // TODO store relation in another file? - // TODO return error if they are not related? - return nil -} - -// ListMembers implements the GroupsServiceHandler interface -func (s Service) ListMembers(c context.Context, in *proto.ListMembersRequest, out *proto.ListMembersResponse) (err error) { - - // cleanup ids - var groupID string - if groupID, err = cleanupID(in.Id); err != nil { - return merrors.InternalServerError(s.id, "could not clean up group id: %v", err.Error()) - } - - g := &proto.Group{} - if err = s.loadGroup(groupID, g); err != nil { - s.log.Error().Err(err).Str("id", groupID).Msg("could not load group") - return - } - - // TODO only expand accounts if requested - // if in.FieldMask ... - s.expandMembers(g) - - out.Members = g.Members - - return -} diff --git a/accounts/pkg/service/v0/option.go b/accounts/pkg/service/v0/option.go deleted file mode 100644 index 387ff7b35a..0000000000 --- a/accounts/pkg/service/v0/option.go +++ /dev/null @@ -1,57 +0,0 @@ -package service - -import ( - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/ocis-pkg/log" - "github.com/owncloud/ocis/ocis-pkg/roles" - settings "github.com/owncloud/ocis/settings/pkg/proto/v0" -) - -// Option defines a single option function. -type Option func(o *Options) - -// Options defines the available options for this package. -type Options struct { - Logger log.Logger - Config *config.Config - RoleService settings.RoleService - RoleManager *roles.Manager -} - -func newOptions(opts ...Option) Options { - opt := Options{} - - for _, o := range opts { - o(&opt) - } - - return opt -} - -// Logger provides a function to set the Logger option. -func Logger(val log.Logger) Option { - return func(o *Options) { - o.Logger = val - } -} - -// Config provides a function to set the Config option. -func Config(val *config.Config) Option { - return func(o *Options) { - o.Config = val - } -} - -// RoleService provides a function to set the RoleService option. -func RoleService(val settings.RoleService) Option { - return func(o *Options) { - o.RoleService = val - } -} - -// RoleManager provides a function to set the RoleManager option. -func RoleManager(val *roles.Manager) Option { - return func(o *Options) { - o.RoleManager = val - } -} diff --git a/accounts/pkg/service/v0/permissions.go b/accounts/pkg/service/v0/permissions.go deleted file mode 100644 index 30730659f2..0000000000 --- a/accounts/pkg/service/v0/permissions.go +++ /dev/null @@ -1,82 +0,0 @@ -package service - -import ( - "context" - - mclient "github.com/micro/go-micro/v2/client" - olog "github.com/owncloud/ocis/ocis-pkg/log" - settings "github.com/owncloud/ocis/settings/pkg/proto/v0" - ssvc "github.com/owncloud/ocis/settings/pkg/service/v0" -) - -const ( - // AccountManagementPermissionID is the hardcoded setting UUID for the account management permission - AccountManagementPermissionID string = "8e587774-d929-4215-910b-a317b1e80f73" - // AccountManagementPermissionName is the hardcoded setting name for the account management permission - AccountManagementPermissionName string = "account-management" - // GroupManagementPermissionID is the hardcoded setting UUID for the group management permission - GroupManagementPermissionID string = "522adfbe-5908-45b4-b135-41979de73245" - // GroupManagementPermissionName is the hardcoded setting name for the group management permission - GroupManagementPermissionName string = "group-management" -) - -// RegisterPermissions registers permissions for account management and group management with the settings service. -func RegisterPermissions(l *olog.Logger) { - // TODO this won't work with a registry other than mdns. Look into Micro's client initialization. - // https://github.com/owncloud/ocis-proxy/issues/38 - service := settings.NewBundleService("com.owncloud.api.settings", mclient.DefaultClient) - - permissionRequests := generateAccountManagementPermissionsRequests() - for i := range permissionRequests { - res, err := service.AddSettingToBundle(context.Background(), &permissionRequests[i]) - bundleID := permissionRequests[i].BundleId - if err != nil { - l.Err(err).Str("bundle", bundleID).Str("setting", permissionRequests[i].Setting.Id).Msg("error adding setting to bundle") - } else { - l.Info().Str("bundle", bundleID).Str("setting", res.Setting.Id).Msg("successfully added setting to bundle") - } - } -} - -func generateAccountManagementPermissionsRequests() []settings.AddSettingToBundleRequest { - return []settings.AddSettingToBundleRequest{ - { - BundleId: ssvc.BundleUUIDRoleAdmin, - Setting: &settings.Setting{ - Id: AccountManagementPermissionID, - Name: AccountManagementPermissionName, - DisplayName: "Account Management", - Description: "This permission gives full access to everything that is related to account management.", - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_USER, - Id: "all", - }, - Value: &settings.Setting_PermissionValue{ - PermissionValue: &settings.Permission{ - Operation: settings.Permission_OPERATION_READWRITE, - Constraint: settings.Permission_CONSTRAINT_ALL, - }, - }, - }, - }, - { - BundleId: ssvc.BundleUUIDRoleAdmin, - Setting: &settings.Setting{ - Id: GroupManagementPermissionID, - Name: GroupManagementPermissionName, - DisplayName: "Group Management", - Description: "This permission gives full access to everything that is related to group management.", - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_GROUP, - Id: "all", - }, - Value: &settings.Setting_PermissionValue{ - PermissionValue: &settings.Permission{ - Operation: settings.Permission_OPERATION_READWRITE, - Constraint: settings.Permission_CONSTRAINT_ALL, - }, - }, - }, - }, - } -} diff --git a/accounts/pkg/service/v0/service.go b/accounts/pkg/service/v0/service.go deleted file mode 100644 index d3f3b8c767..0000000000 --- a/accounts/pkg/service/v0/service.go +++ /dev/null @@ -1,416 +0,0 @@ -package service - -import ( - "context" - "encoding/json" - "errors" - "fmt" - "io/ioutil" - "os" - "path/filepath" - "strings" - "time" - - "github.com/blevesearch/bleve" - "github.com/blevesearch/bleve/analysis/analyzer/custom" - "github.com/blevesearch/bleve/analysis/analyzer/keyword" - "github.com/blevesearch/bleve/analysis/analyzer/simple" - "github.com/blevesearch/bleve/analysis/analyzer/standard" - "github.com/blevesearch/bleve/analysis/token/lowercase" - "github.com/blevesearch/bleve/analysis/tokenizer/unicode" - mclient "github.com/micro/go-micro/v2/client" - "github.com/owncloud/ocis/accounts/pkg/config" - "github.com/owncloud/ocis/accounts/pkg/proto/v0" - "github.com/owncloud/ocis/ocis-pkg/log" - "github.com/owncloud/ocis/ocis-pkg/roles" - settings "github.com/owncloud/ocis/settings/pkg/proto/v0" - settings_svc "github.com/owncloud/ocis/settings/pkg/service/v0" -) - -// New returns a new instance of Service -func New(opts ...Option) (s *Service, err error) { - options := newOptions(opts...) - logger := options.Logger - cfg := options.Config - - roleService := options.RoleService - if roleService == nil { - // https://github.com/owncloud/ocis-proxy/issues/38 - // TODO this won't work with a registry other than mdns. Look into Micro's client initialization. - roleService = settings.NewRoleService("com.owncloud.api.settings", mclient.DefaultClient) - } - roleManager := options.RoleManager - if roleManager == nil { - m := roles.NewManager( - roles.CacheSize(1024), - roles.CacheTTL(time.Hour*24*7), - roles.Logger(options.Logger), - roles.RoleService(roleService), - ) - roleManager = &m - } - - s = &Service{ - id: cfg.GRPC.Namespace + "." + cfg.Server.Name, - log: logger, - Config: cfg, - RoleService: roleService, - RoleManager: roleManager, - } - - // build an index - if s.index, err = s.buildIndex(); err != nil { - return nil, err - } - - // create default accounts - accountsDir := filepath.Join(cfg.Server.AccountsDataPath, "accounts") - if err = s.createDefaultAccounts(accountsDir); err != nil { - return nil, err - } - if err = s.indexAccounts(accountsDir); err != nil { - return nil, err - } - - // create default groups - groupsDir := filepath.Join(cfg.Server.AccountsDataPath, "groups") - if err = s.createDefaultGroups(groupsDir); err != nil { - return nil, err - } - if err = s.indexGroups(groupsDir); err != nil { - return nil, err - } - - // TODO watch folders for new records - - return -} - -func (s Service) buildIndex() (index bleve.Index, err error) { - indexMapping := bleve.NewIndexMapping() - // keep all symbols in terms to allow exact maching, eg. emails - indexMapping.DefaultAnalyzer = keyword.Name - // TODO don't bother to store fields as we will load the account from disk - - // Reusable mapping for text - standardTextFieldMapping := bleve.NewTextFieldMapping() - standardTextFieldMapping.Analyzer = standard.Name - standardTextFieldMapping.Store = false - - // Reusable mapping for text, uses english stop word removal - simpleTextFieldMapping := bleve.NewTextFieldMapping() - simpleTextFieldMapping.Analyzer = simple.Name - simpleTextFieldMapping.Store = false - - // Reusable mapping for keyword text - keywordFieldMapping := bleve.NewTextFieldMapping() - keywordFieldMapping.Analyzer = keyword.Name - keywordFieldMapping.Store = false - - // Reusable mapping for lowercase text - err = indexMapping.AddCustomAnalyzer("lowercase", - map[string]interface{}{ - "type": custom.Name, - "tokenizer": unicode.Name, - "token_filters": []string{ - lowercase.Name, - }, - }) - if err != nil { - return - } - lowercaseTextFieldMapping := bleve.NewTextFieldMapping() - lowercaseTextFieldMapping.Analyzer = "lowercase" - lowercaseTextFieldMapping.Store = true - - // accounts - accountMapping := bleve.NewDocumentMapping() - indexMapping.AddDocumentMapping("account", accountMapping) - - // Text - accountMapping.AddFieldMappingsAt("display_name", standardTextFieldMapping) - accountMapping.AddFieldMappingsAt("description", standardTextFieldMapping) - - // Lowercase - accountMapping.AddFieldMappingsAt("on_premises_sam_account_name", lowercaseTextFieldMapping) - accountMapping.AddFieldMappingsAt("preferred_name", lowercaseTextFieldMapping) - - // Keywords - accountMapping.AddFieldMappingsAt("mail", keywordFieldMapping) - - // groups - groupMapping := bleve.NewDocumentMapping() - indexMapping.AddDocumentMapping("group", groupMapping) - - // Text - groupMapping.AddFieldMappingsAt("display_name", standardTextFieldMapping) - groupMapping.AddFieldMappingsAt("description", standardTextFieldMapping) - - // Lowercase - groupMapping.AddFieldMappingsAt("on_premises_sam_account_name", lowercaseTextFieldMapping) - - // Tell blevesearch how to determine the type of the structs that are indexed. - // The referenced field needs to match the struct field exactly and it must be public. - // See pkg/proto/v0/bleve.go how we wrap the generated Account and Group to add a - // BleveType property which is indexed as `bleve_type` so we can also distinguish the - // documents in the index by querying for that property. - indexMapping.TypeField = "BleveType" - - indexDir := filepath.Join(s.Config.Server.AccountsDataPath, "index.bleve") - // for now recreate index on every start - if err = os.RemoveAll(indexDir); err != nil { - return - } - if index, err = bleve.New(indexDir, indexMapping); err != nil { - return nil, err - } - return -} - -func (s Service) createDefaultAccounts(accountsDir string) (err error) { - // check if accounts exist - var fi os.FileInfo - if fi, err = os.Stat(accountsDir); err != nil { - if os.IsNotExist(err) { - // create accounts directory - if err = os.MkdirAll(accountsDir, 0700); err != nil { - return - } - // create default accounts - accounts := []proto.Account{ - { - Id: "4c510ada-c86b-4815-8820-42cdf82c3d51", - PreferredName: "einstein", - OnPremisesSamAccountName: "einstein", - Mail: "einstein@example.org", - DisplayName: "Albert Einstein", - UidNumber: 20000, - GidNumber: 30000, - PasswordProfile: &proto.PasswordProfile{ - Password: "$2a$12$qGho4QmaDn4HifisABQ2ROBc41TUCIBNrqwOg3zPEYednDWkXHOKG", - }, - AccountEnabled: true, - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, // users - {Id: "6040aa17-9c64-4fef-9bd0-77234d71bad0"}, // sailing-lovers - {Id: "dd58e5ec-842e-498b-8800-61f2ec6f911f"}, // violin-haters - {Id: "262982c1-2362-4afa-bfdf-8cbfef64a06e"}, // physics-lovers - }, - }, - { - Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", - PreferredName: "marie", - OnPremisesSamAccountName: "marie", - Mail: "marie@example.org", - DisplayName: "Marie Curie", - UidNumber: 20001, - GidNumber: 30000, - PasswordProfile: &proto.PasswordProfile{ - Password: "$2a$12$JzfOtyRiGL25w1UpmiPZ1uU7KJURoTMPSRlZQvMB90/1zqvjwEWgO", - }, - AccountEnabled: true, - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, // users - {Id: "7b87fd49-286e-4a5f-bafd-c535d5dd997a"}, // radium-lovers - {Id: "cedc21aa-4072-4614-8676-fa9165f598ff"}, // polonium-lovers - {Id: "262982c1-2362-4afa-bfdf-8cbfef64a06e"}, // physics-lovers - }, - }, - { - Id: "932b4540-8d16-481e-8ef4-588e4b6b151c", - PreferredName: "richard", - OnPremisesSamAccountName: "richard", - Mail: "richard@example.org", - DisplayName: "Richard Feynman", - UidNumber: 20002, - GidNumber: 30000, - PasswordProfile: &proto.PasswordProfile{ - Password: "$2a$12$bWMHNfc92rDForMapNle/eJ1fOY0eTeRzpk1EQFUdKGI6UdTktp/a", - }, - AccountEnabled: true, - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, // users - {Id: "a1726108-01f8-4c30-88df-2b1a9d1cba1a"}, // quantum-lovers - {Id: "167cbee2-0518-455a-bfb2-031fe0621e5d"}, // philosophy-haters - {Id: "262982c1-2362-4afa-bfdf-8cbfef64a06e"}, // physics-lovers - }, - }, - // admin user(s) - { - Id: "058bff95-6708-4fe5-91e4-9ea3d377588b", - PreferredName: "moss", - OnPremisesSamAccountName: "moss", - Mail: "moss@example.org", - DisplayName: "Maurice Moss", - UidNumber: 20003, - GidNumber: 30000, - PasswordProfile: &proto.PasswordProfile{ - Password: "$2a$12$TY7jDd1PNbZXzZJMvIFm3eXAL4wjzOl.QXJZ6GKGDpAmUcvHBNc66", - }, - AccountEnabled: true, - MemberOf: []*proto.Group{ - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa"}, // users - }, - }, - // technical users for kopano and reva - { - Id: "820ba2a1-3f54-4538-80a4-2d73007e30bf", - PreferredName: "konnectd", - OnPremisesSamAccountName: "konnectd", - Mail: "idp@example.org", - DisplayName: "Kopano Konnectd", - UidNumber: 10000, - GidNumber: 15000, - PasswordProfile: &proto.PasswordProfile{ - Password: "$2a$12$pV8JlGlpM9oo1RaC7kSg/uBTFoTOJ8XfjibFL2U4gOpPKVfbD6pUG", - }, - AccountEnabled: true, - MemberOf: []*proto.Group{ - {Id: "34f38767-c937-4eb6-b847-1c175829a2a0"}, // sysusers - }, - }, - { - Id: "bc596f3c-c955-4328-80a0-60d018b4ad57", - PreferredName: "reva", - OnPremisesSamAccountName: "reva", - Mail: "storage@example.org", - DisplayName: "Reva Inter Operability Platform", - UidNumber: 10001, - GidNumber: 15000, - PasswordProfile: &proto.PasswordProfile{ - Password: "$2a$12$CSM.vkX9o7lO/uvid3XieOVtmq5nh91MFZHvHIsfRms3hLzTa2W6.", - }, - AccountEnabled: true, - MemberOf: []*proto.Group{ - {Id: "34f38767-c937-4eb6-b847-1c175829a2a0"}, // sysusers - }, - }, - } - for i := range accounts { - // create account on disk - var bytes []byte - if bytes, err = json.Marshal(&accounts[i]); err != nil { - s.log.Error().Err(err).Interface("account", &accounts[i]).Msg("could not marshal default account") - return - } - path := filepath.Join(accountsDir, accounts[i].Id) - if err = ioutil.WriteFile(path, bytes, 0600); err != nil { - accounts[i].PasswordProfile.Password = "***REMOVED***" - s.log.Error().Err(err).Str("path", path).Interface("account", &accounts[i]).Msg("could not persist default account") - return - } - } - - // set role for admin users and regular users - assignRoleToUser("058bff95-6708-4fe5-91e4-9ea3d377588b", settings_svc.BundleUUIDRoleAdmin, s.RoleService, s.log) - for _, accountID := range []string{ - "058bff95-6708-4fe5-91e4-9ea3d377588b", //moss - } { - assignRoleToUser(accountID, settings_svc.BundleUUIDRoleAdmin, s.RoleService, s.log) - } - for _, accountID := range []string{ - "4c510ada-c86b-4815-8820-42cdf82c3d51", //einstein - "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c", //marie - "932b4540-8d16-481e-8ef4-588e4b6b151c", //richard - } { - assignRoleToUser(accountID, settings_svc.BundleUUIDRoleUser, s.RoleService, s.log) - } - } - } else if !fi.IsDir() { - return fmt.Errorf("%s is not a directory", accountsDir) - } - return nil -} - -func (s Service) createDefaultGroups(groupsDir string) (err error) { - // check if groups exist - var fi os.FileInfo - if fi, err = os.Stat(groupsDir); err != nil { - if os.IsNotExist(err) { - // create accounts directory - if err = os.MkdirAll(groupsDir, 0700); err != nil { - return - } - // create default accounts - groups := []proto.Group{ - {Id: "34f38767-c937-4eb6-b847-1c175829a2a0", GidNumber: 15000, OnPremisesSamAccountName: "sysusers", DisplayName: "Technical users", Description: "A group for technical users. They should not show up in sharing dialogs.", Members: []*proto.Account{ - {Id: "820ba2a1-3f54-4538-80a4-2d73007e30bf"}, // konnectd - {Id: "bc596f3c-c955-4328-80a0-60d018b4ad57"}, // reva - }}, - {Id: "509a9dcd-bb37-4f4f-a01a-19dca27d9cfa", GidNumber: 30000, OnPremisesSamAccountName: "users", DisplayName: "Users", Description: "A group every normal user belongs to.", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }}, - {Id: "6040aa17-9c64-4fef-9bd0-77234d71bad0", GidNumber: 30001, OnPremisesSamAccountName: "sailing-lovers", DisplayName: "Sailing lovers", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - }}, - {Id: "dd58e5ec-842e-498b-8800-61f2ec6f911f", GidNumber: 30002, OnPremisesSamAccountName: "violin-haters", DisplayName: "Violin haters", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - }}, - {Id: "7b87fd49-286e-4a5f-bafd-c535d5dd997a", GidNumber: 30003, OnPremisesSamAccountName: "radium-lovers", DisplayName: "Radium lovers", Members: []*proto.Account{ - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - }}, - {Id: "cedc21aa-4072-4614-8676-fa9165f598ff", GidNumber: 30004, OnPremisesSamAccountName: "polonium-lovers", DisplayName: "Polonium lovers", Members: []*proto.Account{ - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - }}, - {Id: "a1726108-01f8-4c30-88df-2b1a9d1cba1a", GidNumber: 30005, OnPremisesSamAccountName: "quantum-lovers", DisplayName: "Quantum lovers", Members: []*proto.Account{ - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }}, - {Id: "167cbee2-0518-455a-bfb2-031fe0621e5d", GidNumber: 30006, OnPremisesSamAccountName: "philosophy-haters", DisplayName: "Philosophy haters", Members: []*proto.Account{ - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }}, - {Id: "262982c1-2362-4afa-bfdf-8cbfef64a06e", GidNumber: 30007, OnPremisesSamAccountName: "physics-lovers", DisplayName: "Physics lovers", Members: []*proto.Account{ - {Id: "4c510ada-c86b-4815-8820-42cdf82c3d51"}, // einstein - {Id: "f7fbf8c8-139b-4376-b307-cf0a8c2d0d9c"}, // marie - {Id: "932b4540-8d16-481e-8ef4-588e4b6b151c"}, // feynman - }}, - } - for i := range groups { - var bytes []byte - if bytes, err = json.Marshal(&groups[i]); err != nil { - s.log.Error().Err(err).Interface("group", &groups[i]).Msg("could not marshal default group") - return - } - path := filepath.Join(groupsDir, groups[i].Id) - if err = ioutil.WriteFile(path, bytes, 0600); err != nil { - s.log.Error().Err(err).Str("path", path).Interface("group", &groups[i]).Msg("could not persist default group") - return - } - } - } - } else if !fi.IsDir() { - return fmt.Errorf("%s is not a directory", groupsDir) - } - return nil -} - -func assignRoleToUser(accountID, roleID string, rs settings.RoleService, logger log.Logger) (ok bool) { - _, err := rs.AssignRoleToUser(context.Background(), &settings.AssignRoleToUserRequest{ - AccountUuid: accountID, - RoleId: roleID, - }) - if err != nil { - logger.Error().Err(err).Str("accountID", accountID).Str("roleID", roleID).Msg("could not set role for account") - return false - } - return true -} - -// Service implements the AccountsServiceHandler interface -type Service struct { - id string - log log.Logger - Config *config.Config - index bleve.Index - RoleService settings.RoleService - RoleManager *roles.Manager -} - -func cleanupID(id string) (string, error) { - id = filepath.Clean(id) - if id == "." || strings.Contains(id, "/") { - return "", errors.New("invalid id " + id) - } - return id, nil -} diff --git a/accounts/pkg/service/v0/settings.go b/accounts/pkg/service/v0/settings.go deleted file mode 100644 index c2c2990c5e..0000000000 --- a/accounts/pkg/service/v0/settings.go +++ /dev/null @@ -1,196 +0,0 @@ -package service - -import ( - "context" - - mclient "github.com/micro/go-micro/v2/client" - olog "github.com/owncloud/ocis/ocis-pkg/log" - settings "github.com/owncloud/ocis/settings/pkg/proto/v0" - ssvc "github.com/owncloud/ocis/settings/pkg/service/v0" -) - -const ( - settingUUIDProfileLanguage = "aa8cfbe5-95d4-4f7e-a032-c3c01f5f062f" -) - -// RegisterSettingsBundles pushes the settings bundle definitions for this extension to the ocis-settings service. -func RegisterSettingsBundles(l *olog.Logger) { - // TODO this won't work with a registry other than mdns. Look into Micro's client initialization. - // https://github.com/owncloud/ocis-proxy/issues/38 - service := settings.NewBundleService("com.owncloud.api.settings", mclient.DefaultClient) - - bundleRequests := []settings.SaveBundleRequest{ - generateBundleProfileRequest(), - } - - for i := range bundleRequests { - res, err := service.SaveBundle(context.Background(), &bundleRequests[i]) - if err != nil { - l.Err(err).Str("bundle", bundleRequests[i].Bundle.Id).Msg("Error registering bundle") - } else { - l.Info().Str("bundle", res.Bundle.Id).Msg("Successfully registered bundle") - } - } - - permissionRequests := generateProfilePermissionsRequests() - for i := range permissionRequests { - res, err := service.AddSettingToBundle(context.Background(), &permissionRequests[i]) - bundleID := permissionRequests[i].BundleId - if err != nil { - l.Err(err).Str("bundle", bundleID).Str("setting", permissionRequests[i].Setting.Id).Msg("Error adding setting to bundle") - } else { - l.Info().Str("bundle", bundleID).Str("setting", res.Setting.Id).Msg("Successfully added setting to bundle") - } - } -} - -var languageSetting = settings.Setting_SingleChoiceValue{ - SingleChoiceValue: &settings.SingleChoiceList{ - Options: []*settings.ListOption{ - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "cs", - }, - }, - DisplayValue: "Czech", - }, - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "de", - }, - }, - DisplayValue: "Deutsch", - }, - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "en", - }, - }, - DisplayValue: "English", - }, - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "es", - }, - }, - DisplayValue: "Español", - }, - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "fr", - }, - }, - DisplayValue: "Français", - }, - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "gl", - }, - }, - DisplayValue: "Galego", - }, - { - Value: &settings.ListOptionValue{ - Option: &settings.ListOptionValue_StringValue{ - StringValue: "it", - }, - }, - DisplayValue: "Italiano", - }, - }, - }, -} - -func generateBundleProfileRequest() settings.SaveBundleRequest { - return settings.SaveBundleRequest{ - Bundle: &settings.Bundle{ - Id: "2a506de7-99bd-4f0d-994e-c38e72c28fd9", - Name: "profile", - Extension: "ocis-accounts", - Type: settings.Bundle_TYPE_DEFAULT, - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_SYSTEM, - }, - DisplayName: "Profile", - Settings: []*settings.Setting{ - { - Id: settingUUIDProfileLanguage, - Name: "language", - DisplayName: "Language", - Description: "User language", - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_USER, - }, - Value: &languageSetting, - }, - }, - }, - } -} - -func generateProfilePermissionsRequests() []settings.AddSettingToBundleRequest { - // TODO: we don't want to set up permissions for settings manually in the future. Instead each setting should come with - // a set of default permissions for the default roles (guest, user, admin). - return []settings.AddSettingToBundleRequest{ - { - BundleId: ssvc.BundleUUIDRoleAdmin, - Setting: &settings.Setting{ - Id: "7d81f103-0488-4853-bce5-98dcce36d649", - Name: "language-readwrite", - DisplayName: "Permission to read and set the language (anyone)", - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_SETTING, - Id: settingUUIDProfileLanguage, - }, - Value: &settings.Setting_PermissionValue{ - PermissionValue: &settings.Permission{ - Operation: settings.Permission_OPERATION_READWRITE, - Constraint: settings.Permission_CONSTRAINT_ALL, - }, - }, - }, - }, - { - BundleId: ssvc.BundleUUIDRoleUser, - Setting: &settings.Setting{ - Id: "640e00d2-4df8-41bd-b1c2-9f30a01e0e99", - Name: "language-readwrite", - DisplayName: "Permission to read and set the language (self)", - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_SETTING, - Id: settingUUIDProfileLanguage, - }, - Value: &settings.Setting_PermissionValue{ - PermissionValue: &settings.Permission{ - Operation: settings.Permission_OPERATION_READWRITE, - Constraint: settings.Permission_CONSTRAINT_OWN, - }, - }, - }, - }, - { - BundleId: ssvc.BundleUUIDRoleGuest, - Setting: &settings.Setting{ - Id: "ca878636-8b1a-4fae-8282-8617a4c13597", - Name: "language-readwrite", - DisplayName: "Permission to read and set the language (self)", - Resource: &settings.Resource{ - Type: settings.Resource_TYPE_SETTING, - Id: settingUUIDProfileLanguage, - }, - Value: &settings.Setting_PermissionValue{ - PermissionValue: &settings.Permission{ - Operation: settings.Permission_OPERATION_READWRITE, - Constraint: settings.Permission_CONSTRAINT_OWN, - }, - }, - }, - }, - } -} diff --git a/accounts/pkg/version/version.go b/accounts/pkg/version/version.go deleted file mode 100644 index 81e81815f4..0000000000 --- a/accounts/pkg/version/version.go +++ /dev/null @@ -1,19 +0,0 @@ -package version - -import ( - "time" -) - -var ( - // String gets defined by the build system. - String = "0.0.0" - - // Date indicates the build date. - Date = "00000000" -) - -// Compiled returns the compile time of this service. -func Compiled() time.Time { - t, _ := time.Parse("20060102", Date) - return t -} diff --git a/accounts/reflex.conf b/accounts/reflex.conf deleted file mode 100644 index 3e496fb0b4..0000000000 --- a/accounts/reflex.conf +++ /dev/null @@ -1,5 +0,0 @@ -# backend --r '^(cmd|pkg)/.*\.go$' -R '^node_modules/' -s -- sh -c 'make bin/ocis-accounts && bin/ocis-accounts server --asset-path assets/' - -# frontend --r '^ui/.*\.(vue|js)$' -R '^node_modules/' -- sh -c 'yarn build && make generate' diff --git a/accounts/rollup.config.js b/accounts/rollup.config.js deleted file mode 100644 index 2c58522d70..0000000000 --- a/accounts/rollup.config.js +++ /dev/null @@ -1,52 +0,0 @@ -import vue from 'rollup-plugin-vue' -import { terser } from 'rollup-plugin-terser' -import replace from '@rollup/plugin-replace' -import filesize from 'rollup-plugin-filesize' -import resolve from 'rollup-plugin-node-resolve' -import commonjs from '@rollup/plugin-commonjs' -import babel from 'rollup-plugin-babel' -import json from '@rollup/plugin-json' -import builtins from '@erquhart/rollup-plugin-node-builtins' -import globals from 'rollup-plugin-node-globals' - -const production = !process.env.ROLLUP_WATCH - -// We can't really do much about circular dependencies in node_modules -function onwarn (warning) { - if (warning.code !== 'CIRCULAR_DEPENDENCY') { - console.error(`(!) ${warning.message}`) - } -} - -export default { - input: 'ui/app.js', - output: { - file: 'assets/accounts.js', - format: 'amd', - sourcemap: !production - }, - onwarn, - plugins: [ - vue(), - replace({ - 'process.env.NODE_ENV': JSON.stringify('production') - }), - resolve({ - mainFields: ['browser', 'jsnext', 'module', 'main'], - include: 'node_modules/**', - preferBuiltins: true - }), - babel({ - exclude: 'node_modules/**', - runtimeHelpers: true - }), - commonjs({ - include: 'node_modules/**' - }), - json(), - globals(), - builtins(), - production && terser(), - production && filesize() - ] -} diff --git a/accounts/sonar-project.properties b/accounts/sonar-project.properties deleted file mode 100644 index ab347e8d63..0000000000 --- a/accounts/sonar-project.properties +++ /dev/null @@ -1,37 +0,0 @@ - -sonar.projectKey=owncloud_ocis-accounts -sonar.organization=owncloud-1 -sonar.projectName=ocis-accounts -sonar.projectVersion=1.0 -sonar.host.url=https://sonarcloud.io - -# ===================================================== -# Meta-data for the project -# ===================================================== - -sonar.links.homepage=https://github.com/owncloud/ocis-accounts -sonar.links.ci=https://cloud.drone.io/owncloud/ocis-accounts/ -sonar.links.scm=https://github.com/owncloud/ocis-accounts -sonar.links.issue=https://github.com/owncloud/ocis/accounts/issues - - -# ===================================================== -# Properties that will be shared amongst all modules -# ===================================================== - -# SQ standard properties -sonar.sources=. - -# Pull Requests -sonar.pullrequest.provider=GitHub -sonar.pullrequest.github.repository=owncloud/ocis-accounts -sonar.pullrequest.base=${env.SONAR_PULL_REQUEST_BASE} -sonar.pullrequest.branch=${env.SONAR_PULL_REQUEST_BRANCH} -sonar.pullrequest.key=${env.SONAR_PULL_REQUEST_KEY} - - -# Properties specific to language plugins: -sonar.go.coverage.reportPaths=coverage.out - -# Exclude protobuf files -sonar.exclusions=pkg/proto/**, changelog/**, docs/**, package.json, rollup.config.js, changelog.md diff --git a/accounts/third_party/google/api/annotations.proto b/accounts/third_party/google/api/annotations.proto deleted file mode 100644 index 18dcf20990..0000000000 --- a/accounts/third_party/google/api/annotations.proto +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2015, Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -syntax = "proto3"; - -package google.api; - -import "google/api/http.proto"; -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "AnnotationsProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.MethodOptions { - // See `HttpRule`. - HttpRule http = 72295728; -} \ No newline at end of file diff --git a/accounts/third_party/google/api/field_behavior.proto b/accounts/third_party/google/api/field_behavior.proto deleted file mode 100644 index 540dbb925f..0000000000 --- a/accounts/third_party/google/api/field_behavior.proto +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2019 Google LLC. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -syntax = "proto3"; - -package google.api; - -import "google/protobuf/descriptor.proto"; - -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "FieldBehaviorProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -extend google.protobuf.FieldOptions { - // A designation of a specific field behavior (required, output only, etc.) - // in protobuf messages. - // - // Examples: - // - // string name = 1 [(google.api.field_behavior) = REQUIRED]; - // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; - // google.protobuf.Duration ttl = 1 - // [(google.api.field_behavior) = INPUT_ONLY]; - // google.protobuf.Timestamp expire_time = 1 - // [(google.api.field_behavior) = OUTPUT_ONLY, - // (google.api.field_behavior) = IMMUTABLE]; - repeated google.api.FieldBehavior field_behavior = 1052; -} - -// An indicator of the behavior of a given field (for example, that a field -// is required in requests, or given as output but ignored as input). -// This **does not** change the behavior in protocol buffers itself; it only -// denotes the behavior and may affect how API tooling handles the field. -// -// Note: This enum **may** receive new values in the future. -enum FieldBehavior { - // Conventional default for enums. Do not use this. - FIELD_BEHAVIOR_UNSPECIFIED = 0; - - // Specifically denotes a field as optional. - // While all fields in protocol buffers are optional, this may be specified - // for emphasis if appropriate. - OPTIONAL = 1; - - // Denotes a field as required. - // This indicates that the field **must** be provided as part of the request, - // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). - REQUIRED = 2; - - // Denotes a field as output only. - // This indicates that the field is provided in responses, but including the - // field in a request does nothing (the server *must* ignore it and - // *must not* throw an error as a result of the field's presence). - OUTPUT_ONLY = 3; - - // Denotes a field as input only. - // This indicates that the field is provided in requests, and the - // corresponding field is not included in output. - INPUT_ONLY = 4; - - // Denotes a field as immutable. - // This indicates that the field may be set once in a request to create a - // resource, but may not be changed thereafter. - IMMUTABLE = 5; -} \ No newline at end of file diff --git a/accounts/third_party/google/api/http.proto b/accounts/third_party/google/api/http.proto deleted file mode 100644 index a43cff771f..0000000000 --- a/accounts/third_party/google/api/http.proto +++ /dev/null @@ -1,376 +0,0 @@ -// Copyright 2019 Google LLC. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -syntax = "proto3"; - -package google.api; - -option cc_enable_arenas = true; -option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; -option java_multiple_files = true; -option java_outer_classname = "HttpProto"; -option java_package = "com.google.api"; -option objc_class_prefix = "GAPI"; - -// Defines the HTTP configuration for an API service. It contains a list of -// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method -// to one or more HTTP REST API methods. -message Http { - // A list of HTTP configuration rules that apply to individual API methods. - // - // **NOTE:** All service configuration rules follow "last one wins" order. - repeated HttpRule rules = 1; - - // When set to true, URL path parameters will be fully URI-decoded except in - // cases of single segment matches in reserved expansion, where "%2F" will be - // left encoded. - // - // The default behavior is to not decode RFC 6570 reserved characters in multi - // segment matches. - bool fully_decode_reserved_expansion = 2; -} - -// # gRPC Transcoding -// -// gRPC Transcoding is a feature for mapping between a gRPC method and one or -// more HTTP REST endpoints. It allows developers to build a single API service -// that supports both gRPC APIs and REST APIs. Many systems, including [Google -// APIs](https://github.com/googleapis/googleapis), -// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC -// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), -// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature -// and use it for large scale production services. -// -// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies -// how different portions of the gRPC request message are mapped to the URL -// path, URL query parameters, and HTTP request body. It also controls how the -// gRPC response message is mapped to the HTTP response body. `HttpRule` is -// typically specified as an `google.api.http` annotation on the gRPC method. -// -// Each mapping specifies a URL path template and an HTTP method. The path -// template may refer to one or more fields in the gRPC request message, as long -// as each field is a non-repeated field with a primitive (non-message) type. -// The path template controls how fields of the request message are mapped to -// the URL path. -// -// Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/{name=messages/*}" -// }; -// } -// } -// message GetMessageRequest { -// string name = 1; // Mapped to URL path. -// } -// message Message { -// string text = 1; // The resource content. -// } -// -// This enables an HTTP REST to gRPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(name: "messages/123456")` -// -// Any fields in the request message which are not bound by the path template -// automatically become HTTP query parameters if there is no HTTP request body. -// For example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get:"/v1/messages/{message_id}" -// }; -// } -// } -// message GetMessageRequest { -// message SubMessage { -// string subfield = 1; -// } -// string message_id = 1; // Mapped to URL path. -// int64 revision = 2; // Mapped to URL query parameter `revision`. -// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. -// } -// -// This enables a HTTP JSON to RPC mapping as below: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456?revision=2&sub.subfield=foo` | -// `GetMessage(message_id: "123456" revision: 2 sub: SubMessage(subfield: -// "foo"))` -// -// Note that fields which are mapped to URL query parameters must have a -// primitive type or a repeated primitive type or a non-repeated message type. -// In the case of a repeated type, the parameter can be repeated in the URL -// as `...?param=A¶m=B`. In the case of a message type, each field of the -// message is mapped to a separate parameter, such as -// `...?foo.a=A&foo.b=B&foo.c=C`. -// -// For HTTP methods that allow a request body, the `body` field -// specifies the mapping. Consider a REST update method on the -// message resource collection: -// -// service Messaging { -// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "message" -// }; -// } -// } -// message UpdateMessageRequest { -// string message_id = 1; // mapped to the URL -// Message message = 2; // mapped to the body -// } -// -// The following HTTP JSON to RPC mapping is enabled, where the -// representation of the JSON in the request body is determined by -// protos JSON encoding: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" message { text: "Hi!" })` -// -// The special name `*` can be used in the body mapping to define that -// every field not bound by the path template should be mapped to the -// request body. This enables the following alternative definition of -// the update method: -// -// service Messaging { -// rpc UpdateMessage(Message) returns (Message) { -// option (google.api.http) = { -// patch: "/v1/messages/{message_id}" -// body: "*" -// }; -// } -// } -// message Message { -// string message_id = 1; -// string text = 2; -// } -// -// -// The following HTTP JSON to RPC mapping is enabled: -// -// HTTP | gRPC -// -----|----- -// `PATCH /v1/messages/123456 { "text": "Hi!" }` | `UpdateMessage(message_id: -// "123456" text: "Hi!")` -// -// Note that when using `*` in the body mapping, it is not possible to -// have HTTP parameters, as all fields not bound by the path end in -// the body. This makes this option more rarely used in practice when -// defining REST APIs. The common usage of `*` is in custom methods -// which don't use the URL at all for transferring data. -// -// It is possible to define multiple HTTP methods for one RPC by using -// the `additional_bindings` option. Example: -// -// service Messaging { -// rpc GetMessage(GetMessageRequest) returns (Message) { -// option (google.api.http) = { -// get: "/v1/messages/{message_id}" -// additional_bindings { -// get: "/v1/users/{user_id}/messages/{message_id}" -// } -// }; -// } -// } -// message GetMessageRequest { -// string message_id = 1; -// string user_id = 2; -// } -// -// This enables the following two alternative HTTP JSON to RPC mappings: -// -// HTTP | gRPC -// -----|----- -// `GET /v1/messages/123456` | `GetMessage(message_id: "123456")` -// `GET /v1/users/me/messages/123456` | `GetMessage(user_id: "me" message_id: -// "123456")` -// -// ## Rules for HTTP mapping -// -// 1. Leaf request fields (recursive expansion nested messages in the request -// message) are classified into three categories: -// - Fields referred by the path template. They are passed via the URL path. -// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They are passed via the HTTP -// request body. -// - All other fields are passed via the URL query parameters, and the -// parameter name is the field path in the request message. A repeated -// field can be represented as multiple query parameters under the same -// name. -// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL query parameter, all fields -// are passed via URL path and HTTP request body. -// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP request body, all -// fields are passed via URL path and URL query parameters. -// -// ### Path template syntax -// -// Template = "/" Segments [ Verb ] ; -// Segments = Segment { "/" Segment } ; -// Segment = "*" | "**" | LITERAL | Variable ; -// Variable = "{" FieldPath [ "=" Segments ] "}" ; -// FieldPath = IDENT { "." IDENT } ; -// Verb = ":" LITERAL ; -// -// The syntax `*` matches a single URL path segment. The syntax `**` matches -// zero or more URL path segments, which must be the last part of the URL path -// except the `Verb`. -// -// The syntax `Variable` matches part of the URL path as specified by its -// template. A variable template must not contain other variables. If a variable -// matches a single path segment, its template may be omitted, e.g. `{var}` -// is equivalent to `{var=*}`. -// -// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` -// contains any reserved character, such characters should be percent-encoded -// before the matching. -// -// If a variable contains exactly one path segment, such as `"{var}"` or -// `"{var=*}"`, when such a variable is expanded into a URL path on the client -// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The -// server side does the reverse decoding. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{var}`. -// -// If a variable contains multiple path segments, such as `"{var=foo/*}"` -// or `"{var=**}"`, when such a variable is expanded into a URL path on the -// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. -// The server side does the reverse decoding, except "%2F" and "%2f" are left -// unchanged. Such variables show up in the -// [Discovery -// Document](https://developers.google.com/discovery/v1/reference/apis) as -// `{+var}`. -// -// ## Using gRPC API Service Configuration -// -// gRPC API Service Configuration (service config) is a configuration language -// for configuring a gRPC service to become a user-facing product. The -// service config is simply the YAML representation of the `google.api.Service` -// proto message. -// -// As an alternative to annotating your proto file, you can configure gRPC -// transcoding in your service config YAML files. You do this by specifying a -// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same -// effect as the proto annotation. This can be particularly useful if you -// have a proto that is reused in multiple services. Note that any transcoding -// specified in the service config will override any matching transcoding -// configuration in the proto. -// -// Example: -// -// http: -// rules: -// # Selects a gRPC method and applies HttpRule to it. -// - selector: example.v1.Messaging.GetMessage -// get: /v1/messages/{message_id}/{sub.subfield} -// -// ## Special notes -// -// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the -// proto to JSON conversion must follow the [proto3 -// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). -// -// While the single segment variable follows the semantics of -// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String -// Expansion, the multi segment variable **does not** follow RFC 6570 Section -// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion -// does not expand special characters like `?` and `#`, which would lead -// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding -// for multi segment variables. -// -// The path variables **must not** refer to any repeated or mapped field, -// because client libraries are not capable of handling such variable expansion. -// -// The path variables **must not** capture the leading "/" character. The reason -// is that the most common use case "{var}" does not capture the leading "/" -// character. For consistency, all path variables must share the same behavior. -// -// Repeated message fields must not be mapped to URL query parameters, because -// no client library can support such complicated mapping. -// -// If an API needs to use a JSON array for request or response body, it can map -// the request or response body to a repeated field. However, some gRPC -// Transcoding implementations may not support this feature. -message HttpRule { - // Selects a method to which this rule applies. - // - // Refer to [selector][google.api.DocumentationRule.selector] for syntax details. - string selector = 1; - - // Determines the URL pattern is matched by this rules. This pattern can be - // used with any of the {get|put|post|delete|patch} methods. A custom method - // can be defined using the 'custom' field. - oneof pattern { - // Maps to HTTP GET. Used for listing and getting information about - // resources. - string get = 2; - - // Maps to HTTP PUT. Used for replacing a resource. - string put = 3; - - // Maps to HTTP POST. Used for creating a resource or performing an action. - string post = 4; - - // Maps to HTTP DELETE. Used for deleting a resource. - string delete = 5; - - // Maps to HTTP PATCH. Used for updating a resource. - string patch = 6; - - // The custom pattern is used for specifying an HTTP method that is not - // included in the `pattern` field, such as HEAD, or "*" to leave the - // HTTP method unspecified for this rule. The wild-card rule is useful - // for services that provide content to Web (HTML) clients. - CustomHttpPattern custom = 8; - } - - // The name of the request field whose value is mapped to the HTTP request - // body, or `*` for mapping all request fields not captured by the path - // pattern to the HTTP body, or omitted for not having any HTTP request body. - // - // NOTE: the referred field must be present at the top-level of the request - // message type. - string body = 7; - - // Optional. The name of the response field whose value is mapped to the HTTP - // response body. When omitted, the entire response message will be used - // as the HTTP response body. - // - // NOTE: The referred field must be present at the top-level of the response - // message type. - string response_body = 12; - - // Additional HTTP bindings for the selector. Nested bindings must - // not contain an `additional_bindings` field themselves (that is, - // the nesting may only be one level deep). - repeated HttpRule additional_bindings = 11; -} - -// A custom pattern is used for defining custom HTTP verb. -message CustomHttpPattern { - // The name of this custom HTTP verb. - string kind = 1; - - // The path matched by this custom verb. - string path = 2; -} \ No newline at end of file diff --git a/accounts/third_party/google/protobuf/descriptor.proto b/accounts/third_party/google/protobuf/descriptor.proto deleted file mode 100644 index dcfe8fe676..0000000000 --- a/accounts/third_party/google/protobuf/descriptor.proto +++ /dev/null @@ -1,909 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -// Author: kenton@google.com (Kenton Varda) -// Based on original Protocol Buffers design by -// Sanjay Ghemawat, Jeff Dean, and others. -// -// The messages in this file describe the definitions found in .proto files. -// A valid .proto file can be translated directly to a FileDescriptorProto -// without any other information (e.g. without reading its imports). - - -syntax = "proto2"; - -package google.protobuf; - -option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "DescriptorProtos"; -option csharp_namespace = "Google.Protobuf.Reflection"; -option objc_class_prefix = "GPB"; -option cc_enable_arenas = true; - -// descriptor.proto must be optimized for speed because reflection-based -// algorithms don't work during bootstrapping. -option optimize_for = SPEED; - -// The protocol compiler can output a FileDescriptorSet containing the .proto -// files it parses. -message FileDescriptorSet { - repeated FileDescriptorProto file = 1; -} - -// Describes a complete .proto file. -message FileDescriptorProto { - optional string name = 1; // file name, relative to root of source tree - optional string package = 2; // e.g. "foo", "foo.bar", etc. - - // Names of files imported by this file. - repeated string dependency = 3; - // Indexes of the public imported files in the dependency list above. - repeated int32 public_dependency = 10; - // Indexes of the weak imported files in the dependency list. - // For Google-internal migration only. Do not use. - repeated int32 weak_dependency = 11; - - // All top-level definitions in this file. - repeated DescriptorProto message_type = 4; - repeated EnumDescriptorProto enum_type = 5; - repeated ServiceDescriptorProto service = 6; - repeated FieldDescriptorProto extension = 7; - - optional FileOptions options = 8; - - // This field contains optional information about the original source code. - // You may safely remove this entire field without harming runtime - // functionality of the descriptors -- the information is needed only by - // development tools. - optional SourceCodeInfo source_code_info = 9; - - // The syntax of the proto file. - // The supported values are "proto2" and "proto3". - optional string syntax = 12; -} - -// Describes a message type. -message DescriptorProto { - optional string name = 1; - - repeated FieldDescriptorProto field = 2; - repeated FieldDescriptorProto extension = 6; - - repeated DescriptorProto nested_type = 3; - repeated EnumDescriptorProto enum_type = 4; - - message ExtensionRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Exclusive. - - optional ExtensionRangeOptions options = 3; - } - repeated ExtensionRange extension_range = 5; - - repeated OneofDescriptorProto oneof_decl = 8; - - optional MessageOptions options = 7; - - // Range of reserved tag numbers. Reserved tag numbers may not be used by - // fields or extension ranges in the same message. Reserved ranges may - // not overlap. - message ReservedRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Exclusive. - } - repeated ReservedRange reserved_range = 9; - // Reserved field names, which may not be used by fields in the same message. - // A given name may only be reserved once. - repeated string reserved_name = 10; -} - -message ExtensionRangeOptions { - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -// Describes a field within a message. -message FieldDescriptorProto { - enum Type { - // 0 is reserved for errors. - // Order is weird for historical reasons. - TYPE_DOUBLE = 1; - TYPE_FLOAT = 2; - // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if - // negative values are likely. - TYPE_INT64 = 3; - TYPE_UINT64 = 4; - // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if - // negative values are likely. - TYPE_INT32 = 5; - TYPE_FIXED64 = 6; - TYPE_FIXED32 = 7; - TYPE_BOOL = 8; - TYPE_STRING = 9; - // Tag-delimited aggregate. - // Group type is deprecated and not supported in proto3. However, Proto3 - // implementations should still be able to parse the group wire format and - // treat group fields as unknown fields. - TYPE_GROUP = 10; - TYPE_MESSAGE = 11; // Length-delimited aggregate. - - // New in version 2. - TYPE_BYTES = 12; - TYPE_UINT32 = 13; - TYPE_ENUM = 14; - TYPE_SFIXED32 = 15; - TYPE_SFIXED64 = 16; - TYPE_SINT32 = 17; // Uses ZigZag encoding. - TYPE_SINT64 = 18; // Uses ZigZag encoding. - } - - enum Label { - // 0 is reserved for errors - LABEL_OPTIONAL = 1; - LABEL_REQUIRED = 2; - LABEL_REPEATED = 3; - } - - optional string name = 1; - optional int32 number = 3; - optional Label label = 4; - - // If type_name is set, this need not be set. If both this and type_name - // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. - optional Type type = 5; - - // For message and enum types, this is the name of the type. If the name - // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping - // rules are used to find the type (i.e. first the nested types within this - // message are searched, then within the parent, on up to the root - // namespace). - optional string type_name = 6; - - // For extensions, this is the name of the type being extended. It is - // resolved in the same manner as type_name. - optional string extendee = 2; - - // For numeric types, contains the original text representation of the value. - // For booleans, "true" or "false". - // For strings, contains the default text contents (not escaped in any way). - // For bytes, contains the C escaped value. All bytes >= 128 are escaped. - // TODO(kenton): Base-64 encode? - optional string default_value = 7; - - // If set, gives the index of a oneof in the containing type's oneof_decl - // list. This field is a member of that oneof. - optional int32 oneof_index = 9; - - // JSON name of this field. The value is set by protocol compiler. If the - // user has set a "json_name" option on this field, that option's value - // will be used. Otherwise, it's deduced from the field's name by converting - // it to camelCase. - optional string json_name = 10; - - optional FieldOptions options = 8; - - // If true, this is a proto3 "optional". When a proto3 field is optional, it - // tracks presence regardless of field type. - // - // When proto3_optional is true, this field must be belong to a oneof to - // signal to old proto3 clients that presence is tracked for this field. This - // oneof is known as a "synthetic" oneof, and this field must be its sole - // member (each proto3 optional field gets its own synthetic oneof). Synthetic - // oneofs exist in the descriptor only, and do not generate any API. Synthetic - // oneofs must be ordered after all "real" oneofs. - // - // For message fields, proto3_optional doesn't create any semantic change, - // since non-repeated message fields always track presence. However it still - // indicates the semantic detail of whether the user wrote "optional" or not. - // This can be useful for round-tripping the .proto file. For consistency we - // give message fields a synthetic oneof also, even though it is not required - // to track presence. This is especially important because the parser can't - // tell if a field is a message or an enum, so it must always create a - // synthetic oneof. - // - // Proto2 optional fields do not set this flag, because they already indicate - // optional with `LABEL_OPTIONAL`. - optional bool proto3_optional = 17; -} - -// Describes a oneof. -message OneofDescriptorProto { - optional string name = 1; - optional OneofOptions options = 2; -} - -// Describes an enum type. -message EnumDescriptorProto { - optional string name = 1; - - repeated EnumValueDescriptorProto value = 2; - - optional EnumOptions options = 3; - - // Range of reserved numeric values. Reserved values may not be used by - // entries in the same enum. Reserved ranges may not overlap. - // - // Note that this is distinct from DescriptorProto.ReservedRange in that it - // is inclusive such that it can appropriately represent the entire int32 - // domain. - message EnumReservedRange { - optional int32 start = 1; // Inclusive. - optional int32 end = 2; // Inclusive. - } - - // Range of reserved numeric values. Reserved numeric values may not be used - // by enum values in the same enum declaration. Reserved ranges may not - // overlap. - repeated EnumReservedRange reserved_range = 4; - - // Reserved enum value names, which may not be reused. A given name may only - // be reserved once. - repeated string reserved_name = 5; -} - -// Describes a value within an enum. -message EnumValueDescriptorProto { - optional string name = 1; - optional int32 number = 2; - - optional EnumValueOptions options = 3; -} - -// Describes a service. -message ServiceDescriptorProto { - optional string name = 1; - repeated MethodDescriptorProto method = 2; - - optional ServiceOptions options = 3; -} - -// Describes a method of a service. -message MethodDescriptorProto { - optional string name = 1; - - // Input and output type names. These are resolved in the same way as - // FieldDescriptorProto.type_name, but must refer to a message type. - optional string input_type = 2; - optional string output_type = 3; - - optional MethodOptions options = 4; - - // Identifies if client streams multiple client messages - optional bool client_streaming = 5 [default = false]; - // Identifies if server streams multiple server messages - optional bool server_streaming = 6 [default = false]; -} - - -// =================================================================== -// Options - -// Each of the definitions above may have "options" attached. These are -// just annotations which may cause code to be generated slightly differently -// or may contain hints for code that manipulates protocol messages. -// -// Clients may define custom options as extensions of the *Options messages. -// These extensions may not yet be known at parsing time, so the parser cannot -// store the values in them. Instead it stores them in a field in the *Options -// message called uninterpreted_option. This field must have the same name -// across all *Options messages. We then use this field to populate the -// extensions when we build a descriptor, at which point all protos have been -// parsed and so all extensions are known. -// -// Extension numbers for custom options may be chosen as follows: -// * For options which will only be used within a single application or -// organization, or for experimental options, use field numbers 50000 -// through 99999. It is up to you to ensure that you do not use the -// same number for multiple options. -// * For options which will be published and used publicly by multiple -// independent entities, e-mail protobuf-global-extension-registry@google.com -// to reserve extension numbers. Simply provide your project name (e.g. -// Objective-C plugin) and your project website (if available) -- there's no -// need to explain how you intend to use them. Usually you only need one -// extension number. You can declare multiple options with only one extension -// number by putting them in a sub-message. See the Custom Options section of -// the docs for examples: -// https://developers.google.com/protocol-buffers/docs/proto#options -// If this turns out to be popular, a web service will be set up -// to automatically assign option numbers. - -message FileOptions { - - // Sets the Java package where classes generated from this .proto will be - // placed. By default, the proto package is used, but this is often - // inappropriate because proto packages do not normally start with backwards - // domain names. - optional string java_package = 1; - - - // If set, all the classes from the .proto file are wrapped in a single - // outer class with the given name. This applies to both Proto1 - // (equivalent to the old "--one_java_file" option) and Proto2 (where - // a .proto always translates to a single class, but you may want to - // explicitly choose the class name). - optional string java_outer_classname = 8; - - // If set true, then the Java code generator will generate a separate .java - // file for each top-level message, enum, and service defined in the .proto - // file. Thus, these types will *not* be nested inside the outer class - // named by java_outer_classname. However, the outer class will still be - // generated to contain the file's getDescriptor() method as well as any - // top-level extensions defined in the file. - optional bool java_multiple_files = 10 [default = false]; - - // This option does nothing. - optional bool java_generate_equals_and_hash = 20 [deprecated=true]; - - // If set true, then the Java2 code generator will generate code that - // throws an exception whenever an attempt is made to assign a non-UTF-8 - // byte sequence to a string field. - // Message reflection will do the same. - // However, an extension field still accepts non-UTF-8 byte sequences. - // This option has no effect on when used with the lite runtime. - optional bool java_string_check_utf8 = 27 [default = false]; - - - // Generated classes can be optimized for speed or code size. - enum OptimizeMode { - SPEED = 1; // Generate complete code for parsing, serialization, - // etc. - CODE_SIZE = 2; // Use ReflectionOps to implement these methods. - LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. - } - optional OptimizeMode optimize_for = 9 [default = SPEED]; - - // Sets the Go package where structs generated from this .proto will be - // placed. If omitted, the Go package will be derived from the following: - // - The basename of the package import path, if provided. - // - Otherwise, the package statement in the .proto file, if present. - // - Otherwise, the basename of the .proto file, without extension. - optional string go_package = 11; - - - - - // Should generic services be generated in each language? "Generic" services - // are not specific to any particular RPC system. They are generated by the - // main code generators in each language (without additional plugins). - // Generic services were the only kind of service generation supported by - // early versions of google.protobuf. - // - // Generic services are now considered deprecated in favor of using plugins - // that generate code specific to your particular RPC system. Therefore, - // these default to false. Old code which depends on generic services should - // explicitly set them to true. - optional bool cc_generic_services = 16 [default = false]; - optional bool java_generic_services = 17 [default = false]; - optional bool py_generic_services = 18 [default = false]; - optional bool php_generic_services = 42 [default = false]; - - // Is this file deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for everything in the file, or it will be completely ignored; in the very - // least, this is a formalization for deprecating files. - optional bool deprecated = 23 [default = false]; - - // Enables the use of arenas for the proto messages in this file. This applies - // only to generated classes for C++. - optional bool cc_enable_arenas = 31 [default = true]; - - - // Sets the objective c class prefix which is prepended to all objective c - // generated classes from this .proto. There is no default. - optional string objc_class_prefix = 36; - - // Namespace for generated classes; defaults to the package. - optional string csharp_namespace = 37; - - // By default Swift generators will take the proto package and CamelCase it - // replacing '.' with underscore and use that to prefix the types/symbols - // defined. When this options is provided, they will use this value instead - // to prefix the types/symbols defined. - optional string swift_prefix = 39; - - // Sets the php class prefix which is prepended to all php generated classes - // from this .proto. Default is empty. - optional string php_class_prefix = 40; - - // Use this option to change the namespace of php generated classes. Default - // is empty. When this option is empty, the package name will be used for - // determining the namespace. - optional string php_namespace = 41; - - // Use this option to change the namespace of php generated metadata classes. - // Default is empty. When this option is empty, the proto file name will be - // used for determining the namespace. - optional string php_metadata_namespace = 44; - - // Use this option to change the package of ruby generated classes. Default - // is empty. When this option is not set, the package name will be used for - // determining the ruby package. - optional string ruby_package = 45; - - - // The parser stores options it doesn't recognize here. - // See the documentation for the "Options" section above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. - // See the documentation for the "Options" section above. - extensions 1000 to max; - - reserved 38; -} - -message MessageOptions { - // Set true to use the old proto1 MessageSet wire format for extensions. - // This is provided for backwards-compatibility with the MessageSet wire - // format. You should not use this for any other reason: It's less - // efficient, has fewer features, and is more complicated. - // - // The message must be defined exactly as follows: - // message Foo { - // option message_set_wire_format = true; - // extensions 4 to max; - // } - // Note that the message cannot have any defined fields; MessageSets only - // have extensions. - // - // All extensions of your type must be singular messages; e.g. they cannot - // be int32s, enums, or repeated messages. - // - // Because this is an option, the above two restrictions are not enforced by - // the protocol compiler. - optional bool message_set_wire_format = 1 [default = false]; - - // Disables the generation of the standard "descriptor()" accessor, which can - // conflict with a field of the same name. This is meant to make migration - // from proto1 easier; new code should avoid fields named "descriptor". - optional bool no_standard_descriptor_accessor = 2 [default = false]; - - // Is this message deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the message, or it will be completely ignored; in the very least, - // this is a formalization for deprecating messages. - optional bool deprecated = 3 [default = false]; - - // Whether the message is an automatically generated map entry type for the - // maps field. - // - // For maps fields: - // map map_field = 1; - // The parsed descriptor looks like: - // message MapFieldEntry { - // option map_entry = true; - // optional KeyType key = 1; - // optional ValueType value = 2; - // } - // repeated MapFieldEntry map_field = 1; - // - // Implementations may choose not to generate the map_entry=true message, but - // use a native map in the target language to hold the keys and values. - // The reflection APIs in such implementations still need to work as - // if the field is a repeated message field. - // - // NOTE: Do not set the option in .proto files. Always use the maps syntax - // instead. The option should only be implicitly set by the proto compiler - // parser. - optional bool map_entry = 7; - - reserved 8; // javalite_serializable - reserved 9; // javanano_as_lite - - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message FieldOptions { - // The ctype option instructs the C++ code generator to use a different - // representation of the field than it normally would. See the specific - // options below. This option is not yet implemented in the open source - // release -- sorry, we'll try to include it in a future version! - optional CType ctype = 1 [default = STRING]; - enum CType { - // Default mode. - STRING = 0; - - CORD = 1; - - STRING_PIECE = 2; - } - // The packed option can be enabled for repeated primitive fields to enable - // a more efficient representation on the wire. Rather than repeatedly - // writing the tag and type for each element, the entire array is encoded as - // a single length-delimited blob. In proto3, only explicit setting it to - // false will avoid using packed encoding. - optional bool packed = 2; - - // The jstype option determines the JavaScript type used for values of the - // field. The option is permitted only for 64 bit integral and fixed types - // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING - // is represented as JavaScript string, which avoids loss of precision that - // can happen when a large value is converted to a floating point JavaScript. - // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to - // use the JavaScript "number" type. The behavior of the default option - // JS_NORMAL is implementation dependent. - // - // This option is an enum to permit additional types to be added, e.g. - // goog.math.Integer. - optional JSType jstype = 6 [default = JS_NORMAL]; - enum JSType { - // Use the default type. - JS_NORMAL = 0; - - // Use JavaScript strings. - JS_STRING = 1; - - // Use JavaScript numbers. - JS_NUMBER = 2; - } - - // Should this field be parsed lazily? Lazy applies only to message-type - // fields. It means that when the outer message is initially parsed, the - // inner message's contents will not be parsed but instead stored in encoded - // form. The inner message will actually be parsed when it is first accessed. - // - // This is only a hint. Implementations are free to choose whether to use - // eager or lazy parsing regardless of the value of this option. However, - // setting this option true suggests that the protocol author believes that - // using lazy parsing on this field is worth the additional bookkeeping - // overhead typically needed to implement it. - // - // This option does not affect the public interface of any generated code; - // all method signatures remain the same. Furthermore, thread-safety of the - // interface is not affected by this option; const methods remain safe to - // call from multiple threads concurrently, while non-const methods continue - // to require exclusive access. - // - // - // Note that implementations may choose not to check required fields within - // a lazy sub-message. That is, calling IsInitialized() on the outer message - // may return true even if the inner message has missing required fields. - // This is necessary because otherwise the inner message would have to be - // parsed in order to perform the check, defeating the purpose of lazy - // parsing. An implementation which chooses not to check required fields - // must be consistent about it. That is, for any particular sub-message, the - // implementation must either *always* check its required fields, or *never* - // check its required fields, regardless of whether or not the message has - // been parsed. - optional bool lazy = 5 [default = false]; - - // Is this field deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for accessors, or it will be completely ignored; in the very least, this - // is a formalization for deprecating fields. - optional bool deprecated = 3 [default = false]; - - // For Google-internal migration only. Do not use. - optional bool weak = 10 [default = false]; - - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; - - reserved 4; // removed jtype -} - -message OneofOptions { - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message EnumOptions { - - // Set this option to true to allow mapping different tag names to the same - // value. - optional bool allow_alias = 2; - - // Is this enum deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the enum, or it will be completely ignored; in the very least, this - // is a formalization for deprecating enums. - optional bool deprecated = 3 [default = false]; - - reserved 5; // javanano_as_lite - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message EnumValueOptions { - // Is this enum value deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the enum value, or it will be completely ignored; in the very least, - // this is a formalization for deprecating enum values. - optional bool deprecated = 1 [default = false]; - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message ServiceOptions { - - // Note: Field numbers 1 through 32 are reserved for Google's internal RPC - // framework. We apologize for hoarding these numbers to ourselves, but - // we were already using them long before we decided to release Protocol - // Buffers. - - // Is this service deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the service, or it will be completely ignored; in the very least, - // this is a formalization for deprecating services. - optional bool deprecated = 33 [default = false]; - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - -message MethodOptions { - - // Note: Field numbers 1 through 32 are reserved for Google's internal RPC - // framework. We apologize for hoarding these numbers to ourselves, but - // we were already using them long before we decided to release Protocol - // Buffers. - - // Is this method deprecated? - // Depending on the target platform, this can emit Deprecated annotations - // for the method, or it will be completely ignored; in the very least, - // this is a formalization for deprecating methods. - optional bool deprecated = 33 [default = false]; - - // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, - // or neither? HTTP based RPC implementation may choose GET verb for safe - // methods, and PUT verb for idempotent methods instead of the default POST. - enum IdempotencyLevel { - IDEMPOTENCY_UNKNOWN = 0; - NO_SIDE_EFFECTS = 1; // implies idempotent - IDEMPOTENT = 2; // idempotent, but may have side effects - } - optional IdempotencyLevel idempotency_level = 34 - [default = IDEMPOTENCY_UNKNOWN]; - - // The parser stores options it doesn't recognize here. See above. - repeated UninterpretedOption uninterpreted_option = 999; - - // Clients can define custom options in extensions of this message. See above. - extensions 1000 to max; -} - - -// A message representing a option the parser does not recognize. This only -// appears in options protos created by the compiler::Parser class. -// DescriptorPool resolves these when building Descriptor objects. Therefore, -// options protos in descriptor objects (e.g. returned by Descriptor::options(), -// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions -// in them. -message UninterpretedOption { - // The name of the uninterpreted option. Each string represents a segment in - // a dot-separated name. is_extension is true iff a segment represents an - // extension (denoted with parentheses in options specs in .proto files). - // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents - // "foo.(bar.baz).qux". - message NamePart { - required string name_part = 1; - required bool is_extension = 2; - } - repeated NamePart name = 2; - - // The value of the uninterpreted option, in whatever type the tokenizer - // identified it as during parsing. Exactly one of these should be set. - optional string identifier_value = 3; - optional uint64 positive_int_value = 4; - optional int64 negative_int_value = 5; - optional double double_value = 6; - optional bytes string_value = 7; - optional string aggregate_value = 8; -} - -// =================================================================== -// Optional source code info - -// Encapsulates information about the original source file from which a -// FileDescriptorProto was generated. -message SourceCodeInfo { - // A Location identifies a piece of source code in a .proto file which - // corresponds to a particular definition. This information is intended - // to be useful to IDEs, code indexers, documentation generators, and similar - // tools. - // - // For example, say we have a file like: - // message Foo { - // optional string foo = 1; - // } - // Let's look at just the field definition: - // optional string foo = 1; - // ^ ^^ ^^ ^ ^^^ - // a bc de f ghi - // We have the following locations: - // span path represents - // [a,i) [ 4, 0, 2, 0 ] The whole field definition. - // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). - // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). - // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). - // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). - // - // Notes: - // - A location may refer to a repeated field itself (i.e. not to any - // particular index within it). This is used whenever a set of elements are - // logically enclosed in a single code segment. For example, an entire - // extend block (possibly containing multiple extension definitions) will - // have an outer location whose path refers to the "extensions" repeated - // field without an index. - // - Multiple locations may have the same path. This happens when a single - // logical declaration is spread out across multiple places. The most - // obvious example is the "extend" block again -- there may be multiple - // extend blocks in the same scope, each of which will have the same path. - // - A location's span is not always a subset of its parent's span. For - // example, the "extendee" of an extension declaration appears at the - // beginning of the "extend" block and is shared by all extensions within - // the block. - // - Just because a location's span is a subset of some other location's span - // does not mean that it is a descendant. For example, a "group" defines - // both a type and a field in a single declaration. Thus, the locations - // corresponding to the type and field and their components will overlap. - // - Code which tries to interpret locations should probably be designed to - // ignore those that it doesn't understand, as more types of locations could - // be recorded in the future. - repeated Location location = 1; - message Location { - // Identifies which part of the FileDescriptorProto was defined at this - // location. - // - // Each element is a field number or an index. They form a path from - // the root FileDescriptorProto to the place where the definition. For - // example, this path: - // [ 4, 3, 2, 7, 1 ] - // refers to: - // file.message_type(3) // 4, 3 - // .field(7) // 2, 7 - // .name() // 1 - // This is because FileDescriptorProto.message_type has field number 4: - // repeated DescriptorProto message_type = 4; - // and DescriptorProto.field has field number 2: - // repeated FieldDescriptorProto field = 2; - // and FieldDescriptorProto.name has field number 1: - // optional string name = 1; - // - // Thus, the above path gives the location of a field name. If we removed - // the last element: - // [ 4, 3, 2, 7 ] - // this path refers to the whole field declaration (from the beginning - // of the label to the terminating semicolon). - repeated int32 path = 1 [packed = true]; - - // Always has exactly three or four elements: start line, start column, - // end line (optional, otherwise assumed same as start line), end column. - // These are packed into a single field for efficiency. Note that line - // and column numbers are zero-based -- typically you will want to add - // 1 to each before displaying to a user. - repeated int32 span = 2 [packed = true]; - - // If this SourceCodeInfo represents a complete declaration, these are any - // comments appearing before and after the declaration which appear to be - // attached to the declaration. - // - // A series of line comments appearing on consecutive lines, with no other - // tokens appearing on those lines, will be treated as a single comment. - // - // leading_detached_comments will keep paragraphs of comments that appear - // before (but not connected to) the current element. Each paragraph, - // separated by empty lines, will be one comment element in the repeated - // field. - // - // Only the comment content is provided; comment markers (e.g. //) are - // stripped out. For block comments, leading whitespace and an asterisk - // will be stripped from the beginning of each line other than the first. - // Newlines are included in the output. - // - // Examples: - // - // optional int32 foo = 1; // Comment attached to foo. - // // Comment attached to bar. - // optional int32 bar = 2; - // - // optional string baz = 3; - // // Comment attached to baz. - // // Another line attached to baz. - // - // // Comment attached to qux. - // // - // // Another line attached to qux. - // optional double qux = 4; - // - // // Detached comment for corge. This is not leading or trailing comments - // // to qux or corge because there are blank lines separating it from - // // both. - // - // // Detached comment for corge paragraph 2. - // - // optional string corge = 5; - // /* Block comment attached - // * to corge. Leading asterisks - // * will be removed. */ - // /* Block comment attached to - // * grault. */ - // optional int32 grault = 6; - // - // // ignored detached comments. - optional string leading_comments = 3; - optional string trailing_comments = 4; - repeated string leading_detached_comments = 6; - } -} - -// Describes the relationship between generated code and its original source -// file. A GeneratedCodeInfo message is associated with only one generated -// source file, but may contain references to different source .proto files. -message GeneratedCodeInfo { - // An Annotation connects some span of text in generated code to an element - // of its generating .proto file. - repeated Annotation annotation = 1; - message Annotation { - // Identifies the element in the original source .proto file. This field - // is formatted the same as SourceCodeInfo.Location.path. - repeated int32 path = 1 [packed = true]; - - // Identifies the filesystem path to the original source .proto. - optional string source_file = 2; - - // Identifies the starting offset in bytes in the generated code - // that relates to the identified object. - optional int32 begin = 3; - - // Identifies the ending offset in bytes in the generated code that - // relates to the identified offset. The end offset should be one past - // the last relevant byte (so the length of the text = end - begin). - optional int32 end = 4; - } -} \ No newline at end of file diff --git a/accounts/third_party/google/protobuf/empty.proto b/accounts/third_party/google/protobuf/empty.proto deleted file mode 100644 index d675375e14..0000000000 --- a/accounts/third_party/google/protobuf/empty.proto +++ /dev/null @@ -1,52 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option go_package = "github.com/golang/protobuf/ptypes/empty"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "EmptyProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option cc_enable_arenas = true; - -// A generic empty message that you can re-use to avoid defining duplicated -// empty messages in your APIs. A typical example is to use it as the request -// or the response type of an API method. For instance: -// -// service Foo { -// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); -// } -// -// The JSON representation for `Empty` is empty JSON object `{}`. -message Empty {} \ No newline at end of file diff --git a/accounts/third_party/google/protobuf/field_mask.proto b/accounts/third_party/google/protobuf/field_mask.proto deleted file mode 100644 index ae488d6031..0000000000 --- a/accounts/third_party/google/protobuf/field_mask.proto +++ /dev/null @@ -1,245 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "FieldMaskProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; -option go_package = "google.golang.org/genproto/protobuf/field_mask;field_mask"; -option cc_enable_arenas = true; - -// `FieldMask` represents a set of symbolic field paths, for example: -// -// paths: "f.a" -// paths: "f.b.d" -// -// Here `f` represents a field in some root message, `a` and `b` -// fields in the message found in `f`, and `d` a field found in the -// message in `f.b`. -// -// Field masks are used to specify a subset of fields that should be -// returned by a get operation or modified by an update operation. -// Field masks also have a custom JSON encoding (see below). -// -// # Field Masks in Projections -// -// When used in the context of a projection, a response message or -// sub-message is filtered by the API to only contain those fields as -// specified in the mask. For example, if the mask in the previous -// example is applied to a response message as follows: -// -// f { -// a : 22 -// b { -// d : 1 -// x : 2 -// } -// y : 13 -// } -// z: 8 -// -// The result will not contain specific values for fields x,y and z -// (their value will be set to the default, and omitted in proto text -// output): -// -// -// f { -// a : 22 -// b { -// d : 1 -// } -// } -// -// A repeated field is not allowed except at the last position of a -// paths string. -// -// If a FieldMask object is not present in a get operation, the -// operation applies to all fields (as if a FieldMask of all fields -// had been specified). -// -// Note that a field mask does not necessarily apply to the -// top-level response message. In case of a REST get operation, the -// field mask applies directly to the response, but in case of a REST -// list operation, the mask instead applies to each individual message -// in the returned resource list. In case of a REST custom method, -// other definitions may be used. Where the mask applies will be -// clearly documented together with its declaration in the API. In -// any case, the effect on the returned resource/resources is required -// behavior for APIs. -// -// # Field Masks in Update Operations -// -// A field mask in update operations specifies which fields of the -// targeted resource are going to be updated. The API is required -// to only change the values of the fields as specified in the mask -// and leave the others untouched. If a resource is passed in to -// describe the updated values, the API ignores the values of all -// fields not covered by the mask. -// -// If a repeated field is specified for an update operation, new values will -// be appended to the existing repeated field in the target resource. Note that -// a repeated field is only allowed in the last position of a `paths` string. -// -// If a sub-message is specified in the last position of the field mask for an -// update operation, then new value will be merged into the existing sub-message -// in the target resource. -// -// For example, given the target message: -// -// f { -// b { -// d: 1 -// x: 2 -// } -// c: [1] -// } -// -// And an update message: -// -// f { -// b { -// d: 10 -// } -// c: [2] -// } -// -// then if the field mask is: -// -// paths: ["f.b", "f.c"] -// -// then the result will be: -// -// f { -// b { -// d: 10 -// x: 2 -// } -// c: [1, 2] -// } -// -// An implementation may provide options to override this default behavior for -// repeated and message fields. -// -// In order to reset a field's value to the default, the field must -// be in the mask and set to the default value in the provided resource. -// Hence, in order to reset all fields of a resource, provide a default -// instance of the resource and set all fields in the mask, or do -// not provide a mask as described below. -// -// If a field mask is not present on update, the operation applies to -// all fields (as if a field mask of all fields has been specified). -// Note that in the presence of schema evolution, this may mean that -// fields the client does not know and has therefore not filled into -// the request will be reset to their default. If this is unwanted -// behavior, a specific service may require a client to always specify -// a field mask, producing an error if not. -// -// As with get operations, the location of the resource which -// describes the updated values in the request message depends on the -// operation kind. In any case, the effect of the field mask is -// required to be honored by the API. -// -// ## Considerations for HTTP REST -// -// The HTTP kind of an update operation which uses a field mask must -// be set to PATCH instead of PUT in order to satisfy HTTP semantics -// (PUT must only be used for full updates). -// -// # JSON Encoding of Field Masks -// -// In JSON, a field mask is encoded as a single string where paths are -// separated by a comma. Fields name in each path are converted -// to/from lower-camel naming conventions. -// -// As an example, consider the following message declarations: -// -// message Profile { -// User user = 1; -// Photo photo = 2; -// } -// message User { -// string display_name = 1; -// string address = 2; -// } -// -// In proto a field mask for `Profile` may look as such: -// -// mask { -// paths: "user.display_name" -// paths: "photo" -// } -// -// In JSON, the same mask is represented as below: -// -// { -// mask: "user.displayName,photo" -// } -// -// # Field Masks and Oneof Fields -// -// Field masks treat fields in oneofs just as regular fields. Consider the -// following message: -// -// message SampleMessage { -// oneof test_oneof { -// string name = 4; -// SubMessage sub_message = 9; -// } -// } -// -// The field mask can be: -// -// mask { -// paths: "name" -// } -// -// Or: -// -// mask { -// paths: "sub_message" -// } -// -// Note that oneof type names ("test_oneof" in this case) cannot be used in -// paths. -// -// ## Field Mask Verification -// -// The implementation of any API method which has a FieldMask type field in the -// request should verify the included field paths, and return an -// `INVALID_ARGUMENT` error if any path is unmappable. -message FieldMask { - // The set of field mask paths. - repeated string paths = 1; -} \ No newline at end of file diff --git a/accounts/third_party/google/protobuf/timestamp.proto b/accounts/third_party/google/protobuf/timestamp.proto deleted file mode 100644 index 7279266f6d..0000000000 --- a/accounts/third_party/google/protobuf/timestamp.proto +++ /dev/null @@ -1,138 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2008 Google Inc. All rights reserved. -// https://developers.google.com/protocol-buffers/ -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -syntax = "proto3"; - -package google.protobuf; - -option csharp_namespace = "Google.Protobuf.WellKnownTypes"; -option cc_enable_arenas = true; -option go_package = "github.com/golang/protobuf/ptypes/timestamp"; -option java_package = "com.google.protobuf"; -option java_outer_classname = "TimestampProto"; -option java_multiple_files = true; -option objc_class_prefix = "GPB"; - -// A Timestamp represents a point in time independent of any time zone or local -// calendar, encoded as a count of seconds and fractions of seconds at -// nanosecond resolution. The count is relative to an epoch at UTC midnight on -// January 1, 1970, in the proleptic Gregorian calendar which extends the -// Gregorian calendar backwards to year one. -// -// All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap -// second table is needed for interpretation, using a [24-hour linear -// smear](https://developers.google.com/time/smear). -// -// The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By -// restricting to that range, we ensure that we can convert to and from [RFC -// 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. -// -// # Examples -// -// Example 1: Compute Timestamp from POSIX `time()`. -// -// Timestamp timestamp; -// timestamp.set_seconds(time(NULL)); -// timestamp.set_nanos(0); -// -// Example 2: Compute Timestamp from POSIX `gettimeofday()`. -// -// struct timeval tv; -// gettimeofday(&tv, NULL); -// -// Timestamp timestamp; -// timestamp.set_seconds(tv.tv_sec); -// timestamp.set_nanos(tv.tv_usec * 1000); -// -// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. -// -// FILETIME ft; -// GetSystemTimeAsFileTime(&ft); -// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; -// -// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z -// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. -// Timestamp timestamp; -// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); -// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); -// -// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. -// -// long millis = System.currentTimeMillis(); -// -// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) -// .setNanos((int) ((millis % 1000) * 1000000)).build(); -// -// -// Example 5: Compute Timestamp from current time in Python. -// -// timestamp = Timestamp() -// timestamp.GetCurrentTime() -// -// # JSON Mapping -// -// In JSON format, the Timestamp type is encoded as a string in the -// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the -// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" -// where {year} is always expressed using four digits while {month}, {day}, -// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional -// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), -// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone -// is required. A proto3 JSON serializer should always use UTC (as indicated by -// "Z") when printing the Timestamp type and a proto3 JSON parser should be -// able to accept both UTC and other timezones (as indicated by an offset). -// -// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past -// 01:30 UTC on January 15, 2017. -// -// In JavaScript, one can convert a Date object to this format using the -// standard -// [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) -// method. In Python, a standard `datetime.datetime` object can be converted -// to this format using -// [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with -// the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use -// the Joda Time's [`ISODateTimeFormat.dateTime()`]( -// http://www.joda.org/joda-time/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime%2D%2D -// ) to obtain a formatter capable of generating timestamps in this format. -// -// -message Timestamp { - // Represents seconds of UTC time since Unix epoch - // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - // 9999-12-31T23:59:59Z inclusive. - int64 seconds = 1; - - // Non-negative fractions of a second at nanosecond resolution. Negative - // second values with fractions must still have non-negative nanos values - // that count forward in time. Must be from 0 to 999,999,999 - // inclusive. - int32 nanos = 2; -} \ No newline at end of file diff --git a/accounts/tools.go b/accounts/tools.go deleted file mode 100644 index f1911ffdcb..0000000000 --- a/accounts/tools.go +++ /dev/null @@ -1,7 +0,0 @@ -// +build tools - -package main - -import ( - _ "github.com/restic/calens" -) diff --git a/accounts/ui/app.js b/accounts/ui/app.js deleted file mode 100644 index 510d6c3cb1..0000000000 --- a/accounts/ui/app.js +++ /dev/null @@ -1,39 +0,0 @@ -import 'regenerator-runtime/runtime' -import App from './components/App.vue' -import store from './store' - -const appInfo = { - name: 'Accounts', - id: 'accounts', - icon: 'text-vcard', - isFileEditor: false, - extensions: [] -} - -const routes = [ - { - name: 'accounts', - path: '/', - components: { - app: App - } - } -] - -const navItems = [ - { - name: 'Accounts', - iconMaterial: appInfo.icon, - route: { - name: 'accounts', - path: `/${appInfo.id}/` - } - } -] - -export default { - appInfo, - routes, - navItems, - store -} diff --git a/accounts/ui/client/accounts/index.js b/accounts/ui/client/accounts/index.js deleted file mode 100644 index 01e5d99725..0000000000 --- a/accounts/ui/client/accounts/index.js +++ /dev/null @@ -1,723 +0,0 @@ -/* eslint-disable */ -import axios from 'axios' -import qs from 'qs' -let domain = '' -export const getDomain = () => { - return domain -} -export const setDomain = ($domain) => { - domain = $domain -} -export const request = (method, url, body, queryParameters, form, config) => { - method = method.toLowerCase() - let keys = Object.keys(queryParameters) - let queryUrl = url - if (keys.length > 0) { - queryUrl = url + '?' + qs.stringify(queryParameters) - } - // let queryUrl = url+(keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') - if (body) { - return axios[method](queryUrl, body, config) - } else if (method === 'get') { - return axios[method](queryUrl, config) - } else { - return axios[method](queryUrl, qs.stringify(form), config) - } -} -/*========================================================== - * - ==========================================================*/ -/** - * Creates an account - * request: AccountsService_CreateAccount - * url: AccountsService_CreateAccountURL - * method: AccountsService_CreateAccount_TYPE - * raw_url: AccountsService_CreateAccount_RAW_URL - * @param body - - */ -export const AccountsService_CreateAccount = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/accounts/accounts-create' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const AccountsService_CreateAccount_RAW_URL = function() { - return '/api/v0/accounts/accounts-create' -} -export const AccountsService_CreateAccount_TYPE = function() { - return 'post' -} -export const AccountsService_CreateAccountURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/accounts/accounts-create' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Deletes an account - * request: AccountsService_DeleteAccount - * url: AccountsService_DeleteAccountURL - * method: AccountsService_DeleteAccount_TYPE - * raw_url: AccountsService_DeleteAccount_RAW_URL - * @param body - - */ -export const AccountsService_DeleteAccount = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/accounts/accounts-delete' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const AccountsService_DeleteAccount_RAW_URL = function() { - return '/api/v0/accounts/accounts-delete' -} -export const AccountsService_DeleteAccount_TYPE = function() { - return 'post' -} -export const AccountsService_DeleteAccountURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/accounts/accounts-delete' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Gets an account - * request: AccountsService_GetAccount - * url: AccountsService_GetAccountURL - * method: AccountsService_GetAccount_TYPE - * raw_url: AccountsService_GetAccount_RAW_URL - * @param body - - */ -export const AccountsService_GetAccount = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/accounts/accounts-get' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const AccountsService_GetAccount_RAW_URL = function() { - return '/api/v0/accounts/accounts-get' -} -export const AccountsService_GetAccount_TYPE = function() { - return 'post' -} -export const AccountsService_GetAccountURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/accounts/accounts-get' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Lists accounts - * request: AccountsService_ListAccounts - * url: AccountsService_ListAccountsURL - * method: AccountsService_ListAccounts_TYPE - * raw_url: AccountsService_ListAccounts_RAW_URL - * @param body - - */ -export const AccountsService_ListAccounts = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/accounts/accounts-list' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const AccountsService_ListAccounts_RAW_URL = function() { - return '/api/v0/accounts/accounts-list' -} -export const AccountsService_ListAccounts_TYPE = function() { - return 'post' -} -export const AccountsService_ListAccountsURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/accounts/accounts-list' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Updates an account - * request: AccountsService_UpdateAccount - * url: AccountsService_UpdateAccountURL - * method: AccountsService_UpdateAccount_TYPE - * raw_url: AccountsService_UpdateAccount_RAW_URL - * @param body - - */ -export const AccountsService_UpdateAccount = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/accounts/accounts-update' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const AccountsService_UpdateAccount_RAW_URL = function() { - return '/api/v0/accounts/accounts-update' -} -export const AccountsService_UpdateAccount_TYPE = function() { - return 'post' -} -export const AccountsService_UpdateAccountURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/accounts/accounts-update' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** -* Lists groups -* request: GroupsService_ListGroups -* url: GroupsService_ListGroupsURL -* method: GroupsService_ListGroups_TYPE -* raw_url: GroupsService_ListGroups_RAW_URL - * @param pageSize - Optional. The maximum number of groups to return in the response. - * @param pageToken - Optional. A pagination token returned from a previous call to `Get` -that indicates from where search should continue. - * @param fieldMaskPaths - The set of field mask paths. - * @param query - Optional. Search criteria used to select the groups to return. -If no search criteria is specified then all groups will be -returned. TODO update query language -Query expressions can be used to restrict results based upon -the account properties where the operators `=`, `NOT`, `AND` and `OR` -can be used along with the suffix wildcard symbol `*`. - -The string properties in a query expression should use escaped quotes -for values that include whitespace to prevent unexpected behavior. - -Some example queries are: - -* Query `display_name=Th*` returns accounts whose display_name -starts with "Th" -* Query `display_name=\\"Test String\\"` returns groups with -display names that include both "Test" and "String" -*/ -export const GroupsService_ListGroups = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups' - let body - let queryParameters = {} - let form = {} - if (parameters['pageSize'] !== undefined) { - queryParameters['page_size'] = parameters['pageSize'] - } - if (parameters['pageToken'] !== undefined) { - queryParameters['page_token'] = parameters['pageToken'] - } - if (parameters['fieldMaskPaths'] !== undefined) { - queryParameters['field_mask.paths'] = parameters['fieldMaskPaths'] - } - if (parameters['query'] !== undefined) { - queryParameters['query'] = parameters['query'] - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('get', domain + path, body, queryParameters, form, config) -} -export const GroupsService_ListGroups_RAW_URL = function() { - return '/v0/groups' -} -export const GroupsService_ListGroups_TYPE = function() { - return 'get' -} -export const GroupsService_ListGroupsURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups' - if (parameters['pageSize'] !== undefined) { - queryParameters['page_size'] = parameters['pageSize'] - } - if (parameters['pageToken'] !== undefined) { - queryParameters['page_token'] = parameters['pageToken'] - } - if (parameters['fieldMaskPaths'] !== undefined) { - queryParameters['field_mask.paths'] = parameters['fieldMaskPaths'] - } - if (parameters['query'] !== undefined) { - queryParameters['query'] = parameters['query'] - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Creates a group - * request: GroupsService_CreateGroup - * url: GroupsService_CreateGroupURL - * method: GroupsService_CreateGroup_TYPE - * raw_url: GroupsService_CreateGroup_RAW_URL - * @param body - The account resource to create - */ -export const GroupsService_CreateGroup = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const GroupsService_CreateGroup_RAW_URL = function() { - return '/v0/groups' -} -export const GroupsService_CreateGroup_TYPE = function() { - return 'post' -} -export const GroupsService_CreateGroupURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** -* Updates a group -* request: GroupsService_UpdateGroup -* url: GroupsService_UpdateGroupURL -* method: GroupsService_UpdateGroup_TYPE -* raw_url: GroupsService_UpdateGroup_RAW_URL - * @param groupId - The unique identifier for the group. -Returned by default. Inherited from directoryObject. Key. Not nullable. Read-only. - * @param body - The group resource which replaces the resource on the server -*/ -export const GroupsService_UpdateGroup = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups/{group.id}' - let body - let queryParameters = {} - let form = {} - path = path.replace('{group.id}', `${parameters['groupId']}`) - if (parameters['groupId'] === undefined) { - return Promise.reject(new Error('Missing required parameter: groupId')) - } - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('patch', domain + path, body, queryParameters, form, config) -} -export const GroupsService_UpdateGroup_RAW_URL = function() { - return '/v0/groups/{group.id}' -} -export const GroupsService_UpdateGroup_TYPE = function() { - return 'patch' -} -export const GroupsService_UpdateGroupURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups/{group.id}' - path = path.replace('{group.id}', `${parameters['groupId']}`) - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Gets an groups - * request: GroupsService_GetGroup - * url: GroupsService_GetGroupURL - * method: GroupsService_GetGroup_TYPE - * raw_url: GroupsService_GetGroup_RAW_URL - * @param id - - */ -export const GroupsService_GetGroup = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups/{id}' - let body - let queryParameters = {} - let form = {} - path = path.replace('{id}', `${parameters['id']}`) - if (parameters['id'] === undefined) { - return Promise.reject(new Error('Missing required parameter: id')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('get', domain + path, body, queryParameters, form, config) -} -export const GroupsService_GetGroup_RAW_URL = function() { - return '/v0/groups/{id}' -} -export const GroupsService_GetGroup_TYPE = function() { - return 'get' -} -export const GroupsService_GetGroupURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups/{id}' - path = path.replace('{id}', `${parameters['id']}`) - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * Deletes a group - * request: GroupsService_DeleteGroup - * url: GroupsService_DeleteGroupURL - * method: GroupsService_DeleteGroup_TYPE - * raw_url: GroupsService_DeleteGroup_RAW_URL - * @param id - - */ -export const GroupsService_DeleteGroup = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups/{id}' - let body - let queryParameters = {} - let form = {} - path = path.replace('{id}', `${parameters['id']}`) - if (parameters['id'] === undefined) { - return Promise.reject(new Error('Missing required parameter: id')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('delete', domain + path, body, queryParameters, form, config) -} -export const GroupsService_DeleteGroup_RAW_URL = function() { - return '/v0/groups/{id}' -} -export const GroupsService_DeleteGroup_TYPE = function() { - return 'delete' -} -export const GroupsService_DeleteGroupURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups/{id}' - path = path.replace('{id}', `${parameters['id']}`) - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** -* group:listmembers https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0 -* request: GroupsService_ListMembers -* url: GroupsService_ListMembersURL -* method: GroupsService_ListMembers_TYPE -* raw_url: GroupsService_ListMembers_RAW_URL - * @param id - The group id - * @param pageSize - - * @param pageToken - Optional. A pagination token returned from a previous call to `Get` -that indicates from where search should continue. - * @param fieldMaskPaths - The set of field mask paths. - * @param query - Optional. Search criteria used to select the groups to return. -If no search criteria is specified then all groups will be -returned. TODO update query language -Query expressions can be used to restrict results based upon -the account properties where the operators `=`, `NOT`, `AND` and `OR` -can be used along with the suffix wildcard symbol `*`. - -The string properties in a query expression should use escaped quotes -for values that include whitespace to prevent unexpected behavior. - -Some example queries are: - -* Query `display_name=Th*` returns accounts whose display_name -starts with "Th" -* Query `display_name=\\"Test String\\"` returns groups with -display names that include both "Test" and "String" -*/ -export const GroupsService_ListMembers = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups/{id}/members/$ref' - let body - let queryParameters = {} - let form = {} - path = path.replace('{id}', `${parameters['id']}`) - if (parameters['id'] === undefined) { - return Promise.reject(new Error('Missing required parameter: id')) - } - if (parameters['pageSize'] !== undefined) { - queryParameters['page_size'] = parameters['pageSize'] - } - if (parameters['pageToken'] !== undefined) { - queryParameters['page_token'] = parameters['pageToken'] - } - if (parameters['fieldMaskPaths'] !== undefined) { - queryParameters['field_mask.paths'] = parameters['fieldMaskPaths'] - } - if (parameters['query'] !== undefined) { - queryParameters['query'] = parameters['query'] - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('get', domain + path, body, queryParameters, form, config) -} -export const GroupsService_ListMembers_RAW_URL = function() { - return '/v0/groups/{id}/members/$ref' -} -export const GroupsService_ListMembers_TYPE = function() { - return 'get' -} -export const GroupsService_ListMembersURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups/{id}/members/$ref' - path = path.replace('{id}', `${parameters['id']}`) - if (parameters['pageSize'] !== undefined) { - queryParameters['page_size'] = parameters['pageSize'] - } - if (parameters['pageToken'] !== undefined) { - queryParameters['page_token'] = parameters['pageToken'] - } - if (parameters['fieldMaskPaths'] !== undefined) { - queryParameters['field_mask.paths'] = parameters['fieldMaskPaths'] - } - if (parameters['query'] !== undefined) { - queryParameters['query'] = parameters['query'] - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * group:addmember https://docs.microsoft.com/en-us/graph/api/group-post-members?view=graph-rest-1.0&tabs=http - * request: GroupsService_AddMember - * url: GroupsService_AddMemberURL - * method: GroupsService_AddMember_TYPE - * raw_url: GroupsService_AddMember_RAW_URL - * @param id - The account id to add - * @param body - - */ -export const GroupsService_AddMember = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups/{id}/members/$ref' - let body - let queryParameters = {} - let form = {} - path = path.replace('{id}', `${parameters['id']}`) - if (parameters['id'] === undefined) { - return Promise.reject(new Error('Missing required parameter: id')) - } - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const GroupsService_AddMember_RAW_URL = function() { - return '/v0/groups/{id}/members/$ref' -} -export const GroupsService_AddMember_TYPE = function() { - return 'post' -} -export const GroupsService_AddMemberURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups/{id}/members/$ref' - path = path.replace('{id}', `${parameters['id']}`) - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * group:removemember https://docs.microsoft.com/en-us/graph/api/group-delete-members?view=graph-rest-1.0 - * request: GroupsService_RemoveMember - * url: GroupsService_RemoveMemberURL - * method: GroupsService_RemoveMember_TYPE - * raw_url: GroupsService_RemoveMember_RAW_URL - * @param id - The group id - * @param accountId - The account id to remove - */ -export const GroupsService_RemoveMember = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/v0/groups/{id}/members/{account_id}/$ref' - let body - let queryParameters = {} - let form = {} - path = path.replace('{id}', `${parameters['id']}`) - if (parameters['id'] === undefined) { - return Promise.reject(new Error('Missing required parameter: id')) - } - path = path.replace('{account_id}', `${parameters['accountId']}`) - if (parameters['accountId'] === undefined) { - return Promise.reject(new Error('Missing required parameter: accountId')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('delete', domain + path, body, queryParameters, form, config) -} -export const GroupsService_RemoveMember_RAW_URL = function() { - return '/v0/groups/{id}/members/{account_id}/$ref' -} -export const GroupsService_RemoveMember_TYPE = function() { - return 'delete' -} -export const GroupsService_RemoveMemberURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/v0/groups/{id}/members/{account_id}/$ref' - path = path.replace('{id}', `${parameters['id']}`) - path = path.replace('{account_id}', `${parameters['accountId']}`) - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} \ No newline at end of file diff --git a/accounts/ui/client/settings/index.js b/accounts/ui/client/settings/index.js deleted file mode 100644 index 9c2fd5647c..0000000000 --- a/accounts/ui/client/settings/index.js +++ /dev/null @@ -1,627 +0,0 @@ -/* eslint-disable */ -import axios from 'axios' -import qs from 'qs' -let domain = '' -export const getDomain = () => { - return domain -} -export const setDomain = ($domain) => { - domain = $domain -} -export const request = (method, url, body, queryParameters, form, config) => { - method = method.toLowerCase() - let keys = Object.keys(queryParameters) - let queryUrl = url - if (keys.length > 0) { - queryUrl = url + '?' + qs.stringify(queryParameters) - } - // let queryUrl = url+(keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') - if (body) { - return axios[method](queryUrl, body, config) - } else if (method === 'get') { - return axios[method](queryUrl, config) - } else { - return axios[method](queryUrl, qs.stringify(form), config) - } -} -/*========================================================== - * - ==========================================================*/ -/** - * - * request: RoleService_AssignRoleToUser - * url: RoleService_AssignRoleToUserURL - * method: RoleService_AssignRoleToUser_TYPE - * raw_url: RoleService_AssignRoleToUser_RAW_URL - * @param body - - */ -export const RoleService_AssignRoleToUser = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/assignments-add' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const RoleService_AssignRoleToUser_RAW_URL = function() { - return '/api/v0/settings/assignments-add' -} -export const RoleService_AssignRoleToUser_TYPE = function() { - return 'post' -} -export const RoleService_AssignRoleToUserURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/assignments-add' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: RoleService_ListRoleAssignments - * url: RoleService_ListRoleAssignmentsURL - * method: RoleService_ListRoleAssignments_TYPE - * raw_url: RoleService_ListRoleAssignments_RAW_URL - * @param body - - */ -export const RoleService_ListRoleAssignments = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/assignments-list' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const RoleService_ListRoleAssignments_RAW_URL = function() { - return '/api/v0/settings/assignments-list' -} -export const RoleService_ListRoleAssignments_TYPE = function() { - return 'post' -} -export const RoleService_ListRoleAssignmentsURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/assignments-list' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: RoleService_RemoveRoleFromUser - * url: RoleService_RemoveRoleFromUserURL - * method: RoleService_RemoveRoleFromUser_TYPE - * raw_url: RoleService_RemoveRoleFromUser_RAW_URL - * @param body - - */ -export const RoleService_RemoveRoleFromUser = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/assignments-remove' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const RoleService_RemoveRoleFromUser_RAW_URL = function() { - return '/api/v0/settings/assignments-remove' -} -export const RoleService_RemoveRoleFromUser_TYPE = function() { - return 'post' -} -export const RoleService_RemoveRoleFromUserURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/assignments-remove' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: BundleService_GetBundle - * url: BundleService_GetBundleURL - * method: BundleService_GetBundle_TYPE - * raw_url: BundleService_GetBundle_RAW_URL - * @param body - - */ -export const BundleService_GetBundle = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/bundle-get' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const BundleService_GetBundle_RAW_URL = function() { - return '/api/v0/settings/bundle-get' -} -export const BundleService_GetBundle_TYPE = function() { - return 'post' -} -export const BundleService_GetBundleURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/bundle-get' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: BundleService_SaveBundle - * url: BundleService_SaveBundleURL - * method: BundleService_SaveBundle_TYPE - * raw_url: BundleService_SaveBundle_RAW_URL - * @param body - - */ -export const BundleService_SaveBundle = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/bundle-save' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const BundleService_SaveBundle_RAW_URL = function() { - return '/api/v0/settings/bundle-save' -} -export const BundleService_SaveBundle_TYPE = function() { - return 'post' -} -export const BundleService_SaveBundleURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/bundle-save' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: BundleService_AddSettingToBundle - * url: BundleService_AddSettingToBundleURL - * method: BundleService_AddSettingToBundle_TYPE - * raw_url: BundleService_AddSettingToBundle_RAW_URL - * @param body - - */ -export const BundleService_AddSettingToBundle = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/bundles-add-setting' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const BundleService_AddSettingToBundle_RAW_URL = function() { - return '/api/v0/settings/bundles-add-setting' -} -export const BundleService_AddSettingToBundle_TYPE = function() { - return 'post' -} -export const BundleService_AddSettingToBundleURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/bundles-add-setting' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: BundleService_ListBundles - * url: BundleService_ListBundlesURL - * method: BundleService_ListBundles_TYPE - * raw_url: BundleService_ListBundles_RAW_URL - * @param body - - */ -export const BundleService_ListBundles = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/bundles-list' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const BundleService_ListBundles_RAW_URL = function() { - return '/api/v0/settings/bundles-list' -} -export const BundleService_ListBundles_TYPE = function() { - return 'post' -} -export const BundleService_ListBundlesURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/bundles-list' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: BundleService_RemoveSettingFromBundle - * url: BundleService_RemoveSettingFromBundleURL - * method: BundleService_RemoveSettingFromBundle_TYPE - * raw_url: BundleService_RemoveSettingFromBundle_RAW_URL - * @param body - - */ -export const BundleService_RemoveSettingFromBundle = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/bundles-remove-setting' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const BundleService_RemoveSettingFromBundle_RAW_URL = function() { - return '/api/v0/settings/bundles-remove-setting' -} -export const BundleService_RemoveSettingFromBundle_TYPE = function() { - return 'post' -} -export const BundleService_RemoveSettingFromBundleURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/bundles-remove-setting' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: RoleService_ListRoles - * url: RoleService_ListRolesURL - * method: RoleService_ListRoles_TYPE - * raw_url: RoleService_ListRoles_RAW_URL - * @param body - - */ -export const RoleService_ListRoles = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/roles-list' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const RoleService_ListRoles_RAW_URL = function() { - return '/api/v0/settings/roles-list' -} -export const RoleService_ListRoles_TYPE = function() { - return 'post' -} -export const RoleService_ListRolesURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/roles-list' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: ValueService_GetValue - * url: ValueService_GetValueURL - * method: ValueService_GetValue_TYPE - * raw_url: ValueService_GetValue_RAW_URL - * @param body - - */ -export const ValueService_GetValue = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/values-get' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const ValueService_GetValue_RAW_URL = function() { - return '/api/v0/settings/values-get' -} -export const ValueService_GetValue_TYPE = function() { - return 'post' -} -export const ValueService_GetValueURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/values-get' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: ValueService_GetValueByUniqueIdentifiers - * url: ValueService_GetValueByUniqueIdentifiersURL - * method: ValueService_GetValueByUniqueIdentifiers_TYPE - * raw_url: ValueService_GetValueByUniqueIdentifiers_RAW_URL - * @param body - - */ -export const ValueService_GetValueByUniqueIdentifiers = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/values-get-by-unique-identifiers' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const ValueService_GetValueByUniqueIdentifiers_RAW_URL = function() { - return '/api/v0/settings/values-get-by-unique-identifiers' -} -export const ValueService_GetValueByUniqueIdentifiers_TYPE = function() { - return 'post' -} -export const ValueService_GetValueByUniqueIdentifiersURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/values-get-by-unique-identifiers' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: ValueService_ListValues - * url: ValueService_ListValuesURL - * method: ValueService_ListValues_TYPE - * raw_url: ValueService_ListValues_RAW_URL - * @param body - - */ -export const ValueService_ListValues = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/values-list' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const ValueService_ListValues_RAW_URL = function() { - return '/api/v0/settings/values-list' -} -export const ValueService_ListValues_TYPE = function() { - return 'post' -} -export const ValueService_ListValuesURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/values-list' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} -/** - * - * request: ValueService_SaveValue - * url: ValueService_SaveValueURL - * method: ValueService_SaveValue_TYPE - * raw_url: ValueService_SaveValue_RAW_URL - * @param body - - */ -export const ValueService_SaveValue = function(parameters = {}) { - const domain = parameters.$domain ? parameters.$domain : getDomain() - const config = parameters.$config - let path = '/api/v0/settings/values-save' - let body - let queryParameters = {} - let form = {} - if (parameters['body'] !== undefined) { - body = parameters['body'] - } - if (parameters['body'] === undefined) { - return Promise.reject(new Error('Missing required parameter: body')) - } - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }); - } - return request('post', domain + path, body, queryParameters, form, config) -} -export const ValueService_SaveValue_RAW_URL = function() { - return '/api/v0/settings/values-save' -} -export const ValueService_SaveValue_TYPE = function() { - return 'post' -} -export const ValueService_SaveValueURL = function(parameters = {}) { - let queryParameters = {} - const domain = parameters.$domain ? parameters.$domain : getDomain() - let path = '/api/v0/settings/values-save' - if (parameters.$queryParameters) { - Object.keys(parameters.$queryParameters).forEach(function(parameterName) { - queryParameters[parameterName] = parameters.$queryParameters[parameterName] - }) - } - let keys = Object.keys(queryParameters) - return domain + path + (keys.length > 0 ? '?' + (keys.map(key => key + '=' + encodeURIComponent(queryParameters[key])).join('&')) : '') -} \ No newline at end of file diff --git a/accounts/ui/components/App.vue b/accounts/ui/components/App.vue deleted file mode 100644 index 18896d27da..0000000000 --- a/accounts/ui/components/App.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/accounts/ui/components/accounts/AccountsBatchActions.vue b/accounts/ui/components/accounts/AccountsBatchActions.vue deleted file mode 100644 index f3532dd3c1..0000000000 --- a/accounts/ui/components/accounts/AccountsBatchActions.vue +++ /dev/null @@ -1,132 +0,0 @@ - - - - - diff --git a/accounts/ui/components/accounts/AccountsCreate.vue b/accounts/ui/components/accounts/AccountsCreate.vue deleted file mode 100644 index 16cec09341..0000000000 --- a/accounts/ui/components/accounts/AccountsCreate.vue +++ /dev/null @@ -1,193 +0,0 @@ - - - - - diff --git a/accounts/ui/components/accounts/AccountsList.vue b/accounts/ui/components/accounts/AccountsList.vue deleted file mode 100644 index 8519debce7..0000000000 --- a/accounts/ui/components/accounts/AccountsList.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/accounts/ui/components/accounts/AccountsListRow.vue b/accounts/ui/components/accounts/AccountsListRow.vue deleted file mode 100644 index c0dd8154d0..0000000000 --- a/accounts/ui/components/accounts/AccountsListRow.vue +++ /dev/null @@ -1,161 +0,0 @@ - - - diff --git a/accounts/ui/components/accounts/Avatar.vue b/accounts/ui/components/accounts/Avatar.vue deleted file mode 100644 index e0b13558b7..0000000000 --- a/accounts/ui/components/accounts/Avatar.vue +++ /dev/null @@ -1,130 +0,0 @@ - - diff --git a/accounts/ui/helpers/auth.js b/accounts/ui/helpers/auth.js deleted file mode 100644 index f53ab772d2..0000000000 --- a/accounts/ui/helpers/auth.js +++ /dev/null @@ -1,12 +0,0 @@ -import axios from 'axios' - -export function injectAuthToken (token) { - axios.interceptors.request.use(config => { - if (typeof config.headers.Authorization === 'undefined') { - if (token) { - config.headers.Authorization = `Bearer ${token}` - } - } - return config - }) -} diff --git a/accounts/ui/helpers/utils.js b/accounts/ui/helpers/utils.js deleted file mode 100644 index 2fceea84e4..0000000000 --- a/accounts/ui/helpers/utils.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Asserts wheter the given object is empty - * @param {Object} obj Object to be checked - * @returns {Boolean} - */ -export function isObjectEmpty (obj) { - return Object.keys(obj).length === 0 && obj.constructor === Object -} diff --git a/accounts/ui/store/index.js b/accounts/ui/store/index.js deleted file mode 100644 index 7aaaaa4467..0000000000 --- a/accounts/ui/store/index.js +++ /dev/null @@ -1,257 +0,0 @@ -/* eslint-disable camelcase */ -import { - AccountsService_ListAccounts, - AccountsService_UpdateAccount, - AccountsService_CreateAccount, - AccountsService_DeleteAccount -} from '../client/accounts' -import { RoleService_ListRoles } from '../client/settings' -/* eslint-enable camelcase */ -import { injectAuthToken } from '../helpers/auth' - -const state = { - config: null, - initialized: false, - accounts: {}, - roles: null, - selectedAccounts: [] -} - -const getters = { - config: state => state.config, - isInitialized: state => state.initialized, - getAccountsSorted: state => { - return Object.values(state.accounts).sort((a1, a2) => { - if (a1.onPremisesSamAccountName === a2.onPremisesSamAccountName) { - return a1.id.localeCompare(a2.id) - } - return a1.onPremisesSamAccountName.localeCompare(a2.onPremisesSamAccountName) - }) - }, - areAllAccountsSelected: state => state.accounts.length === state.selectedAccounts.length, - isAnyAccountSelected: state => state.selectedAccounts.length > 0 -} - -const mutations = { - LOAD_CONFIG (state, config) { - state.config = config - }, - SET_INITIALIZED (state, value) { - state.initialized = value - }, - SET_ACCOUNTS (state, accounts) { - state.accounts = accounts - }, - SET_ROLES (state, roles) { - state.roles = roles - }, - TOGGLE_SELECTION_ACCOUNT (state, account) { - const accountIndex = state.selectedAccounts.indexOf(account) - - accountIndex > -1 ? state.selectedAccounts.splice(accountIndex, 1) : state.selectedAccounts.push(account) - }, - SET_SELECTED_ACCOUNTS (state, accounts) { - state.selectedAccounts = accounts - }, - - UPDATE_ACCOUNT (state, updatedAccount) { - const accountIndex = state.accounts.findIndex(account => account.id === updatedAccount.id) - - state.accounts.splice(accountIndex, 1, updatedAccount) - }, - - RESET_ACCOUNTS_SELECTION (state) { - state.selectedAccounts = [] - }, - - PUSH_NEW_ACCOUNT (state, account) { - state.accounts.push(account) - }, - - DELETE_ACCOUNT (state, accountId) { - const accountIndex = state.accounts.findIndex(account => account.id === accountId) - - state.accounts.splice(accountIndex, 1) - } -} - -const actions = { - loadConfig ({ commit }, config) { - commit('LOAD_CONFIG', config) - }, - - async initialize ({ commit, dispatch }) { - await dispatch('fetchAccounts') - await dispatch('fetchRoles') - commit('SET_INITIALIZED', true) - }, - - async fetchAccounts ({ commit, dispatch, rootGetters }) { - injectAuthToken(rootGetters.user.token) - const response = await AccountsService_ListAccounts({ - $domain: rootGetters.configuration.server, - body: {} - }) - if (response.status === 201) { - const accounts = response.data.accounts - commit('SET_ACCOUNTS', accounts || []) - } else { - dispatch('showMessage', { - title: 'Failed to fetch accounts.', - desc: response.statusText, - status: 'danger' - }, { root: true }) - } - }, - - async fetchRoles ({ commit, dispatch, rootGetters }) { - injectAuthToken(rootGetters.user.token) - - const response = await RoleService_ListRoles({ - $domain: rootGetters.configuration.server, - body: {} - }) - - if (response.status === 201) { - const roles = response.data.bundles - - commit('SET_ROLES', roles || []) - } else { - dispatch('showMessage', { - title: 'Failed to fetch roles.', - desc: response.statusText, - status: 'danger' - }, { root: true }) - } - }, - - toggleSelectionAll ({ commit, getters, state }) { - getters.areAllAccountsSelected ? commit('RESET_ACCOUNTS_SELECTION') : commit('SET_SELECTED_ACCOUNTS', [...state.accounts]) - }, - - async setAccountActivated ({ commit, dispatch, state, rootGetters }, activated) { - const failedAccounts = [] - injectAuthToken(rootGetters.user.token) - - for (const account of state.selectedAccounts) { - if (account.accountEnabled === activated) { - continue - } - - try { - const response = await AccountsService_UpdateAccount({ - $domain: rootGetters.configuration.server, - body: { - account: { - id: account.id, - accountEnabled: activated - }, - update_mask: { - paths: ['AccountEnabled'] - } - } - }) - if (response.status === 201) { - commit('UPDATE_ACCOUNT', { ...account, accountEnabled: activated }) - } else { - failedAccounts.push({ account: account.username }) - } - } catch (error) { - failedAccounts.push({ account: account.username }) - } - } - - if (failedAccounts.length > 0) { - let errorTitle = '' - if (failedAccounts.length === 1) { - errorTitle = activated ? 'Failed to activate account.' : 'Failed to block account.' - } else { - errorTitle = activated ? 'Failed to activate accounts.' : 'Failed to block accounts.' - } - dispatch('showMessage', { - title: errorTitle, - status: 'danger' - }, { root: true }) - return Promise.resolve(false) - } - - commit('RESET_ACCOUNTS_SELECTION') - return Promise.resolve(true) - }, - async createNewAccount ({ rootGetters, commit, dispatch }, account) { - injectAuthToken(rootGetters.user.token) - - try { - const response = await AccountsService_CreateAccount({ - $domain: rootGetters.configuration.server, - body: { - account: { - on_premises_sam_account_name: account.username, - preferred_name: account.username, - mail: account.email, - password_profile: { - password: account.password - }, - account_enabled: true, - display_name: account.username - } - } - }) - if (response.status === 201) { - commit('PUSH_NEW_ACCOUNT', response.data) - return Promise.resolve(true) - } - } catch (error) { - dispatch('showMessage', { - title: 'Failed to create account.', - status: 'danger' - }, { root: true }) - return Promise.reject(error) - } - return Promise.resolve(false) - }, - - async deleteAccounts ({ rootGetters, state, commit, dispatch }) { - const failedAccounts = [] - - injectAuthToken(rootGetters.user.token) - - for (const account of state.selectedAccounts) { - try { - const response = await AccountsService_DeleteAccount({ - $domain: rootGetters.configuration.server, - body: { - id: account.id - } - }) - if (response.status === 201 || response.status === 204) { - commit('DELETE_ACCOUNT', account.id) - } else { - failedAccounts.push({ account: account.username }) - } - } catch (error) { - failedAccounts.push({ account: account.username }) - } - } - - if (failedAccounts.length > 0) { - const errorTitle = failedAccounts.length === 1 ? 'Failed to delete account.' : 'Failed to delete accounts.' - dispatch('showMessage', { - title: errorTitle, - status: 'danger' - }, { root: true }) - return Promise.resolve(false) - } - - commit('RESET_ACCOUNTS_SELECTION') - return Promise.resolve(true) - } -} - -export default { - namespaced: true, - state, - getters, - actions, - mutations -} diff --git a/accounts/ui/tests/acceptance/features/accounts.feature b/accounts/ui/tests/acceptance/features/accounts.feature deleted file mode 100644 index e0aafc6ff4..0000000000 --- a/accounts/ui/tests/acceptance/features/accounts.feature +++ /dev/null @@ -1,73 +0,0 @@ -Feature: Accounts - - Scenario: admin checks accounts list - Given user "Moss" has logged in using the webUI - When the user browses to the accounts page - Then user "einstein" should be displayed in the accounts list on the WebUI - And user "konnectd" should be displayed in the accounts list on the WebUI - And user "marie" should be displayed in the accounts list on the WebUI - And user "reva" should be displayed in the accounts list on the WebUI - And user "richard" should be displayed in the accounts list on the WebUI - - Scenario: admin changes non-admin user's role to admin - Given user "Moss" has logged in using the webUI - When the user browses to the accounts page - Then user "einstein" should be displayed in the accounts list on the WebUI - When the user changes the role of user "einstein" to "Admin" using the WebUI - Then the displayed role of user "einstein" should be "Admin" on the WebUI - When the user reloads the current page of the webUI - Then the displayed role of user "einstein" should be "Admin" on the WebUI - - Scenario: regular user should not be able to see accounts list - Given user "Marie" has logged in using the webUI - When the user browses to the accounts page - Then the user should not be able to see the accounts list on the WebUI - - Scenario: guest user should not be able to see accounts list - Given user "Moss" has logged in using the webUI - When the user browses to the accounts page - Then user "einstein" should be displayed in the accounts list on the WebUI - When the user changes the role of user "einstein" to "Guest" using the WebUI - And the user logs out of the webUI - And user "Einstein" logs in using the webUI - And the user browses to the accounts page - Then the user should not be able to see the accounts list on the WebUI - - # We want to separate this into own scenarios but because we do not have clean env for each scenario yet - # we are resetting it manually by combining them into one - Scenario: disable/enable account - Given user "Moss" has logged in using the webUI - When the user browses to the accounts page - Then user "einstein" should be displayed in the accounts list on the WebUI - When the user disables user "einstein" using the WebUI - Then the status indicator of user "einstein" should be "disabled" on the WebUI - # And user "einstein" should not be able to log in - When the user enables user "einstein" using the WebUI - Then the status indicator of user "einstein" should be "enabled" on the WebUI - # And user "einstein" should be able to log in - - Scenario: disable/enable multiple accounts - Given user "Moss" has logged in using the webUI - When the user browses to the accounts page - Then user "einstein" should be displayed in the accounts list on the WebUI - And user "marie" should be displayed in the accounts list on the WebUI - When the user disables users "einstein,marie" using the WebUI - Then the status indicator of users "einstein,marie" should be "disabled" on the WebUI - # And user "einstein" should not be able to log in - # And user "marie" should not be able to log in - When the user enables users "einstein,marie" using the WebUI - Then the status indicator of user "einstein,marie" should be "enabled" on the WebUI - # And user "einstein" should be able to log in - # And user "marie" should be able to log in - - Scenario: create a user - Given user "Moss" has logged in using the webUI - And the user browses to the accounts page - When the user creates a new user with username "bob", email "bob@example.org" and password "bob" using the WebUI - Then user "bob" should be displayed in the accounts list on the WebUI - - Scenario: delete a user - Given user "Moss" has logged in using the webUI - And the user browses to the accounts page - When the user deletes user "bob" using the WebUI - Then user "bob" should not be displayed in the accounts list on the WebUI \ No newline at end of file diff --git a/accounts/ui/tests/acceptance/pageobjects/accountsPage.js b/accounts/ui/tests/acceptance/pageobjects/accountsPage.js deleted file mode 100644 index 204f24f044..0000000000 --- a/accounts/ui/tests/acceptance/pageobjects/accountsPage.js +++ /dev/null @@ -1,170 +0,0 @@ -const util = require('util') - -module.exports = { - url: function () { - return this.api.launchUrl + '/#/accounts' - }, - - commands: { - navigateAndWaitUntilMounted: async function () { - const url = this.url() - return this.navigate(url).waitForElementVisible('@accountsApp') - }, - accountsList: function () { - return this.waitForElementVisible('@accountsListTable') - }, - isUserListed: async function (username) { - const usernameInTable = util.format(this.elements.userInAccountsList.selector, username) - await this.useXpath().waitForElementVisible(usernameInTable) - return true - }, - isUserDeleted: async function (username) { - const usernameInTable = util.format(this.elements.userInAccountsList.selector, username) - await this.useXpath().waitForElementNotPresent(usernameInTable) - return true - }, - - selectRole: function (username, role) { - const roleSelector = - util.format(this.elements.rowByUsername.selector, username) + - util.format(this.elements.roleInRolesDropdown.selector, role) - - return this - .initAjaxCounters() - .waitForElementVisible('@rolesDropdownTrigger') - .click('@rolesDropdownTrigger') - .waitForElementVisible(roleSelector) - .click(roleSelector) - .waitForOutstandingAjaxCalls() - }, - - checkUsersRole: function (username, role) { - const roleSelector = - util.format(this.elements.rowByUsername.selector, username) + - util.format(this.elements.currentRole.selector, role) - - return this.useXpath().expect.element(roleSelector).to.be.visible - }, - - setUserActivated: function (usernames, activated) { - this.selectUsers(usernames) - return this.click(activated === true ? this.elements.batchActionEnable : this.elements.batchActionDisable) - }, - - checkUsersStatus: function (usernames, status) { - usernames = usernames.split(',') - - for (const username of usernames) { - const indicatorSelector = - util.format(this.elements.rowByUsername.selector, username) + - util.format(this.elements.statusIndicator.selector, status) - - this.useXpath().waitForElementVisible(indicatorSelector) - } - - return this - }, - - deleteUsers: function (usernames) { - this.selectUsers(usernames) - return this.click(this.elements.batchActionDelete) - .waitForElementVisible(this.elements.batchActionDeleteConfirm) - .click(this.elements.batchActionDeleteConfirm) - }, - - selectUsers: function (usernames) { - usernames = usernames.split(',') - - for (const username of usernames) { - const checkboxSelector = - util.format(this.elements.rowByUsername.selector, username) + - this.elements.rowCheckbox.selector - - this.useXpath().click(checkboxSelector) - } - - return this - }, - - createUser: function (username, email, password) { - return this - .click('@accountsNewAccountTrigger') - .setValue('@newAccountInputUsername', username) - .setValue('@newAccountInputEmail', email) - .setValue('@newAccountInputPassword', password) - .click('@newAccountButtonConfirm') - } - }, - - elements: { - accountsApp: { - selector: '#accounts-app' - }, - accountsListTable: { - selector: "//table[@class='uk-table uk-table-middle uk-table-divider']", - locateStrategy: 'xpath' - }, - userInAccountsList: { - selector: '//table//td[text()="%s"]', - locateStrategy: 'xpath' - }, - rowByUsername: { - selector: '//table//td[text()="%s"]/ancestor::tr', - locateStrategy: 'xpath' - }, - currentRole: { - selector: '//span[contains(@class, "accounts-roles-current-role") and normalize-space()="%s"]', - locateStrategy: 'xpath' - }, - roleInRolesDropdown: { - selector: '//label[contains(@class, "accounts-roles-dropdown-role") and normalize-space()="%s"]', - locateStrategy: 'xpath' - }, - rolesDropdownTrigger: { - selector: '//button[contains(@class, "accounts-roles-select-trigger")]', - locateStrategy: 'xpath' - }, - loadingAccountsList: { - selector: '//div[contains(@class, "oc-loader")]', - locateStrategy: 'xpath' - }, - rowCheckbox: { - selector: '//input[@class="oc-checkbox"]', - locateStrategy: 'xpath' - }, - batchActionDisable: { - selector: '#accounts-batch-action-disable' - }, - batchActionEnable: { - selector: '#accounts-batch-action-enable' - }, - batchActionDelete: { - selector: '#accounts-batch-action-delete' - }, - batchActionDeleteCancel: { - selector: '#accounts-batch-action-delete-cancel' - }, - batchActionDeleteConfirm: { - selector: '#accounts-batch-action-delete-confirm' - }, - statusIndicator: { - selector: '//span[contains(@class, "accounts-status-indicator-%s")]', - locateStrategy: 'xpath' - }, - newAccountInputUsername: { - selector: '#accounts-new-account-input-username' - }, - newAccountInputEmail: { - selector: '#accounts-new-account-input-email' - }, - newAccountInputPassword: { - selector: '#accounts-new-account-input-password' - }, - newAccountButtonConfirm: { - selector: '#accounts-new-account-button-confirm' - }, - accountsNewAccountTrigger: { - selector: '#accounts-new-account-trigger' - } - } -} diff --git a/accounts/ui/tests/acceptance/stepDefinitions/accountsContext.js b/accounts/ui/tests/acceptance/stepDefinitions/accountsContext.js deleted file mode 100644 index 456b1b2940..0000000000 --- a/accounts/ui/tests/acceptance/stepDefinitions/accountsContext.js +++ /dev/null @@ -1,61 +0,0 @@ -const assert = require('assert') -const { client } = require('nightwatch-api') -const { Given, When, Then } = require('cucumber') - -When('the user browses to the accounts page', function () { - return client.page.accountsPage().navigateAndWaitUntilMounted() -}) - -Then('user {string} should be displayed in the accounts list on the WebUI', async function (username) { - await client.page.accountsPage().accountsList() - const userListed = await client.page.accountsPage().isUserListed(username) - return assert.strictEqual(userListed, true) -}) - -Then('user {string} should not be displayed in the accounts list on the WebUI', async function (username) { - await client.page.accountsPage().accountsList() - const userDeleted = await client.page.accountsPage().isUserDeleted(username) - return assert.strictEqual(userDeleted, true) -}) - -Given('the user has changed the role of user {string} to {string}', function (username, role) { - return client.page.accountsPage().selectRole(username, role) -}) - -When('the user changes the role of user {string} to {string} using the WebUI', function (username, role) { - return client.page.accountsPage().selectRole(username, role) -}) - -Then('the displayed role of user {string} should be {string} on the WebUI', function (username, role) { - return client.page.accountsPage().checkUsersRole(username, role) -}) - -Then('the user should not be able to see the accounts list on the WebUI', async function () { - return client.page.accountsPage() - .waitForAjaxCallsToStartAndFinish() - .waitForElementVisible('@loadingAccountsList') - .waitForElementNotPresent('@accountsListTable') -}) - -When('the user disables user/users {string} using the WebUI', function (usernames) { - return client.page.accountsPage().setUserActivated(usernames, false) -}) - -When('the user enables user/users {string} using the WebUI', function (usernames) { - return client.page.accountsPage().setUserActivated(usernames, true) -}) - -Then('the status indicator of user/users {string} should be {string} on the WebUI', function (usernames, status) { - return client.page.accountsPage().checkUsersStatus(usernames, status) -}) - -When( - 'the user creates a new user with username {string}, email {string} and password {string} using the WebUI', - function (username, email, password) { - return client.page.accountsPage().createUser(username, email, password) - } -) - -When('the user deletes user/users {string} using the WebUI', function (usernames) { - return client.page.accountsPage().deleteUsers(usernames) -}) diff --git a/accounts/ui/tests/config/drone/identifier-registration.yml b/accounts/ui/tests/config/drone/identifier-registration.yml deleted file mode 100644 index a45a83f78d..0000000000 --- a/accounts/ui/tests/config/drone/identifier-registration.yml +++ /dev/null @@ -1,16 +0,0 @@ ---- - -# OpenID Connect client registry. -clients: - - id: phoenix - name: OCIS - application_type: web - insecure: yes - trusted: yes - redirect_uris: - - https://ocis-server:9200/oidc-callback.html - - https://ocis-server:9200/ - origins: - - https://ocis-server:9200 - -authorities: diff --git a/accounts/ui/tests/config/drone/ocis-config.json b/accounts/ui/tests/config/drone/ocis-config.json deleted file mode 100644 index 7272483fb1..0000000000 --- a/accounts/ui/tests/config/drone/ocis-config.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "server": "https://ocis-server:9200", - "theme": "owncloud", - "version": "0.1.0", - "openIdConnect": { - "metadata_url": "https://ocis-server:9200/.well-known/openid-configuration", - "authority": "https://ocis-server:9200", - "client_id": "phoenix", - "response_type": "code", - "scope": "openid profile email" - }, - "apps": [ - "files", - "draw-io", - "pdf-viewer", - "markdown-editor", - "media-viewer" - ], - "external_apps": [ - { - "id": "accounts", - "path": "https://ocis-server:9200/accounts.js", - "config": { - "url": "https://ocis-server:9200" - } - } - ] -} diff --git a/accounts/ui/tests/run-acceptance-test.sh b/accounts/ui/tests/run-acceptance-test.sh deleted file mode 100755 index be6c544e76..0000000000 --- a/accounts/ui/tests/run-acceptance-test.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -if [ -z "$PHOENIX_PATH" ] -then - echo "PHOENIX_PATH env variable is not set, cannot find files for tests infrastructure" - exit 1 -fi - -if [ -z "$OCIS_SKELETON_DIR" ] -then - echo "OCIS_SKELETON_DIR env variable is not set, cannot find skeleton directory" - exit 1 -fi - -if [ -z "$PHOENIX_CONFIG" ] -then - echo "PHOENIX_CONFIG env variable is not set, cannot find phoenix config file" - exit 1 -fi - -if [ -z "$1" ] -then - echo "Features path not given, exiting test run" - exit 1 -fi - -trap clean_up SIGHUP SIGINT SIGTERM - -if [ -z "$TEST_INFRA_DIRECTORY" ] -then - cleanup=true - testFolder=$(< /dev/urandom tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) - printf "creating folder $testFolder for Test infrastructure setup\n\n" - export TEST_INFRA_DIRECTORY=$testFolder -fi - -clean_up() { - if $cleanup - then - if [ -d "$testFolder" ]; then - printf "\n\n\n\nDeleting folder $testFolder Test infrastructure setup..." - rm -rf "$testFolder" - fi - fi -} - -trap clean_up SIGHUP SIGINT SIGTERM EXIT - -cp -r "$PHOENIX_PATH"/tests ./"$testFolder" - -export SERVER_HOST=${SERVER_HOST:-https://localhost:9200} -export BACKEND_HOST=${BACKEND_HOST:-https://localhost:9200} -export RUN_ON_OCIS='true' -export TEST_TAGS=${TEST_TAGS:-"not @skip"} - -yarn run acceptance-tests "$1" - -status=$? -exit $status diff --git a/accounts/yarn.lock b/accounts/yarn.lock deleted file mode 100644 index 6d98a37135..0000000000 --- a/accounts/yarn.lock +++ /dev/null @@ -1,6627 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.3", "@babel/code-frame@^7.5.5": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.3.tgz#324bcfd8d35cd3d47dae18cde63d752086435e9a" - integrity sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg== - dependencies: - "@babel/highlight" "^7.10.3" - -"@babel/compat-data@^7.10.1", "@babel/compat-data@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.3.tgz#9af3e033f36e8e2d6e47570db91e64a846f5d382" - integrity sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg== - dependencies: - browserslist "^4.12.0" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@^7.7.7": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.3.tgz#73b0e8ddeec1e3fdd7a2de587a60e17c440ec77e" - integrity sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w== - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/generator" "^7.10.3" - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helpers" "^7.10.1" - "@babel/parser" "^7.10.3" - "@babel/template" "^7.10.3" - "@babel/traverse" "^7.10.3" - "@babel/types" "^7.10.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.3.tgz#32b9a0d963a71d7a54f5f6c15659c3dbc2a523a5" - integrity sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA== - dependencies: - "@babel/types" "^7.10.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz#f6d08acc6f70bbd59b436262553fb2e259a1a268" - integrity sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.1": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz#4e9012d6701bef0030348d7f9c808209bd3e8687" - integrity sha512-lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.3" - "@babel/types" "^7.10.3" - -"@babel/helper-compilation-targets@^7.10.2": - version "7.10.2" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz#a17d9723b6e2c750299d2a14d4637c76936d8285" - integrity sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA== - dependencies: - "@babel/compat-data" "^7.10.1" - browserslist "^4.12.0" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.10.1": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz#2783daa6866822e3d5ed119163b50f0fc3ae4b35" - integrity sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ== - dependencies: - "@babel/helper-function-name" "^7.10.3" - "@babel/helper-member-expression-to-functions" "^7.10.3" - "@babel/helper-optimise-call-expression" "^7.10.3" - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - -"@babel/helper-create-regexp-features-plugin@^7.10.1", "@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz#1b8feeab1594cbcfbf3ab5a3bbcabac0468efdbd" - integrity sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-regex" "^7.10.1" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz#d27120a5e57c84727b30944549b2dfeca62401a8" - integrity sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ== - dependencies: - "@babel/helper-function-name" "^7.10.3" - "@babel/types" "^7.10.3" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz#9dc14f0cfa2833ea830a9c8a1c742b6e7461b05e" - integrity sha512-0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw== - dependencies: - "@babel/traverse" "^7.10.3" - "@babel/types" "^7.10.3" - -"@babel/helper-function-name@^7.10.1", "@babel/helper-function-name@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz#79316cd75a9fa25ba9787ff54544307ed444f197" - integrity sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw== - dependencies: - "@babel/helper-get-function-arity" "^7.10.3" - "@babel/template" "^7.10.3" - "@babel/types" "^7.10.3" - -"@babel/helper-get-function-arity@^7.10.1", "@babel/helper-get-function-arity@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz#3a28f7b28ccc7719eacd9223b659fdf162e4c45e" - integrity sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg== - dependencies: - "@babel/types" "^7.10.3" - -"@babel/helper-hoist-variables@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz#d554f52baf1657ffbd7e5137311abc993bb3f068" - integrity sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg== - dependencies: - "@babel/types" "^7.10.3" - -"@babel/helper-member-expression-to-functions@^7.10.1", "@babel/helper-member-expression-to-functions@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz#bc3663ac81ac57c39148fef4c69bf48a77ba8dd6" - integrity sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw== - dependencies: - "@babel/types" "^7.10.3" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.1", "@babel/helper-module-imports@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz#766fa1d57608e53e5676f23ae498ec7a95e1b11a" - integrity sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w== - dependencies: - "@babel/types" "^7.10.3" - -"@babel/helper-module-transforms@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz#24e2f08ee6832c60b157bb0936c86bef7210c622" - integrity sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg== - dependencies: - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-simple-access" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.10.1", "@babel/helper-optimise-call-expression@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz#f53c4b6783093195b0f69330439908841660c530" - integrity sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg== - dependencies: - "@babel/types" "^7.10.3" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.1", "@babel/helper-plugin-utils@^7.10.3", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz#aac45cccf8bc1873b99a85f34bceef3beb5d3244" - integrity sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g== - -"@babel/helper-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.1.tgz#021cf1a7ba99822f993222a001cc3fec83255b96" - integrity sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.10.1", "@babel/helper-remap-async-to-generator@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz#18564f8a6748be466970195b876e8bba3bccf442" - integrity sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-wrap-function" "^7.10.1" - "@babel/template" "^7.10.3" - "@babel/traverse" "^7.10.3" - "@babel/types" "^7.10.3" - -"@babel/helper-replace-supers@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz#ec6859d20c5d8087f6a2dc4e014db7228975f13d" - integrity sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.1" - "@babel/helper-optimise-call-expression" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-simple-access@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz#08fb7e22ace9eb8326f7e3920a1c2052f13d851e" - integrity sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw== - dependencies: - "@babel/template" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helper-split-export-declaration@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz#c6f4be1cbc15e3a868e4c64a17d5d31d754da35f" - integrity sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g== - dependencies: - "@babel/types" "^7.10.1" - -"@babel/helper-validator-identifier@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz#60d9847f98c4cea1b279e005fdb7c28be5412d15" - integrity sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw== - -"@babel/helper-wrap-function@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz#956d1310d6696257a7afd47e4c42dfda5dfcedc9" - integrity sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ== - dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/helpers@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.1.tgz#a6827b7cb975c9d9cef5fd61d919f60d8844a973" - integrity sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw== - dependencies: - "@babel/template" "^7.10.1" - "@babel/traverse" "^7.10.1" - "@babel/types" "^7.10.1" - -"@babel/highlight@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.3.tgz#c633bb34adf07c5c13156692f5922c81ec53f28d" - integrity sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw== - dependencies: - "@babel/helper-validator-identifier" "^7.10.3" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.3.tgz#7e71d892b0d6e7d04a1af4c3c79d72c1f10f5315" - integrity sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA== - -"@babel/plugin-proposal-async-generator-functions@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz#5a02453d46e5362e2073c7278beab2e53ad7d939" - integrity sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/helper-remap-async-to-generator" "^7.10.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.10.1", "@babel/plugin-proposal-class-properties@^7.7.4": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz#046bc7f6550bb08d9bd1d4f060f5f5a4f1087e01" - integrity sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-proposal-dynamic-import@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz#e36979dc1dc3b73f6d6816fc4951da2363488ef0" - integrity sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-default-from@^7.7.4": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.1.tgz#59ea2a4f09dbb0358c73dab27def3d21a27bd370" - integrity sha512-Xfc1CfHapIkwZ/+AI+j4Ha3g233ol0EEdy6SmnUuQQiZX78SfQXHd8tmntc5zqCkwPnIHoiZa6l6p0OAvxYXHw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-export-default-from" "^7.10.1" - -"@babel/plugin-proposal-json-strings@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz#b1e691ee24c651b5a5e32213222b2379734aff09" - integrity sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz#02dca21673842ff2fe763ac253777f235e9bbf78" - integrity sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz#a9a38bc34f78bdfd981e791c27c6fdcec478c123" - integrity sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-numeric-separator" "^7.10.1" - -"@babel/plugin-proposal-object-rest-spread@^7.10.3", "@babel/plugin-proposal-object-rest-spread@^7.7.7": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz#b8d0d22f70afa34ad84b7a200ff772f9b9fce474" - integrity sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.1" - -"@babel/plugin-proposal-optional-catch-binding@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz#c9f86d99305f9fa531b568ff5ab8c964b8b223d2" - integrity sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz#9a726f94622b653c0a3a7a59cdce94730f526f7c" - integrity sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng== - dependencies: - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-private-methods@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz#ed85e8058ab0fe309c3f448e5e1b73ca89cdb598" - integrity sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-proposal-unicode-property-regex@^7.10.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz#dc04feb25e2dd70c12b05d680190e138fa2c0c6f" - integrity sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz#d5bc0645913df5b17ad7eda0fa2308330bde34c5" - integrity sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-syntax-dynamic-import@^7.7.4", "@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-default-from@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.10.1.tgz#634f58f36b5d6320d80f75441fdc61e1c05c33b0" - integrity sha512-+rcL4S/mN1Ss4zhSCbxzv1Wsf12eauvgTjWi0krXEeX1zd6qSxYnJoniE5Ssr5w2WPt61oUCJyXIFQIqO/29zw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz#25761ee7410bc8cf97327ba741ee94e4a61b7d99" - integrity sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz#8b8733f8c57397b3eaa47ddba8841586dcaef362" - integrity sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-arrow-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz#cb5ee3a36f0863c06ead0b409b4cc43a889b295b" - integrity sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-async-to-generator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz#e5153eb1a3e028f79194ed8a7a4bf55f862b2062" - integrity sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg== - dependencies: - "@babel/helper-module-imports" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-remap-async-to-generator" "^7.10.1" - -"@babel/plugin-transform-block-scoped-functions@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz#146856e756d54b20fff14b819456b3e01820b85d" - integrity sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-block-scoping@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz#47092d89ca345811451cd0dc5d91605982705d5e" - integrity sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz#8d9a656bc3d01f3ff69e1fccb354b0f9d72ac544" - integrity sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-define-map" "^7.10.3" - "@babel/helper-function-name" "^7.10.3" - "@babel/helper-optimise-call-expression" "^7.10.3" - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/helper-replace-supers" "^7.10.1" - "@babel/helper-split-export-declaration" "^7.10.1" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz#d3aa6eef67cb967150f76faff20f0abbf553757b" - integrity sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.3" - -"@babel/plugin-transform-destructuring@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz#abd58e51337815ca3a22a336b85f62b998e71907" - integrity sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-dotall-regex@^7.10.1", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz#920b9fec2d78bb57ebb64a644d5c2ba67cc104ee" - integrity sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-duplicate-keys@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz#c900a793beb096bc9d4d0a9d0cde19518ffc83b9" - integrity sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-exponentiation-operator@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz#279c3116756a60dd6e6f5e488ba7957db9c59eb3" - integrity sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-for-of@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz#ff01119784eb0ee32258e8646157ba2501fcfda5" - integrity sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-function-name@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz#4ed46fd6e1d8fde2a2ec7b03c66d853d2c92427d" - integrity sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw== - dependencies: - "@babel/helper-function-name" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz#5794f8da82846b22e4e6631ea1658bce708eb46a" - integrity sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-member-expression-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz#90347cba31bca6f394b3f7bd95d2bbfd9fce2f39" - integrity sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-modules-amd@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz#65950e8e05797ebd2fe532b96e19fc5482a1d52a" - integrity sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw== - dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz#d5ff4b4413ed97ffded99961056e1fb980fb9301" - integrity sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg== - dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-simple-access" "^7.10.1" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz#004ae727b122b7b146b150d50cba5ffbff4ac56b" - integrity sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A== - dependencies: - "@babel/helper-hoist-variables" "^7.10.3" - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.3" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz#ea080911ffc6eb21840a5197a39ede4ee67b1595" - integrity sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA== - dependencies: - "@babel/helper-module-transforms" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz#a4f8444d1c5a46f35834a410285f2c901c007ca6" - integrity sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - -"@babel/plugin-transform-new-target@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz#6ee41a5e648da7632e22b6fb54012e87f612f324" - integrity sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-object-super@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz#2e3016b0adbf262983bf0d5121d676a5ed9c4fde" - integrity sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-replace-supers" "^7.10.1" - -"@babel/plugin-transform-parameters@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz#b25938a3c5fae0354144a720b07b32766f683ddd" - integrity sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg== - dependencies: - "@babel/helper-get-function-arity" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-property-literals@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz#cffc7315219230ed81dc53e4625bf86815b6050d" - integrity sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-regenerator@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz#6ec680f140a5ceefd291c221cb7131f6d7e8cb6d" - integrity sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz#0fc1027312b4d1c3276a57890c8ae3bcc0b64a86" - integrity sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-runtime@^7.8.0": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.3.tgz#3b287b06acc534a7cb6e6c71d6b1d88b1922dd6c" - integrity sha512-b5OzMD1Hi8BBzgQdRHyVVaYrk9zG0wset1it2o3BgonkPadXfOv0aXRqd7864DeOIu3FGKP/h6lr15FE5mahVw== - dependencies: - "@babel/helper-module-imports" "^7.10.3" - "@babel/helper-plugin-utils" "^7.10.3" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz#e8b54f238a1ccbae482c4dce946180ae7b3143f3" - integrity sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-spread@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz#0c6d618a0c4461a274418460a28c9ccf5239a7c8" - integrity sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-sticky-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz#90fc89b7526228bed9842cff3588270a7a393b00" - integrity sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - "@babel/helper-regex" "^7.10.1" - -"@babel/plugin-transform-template-literals@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz#69d39b3d44b31e7b4864173322565894ce939b25" - integrity sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.3" - -"@babel/plugin-transform-typeof-symbol@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz#60c0239b69965d166b80a84de7315c1bc7e0bb0e" - integrity sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-unicode-escapes@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz#add0f8483dab60570d9e03cecef6c023aa8c9940" - integrity sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/plugin-transform-unicode-regex@^7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz#6b58f2aea7b68df37ac5025d9c88752443a6b43f" - integrity sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.1" - "@babel/helper-plugin-utils" "^7.10.1" - -"@babel/polyfill@^7.10.1": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.10.4.tgz#915e5bfe61490ac0199008e35ca9d7d151a8e45a" - integrity sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.4" - -"@babel/preset-env@^7.7.7": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.3.tgz#3e58c9861bbd93b6a679987c7e4bd365c56c80c9" - integrity sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg== - dependencies: - "@babel/compat-data" "^7.10.3" - "@babel/helper-compilation-targets" "^7.10.2" - "@babel/helper-module-imports" "^7.10.3" - "@babel/helper-plugin-utils" "^7.10.3" - "@babel/plugin-proposal-async-generator-functions" "^7.10.3" - "@babel/plugin-proposal-class-properties" "^7.10.1" - "@babel/plugin-proposal-dynamic-import" "^7.10.1" - "@babel/plugin-proposal-json-strings" "^7.10.1" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.1" - "@babel/plugin-proposal-numeric-separator" "^7.10.1" - "@babel/plugin-proposal-object-rest-spread" "^7.10.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.10.1" - "@babel/plugin-proposal-optional-chaining" "^7.10.3" - "@babel/plugin-proposal-private-methods" "^7.10.1" - "@babel/plugin-proposal-unicode-property-regex" "^7.10.1" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-class-properties" "^7.10.1" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.1" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.10.1" - "@babel/plugin-transform-arrow-functions" "^7.10.1" - "@babel/plugin-transform-async-to-generator" "^7.10.1" - "@babel/plugin-transform-block-scoped-functions" "^7.10.1" - "@babel/plugin-transform-block-scoping" "^7.10.1" - "@babel/plugin-transform-classes" "^7.10.3" - "@babel/plugin-transform-computed-properties" "^7.10.3" - "@babel/plugin-transform-destructuring" "^7.10.1" - "@babel/plugin-transform-dotall-regex" "^7.10.1" - "@babel/plugin-transform-duplicate-keys" "^7.10.1" - "@babel/plugin-transform-exponentiation-operator" "^7.10.1" - "@babel/plugin-transform-for-of" "^7.10.1" - "@babel/plugin-transform-function-name" "^7.10.1" - "@babel/plugin-transform-literals" "^7.10.1" - "@babel/plugin-transform-member-expression-literals" "^7.10.1" - "@babel/plugin-transform-modules-amd" "^7.10.1" - "@babel/plugin-transform-modules-commonjs" "^7.10.1" - "@babel/plugin-transform-modules-systemjs" "^7.10.3" - "@babel/plugin-transform-modules-umd" "^7.10.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.3" - "@babel/plugin-transform-new-target" "^7.10.1" - "@babel/plugin-transform-object-super" "^7.10.1" - "@babel/plugin-transform-parameters" "^7.10.1" - "@babel/plugin-transform-property-literals" "^7.10.1" - "@babel/plugin-transform-regenerator" "^7.10.3" - "@babel/plugin-transform-reserved-words" "^7.10.1" - "@babel/plugin-transform-shorthand-properties" "^7.10.1" - "@babel/plugin-transform-spread" "^7.10.1" - "@babel/plugin-transform-sticky-regex" "^7.10.1" - "@babel/plugin-transform-template-literals" "^7.10.3" - "@babel/plugin-transform-typeof-symbol" "^7.10.1" - "@babel/plugin-transform-unicode-escapes" "^7.10.1" - "@babel/plugin-transform-unicode-regex" "^7.10.1" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.10.3" - browserslist "^4.12.0" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== - 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" - -"@babel/register@7.10.1": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.1.tgz#b6567c5cb5049f44bbf8c35d6ff68ca3c43238ed" - integrity sha512-sl96+kB3IA2B9EzpwwBmYadOT14vw3KaXOknGDbJaZCOj52GDA4Tivudq9doCJcB+bEIKCEARZYwRgBBsCGXyg== - dependencies: - find-cache-dir "^2.0.0" - lodash "^4.17.13" - make-dir "^2.1.0" - pirates "^4.0.0" - source-map-support "^0.5.16" - -"@babel/runtime-corejs3@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.10.4.tgz#f29fc1990307c4c57b10dbd6ce667b27159d9e0d" - integrity sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.8.4": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.3.tgz#670d002655a7c366540c67f6fd3342cd09500364" - integrity sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.1", "@babel/template@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.3.tgz#4d13bc8e30bf95b0ce9d175d30306f42a2c9a7b8" - integrity sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA== - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/parser" "^7.10.3" - "@babel/types" "^7.10.3" - -"@babel/traverse@^7.10.1", "@babel/traverse@^7.10.3": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.3.tgz#0b01731794aa7b77b214bcd96661f18281155d7e" - integrity sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug== - dependencies: - "@babel/code-frame" "^7.10.3" - "@babel/generator" "^7.10.3" - "@babel/helper-function-name" "^7.10.3" - "@babel/helper-split-export-declaration" "^7.10.1" - "@babel/parser" "^7.10.3" - "@babel/types" "^7.10.3" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.10.1", "@babel/types@^7.10.3", "@babel/types@^7.4.4": - version "7.10.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.3.tgz#6535e3b79fea86a6b09e012ea8528f935099de8e" - integrity sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.3" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@erquhart/browserify-fs@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@erquhart/browserify-fs/-/browserify-fs-1.0.2.tgz#abefe016a665a2a2efa6bd52bdb549e3fc15453d" - integrity sha512-RR0NQwOPDedo1jh4xnsAsAty2MPRKgySR120il8+zubig1Sw/z8k3O65A4ZC4fvk2nLsFs2w+WjGf5cEYN9VYw== - dependencies: - level-filesystem "^1.2.0" - level-js "^4.0.0" - levelup "^4.0.0" - -"@erquhart/rollup-plugin-node-builtins@^2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@erquhart/rollup-plugin-node-builtins/-/rollup-plugin-node-builtins-2.1.5.tgz#316c1a600c31d0748b647d62fb2c5535221898ff" - integrity sha512-WoI3h31fxdGW1kaw2i+6rkUE2huKIpkgVnRDHO5QD8qAXD0Z22NdU42nd5SYfEnCLl8e54ROLMdpnMVTDdgQIw== - dependencies: - "@erquhart/browserify-fs" "^1.0.2" - buffer-es6 "^4.9.2" - crypto-browserify "^3.11.0" - process-es6 "^0.11.2" - -"@rollup/plugin-commonjs@^11.0.1": - version "11.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz#60636c7a722f54b41e419e1709df05c7234557ef" - integrity sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA== - dependencies: - "@rollup/pluginutils" "^3.0.8" - commondir "^1.0.1" - estree-walker "^1.0.1" - glob "^7.1.2" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - -"@rollup/plugin-json@^4.0.1": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-replace@^2.3.0": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz#cd6bae39444de119f5d905322b91ebd4078562e7" - integrity sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ== - dependencies: - "@rollup/pluginutils" "^3.0.8" - magic-string "^0.25.5" - -"@rollup/pluginutils@^3.0.8": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@types/babel-types@*", "@types/babel-types@^7.0.0": - version "7.0.7" - resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.7.tgz#667eb1640e8039436028055737d2b9986ee336e3" - integrity sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ== - -"@types/babylon@^6.16.2": - version "6.16.5" - resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.5.tgz#1c5641db69eb8cdf378edd25b4be7754beeb48b4" - integrity sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w== - dependencies: - "@types/babel-types" "*" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/debug@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" - integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== - -"@types/estree@*": - version "0.0.45" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.45.tgz#e9387572998e5ecdac221950dab3e8c3b16af884" - integrity sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= - -"@types/node@*": - version "14.0.14" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.14.tgz#24a0b5959f16ac141aeb0c5b3cd7a15b7c64cbce" - integrity sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ== - -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -"@vue/component-compiler-utils@^2.6.0": - version "2.6.0" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz#aa46d2a6f7647440b0b8932434d22f12371e543b" - integrity sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.14" - postcss-selector-parser "^5.0.0" - prettier "1.16.3" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - -"@vue/component-compiler-utils@^3.0.0", "@vue/component-compiler-utils@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3" - integrity sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.14" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2" - -"@vue/component-compiler@^4.2.3": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@vue/component-compiler/-/component-compiler-4.2.3.tgz#052855aea0f9a00eb0eb9786bdf447d29292ae37" - integrity sha512-B221AV3T/6PF37WnkoqUKIxBeHXmGuZsi/8pby89MAVSj9zmDdLCEZ7LDT8+DJWbElFrPELgnSvEadXxDRcrJQ== - dependencies: - "@vue/component-compiler-utils" "^3.0.0" - clean-css "^4.1.11" - hash-sum "^1.0.2" - postcss-modules-sync "^1.0.0" - source-map "0.6.*" - optionalDependencies: - less "^3.9.0" - pug "^2.0.3" - sass "^1.18.0" - stylus "^0.54.5" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abstract-leveldown@~6.0.1: - version "6.0.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz#b4b6159343c74b0c5197b2817854782d8f748c4a" - integrity sha512-jzewKKpZbaYUa6HTThnrl+GrJhzjEAeuc7hTVpZdzg7kupXZFoqQDFwyOwLNbmJKJlmzw8yiipMPkDiuKkT06Q== - dependencies: - level-concat-iterator "~2.0.0" - xtend "~4.0.0" - -abstract-leveldown@~6.2.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -acorn-bigint@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/acorn-bigint/-/acorn-bigint-0.4.0.tgz#af3245ed8a7c3747387fca4680ae1960f617c4cd" - integrity sha512-W9iaqWzqFo7ZBLmI9dMjHYGrN0Nm/ZgToqhvd3RELJux7RsX6k1/80h+bD9TtTpeKky/kYNbr3+vHWqI3hdyfA== - -acorn-class-fields@^0.3.1: - version "0.3.6" - resolved "https://registry.yarnpkg.com/acorn-class-fields/-/acorn-class-fields-0.3.6.tgz#e45916dcd95c3d7faad1c811e3abd818defe14d9" - integrity sha512-nOzMl1byCFAJLgxNUG7QorpzRHWlkBKVSSOMKUu+bVbVZG5lU4NZkOp/uA7CnE+NAsWhmxTsMgQdHsQXUO8Ulg== - dependencies: - acorn-private-class-elements "^0.2.6" - -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - -acorn-export-ns-from@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/acorn-export-ns-from/-/acorn-export-ns-from-0.1.0.tgz#192687869bba3bcb2ef1a1ba196486ea7e100e5c" - integrity sha512-QDQJBe2DfxNBIMxs+19XY2i/XXilJn+kPgX30HWNYK4IXoNj3ACNSWPU7szL0SzqjFyOG4zoZxG9P7JfNw5g7A== - -acorn-globals@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" - integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8= - dependencies: - acorn "^4.0.4" - -acorn-import-meta@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/acorn-import-meta/-/acorn-import-meta-1.1.0.tgz#c384423462ee7d4721d4de83231021a36cb09def" - integrity sha512-pshgiVR5mhpjFVdizKTN+kAGRqjJFUOEB3TvpQ6kiAutb1lvHrIVVcGoe5xzMpJkVNifCeymMG7/tsDkWn8CdQ== - -acorn-jsx@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-logical-assignment@^0.1.0: - version "0.1.3" - resolved "https://registry.yarnpkg.com/acorn-logical-assignment/-/acorn-logical-assignment-0.1.3.tgz#4c81ec136994e4b505e2de42636c923722e88377" - integrity sha512-tLFK3+HWerA2rAJaY02LRtDeO0/nwgw6Wn1EZwO8cNZRbZiwBxKo4V5rJEoVSfBvEqXo44JaiA2Q9ycYx+y7qQ== - -acorn-numeric-separator@^0.3.0: - version "0.3.3" - resolved "https://registry.yarnpkg.com/acorn-numeric-separator/-/acorn-numeric-separator-0.3.3.tgz#1002e3c3e68540449131370b81078b3fc36a4b18" - integrity sha512-xMbqqXR9EnxuGN1N6CbU+sm/sKS+VSttTnU6aRf9klvZF/P5E5BMtR3xZfSFWbVIkd4uXGKfgZJZwZ73zpExXQ== - -acorn-private-class-elements@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/acorn-private-class-elements/-/acorn-private-class-elements-0.2.6.tgz#625155cbf4d42ce1f8063db8c9b88adfdd8db2c5" - integrity sha512-PV+AhOU1/vCx5zIBgGYLB5+OoT8IPKZUcWEGdLBTQgFBMMzPM9S5SKSG4EdiuULqoq3pV3C07rGuSC1Y5gbi/g== - -acorn-private-methods@^0.3.0: - version "0.3.2" - resolved "https://registry.yarnpkg.com/acorn-private-methods/-/acorn-private-methods-0.3.2.tgz#4a0b311607444157efc3180210d3a909673f6469" - integrity sha512-jTgRNDbEkbtxOIPUmDZ4u4oDGCO4tNPDNeW+jJrkbLl/Hzl9EVLva+kGQ289irSPhxi7FI9TjuXmIiqjnJcj9w== - dependencies: - acorn-private-class-elements "^0.2.6" - -acorn-stage3@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/acorn-stage3/-/acorn-stage3-2.1.0.tgz#63ffe0f00b8ac7ccdce34ce82b3b9a6777af390a" - integrity sha512-6R3IWwmMl1MBYf6JtaquuE8OqtCArA1zaDlY7QUeUNDcUzNJoZJm1nFQrv0SzdjkRv1khADbMfucFsF661LGow== - dependencies: - acorn-bigint "^0.4.0" - acorn-class-fields "^0.3.1" - acorn-dynamic-import "^4.0.0" - acorn-export-ns-from "^0.1.0" - acorn-import-meta "^1.0.0" - acorn-logical-assignment "^0.1.0" - acorn-numeric-separator "^0.3.0" - acorn-private-methods "^0.3.0" - acorn-static-class-features "^0.2.0" - -acorn-static-class-features@^0.2.0: - version "0.2.3" - resolved "https://registry.yarnpkg.com/acorn-static-class-features/-/acorn-static-class-features-0.2.3.tgz#c59e17c81afa28d6fc140d2ab1429e3eaea5dd66" - integrity sha512-N7yRI9NduTJRam3BQTXHLR63ykHQv2MnxWTRq0+4PfQosGUz/tM0/ToRqWUqGphP960mDTm/7zJFx3dB/AZtiw== - dependencies: - acorn-private-class-elements "^0.2.6" - -acorn-walk@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^4.0.4, acorn@~4.0.2: - version "4.0.13" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" - integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= - -acorn@^5.7.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -acorn@^7.1.0, acorn@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" - integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== - -agent-base@4, agent-base@^4.2.0, agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -agent-base@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" - integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== - dependencies: - es6-promisify "^5.0.0" - -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" - integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== - 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" - -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-colors@3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" - integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== - -ansi-escapes@^4.2.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" - integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== - dependencies: - type-fest "^0.11.0" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -archiver-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" - integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== - dependencies: - glob "^7.1.4" - graceful-fs "^4.2.0" - lazystream "^1.0.0" - lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" - lodash.flatten "^4.4.0" - lodash.isplainobject "^4.0.6" - lodash.union "^4.6.0" - normalize-path "^3.0.0" - readable-stream "^2.0.0" - -archiver@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-4.0.1.tgz#3f722b121777e361ca9fad374ecda38e77e63c7f" - integrity sha512-/YV1pU4Nhpf/rJArM23W6GTUjT0l++VbjykrCRua1TSXrn+yM8Qs7XvtwSiRse0iCe49EPNf7ktXnPsWuSb91Q== - dependencies: - archiver-utils "^2.1.0" - async "^2.6.3" - buffer-crc32 "^0.2.1" - glob "^7.1.6" - readable-stream "^3.6.0" - tar-stream "^2.1.2" - zip-stream "^3.0.1" - -argparse@^1.0.7, argparse@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" - -array.prototype.flat@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -as-array@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/as-array/-/as-array-2.0.0.tgz#4f04805d87f8fce8e511bc2108f8e5e3a287d547" - integrity sha1-TwSAXYf4/OjlEbwhCPjl46KH1Uc= - -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.2.tgz#408fcea7db6a668f119c38a9c244fec90061a7ac" - integrity sha1-QI/Op9tqZo8RnDipwkT+yQBhp6w= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@0.1.5, assert-plus@0.1.x: - version "0.1.5" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" - integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA= - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assertion-error-formatter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz#be9c8825dee6a8a6c72183d915912d9b57d5d265" - integrity sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ== - dependencies: - diff "^4.0.1" - pad-right "^0.2.2" - repeat-string "^1.6.1" - -assertion-error@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" - integrity sha1-x/hUOP3UZrx8oWq5DIFRN5el0js= - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -ast-types@0.x.x: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async@^2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" - integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== - -axios@^0.19.0: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.15.0, babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -backoff@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.4.1.tgz#2f68c50e0dd789dbefe24200a62efb04d2456d68" - integrity sha1-L2jFDg3Xidvv4kIApi77BNJFbWg= - dependencies: - precond "0.2" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -becke-ch--regex--s0-0-v1--base--pl--lib@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz#429ceebbfa5f7e936e78d73fbdc7da7162b20e20" - integrity sha1-Qpzuu/pffpNueNc/vcfacWKyDiA= - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -bl@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz#12d6287adc29080e22a705e5764b2a9522cdc489" - integrity sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird@^3.1.1, bluebird@^3.4.1, bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== - -bn.js@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" - integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== - -boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boxen@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -brotli-size@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/brotli-size/-/brotli-size-4.0.0.tgz#a05ee3faad3c0e700a2f2da826ba6b4d76e69e5e" - integrity sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA== - dependencies: - duplexer "0.1.1" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" - integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.2" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserslist@^4.12.0, browserslist@^4.8.5: - version "4.12.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.12.2.tgz#76653d7e4c57caa8a1a28513e2f4e197dc11a711" - integrity sha512-MfZaeYqR8StRZdstAK9hCKDd2StvePCYp5rHzQCPicUjfFliDgmuaBNPHYUTpAywBN8+Wc/d7NYVFkO0aqaBUw== - dependencies: - caniuse-lite "^1.0.30001088" - electron-to-chromium "^1.3.483" - escalade "^3.0.1" - node-releases "^1.1.58" - -buffer-crc32@^0.2.1, buffer-crc32@^0.2.13: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-es6@^4.9.2, buffer-es6@^4.9.3: - version "4.9.3" - resolved "https://registry.yarnpkg.com/buffer-es6/-/buffer-es6-4.9.3.tgz#f26347b82df76fd37e18bcb5288c4970cfd5c404" - integrity sha1-8mNHuC33b9N+GLy1KIxJcM/VxAQ= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^5.1.0, buffer@^5.5.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== - -buntis@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/buntis/-/buntis-0.2.1.tgz#a043aabc7d64f2243bfaa53e34e999c2dd790e82" - integrity sha512-5wszfQlsqJmZrfxpPkO5yQcEoBAmfUYlXxXU/IM6PhPZ8DMnMMJQ9rvAHfe5WZmnB6E1IoJYylFfTaf1e2FJbQ== - -bunyan@1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/bunyan/-/bunyan-1.3.3.tgz#bf4e301c1f0bf888ec678829531f7b5d212e9e81" - integrity sha1-v04wHB8L+IjsZ4gpUx97XSEunoE= - optionalDependencies: - dtrace-provider "~0.4" - mv "~2" - safe-json-stringify "~1" - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-lite@^1.0.30001088: - version "1.0.30001090" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001090.tgz#ff7766332f60e80fea4903f30d360622e5551850" - integrity sha512-QzPRKDCyp7RhjczTPZaqK3CjPA5Ht2UnXhZhCI4f7QiB5JK6KEuZBxIzyWnB3wO4hgAj4GMRxAhuiacfw0Psjg== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - -chai-nightwatch@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chai-nightwatch/-/chai-nightwatch-0.4.0.tgz#028dc2bf234d9ef1e895cb134027795b1c7c9467" - integrity sha512-1xw74vR02XiHzo4wQfHqme2nqYPIzYnK5s3DMST7UW8FIHDWD7qplg+DTJ5FIPcmWiGYX/Re0CzvOcZQKJm1Uw== - dependencies: - assertion-error "1.0.0" - deep-eql "0.1.3" - -chai@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" - integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - pathval "^1.1.0" - type-detect "^4.0.5" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - 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" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -character-parser@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" - integrity sha1-x84o821LzZdE5f/CxfzeHHMmH8A= - dependencies: - is-regex "^1.0.3" - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - -cheerio@^1.0.0-rc.3: - version "1.0.0-rc.3" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" - integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA== - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.1" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash "^4.15.0" - parse5 "^3.0.1" - -child_process@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a" - integrity sha1-sffn/HPSXn/R1FWtyU4UODAYK1o= - -"chokidar@>=2.0.0 <4.0.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" - integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -clean-css@^4.1.11: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.3.0.tgz#0632239a4b5aa4c958610142c34bb7a651fc8df5" - integrity sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w== - -cli-table3@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -clone@~0.1.9: - version "0.1.19" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.1.19.tgz#613fb68639b26a494ac53253e15b1a6bd88ada85" - integrity sha1-YT+2hjmyaklKxTJT4Vsaa9iK2oU= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@^1.1.2, colors@^1.3.3, colors@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -compress-commons@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-3.0.0.tgz#833944d84596e537224dd91cf92f5246823d4f1d" - integrity sha512-FyDqr8TKX5/X0qo+aVfaZ+PVmNJHJeckFBlq8jZGSJOgnynhfifoyl24qaqdUdDIBe0EVTHByN6NAkqYvE/2Xg== - dependencies: - buffer-crc32 "^0.2.13" - crc32-stream "^3.0.1" - normalize-path "^3.0.0" - readable-stream "^2.3.7" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.4.4: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constantinople@^3.0.1, constantinople@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" - integrity sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw== - dependencies: - "@types/babel-types" "^7.0.0" - "@types/babylon" "^6.16.2" - babel-types "^6.26.0" - babylon "^6.18.0" - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -core-js-compat@^3.6.2: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.5.tgz#2a51d9a4e25dfd6e690251aa81f99e3c05481f1c" - integrity sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng== - dependencies: - browserslist "^4.8.5" - semver "7.0.0" - -core-js-pure@^3.0.0: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" - integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== - -core-js@3: - version "3.6.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" - integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== - -core-js@^2.4.0, core-js@^2.6.5: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -crc32-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-3.0.1.tgz#cae6eeed003b0e44d739d279de5ae63b171b4e85" - integrity sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w== - dependencies: - crc "^3.4.4" - readable-stream "^3.4.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-env@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-6.0.3.tgz#4256b71e49b3a40637a0ce70768a6ef5c72ae941" - integrity sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag== - dependencies: - cross-spawn "^7.0.0" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-parse@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" - integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= - dependencies: - css "^2.0.0" - -css-select@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-selector-tokenizer@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" - integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - regexpu-core "^4.6.0" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css@^2.0.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssesc@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" - integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cucumber-expressions@^8.1.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-8.3.0.tgz#67f48307dc8f53540c7f3530ad7b744aa918dd5c" - integrity sha512-cP2ya0EiorwXBC7Ll7Cj7NELYbasNv9Ty42L4u7sso9KruWemWG1ZiTq4PMqir3SNDSrbykoqI5wZgMbLEDjLQ== - dependencies: - becke-ch--regex--s0-0-v1--base--pl--lib "^1.4.0" - xregexp "^4.2.4" - -cucumber-pretty@>=6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cucumber-pretty/-/cucumber-pretty-6.0.0.tgz#1331deae9663020f6835d60c0aa3a84637baaa4d" - integrity sha512-ddx/VInPVKFB7N86QujgLivihJhuzexKwExMuFaUjSlEs5zVVqBgaf55f88h97VafXTWX+ZAcxTUwMBS4mYj/g== - dependencies: - cli-table3 "^0.5.1" - colors "^1.4.0" - figures "^3.0.0" - -cucumber-tag-expressions@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.3.tgz#5525d60fbecb3fa2707051ace27004e0512e700e" - integrity sha512-+x5j1IfZrBtbvYHuoUX0rl4nUGxaey6Do9sM0CABmZfDCcWXuuRm1fQeCaklIYQgOFHQ6xOHvDSdkMHHpni6tQ== - -cucumber@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cucumber/-/cucumber-6.0.5.tgz#cdc752ad18b551bcf7bc92774c925302f4408714" - integrity sha512-x+W9Fwk6TvcapQsYMxwFU5AsQJDOIJVGrPKmH15OC7jzb9/Dk7Hb0ZAyw4WcpaDcUDRc8bi2k2yJejDp5eTRlg== - dependencies: - assertion-error-formatter "^3.0.0" - bluebird "^3.4.1" - cli-table3 "^0.5.1" - colors "^1.1.2" - commander "^3.0.1" - cucumber-expressions "^8.1.0" - cucumber-tag-expressions "^2.0.2" - duration "^0.2.1" - escape-string-regexp "^2.0.0" - figures "^3.0.0" - gherkin "5.0.0" - glob "^7.1.3" - indent-string "^4.0.0" - is-generator "^1.0.2" - is-stream "^2.0.0" - knuth-shuffle-seeded "^1.0.6" - lodash "^4.17.14" - mz "^2.4.0" - progress "^2.0.0" - resolve "^1.3.3" - serialize-error "^4.1.0" - stack-chain "^2.0.0" - stacktrace-js "^2.0.0" - string-argv "^0.3.0" - title-case "^2.1.1" - util-arity "^1.0.2" - verror "^1.9.0" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.7.3.tgz#bf533fedaa455ed8fee11519ebfb9ad66170dcdf" - integrity sha1-v1M/7apFXtj+4RUZ6/ua1mFw3N8= - dependencies: - assert-plus "0.1.x" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-uri-to-buffer@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" - integrity sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ== - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -debounce@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" - integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== - -debug@2, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0, debug@=3.1.0, debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@3.2.6, debug@^3.1.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.0.0, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -deep-eql@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" - integrity sha1-71WKyrjeJSBs1xOQbXTlaTDrafI= - dependencies: - type-detect "0.1.1" - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -degenerator@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" - integrity sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU= - dependencies: - ast-types "0.x.x" - escodegen "1.x.x" - esprima "3.x.x" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -diff@3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -doctypes@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" - integrity sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk= - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dotenv@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== - -dtrace-provider@0.4.0, dtrace-provider@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/dtrace-provider/-/dtrace-provider-0.4.0.tgz#0b67bc1cc77e79bf88b87ad20664f4a753ce3f26" - integrity sha1-C2e8HMd+eb+IuHrSBmT0p1POPyY= - dependencies: - nan "~1.5.1" - -duplexer@0.1.1, duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - -duration@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/duration/-/duration-0.2.2.tgz#ddf149bc3bc6901150fe9017111d016b3357f529" - integrity sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg== - dependencies: - d "1" - es5-ext "~0.10.46" - -easygettext@^2.7.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/easygettext/-/easygettext-2.13.0.tgz#32318e349087b17b2efe04b99ebd653f86192c75" - integrity sha512-VBeI1VDyX6QLWFhxy3sMAoQDHypjL52LuZtn+Rd8ISJm+oh2FmJzEK4JPqoTqQoD13ilTzM3V0Ie6+4fUXPEXA== - dependencies: - "@vue/component-compiler-utils" "^2.6.0" - acorn "^6.4.1" - acorn-stage3 "^2.0.0" - acorn-walk "^6.2.0" - buntis "0.2.1" - cheerio "^1.0.0-rc.3" - estree-walker "^2.0.1" - flow-remove-types "^1.2.3" - minimist "^1.2.5" - pofile "^1.1.0" - pug "^2.0.4" - vue-template-compiler "^2.6.10" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -editorconfig@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" - integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== - dependencies: - commander "^2.19.0" - lru-cache "^4.1.5" - semver "^5.6.0" - sigmund "^1.0.1" - -ejs@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -electron-to-chromium@^1.3.483: - version "1.3.483" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.483.tgz#9269e7cfc1c8e72709824da171cbe47ca5e3ca9e" - integrity sha512-+05RF8S9rk8S0G8eBCqBRBaRq7+UN3lDs2DAvnG8SBSgQO3hjy0+qt4CmRk5eiuGbTcaicgXfPmBi31a+BD3lg== - -elliptic@^6.0.0, elliptic@^6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -entities@^1.1.1, entities@~1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - -envinfo@^7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.5.1.tgz#93c26897225a00457c75e734d354ea9106a72236" - integrity sha512-hQBkDf2iO4Nv0CNHpCuSBeaSrveU6nThVxFGTrq/eDlV716UQk09zChaJae4mZRsos1x4YLY2TaH3LHUae3ZmQ== - -errno@^0.1.1, errno@~0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@~0.10.46: - version "0.10.53" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" - integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== - dependencies: - es6-iterator "~2.0.3" - es6-symbol "~3.1.3" - next-tick "~1.0.0" - -es6-iterator@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -es6-symbol@^3.1.1, es6-symbol@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.1.tgz#52568a77443f6927cd0ab9c73129137533c965ed" - integrity sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA== - -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@1.x.x: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-standard@^14.1.0: - version "14.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.1.tgz#830a8e44e7aef7de67464979ad06b406026c56ea" - integrity sha512-Z9B+VR+JIXRxz21udPTL9HpFMyoMUEeX1G251EQ6e05WD9aPVtVBn09XUmZ259wCMlCDmYDSZG62Hhm+ZTJcUg== - -eslint-import-resolver-node@^0.3.3: - version "0.3.4" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717" - integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" - integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-es@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz#75a7cdfdccddc0589934aeeb384175f221c57893" - integrity sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ== - dependencies: - eslint-utils "^2.0.0" - regexpp "^3.0.0" - -eslint-plugin-import@^2.17.3: - version "2.22.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz#92f7736fe1fde3e2de77623c838dd992ff5ffb7e" - integrity sha512-66Fpf1Ln6aIS5Gr/55ts19eUuoDhAbZgnr6UxK5hbDx6l/QgQgx61AePq+BV4PP2uXQFClgMVzep5zZ94qqsxg== - dependencies: - array-includes "^3.1.1" - array.prototype.flat "^1.2.3" - contains-path "^0.1.0" - debug "^2.6.9" - doctrine "1.5.0" - eslint-import-resolver-node "^0.3.3" - eslint-module-utils "^2.6.0" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.1" - read-pkg-up "^2.0.0" - resolve "^1.17.0" - tsconfig-paths "^3.9.0" - -eslint-plugin-node@11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-11.0.0.tgz#365944bb0804c5d1d501182a9bc41a0ffefed726" - integrity sha512-chUs/NVID+sknFiJzxoN9lM7uKSOEta8GC8365hw1nDfwIPIjjpRSwwPvQanWv8dt/pDe9EV4anmVSwdiSndNg== - dependencies: - eslint-plugin-es "^3.0.0" - eslint-utils "^2.0.0" - ignore "^5.1.1" - minimatch "^3.0.4" - resolve "^1.10.1" - semver "^6.1.0" - -eslint-plugin-promise@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" - integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== - -eslint-plugin-standard@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" - integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== - -eslint-plugin-vue@^6.1.2: - version "6.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz#27fecd9a3a24789b0f111ecdd540a9e56198e0fe" - integrity sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ== - dependencies: - natural-compare "^1.4.0" - semver "^5.6.0" - vue-eslint-parser "^7.0.0" - -eslint-scope@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@6.8.0, eslint@^6.0.0: - version "6.8.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" - integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.10.0" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^5.0.0" - eslint-utils "^1.4.3" - eslint-visitor-keys "^1.1.0" - espree "^6.1.2" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" - globals "^12.1.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^7.0.0" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.14" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.3" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^6.1.2" - strip-ansi "^5.2.0" - strip-json-comments "^3.0.1" - table "^5.2.3" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^6.1.2, espree@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" - integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== - dependencies: - acorn "^7.1.1" - acorn-jsx "^5.2.0" - eslint-visitor-keys "^1.1.0" - -esprima@3.x.x: - version "3.1.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" - integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== - -estree-walker@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" - integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.1.tgz#f8e030fb21cefa183b44b7ad516b747434e7a3e0" - integrity sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== - dependencies: - type "^2.0.0" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extsprintf@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.0.tgz#4d58b815ace5bebfc4ebf03cf98b0a7604a99b86" - integrity sha1-TVi4Fazlvr/E6/A8+YsKdgSpm4Y= - -extsprintf@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz#5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529" - integrity sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk= - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -figures@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filesize@^4.1.2: - version "4.2.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-4.2.1.tgz#ab1cb2069db5d415911c1a13e144c0e743bc89bc" - integrity sha512-bP82Hi8VRZX/TUBKfE24iiUGsB/sfm2WUrwTQyAzQrhO3V9IhcBBNBXMyzLY5orACxRyYJ3d2HeRVX+eFv4lmA== - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flat@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" - integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== - dependencies: - is-buffer "~2.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flow-remove-types@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/flow-remove-types/-/flow-remove-types-1.2.3.tgz#6131aefc7da43364bb8b479758c9dec7735d1a18" - integrity sha512-ypq/U3V+t9atYiOuSJd40tekCra03EHKoRsiK/wXGrsZimuum0kdwVY7Yv0HTaoXgHW1WiayomYd+Q3kkvPl9Q== - dependencies: - babylon "^6.15.0" - vlq "^0.2.1" - -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - -foreach@~2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" - integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^1.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fs@0.0.1-security: - version "0.0.1-security" - resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4" - integrity sha1-invTcYa23d84E/I4WLV+yq9eQdQ= - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -ftp@~0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" - integrity sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0= - dependencies: - readable-stream "1.1.x" - xregexp "2.0.0" - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -fwd-stream@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fwd-stream/-/fwd-stream-1.0.4.tgz#ed281cabed46feecf921ee32dc4c50b372ac7cfa" - integrity sha1-7Sgcq+1G/uz5Ie4y3ExQs3KsfPo= - dependencies: - readable-stream "~1.0.26-4" - -generic-names@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" - integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= - dependencies: - loader-utils "^0.2.16" - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= - -get-uri@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.4.tgz#d4937ab819e218d4cb5ae18e4f5962bef169cc6a" - integrity sha512-v7LT/s8kVjs+Tx0ykk1I+H/rbpzkHvuIq87LmeXptcf5sNWm9uQiwjNAt94SJPA1zOlCntmnOlJvVWKmzsxG8Q== - dependencies: - data-uri-to-buffer "1" - debug "2" - extend "~3.0.2" - file-uri-to-path "1" - ftp "~0.3.10" - readable-stream "2" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -gherkin@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/gherkin/-/gherkin-5.0.0.tgz#96def41198ec3908258b511af74f655a2764d2a1" - integrity sha1-lt70EZjsOQgli1Ea909lWidk0qE= - -glob-parent@^5.0.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob@7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== - 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" - -glob@^6.0.1: - version "6.0.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" - integrity sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -growl@1.10.5: - version "1.10.5" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" - integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== - -gzip-size@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handlebars@^4.0.6: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -he@1.2.0, he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -htmlparser2@^3.9.1: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - 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" - -http-errors@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-proxy-agent@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" - integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== - dependencies: - agent-base "4" - debug "3.1.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-proxy-agent@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81" - integrity sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -iconv-lite@0.4.24, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -image-size@~0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" - integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= - -immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immediate@~3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" - integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -indexof@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.2.0.tgz#63ce99d823090de7eb420e4bb05e6f3449aa389a" - integrity sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ== - dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -ip@1.1.5, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -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= - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - -is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-expression@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" - integrity sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8= - dependencies: - acorn "~4.0.2" - object-assign "^4.0.1" - -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= - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-generator/-/is-generator-1.0.3.tgz#c14c21057ed36e328db80347966c693f886389f3" - integrity sha1-wUwhBX7TbjKNuANHlmxpP4hjifM= - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - integrity sha1-AO+8CIFsM8/ErIJR0TLhDcZQmNc= - -is-promise@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" - integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== - -is-reference@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-regex@^1.0.3, is-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" - integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== - dependencies: - has-symbols "^1.0.1" - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@^1.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= - -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - integrity sha1-OzSixI81mXLzUEKEkZOucmS2NWI= - -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= - -isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -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= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -join-path@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/join-path/-/join-path-1.1.1.tgz#10535a126d24cbd65f7ffcdf15ef2e631076b505" - integrity sha1-EFNaEm0ky9Zff/zfFe8uYxB2tQU= - dependencies: - as-array "^2.0.0" - url-join "0.0.1" - valid-url "^1" - -js-base64@^2.1.9: - version "2.6.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.2.tgz#cf9301bc5cc756892a9a6c8d7138322e5944fb0d" - integrity sha512-1hgLrLIrmCgZG+ID3VoLNLOSwjGnoZa8tyrUdEteMeIzsT6PH7PMLyUvbDwzNE56P3PNxyvuIOx4Uh2E5rzQIw== - -js-beautify@^1.6.12: - version "1.11.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.11.0.tgz#afb873dc47d58986360093dcb69951e8bcd5ded2" - integrity sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A== - dependencies: - config-chain "^1.1.12" - editorconfig "^0.15.3" - glob "^7.1.3" - mkdirp "~1.0.3" - nopt "^4.0.3" - -js-stringify@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" - integrity sha1-Fzb939lyTyijaCrcYjCufk6Weds= - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@3.13.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.13.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -jsonfile@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" - integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== - dependencies: - universalify "^1.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jstransformer@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" - integrity sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM= - dependencies: - is-promise "^2.0.0" - promise "^7.0.1" - -kind-of@^3.0.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -knuth-shuffle-seeded@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz#01f1b65733aa7540ee08d8b0174164d22081e4e1" - integrity sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE= - dependencies: - seed-random "~2.2.0" - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -ldap-filter@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ldap-filter/-/ldap-filter-0.2.1.tgz#a6cc0560363d2144ba834dee8e0b3262b1372427" - integrity sha1-pswFYDY9IUS6g03ujgsyYrE3JCc= - dependencies: - assert-plus "0.1.5" - -ldap@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ldap/-/ldap-0.7.1.tgz#320165cd1065079607d83bfbf4308cb45ce791b9" - integrity sha1-MgFlzRBlB5YH2Dv79DCMtFznkbk= - dependencies: - asn1 "0.2.2" - assert-plus "0.1.5" - backoff "2.4.1" - bunyan "1.3.3" - dashdash "1.7.3" - ldap-filter "0.2.1" - once "1.3.1" - vasync "1.6.2" - verror "1.6.0" - optionalDependencies: - dtrace-provider "0.4.0" - -less@^3.9.0: - version "3.11.3" - resolved "https://registry.yarnpkg.com/less/-/less-3.11.3.tgz#2d853954fcfe0169a8af869620bcaa16563dcc1c" - integrity sha512-VkZiTDdtNEzXA3LgjQiC3D7/ejleBPFVvq+aRI9mIj+Zhmif5TvFPM244bT4rzkvOCvJ9q4zAztok1M7Nygagw== - dependencies: - clone "^2.1.2" - tslib "^1.10.0" - optionalDependencies: - errno "^0.1.1" - graceful-fs "^4.1.2" - image-size "~0.5.0" - make-dir "^2.1.0" - mime "^1.4.1" - promise "^7.1.1" - request "^2.83.0" - source-map "~0.6.0" - -level-blobs@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/level-blobs/-/level-blobs-0.1.7.tgz#9ab9b97bb99f1edbf9f78a3433e21ed56386bdaf" - integrity sha1-mrm5e7mfHtv594o0M+Ie1WOGva8= - dependencies: - level-peek "1.0.6" - once "^1.3.0" - readable-stream "^1.0.26-4" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-filesystem@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/level-filesystem/-/level-filesystem-1.2.0.tgz#a00aca9919c4a4dfafdca6a8108d225aadff63b3" - integrity sha1-oArKmRnEpN+v3KaoEI0iWq3/Y7M= - dependencies: - concat-stream "^1.4.4" - errno "^0.1.1" - fwd-stream "^1.0.4" - level-blobs "^0.1.7" - level-peek "^1.0.6" - level-sublevel "^5.2.0" - octal "^1.0.0" - once "^1.3.0" - xtend "^2.2.0" - -level-fix-range@2.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-2.0.0.tgz#c417d62159442151a19d9a2367868f1724c2d548" - integrity sha1-xBfWIVlEIVGhnZojZ4aPFyTC1Ug= - dependencies: - clone "~0.1.9" - -level-fix-range@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/level-fix-range/-/level-fix-range-1.0.2.tgz#bf15b915ae36d8470c821e883ddf79cd16420828" - integrity sha1-vxW5Fa422EcMgh6IPd95zRZCCCg= - -"level-hooks@>=4.4.0 <5": - version "4.5.0" - resolved "https://registry.yarnpkg.com/level-hooks/-/level-hooks-4.5.0.tgz#1b9ae61922930f3305d1a61fc4d83c8102c0dd93" - integrity sha1-G5rmGSKTDzMF0aYfxNg8gQLA3ZM= - dependencies: - string-range "~1.2" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-js@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-4.0.2.tgz#fa51527fa38b87c4d111b0d0334de47fcda38f21" - integrity sha512-PeGjZsyMG4O89KHiez1zoMJxStnkM+oBIqgACjoo5PJqFiSUUm3GNod/KcbqN5ktyZa8jkG7I1T0P2u6HN9lIg== - dependencies: - abstract-leveldown "~6.0.1" - immediate "~3.2.3" - inherits "^2.0.3" - ltgt "^2.1.2" - typedarray-to-buffer "~3.1.5" - -level-peek@1.0.6, level-peek@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/level-peek/-/level-peek-1.0.6.tgz#bec51c72a82ee464d336434c7c876c3fcbcce77f" - integrity sha1-vsUccqgu5GTTNkNMfIdsP8vM538= - dependencies: - level-fix-range "~1.0.2" - -level-sublevel@^5.2.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-5.2.3.tgz#744c12c72d2e72be78dde3b9b5cd84d62191413a" - integrity sha1-dEwSxy0ucr543eO5tc2E1iGRQTo= - dependencies: - level-fix-range "2.0" - level-hooks ">=4.4.0 <5" - string-range "~1.2.1" - xtend "~2.0.4" - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -levelup@^4.0.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754= - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - integrity sha1-MDUZv2OT/n5C802LYw73eU41Qrc= - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= - -lodash.clone@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-3.0.3.tgz#84688c73d32b5a90ca25616963f189252a997043" - integrity sha1-hGiMc9MrWpDKJWFpY/GJJSqZcEM= - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.defaults@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" - integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw= - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.union@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" - integrity sha1-SLtQiECfFvGCFmZkHETdGqrjzYg= - -lodash@^4.15.0, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -log-symbols@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -log-symbols@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" - integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== - dependencies: - chalk "^2.4.2" - -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= - -loose-envify@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lru-cache@^4.1.2, lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -ltgt@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= - -magic-string@^0.22.5: - version "0.22.5" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.5.tgz#8e9cf5afddf44385c1da5bc2a6a0dbd10b03657e" - integrity sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w== - dependencies: - vlq "^0.2.2" - -magic-string@^0.25.2, magic-string@^0.25.5, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime@^1.4.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.0, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== - dependencies: - minimist "^1.2.5" - -mkdirp@^0.5.1, mkdirp@~0.5.1, mkdirp@~0.5.x: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkpath@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mkpath/-/mkpath-1.0.0.tgz#ebb3a977e7af1c683ae6fda12b545a6ba6c5853d" - integrity sha1-67Opd+evHGg65v2hK1Raa6bFhT0= - -mocha@^6.2.2: - version "6.2.3" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" - integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "2.2.0" - minimatch "3.0.4" - mkdirp "0.5.4" - ms "2.1.1" - node-environment-flags "1.0.5" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - -mv@~2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" - integrity sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI= - dependencies: - mkdirp "~0.5.1" - ncp "~2.0.0" - rimraf "~2.4.0" - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@~1.5.1: - version "1.5.3" - resolved "https://registry.yarnpkg.com/nan/-/nan-1.5.3.tgz#4cd0ecc133b7b0700a492a646add427ae8a318eb" - integrity sha1-TNDswTO3sHAKSSpkat1CeuijGOs= - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -ncp@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" - integrity sha1-GVoh1sRuNh0vsSgbo4uR6d9727M= - -neo-async@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" - integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== - -netmask@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" - integrity sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU= - -next-tick@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" - integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nightwatch-api@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/nightwatch-api/-/nightwatch-api-3.0.1.tgz#10961a20b8e53f9fd7d0597643a009151d4a2ece" - integrity sha512-5xrlyDL17zJygXHa5Kib/0T8zZYqPYMpqHeHhyo+TWaWoR4rVtjcy3Cjblvo+0DuvhHk6wVKTLha1UgdDJpFPA== - dependencies: - "@types/debug" "^4.1.5" - debug "^4.1.1" - -nightwatch@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/nightwatch/-/nightwatch-1.3.6.tgz#881c7884090c7969e0f6b13ac5700929e7145c77" - integrity sha512-61kz2mw3Ng8Rrs2CDZv6aVB+bW+oNIFXL543L9kOvOqft3zVh2j08W8ww6BxGDzmWZe1HGRXNEI5U8+I4hO4KA== - dependencies: - assertion-error "^1.1.0" - chai-nightwatch "^0.4.0" - ci-info "^2.0.0" - dotenv "7.0.0" - ejs "^2.7.4" - envinfo "^7.5.1" - lodash.clone "3.0.3" - lodash.defaultsdeep "^4.6.1" - lodash.merge "^4.6.2" - minimatch "3.0.4" - minimist "^1.2.5" - mkpath "1.0.0" - ora "^4.0.3" - proxy-agent "^3.1.1" - request "^2.88.2" - request-promise "^4.2.5" - semver "^6.3.0" - strip-ansi "^6.0.0" - optionalDependencies: - mocha "^6.2.2" - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-environment-flags@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" - integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== - dependencies: - object.getownpropertydescriptors "^2.0.3" - semver "^5.7.0" - -node-fetch@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-releases@^1.1.58: - version "1.1.58" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.58.tgz#8ee20eef30fa60e52755fcc0942def5a734fe935" - integrity sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg== - -nopt@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-inspect@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - integrity sha1-zd7AKZiwkb5CvxA1rjLknxy26mc= - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object.assign@4.1.0, object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.getownpropertydescriptors@^2.0.3: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -octal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/octal/-/octal-1.0.0.tgz#63e7162a68efbeb9e213588d58e989d1e5c4530b" - integrity sha1-Y+cWKmjvvrniE1iNWOmJ0eXEUws= - -once@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.1.tgz#f3f3e4da5b7d27b5c732969ee3e67e729457b31f" - integrity sha1-8/Pk2lt9J7XHMpae4+Z+cpRXsx8= - dependencies: - wrappy "1" - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.1, optionator@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ora@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.4.tgz#e8da697cc5b6a47266655bf68e0fb588d29a545d" - integrity sha512-77iGeVU1cIdRhgFzCK8aw1fbtT1B/iZAvWjS+l/o1x0RShMgxHUZaD2yDpWsNCPwXg9z1ZA78Kbdvr8kBmG/Ww== - dependencies: - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-spinners "^2.2.0" - is-interactive "^1.0.0" - log-symbols "^3.0.0" - mute-stream "0.0.8" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pac-proxy-agent@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-3.0.1.tgz#115b1e58f92576cac2eba718593ca7b0e37de2ad" - integrity sha512-44DUg21G/liUZ48dJpUSjZnFfZro/0K5JTyFYLBcmh9+T6Ooi4/i4efwUiEy0+4oQusCBqWdhv16XohIj1GqnQ== - dependencies: - agent-base "^4.2.0" - debug "^4.1.1" - get-uri "^2.0.0" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - pac-resolver "^3.0.0" - raw-body "^2.2.0" - socks-proxy-agent "^4.0.1" - -pac-resolver@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-3.0.0.tgz#6aea30787db0a891704deb7800a722a7615a6f26" - integrity sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA== - dependencies: - co "^4.6.0" - degenerator "^1.0.4" - ip "^1.1.5" - netmask "^1.0.6" - thunkify "^2.1.2" - -pad-right@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/pad-right/-/pad-right-0.2.2.tgz#6fbc924045d244f2a2a244503060d3bfc6009774" - integrity sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q= - dependencies: - repeat-string "^1.5.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse5@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== - dependencies: - "@types/node" "*" - -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= - -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= - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path@^0.12.7: - version "0.12.7" - resolved "https://registry.yarnpkg.com/path/-/path-0.12.7.tgz#d4dc2a506c4ce2197eb481ebfcd5b36c0140b10f" - integrity sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8= - dependencies: - process "^0.11.1" - util "^0.10.3" - -pathval@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= - -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pirates@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pofile@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.1.0.tgz#9ce84bbef5043ceb4f19bdc3520d85778fad4f94" - integrity sha512-6XYcNkXWGiJ2CVXogTP7uJ6ZXQCldYLZc16wgRp8tqRaBTTyIfF+TUT3EQJPXTLAT7OTPpTAoaFdoXKfaTRU1w== - -postcss-modules-local-by-default@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-sync@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-sync/-/postcss-modules-sync-1.0.0.tgz#619a719cf78dd16a4834135140b324cf77334be1" - integrity sha1-YZpxnPeN0WpINBNRQLMkz3czS+E= - dependencies: - generic-names "^1.0.2" - icss-replace-symbols "^1.0.2" - postcss "^5.2.5" - postcss-modules-local-by-default "^1.1.1" - postcss-modules-scope "^1.0.2" - string-hash "^1.1.0" - -postcss-selector-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" - integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== - dependencies: - cssesc "^2.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss@^5.2.5: - version "5.2.18" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" - integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== - dependencies: - chalk "^1.1.3" - js-base64 "^2.1.9" - source-map "^0.5.6" - supports-color "^3.2.3" - -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.14: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -precond@0.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" - integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prettier@1.16.3: - version "1.16.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.3.tgz#8c62168453badef702f34b45b6ee899574a6a65d" - integrity sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw== - -prettier@^1.18.2: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-es6@^0.11.2, process-es6@^0.11.6: - version "0.11.6" - resolved "https://registry.yarnpkg.com/process-es6/-/process-es6-0.11.6.tgz#c6bb389f9a951f82bd4eb169600105bd2ff9c778" - integrity sha1-xrs4n5qVH4K9TrFpYAEFvS/5x3g= - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.1: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise@^7.0.1, promise@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" - integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== - dependencies: - asap "~2.0.3" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -proxy-agent@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-3.1.1.tgz#7e04e06bf36afa624a1540be247b47c970bd3014" - integrity sha512-WudaR0eTsDx33O3EJE16PjBRZWcX8GqCEeERw1W3hZJgH/F2a46g7jty6UGty6NeJ4CKQy8ds2CJPMiyeqaTvw== - dependencies: - agent-base "^4.2.0" - debug "4" - http-proxy-agent "^2.1.0" - https-proxy-agent "^3.0.0" - lru-cache "^5.1.1" - pac-proxy-agent "^3.0.1" - proxy-from-env "^1.0.0" - socks-proxy-agent "^4.0.1" - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pug-attrs@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.4.tgz#b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336" - integrity sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ== - dependencies: - constantinople "^3.0.1" - js-stringify "^1.0.1" - pug-runtime "^2.0.5" - -pug-code-gen@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.2.tgz#ad0967162aea077dcf787838d94ed14acb0217c2" - integrity sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw== - dependencies: - constantinople "^3.1.2" - doctypes "^1.1.0" - js-stringify "^1.0.1" - pug-attrs "^2.0.4" - pug-error "^1.3.3" - pug-runtime "^2.0.5" - void-elements "^2.0.1" - with "^5.0.0" - -pug-error@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.3.tgz#f342fb008752d58034c185de03602dd9ffe15fa6" - integrity sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ== - -pug-filters@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.1.tgz#ab2cc82db9eeccf578bda89130e252a0db026aa7" - integrity sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg== - dependencies: - clean-css "^4.1.11" - constantinople "^3.0.1" - jstransformer "1.0.0" - pug-error "^1.3.3" - pug-walk "^1.1.8" - resolve "^1.1.6" - uglify-js "^2.6.1" - -pug-lexer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.1.0.tgz#531cde48c7c0b1fcbbc2b85485c8665e31489cfd" - integrity sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA== - dependencies: - character-parser "^2.1.1" - is-expression "^3.0.0" - pug-error "^1.3.3" - -pug-linker@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.6.tgz#f5bf218b0efd65ce6670f7afc51658d0f82989fb" - integrity sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg== - dependencies: - pug-error "^1.3.3" - pug-walk "^1.1.8" - -pug-load@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.12.tgz#d38c85eb85f6e2f704dea14dcca94144d35d3e7b" - integrity sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg== - dependencies: - object-assign "^4.1.0" - pug-walk "^1.1.8" - -pug-parser@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.1.tgz#03e7ada48b6840bd3822f867d7d90f842d0ffdc9" - integrity sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA== - dependencies: - pug-error "^1.3.3" - token-stream "0.0.1" - -pug-runtime@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.5.tgz#6da7976c36bf22f68e733c359240d8ae7a32953a" - integrity sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw== - -pug-strip-comments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz#cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8" - integrity sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw== - dependencies: - pug-error "^1.3.3" - -pug-walk@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.8.tgz#b408f67f27912f8c21da2f45b7230c4bd2a5ea7a" - integrity sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA== - -pug@^2.0.3, pug@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.4.tgz#ee7682ec0a60494b38d48a88f05f3b0ac931377d" - integrity sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw== - dependencies: - pug-code-gen "^2.0.2" - pug-filters "^3.1.1" - pug-lexer "^4.1.0" - pug-linker "^3.0.6" - pug-load "^2.0.12" - pug-parser "^5.0.1" - pug-runtime "^2.0.5" - pug-strip-comments "^1.0.4" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@^6.9.1: - version "6.9.4" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" - integrity sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -querystring@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -raw-body@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== - dependencies: - bytes "3.1.0" - http-errors "1.7.3" - iconv-lite "0.4.24" - unpipe "1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -readable-stream@1.1.x, readable-stream@^1.0.26-4: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.3.7: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - 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" - -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.0.26-4: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regenerator-transform@^0.14.2: - version "0.14.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" - integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== - dependencies: - "@babel/runtime" "^7.8.4" - private "^0.1.8" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.6.0, regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== - dependencies: - lodash "^4.17.15" - -request-promise@^4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.5.tgz#186222c59ae512f3497dfe4d75a9c8461bd0053c" - integrity sha512-ZgnepCykFdmpq86fKGwqntyTiUrHycALuGggpyCZwMvGaZWgxW6yagT0FHkgo5LzYvOaCNvxYwWYIjevSH1EDg== - dependencies: - bluebird "^3.5.0" - request-promise-core "1.1.3" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.83.0, request@^2.88.2: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - 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" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2, resolve@^1.3.3, resolve@^1.8.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= - dependencies: - align-text "^0.1.1" - -rimraf@2.6.3: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rimraf@~2.4.0: - version "2.4.5" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" - integrity sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto= - dependencies: - glob "^6.0.1" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-babel@^4.3.3: - version "4.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" - integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-eslint@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-eslint/-/rollup-plugin-eslint-7.0.0.tgz#a6dbcbc14699a7a02155697c0c3dfa26cca59a9b" - integrity sha512-u35kXiY11ULeNQGTlRkYx7uGJ/hS/Dx3wj8f9YVC3oMLTGU9fOqQJsAKYtBFZU3gJ8Vt3gu8ppB1vnKl+7gatQ== - dependencies: - eslint "^6.0.0" - rollup-pluginutils "^2.7.1" - -rollup-plugin-filesize@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-filesize/-/rollup-plugin-filesize-6.2.1.tgz#552eebc88dd69db3321d99c27dbd49e550812e54" - integrity sha512-JQ2+NMoka81lCR2caGWyngqMKpvJCl7EkFYU7A+T0dA7U1Aml13FW5Ky0aiZIeU3/13cjsKQLRr35SQVmk6i/A== - dependencies: - boxen "^4.1.0" - brotli-size "4.0.0" - colors "^1.3.3" - filesize "^4.1.2" - gzip-size "^5.1.1" - lodash.merge "^4.6.2" - terser "^4.1.3" - -rollup-plugin-node-globals@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-globals/-/rollup-plugin-node-globals-1.4.0.tgz#5e1f24a9bb97c0ef51249f625e16c7e61b7c020b" - integrity sha512-xRkB+W/m1KLIzPUmG0ofvR+CPNcvuCuNdjVBVS7ALKSxr3EDhnzNceGkGi1m8MToSli13AzKFYH4ie9w3I5L3g== - dependencies: - acorn "^5.7.3" - buffer-es6 "^4.9.3" - estree-walker "^0.5.2" - magic-string "^0.22.5" - process-es6 "^0.11.6" - rollup-pluginutils "^2.3.1" - -rollup-plugin-node-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" - integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.11.1" - rollup-pluginutils "^2.8.1" - -rollup-plugin-terser@^5.1.3: - version "5.3.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz#9c0dd33d5771df9630cd027d6a2559187f65885e" - integrity sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" - serialize-javascript "^2.1.2" - terser "^4.6.2" - -rollup-plugin-vue@^5.1.4: - version "5.1.9" - resolved "https://registry.yarnpkg.com/rollup-plugin-vue/-/rollup-plugin-vue-5.1.9.tgz#8769cfdac5531c2d1970222b7887b883db37b866" - integrity sha512-DXzrBUD2j68Y6nls4MmuJsFL1SrQDpdgjxvhk/oy04LzJmXJoX1x31yLEBFkkmvpbon6Q885WJLvEMiMyT+3rA== - dependencies: - "@vue/component-compiler" "^4.2.3" - "@vue/component-compiler-utils" "^3.1.2" - debug "^4.1.1" - hash-sum "^1.0.2" - magic-string "^0.25.7" - querystring "^0.2.0" - rollup-pluginutils "^2.8.2" - source-map "0.7.3" - vue-runtime-helpers "^1.1.2" - -rollup-pluginutils@^2.3.1, rollup-pluginutils@^2.7.1, rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.28.0: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - -run-async@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -rxjs@^6.5.3: - version "6.5.5" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" - integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== - dependencies: - tslib "^1.9.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -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" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-json-stringify@~1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd" - integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg== - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass@^1.18.0: - version "1.26.9" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.9.tgz#73c10cbb88c12b22a9e0107725bfd62296f4978f" - integrity sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw== - dependencies: - chokidar ">=2.0.0 <4.0.0" - -sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -seed-random@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" - integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ= - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-error@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-4.1.0.tgz#63e1e33ede20bcd89d9f0528ea4c15fbf0f2b78a" - integrity sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw== - dependencies: - type-fest "^0.3.0" - -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -sigmund@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - -signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -smart-buffer@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" - integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== - -socks-proxy-agent@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz#3c8991f3145b2799e70e11bd5fbc8b1963116386" - integrity sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg== - dependencies: - agent-base "~4.2.1" - socks "~2.3.2" - -socks@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" - integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== - dependencies: - ip "1.1.5" - smart-buffer "^4.1.0" - -source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.16, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" - integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= - -source-map@0.6.*, 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.7.3, source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.1: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -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= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - 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" - -stack-chain@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/stack-chain/-/stack-chain-2.0.0.tgz#d73d1172af89565f07438b5bcc086831b6689b2d" - integrity sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg== - -stack-generator@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" - integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== - dependencies: - stackframe "^1.1.1" - -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -stacktrace-gps@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" - integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg== - dependencies: - source-map "0.5.6" - stackframe "^1.1.1" - -stacktrace-js@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" - integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== - dependencies: - error-stack-parser "^2.0.6" - stack-generator "^2.0.5" - stacktrace-gps "^3.0.4" - -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -string-argv@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" - integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== - -string-hash@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs= - -string-range@~1.2, string-range@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/string-range/-/string-range-1.2.2.tgz#a893ed347e72299bc83befbbf2a692a8d239d5dd" - integrity sha1-qJPtNH5yKZvIO++78qaSqNI51d0= - -"string-width@^1.0.2 || 2", string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -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= - -strip-json-comments@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" - integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== - -stylus@^0.54.5: - version "0.54.7" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" - integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== - dependencies: - css-parse "~2.0.0" - debug "~3.1.0" - glob "^7.1.3" - mkdirp "~0.5.x" - safer-buffer "^2.1.2" - sax "~1.2.4" - semver "^6.0.0" - source-map "^0.7.3" - -supports-color@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" - integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== - dependencies: - has-flag "^3.0.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -swagger-vue-generator@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/swagger-vue-generator/-/swagger-vue-generator-1.0.6.tgz#a2d6ec729bad81b3245b5daa847aee8e83edbfd8" - integrity sha1-otbscputgbMkW12qhHrujoPtv9g= - dependencies: - argparse "^1.0.9" - chai "^4.1.2" - child_process "^1.0.2" - fs "0.0.1-security" - lodash "^4.17.4" - path "^0.12.7" - swagger-vue "^1.0.3" - yaml "^0.3.0" - -swagger-vue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/swagger-vue/-/swagger-vue-1.0.3.tgz#3c9fa5c6b6d83ae341dd8dab12f0a414a9900237" - integrity sha1-PJ+lxrbYOuNB3Y2rEvCkFKmQAjc= - dependencies: - handlebars "^4.0.6" - js-beautify "^1.6.12" - lodash "^4.17.4" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tar-stream@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" - integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== - dependencies: - bl "^4.0.1" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== - -terser@^4.1.3, terser@^4.6.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -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= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunkify@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" - integrity sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0= - -title-case@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - -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= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -token-stream@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" - integrity sha1-zu78cXp2xDFvEm0LnbqlXX598Bo= - -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tsconfig-paths@^3.9.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" - integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.1" - minimist "^1.2.0" - strip-bom "^3.0.0" - -tslib@^1.10.0, tslib@^1.9.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" - integrity sha1-C6XsKohWQORw6k6FBZcZANrFiCI= - -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" - integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3" - integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow== - -typedarray-to-buffer@~3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -uglify-js@^2.6.1: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" - -uglify-js@^3.1.4: - version "3.10.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" - integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== - -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" - integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -universalify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" - integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== - -unpipe@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -upper-case@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-join@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-0.0.1.tgz#1db48ad422d3402469a87f7d97bdebfe4fb1e3c8" - integrity sha1-HbSK1CLTQCRpqH99l73r/k+x48g= - -url-search-params-polyfill@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-8.1.0.tgz#5c15b69687165bfd4f6c7d8a161d70d85385885b" - integrity sha512-MRG3vzXyG20BJ2fox50/9ZRoe+2h3RM7DIudVD2u/GY9MtayO1Dkrna76IUOak+uoUPVWbyR0pHCzxctP/eDYQ== - -util-arity@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/util-arity/-/util-arity-1.1.0.tgz#59d01af1fdb3fede0ac4e632b0ab5f6ce97c9330" - integrity sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA= - -util-deprecate@^1.0.1, 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= - -util@^0.10.3: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -v8-compile-cache@^2.0.3: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" - integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== - -valid-url@^1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" - integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA= - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -validator@^13.1.1: - version "13.1.1" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.1.1.tgz#f8811368473d2173a9d8611572b58c5783f223bf" - integrity sha512-8GfPiwzzRoWTg7OV1zva1KvrSemuMkv07MA9TTl91hfhe+wKrsrgVN4H2QSFd/U/FhiU3iWPYVgvbsOGwhyFWw== - -vasync@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/vasync/-/vasync-1.6.2.tgz#568edcf40b2b5c35b1cc048cad085de4739703fb" - integrity sha1-Vo7c9AsrXDWxzASMrQhd5HOXA/s= - dependencies: - verror "1.1.0" - -verror@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.1.0.tgz#2a4b4eb14a207051e75a6f94ee51315bf173a1b0" - integrity sha1-KktOsUogcFHnWm+U7lExW/FzobA= - dependencies: - extsprintf "1.0.0" - -verror@1.10.0, verror@^1.9.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -verror@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz#7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5" - integrity sha1-fROyex+swuLakEBetepuW90lLqU= - dependencies: - extsprintf "1.2.0" - -vlq@^0.2.1, vlq@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -void-elements@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= - -vue-eslint-parser@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz#9cdbcc823e656b087507a1911732b867ac101e83" - integrity sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q== - dependencies: - debug "^4.1.1" - eslint-scope "^5.0.0" - eslint-visitor-keys "^1.1.0" - espree "^6.2.1" - esquery "^1.0.1" - lodash "^4.17.15" - -vue-runtime-helpers@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vue-runtime-helpers/-/vue-runtime-helpers-1.1.2.tgz#446b7b820888ab0c5264d2c3a32468e72e4100f3" - integrity sha512-pZfGp+PW/IXEOyETE09xQHR1CKkR9HfHZdnMD/FVLUNI+HxYTa82evx5WrF6Kz4s82qtqHvMZ8MZpbk2zT2E1Q== - -vue-template-compiler@^2.6.10, vue-template-compiler@^2.6.11: - version "2.6.11" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" - integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vuex@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" - integrity sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw== - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@1.3.1, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= - -with@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" - integrity sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4= - dependencies: - acorn "^3.1.0" - acorn-globals "^3.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -xml-js@^1.6.11: - version "1.6.11" - resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" - integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== - dependencies: - sax "^1.2.4" - -xregexp@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" - integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= - -xregexp@^4.2.4: - version "4.3.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" - integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== - dependencies: - "@babel/runtime-corejs3" "^7.8.3" - -xtend@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.2.0.tgz#eef6b1f198c1c8deafad8b1765a04dad4a01c5a9" - integrity sha1-7vax8ZjByN6vrYsXZaBNrUoBxak= - -xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xtend@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - integrity sha1-XqZXptukRwacLlnFihE4ywxebO4= - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yaml@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-0.3.0.tgz#c31a616d07acdbc2012d73a6ba5b1b0bdd185a7f" - integrity sha1-wxphbQes28IBLXOmulsbC90YWn8= - -yargs-parser@13.1.2, yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-unparser@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" - integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== - dependencies: - flat "^4.1.0" - lodash "^4.17.15" - yargs "^13.3.0" - -yargs@13.3.2, yargs@^13.3.0: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -zip-stream@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-3.0.1.tgz#cb8db9d324a76c09f9b76b31a12a48638b0b9708" - integrity sha512-r+JdDipt93ttDjsOVPU5zaq5bAyY+3H19bDrThkvuVxC0xMQzU1PJcS6D+KrP3u96gH9XLomcHPb+2skoDjulQ== - dependencies: - archiver-utils "^2.1.0" - compress-commons "^3.0.0" - readable-stream "^3.6.0"