Add 'konnectd/' from commit '3829df495cbcad9bb261518b4afb7d15ba53d54c'

git-subtree-dir: konnectd
git-subtree-mainline: ab1e6d4689
git-subtree-split: 3829df495c
This commit is contained in:
A.Unger
2020-09-18 13:00:53 +02:00
115 changed files with 6955 additions and 0 deletions

9
konnectd/.codacy.yml Normal file
View File

@@ -0,0 +1,9 @@
---
exclude_paths:
- CHANGELOG.md
- changelog/**
- docs/**
- pkg/proto/**
- web/identifier-webapp/**
...

2
konnectd/.dockerignore Normal file
View File

@@ -0,0 +1,2 @@
*
!bin/

698
konnectd/.drone.star Normal file
View File

@@ -0,0 +1,698 @@
def main(ctx):
before = [
testing(ctx),
]
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': '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 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',
},
},
},
],
'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': '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 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',
],
'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': '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': 'webhippie/golang:1.13',
'pull': 'always',
'commands': [
'git diff',
],
},
{
'name': 'output',
'image': 'webhippie/golang:1.13',
'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/**',
],
},
}

35
konnectd/.editorconfig Normal file
View File

@@ -0,0 +1,35 @@
# 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

12
konnectd/.github/config.yml vendored Normal file
View File

@@ -0,0 +1,12 @@
# 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-konnectd/blob/master/changelog/README.md) item based on your changes.
updateDocsWhiteList:
- Tests-only
- tests-only
- Tests-Only
updateDocsTargetFiles:
- changelog/unreleased/

0
konnectd/.github/issue_template.md vendored Normal file
View File

View File

98
konnectd/.github/settings.yml vendored Normal file
View File

@@ -0,0 +1,98 @@
---
repository:
name: ocis-konnectd
description: ':atom_symbol: Serve Konnectd for oCIS'
homepage: https://owncloud.github.io/ocis-konnectd/
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
...

7
konnectd/.gitignore vendored Normal file
View File

@@ -0,0 +1,7 @@
coverage.out
/bin
/dist
/hugo
server.crt
server.key

151
konnectd/CHANGELOG.md Normal file
View File

@@ -0,0 +1,151 @@
# Changelog for [0.3.2] (2020-07-23)
The following sections list the changes in ocis-konnectd 0.3.2.
[0.3.2]: https://github.com/owncloud/ocis-konnectd/compare/v0.3.1...v0.3.2
## Summary
* Bugfix - Add silent redirect url: [#69](https://github.com/owncloud/ocis-konnectd/issues/69)
* Bugfix - Build docker images with alpine:latest instead of alpine:edge: [#71](https://github.com/owncloud/ocis-konnectd/pull/71)
## Details
* Bugfix - Add silent redirect url: [#69](https://github.com/owncloud/ocis-konnectd/issues/69)
Adds the oidc-silent-redirect.html phoenix uses to silently refresh access tokens to the
default identifier-registration.yml
https://github.com/owncloud/ocis-konnectd/issues/69
https://github.com/owncloud/ocis-konnectd/pull/70
* Bugfix - Build docker images with alpine:latest instead of alpine:edge: [#71](https://github.com/owncloud/ocis-konnectd/pull/71)
ARM builds were failing when built on alpine:edge, so we switched to alpine:latest instead.
https://github.com/owncloud/ocis-konnectd/pull/71
# Changelog for [0.3.1] (2020-04-14)
The following sections list the changes in ocis-konnectd 0.3.1.
[0.3.1]: https://github.com/owncloud/ocis-konnectd/compare/v0.3.0...v0.3.1
## Summary
* Bugfix - Include the assets for #62: [#64](https://github.com/owncloud/ocis-konnectd/pull/64)
## Details
* Bugfix - Include the assets for #62: [#64](https://github.com/owncloud/ocis-konnectd/pull/64)
PR 62 introduced new client names. These assets needs to be generated in the embed.go file.
https://github.com/owncloud/ocis-konnectd/pull/64
# Changelog for [0.3.0] (2020-04-14)
The following sections list the changes in ocis-konnectd 0.3.0.
[0.3.0]: https://github.com/owncloud/ocis-konnectd/compare/v0.2.0...v0.3.0
## Summary
* Bugfix - Redirect to the provided uri: [#26](https://github.com/owncloud/ocis-konnectd/issues/26)
* Change - Add a trailing slash to trusted redirect uris: [#26](https://github.com/owncloud/ocis-konnectd/issues/26)
* Change - Improve client identifiers for end users: [#62](https://github.com/owncloud/ocis-konnectd/pull/62)
* Enhancement - Use upstream version of konnect library: [#14](https://github.com/owncloud/product/issues/14)
## Details
* Bugfix - Redirect to the provided uri: [#26](https://github.com/owncloud/ocis-konnectd/issues/26)
The phoenix client was not set as trusted therefore when logging out the user was redirected to a
default page instead of the provided url.
https://github.com/owncloud/ocis-konnectd/issues/26
* Change - Add a trailing slash to trusted redirect uris: [#26](https://github.com/owncloud/ocis-konnectd/issues/26)
Phoenix changed the redirect uri to `<baseUrl>#/login` that means it will contain a trailing
slash after the base url.
https://github.com/owncloud/ocis-konnectd/issues/26
* Change - Improve client identifiers for end users: [#62](https://github.com/owncloud/ocis-konnectd/pull/62)
Improved end user facing client names in default identifier-registration.yaml
https://github.com/owncloud/ocis-konnectd/pull/62
* Enhancement - Use upstream version of konnect library: [#14](https://github.com/owncloud/product/issues/14)
https://github.com/owncloud/product/issues/14
# Changelog for [0.2.0] (2020-03-18)
The following sections list the changes in ocis-konnectd 0.2.0.
[0.2.0]: https://github.com/owncloud/ocis-konnectd/compare/v0.1.0...v0.2.0
## Summary
* Enhancement - Change default config for single-binary: [#55](https://github.com/owncloud/ocis-konnectd/pull/55)
## Details
* Enhancement - Change default config for single-binary: [#55](https://github.com/owncloud/ocis-konnectd/pull/55)
https://github.com/owncloud/ocis-konnectd/pull/55
# Changelog for [0.1.0] (2020-03-18)
The following sections list the changes in ocis-konnectd 0.1.0.
[0.1.0]: https://github.com/owncloud/ocis-konnectd/compare/66337bb4dad4a3202880323adf7a51a1a3bb4085...v0.1.0
## Summary
* Bugfix - Generate a random CSP-Nonce in the webapp: [#17](https://github.com/owncloud/ocis-konnectd/issues/17)
* Change - Dummy index.html is not required anymore by upstream: [#25](https://github.com/owncloud/ocis-konnectd/issues/25)
* Change - Initial release of basic version: [#1](https://github.com/owncloud/ocis-konnectd/issues/1)
* Change - Use glauth as ldap backend, default to running behind ocis-proxy: [#52](https://github.com/owncloud/ocis-konnectd/pull/52)
## Details
* Bugfix - Generate a random CSP-Nonce in the webapp: [#17](https://github.com/owncloud/ocis-konnectd/issues/17)
https://github.com/owncloud/ocis-konnectd/issues/17
https://github.com/owncloud/ocis-konnectd/pull/29
* Change - Dummy index.html is not required anymore by upstream: [#25](https://github.com/owncloud/ocis-konnectd/issues/25)
The workaround was required as identifier webapp was mandatory, but we serve it from memory.
This also introduces --disable-identifier-webapp flag.
https://github.com/owncloud/ocis-konnectd/issues/25
* Change - Initial release of basic version: [#1](https://github.com/owncloud/ocis-konnectd/issues/1)
Just prepare an initial basic version to serve konnectd embedded into our microservice
infrastructure in the scope of the ownCloud Infinite Scale project.
https://github.com/owncloud/ocis-konnectd/issues/1
* Change - Use glauth as ldap backend, default to running behind ocis-proxy: [#52](https://github.com/owncloud/ocis-konnectd/pull/52)
We changed the default configuration to integrate better with ocis.
The default ldap port changes to 9125, which is used by ocis-glauth and we use ocis-proxy to do
the tls offloading. Clients are supposed to use the ocis-proxy endpoint
`https://localhost:9200`
https://github.com/owncloud/ocis-konnectd/pull/52

202
konnectd/LICENSE Normal file
View File

@@ -0,0 +1,202 @@
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.

199
konnectd/Makefile Normal file
View File

@@ -0,0 +1,199 @@
SHELL := bash
NAME := ocis-konnectd
IMPORT := github.com/owncloud/$(NAME)
BIN := bin
DIST := dist
HUGO := hugo
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 ?= $(PACKAGES)
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)"
DEBUG_LDFLAGS += -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:
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 '$(DEBUG_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: config-docs-generate
config-docs-generate:
go run github.com/owncloud/flaex >| docs/configuration.md
.PHONY: docs-build
docs-build:
cd $(HUGO); hugo
.PHONY: docs
docs: config-docs-generate docs-copy docs-build
.PHONY: watch
watch:
go run github.com/cespare/reflex -c reflex.conf
# $(GOPATH)/bin/protoc-gen-go:
# GO111MODULE=off go get -v github.com/golang/protobuf/protoc-gen-go
# $(GOPATH)/bin/protoc-gen-micro:
# GO111MODULE=off go get -v github.com/micro/protoc-gen-micro
# $(GOPATH)/bin/protoc-gen-microweb:
# GO111MODULE=off go get -v github.com/webhippie/protoc-gen-microweb
# $(GOPATH)/bin/protoc-gen-swagger:
# GO111MODULE=off go get -v github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
# pkg/proto/v0/example.pb.go: pkg/proto/v0/example.proto
# protoc \
# -I=third_party/ \
# -I=pkg/proto/v0/ \
# --go_out=pkg/proto/v0 example.proto
# pkg/proto/v0/example.pb.micro.go: pkg/proto/v0/example.proto
# protoc \
# -I=third_party/ \
# -I=pkg/proto/v0/ \
# --micro_out=pkg/proto/v0 example.proto
# pkg/proto/v0/example.pb.web.go: pkg/proto/v0/example.proto
# protoc \
# -I=third_party/ \
# -I=pkg/proto/v0/ \
# --microweb_out=pkg/proto/v0 example.proto
# pkg/proto/v0/example.swagger.json: pkg/proto/v0/example.proto
# protoc \
# -I=third_party/ \
# -I=pkg/proto/v0/ \
# --swagger_out=pkg/proto/v0 example.proto
# .PHONY: protobuf
# protobuf: $(GOPATH)/bin/protoc-gen-go $(GOPATH)/bin/protoc-gen-micro $(GOPATH)/bin/protoc-gen-microweb $(GOPATH)/bin/protoc-gen-swagger pkg/proto/v0/example.pb.go pkg/proto/v0/example.pb.micro.go pkg/proto/v0/example.pb.web.go pkg/proto/v0/example.swagger.json

45
konnectd/README.md Normal file
View File

@@ -0,0 +1,45 @@
# ownCloud Infinite Scale: Konnectd
[![Build Status](https://cloud.drone.io/api/badges/owncloud/ocis-konnectd/status.svg)](https://cloud.drone.io/owncloud/ocis-konnectd)
[![Gitter chat](https://badges.gitter.im/cs3org/reva.svg)](https://gitter.im/cs3org/reva)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/f6f9033737404c9da3ba4738b6501bdb)](https://www.codacy.com/manual/owncloud/ocis-konnectd?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=owncloud/ocis-konnectd&amp;utm_campaign=Badge_Grade)
[![Go Doc](https://godoc.org/github.com/owncloud/ocis-konnectd?status.svg)](http://godoc.org/github.com/owncloud/ocis-konnectd)
[![Go Report](http://goreportcard.com/badge/github.com/owncloud/ocis-konnectd)](http://goreportcard.com/report/github.com/owncloud/ocis-konnectd)
[![](https://images.microbadger.com/badges/image/owncloud/ocis-konnectd.svg)](http://microbadger.com/images/owncloud/ocis-konnectd "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/konnectd/). For instructions how to install this on your platform you should take a look at our [documentation](https://owncloud.github.io/extensions/ocis_konnectd/)
## 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-konnectd.git
cd ocis-konnectd
make generate build
./bin/ocis-konnectd -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) 2020 ownCloud GmbH <https://owncloud.com>
```

View File

@@ -0,0 +1,118 @@
---
# OpenID Connect client registry.
clients:
- id: phoenix
name: ownCloud web app
application_type: web
insecure: yes
trusted: yes
redirect_uris:
- https://localhost:9200/
- https://localhost:9200/oidc-callback.html
- https://localhost:9200/oidc-silent-redirect.html
- http://localhost:9100/
- http://localhost:9100/oidc-callback.html
- http://localhost:9100/oidc-silent-redirect.html
origins:
- https://localhost:9200
- http://localhost:9100
- id: ocis-explorer.js
name: OCIS Graph Explorer
trusted: yes
application_type: web
insecure: yes
- id: xdXOt13JKxym1B1QcEncf2XDkLAexMBFwiT9j6EfhhHFJhs2KM9jbjTmf8JBXE69
secret: UBntmLjC2yYCeHwsyj73Uwo9TAaecAetRwMw0xYcvNL9yRdLSUi0hUAHfvCHFeFh
name: ownCloud desktop app
application_type: native
insecure: true
- id: e4rAsNUSIUs0lF4nbv9FmCeUkTlV9GdgTLDH1b5uie7syb90SzEVrbN7HIpmWJeD
secret: dInFYGV33xKzhbRmpqQltYNdfLdJIfJ9L5ISoKhNoT9qZftpdWSP71VrpGR9pmoD
name: ownCloud Android app
application_type: native
redirect_uris:
- oc://android.owncloud.com
- id: mxd5OQDk6es5LzOzRvidJNfXLUZS2oN3oUFeXPP8LpPrhx3UroJFduGEYIBOxkY1
secret: KFeFWWEZO9TkisIQzR3fo7hfiMXlOpaqP8CFuTbSHzV1TUuGECglPxpiVKJfOXIx
name: ownCloud iOS app
application_type: native
redirect_uris:
- oc://ios.owncloud.com
- oc.ios://ios.owncloud.com
# - id: playground-trusted.js
# name: Trusted OIDC Playground
# trusted: yes
# application_type: web
# redirect_uris:
# - https://my-host:8509/
# origins:
# - https://my-host:8509
# - id: playground-trusted.js
# name: Trusted Insecure OIDC Playground
# trusted: yes
# application_type: web
# insecure: yes
# - id: client-with-keys
# secret: super
# application_type: native
# redirect_uris:
# - http://localhost
# trusted_scopes:
# - konnect/guestok
# - kopano/kwm
# jwks:
# keys:
# - kty: EC
# use: sig
# kid: client-with-keys-key-1
# crv: P-256
# x: RTZpWoRbjwX1YavmSHVBj6Cy3Yzdkkp6QLvTGB22D0c
# y: jeavjwcX0xlDSchFcBMzXSU7wGs2VPpNxWCwmxFvmF0
# request_object_signing_alg: ES256
# - id: first
# secret: lala
# application_type: native
# redirect_uris:
# - my://app
# - id: second
# secret: lulu
# application_type: native
# redirect_uris:
# - http://localhost
# External authority registry.
authorities:
# - id: my-univention
# name: Univention
# client_id: kopano-konnect
# authority_type: oidc
# jwks:
# keys:
# - kty: EC
# use: sig
# kid: example-key-1
# crv: P-256
# x: RTZpWoRbjwX1YavmSHVBj6Cy3Yzdkkp6QLvTGB22D0c
# y: jeavjwcX0xlDSchFcBMzXSU7wGs2VPpNxWCwmxFvmF0
# default: yes
# authorization_endpoint: https://my-univention/signin/v1/identifier/_/authorize
# response_type: id_token
# scopes:
# - openid
# - profile
# identity_claim_name: preferred_username
# identity_aliases:
# external-user-a: local-user-a
# external-user-b: local-user-b
# identity_alias_required: true

View File

@@ -0,0 +1,22 @@
{
"identifier-app.js": "./static/js/identifier-app.b36b0d07.chunk.js",
"identifier-app.js.map": "./static/js/identifier-app.b36b0d07.chunk.js.map",
"identifier-container.js": "./static/js/identifier-container.569688ae.chunk.js",
"identifier-container.js.map": "./static/js/identifier-container.569688ae.chunk.js.map",
"main.css": "./static/css/main.ed0ebb7d.chunk.css",
"main.js": "./static/js/main.c5511071.chunk.js",
"main.js.map": "./static/js/main.c5511071.chunk.js.map",
"runtime~main.js": "./static/js/runtime~main.766bf48a.js",
"runtime~main.js.map": "./static/js/runtime~main.766bf48a.js.map",
"static/js/4.f92d7884.chunk.js": "./static/js/4.f92d7884.chunk.js",
"static/js/4.f92d7884.chunk.js.map": "./static/js/4.f92d7884.chunk.js.map",
"static/js/5.b1222fed.chunk.js": "./static/js/5.b1222fed.chunk.js",
"static/js/5.b1222fed.chunk.js.map": "./static/js/5.b1222fed.chunk.js.map",
"index.html": "./index.html",
"precache-manifest.ea8b619599c55ba5f128f51d796152cd.js": "./precache-manifest.ea8b619599c55ba5f128f51d796152cd.js",
"service-worker.js": "./service-worker.js",
"static/css/main.ed0ebb7d.chunk.css.map": "./static/css/main.ed0ebb7d.chunk.css.map",
"static/media/kopano-logo.svg": "./static/media/kopano-logo.10e256c7.svg",
"static/media/fancy-background.css": "./static/media/loginscreen-bg.cc3ef0e4.jpg",
"static/media/index.css": "./static/media/roboto-latin-900italic.bc833e72.woff"
}

View File

@@ -0,0 +1 @@
<!DOCTYPE html><html lang="en"><head data-kopano-build="0.28.1-3-gabe57b2-dirty"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="theme-color" content="#ffffff"><link rel="shortcut icon" href="./static/favicon.ico" type="image/x-icon"><meta property="csp-nonce" content="__CSP_NONCE__"><title>Kopano Sign in</title><link href="./static/css/main.ed0ebb7d.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="bg"><div id="bg-thumb"></div><div id="bg-enhanced"></div></div><div id="root" data-path-prefix="__PATH_PREFIX__"></div><div id="font-preloader"><span>aA</span>Bb</div><script src="./static/js/runtime~main.766bf48a.js"></script><script src="./static/js/main.c5511071.chunk.js"></script></body></html>

View File

@@ -0,0 +1,142 @@
self.__precacheManifest = [
{
"revision": "7aa085561004b3906a54",
"url": "./static/js/identifier-app.b36b0d07.chunk.js"
},
{
"revision": "086f2ac22fca8d45f2f1",
"url": "./static/js/identifier-container.569688ae.chunk.js"
},
{
"revision": "ec7a9d03e50fe60db0c9",
"url": "./static/css/main.ed0ebb7d.chunk.css"
},
{
"revision": "ec7a9d03e50fe60db0c9",
"url": "./static/js/main.c5511071.chunk.js"
},
{
"revision": "9987e5e6817f0b1d1511",
"url": "./static/js/runtime~main.766bf48a.js"
},
{
"revision": "de913ae19ba466b785d7",
"url": "./static/js/4.f92d7884.chunk.js"
},
{
"revision": "435f63f2b0ecc59d0119",
"url": "./static/js/5.b1222fed.chunk.js"
},
{
"revision": "d704bb3d579b7d5e40880c75705c8a71",
"url": "./static/media/roboto-latin-100italic.d704bb3d.woff"
},
{
"revision": "55536c8e9e9a532651e3cf374f290ea3",
"url": "./static/media/roboto-latin-300.55536c8e.woff2"
},
{
"revision": "a1471d1d6431c893582a5f6a250db3f9",
"url": "./static/media/roboto-latin-300.a1471d1d.woff"
},
{
"revision": "6232f43d15b0e7a0bf0fe82e295bdd06",
"url": "./static/media/roboto-latin-100italic.6232f43d.woff2"
},
{
"revision": "d69924b98acd849cdeba9fbff3f88ea6",
"url": "./static/media/roboto-latin-300italic.d69924b9.woff2"
},
{
"revision": "210a7c781f5a354a0e4985656ab456d9",
"url": "./static/media/roboto-latin-300italic.210a7c78.woff"
},
{
"revision": "987b84570ea69ee660455b8d5e91f5f1",
"url": "./static/media/roboto-latin-100.987b8457.woff2"
},
{
"revision": "e9dbbe8a693dd275c16d32feb101f1c1",
"url": "./static/media/roboto-latin-100.e9dbbe8a.woff"
},
{
"revision": "5d4aeb4e5f5ef754e307d7ffaef688bd",
"url": "./static/media/roboto-latin-400.5d4aeb4e.woff2"
},
{
"revision": "bafb105baeb22d965c70fe52ba6b49d9",
"url": "./static/media/roboto-latin-400.bafb105b.woff"
},
{
"revision": "d8bcbe724fd6f4ba44d0ee6a2675890f",
"url": "./static/media/roboto-latin-400italic.d8bcbe72.woff2"
},
{
"revision": "9680d5a0c32d2fd084e07bbc4c8b2923",
"url": "./static/media/roboto-latin-400italic.9680d5a0.woff"
},
{
"revision": "285467176f7fe6bb6a9c6873b3dad2cc",
"url": "./static/media/roboto-latin-500.28546717.woff2"
},
{
"revision": "de8b7431b74642e830af4d4f4b513ec9",
"url": "./static/media/roboto-latin-500.de8b7431.woff"
},
{
"revision": "510dec37fa69fba39593e01a469ee018",
"url": "./static/media/roboto-latin-500italic.510dec37.woff2"
},
{
"revision": "ffcc050b2d92d4b14a4fcb527ee0bcc8",
"url": "./static/media/roboto-latin-500italic.ffcc050b.woff"
},
{
"revision": "037d830416495def72b7881024c14b7b",
"url": "./static/media/roboto-latin-700.037d8304.woff2"
},
{
"revision": "cf6613d1adf490972c557a8e318e0868",
"url": "./static/media/roboto-latin-700.cf6613d1.woff"
},
{
"revision": "010c1aeee3c6d1cbb1d5761d80353823",
"url": "./static/media/roboto-latin-700italic.010c1aee.woff2"
},
{
"revision": "19b7a0adfdd4f808b53af7e2ce2ad4e5",
"url": "./static/media/roboto-latin-900.19b7a0ad.woff2"
},
{
"revision": "846d1890aee87fde5d8ced8eba360c3a",
"url": "./static/media/roboto-latin-700italic.846d1890.woff"
},
{
"revision": "8c2ade503b34e31430d6c98aa29a52a3",
"url": "./static/media/roboto-latin-900.8c2ade50.woff"
},
{
"revision": "7b770d6c53423deb1a8e49d3c9175184",
"url": "./static/media/roboto-latin-900italic.7b770d6c.woff2"
},
{
"revision": "bc833e725c137257c2c42a789845d82f",
"url": "./static/media/roboto-latin-900italic.bc833e72.woff"
},
{
"revision": "cc3ef0e44832d84dcdb8fce769840ecd",
"url": "./static/media/loginscreen-bg.cc3ef0e4.jpg"
},
{
"revision": "6f9a3fb01c61fa1d416601814b69f57a",
"url": "./static/media/loginscreen-bg-overlay.6f9a3fb0.svg"
},
{
"revision": "10e256c785b6ad2fe0a337b2aa9e6da6",
"url": "./static/media/kopano-logo.10e256c7.svg"
},
{
"revision": "02abc6e9f1d6def38abd7f6b448b00f0",
"url": "./index.html"
}
];

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],[function(n,o,i){n.exports=i(6)},function(n,o,i){},function(n,o,i){},function(n,o,i){},function(n,o,i){},function(n,o,i){},function(n,o,i){"use strict";i.r(o);i(1),i(2),i(3),i(4),i(5);console.info("Kopano Identifier build version: ".concat("0.28.1-3-gabe57b2-dirty")),console.info("Kopano Kpop build version: ".concat("0.24.5")),Promise.all([i.e(4),i.e(0)]).then(i.bind(null,552))}],[[0,3]]]);
//# sourceMappingURL=main.c5511071.chunk.js.map

View File

@@ -0,0 +1 @@
{"version":3,"sources":["index.js","version.js","../node_modules/kpop/es/version.js"],"names":["console","info","concat","process","Promise","all","__webpack_require__","e","then","bind"],"mappings":"gPAUAA,QAAQC,KAAR,oCAAAC,OCRcC,4BDSdH,QAAQC,KAAR,8BAAAC,OEVA,WFaAE,QAAAC,IAAA,CAAAC,EAAAC,EAAA,GAAAD,EAAAC,EAAA,KAAAC,KAAAF,EAAAG,KAAA","file":"static/js/main.c5511071.chunk.js","sourcesContent":["import 'kpop/static/css/base.css';\nimport 'kpop/static/css/scrollbar.css';\nimport 'typeface-roboto';\nimport './app.css';\nimport './fancy-background.css';\n\nimport * as kpop from 'kpop/es/version';\n\nimport * as version from './version';\n\nconsole.info(`Kopano Identifier build version: ${version.build}`); // eslint-disable-line no-console\nconsole.info(`Kopano Kpop build version: ${kpop.build}`); // eslint-disable-line no-console\n\n// NOTE(longsleep): Load async, this enables code splitting via Webpack.\nimport(/* webpackChunkName: \"identifier-app\" */ './identifier');\n","/*global process: true*/\n\nconst build = process.env.REACT_APP_KOPANO_BUILD || '0.0.0-no-proper-build';\n\nexport {\n build\n};\n","/*global process: true*/\nvar build = \"0.24.5\" || '0.0.0-no-proper-build';\nexport { build };"],"sourceRoot":""}

View File

@@ -0,0 +1,2 @@
!function(e){function r(r){for(var n,u,a=r[0],c=r[1],f=r[2],p=0,s=[];p<a.length;p++)u=a[p],o[u]&&s.push(o[u][0]),o[u]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(l&&l(r);s.length;)s.shift()();return i.push.apply(i,f||[]),t()}function t(){for(var e,r=0;r<i.length;r++){for(var t=i[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(i.splice(r--,1),e=u(u.s=t[0]))}return e}var n={},o={3:0},i=[];function u(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,u),t.l=!0,t.exports}u.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise(function(r,n){t=o[e]=[r,n]});r.push(t[2]=n);var i,a=document.createElement("script");a.charset="utf-8",a.timeout=120,u.nc&&a.setAttribute("nonce",u.nc),a.src=function(e){return u.p+"static/js/"+({0:"identifier-app",1:"identifier-container"}[e]||e)+"."+{0:"b36b0d07",1:"569688ae",4:"f92d7884",5:"b1222fed"}[e]+".chunk.js"}(e),i=function(r){a.onerror=a.onload=null,clearTimeout(c);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src,u=new Error("Loading chunk "+e+" failed.\n("+n+": "+i+")");u.type=n,u.request=i,t[1](u)}o[e]=void 0}};var c=setTimeout(function(){i({type:"timeout",target:a})},12e4);a.onerror=a.onload=i,document.head.appendChild(a)}return Promise.all(r)},u.m=e,u.c=n,u.d=function(e,r,t){u.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},u.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},u.t=function(e,r){if(1&r&&(e=u(e)),8&r)return e;if(4&r&&"object"===typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(u.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)u.d(t,n,function(r){return e[r]}.bind(null,n));return t},u.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return u.d(r,"a",r),r},u.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},u.p="./",u.oe=function(e){throw console.error(e),e};var a=window.webpackJsonp=window.webpackJsonp||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var f=0;f<a.length;f++)r(a[f]);var l=c;t()}([]);
//# sourceMappingURL=runtime~main.766bf48a.js.map

View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1432.3 334.7" style="enable-background:new 0 0 1432.3 334.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#414042;}
.st2{fill:#00B3F0;}
</style>
<g id="Layer_1">
<g>
<g>
<path class="st1" d="M512.2,333.7h-37V145.5c0-14.7,2.8-28.9,8.3-42.3c5.5-13.4,13.5-25.5,24-35.9c10.2-10.2,22.1-18.2,35.5-23.8
c13.4-5.6,27.6-8.5,42.4-8.5c14.7,0,29,2.9,42.4,8.5c13.4,5.6,25.3,13.6,35.5,23.8c10.4,10.4,18.5,22.5,24,35.9
c5.5,13.4,8.3,27.6,8.3,42.3c0,14.4-2.8,28.6-8.3,41.9c-5.5,13.4-13.6,25.5-24,35.9c-10.2,10.2-22.1,18.2-35.5,23.8
c-13.4,5.6-27.6,8.5-42.4,8.5c-14.7,0-29-2.9-42.4-8.5c-11.4-4.8-21.7-11.3-30.7-19.3V333.7z M585.3,72c-10,0-19.6,1.9-28.4,5.7
c-8.9,3.8-16.7,9.1-23.3,15.7c-6.6,6.6-11.9,14.5-15.7,23.4c-3.8,9-5.8,18.6-5.8,28.6s1.9,19.6,5.7,28.4
c3.8,8.9,9.1,16.7,15.7,23.3c6.6,6.6,14.4,11.9,23.3,15.7c8.8,3.8,18.4,5.7,28.4,5.7c10,0,19.6-1.9,28.4-5.7
c8.9-3.8,16.7-9.1,23.3-15.7c6.6-6.6,11.8-14.4,15.7-23.3c3.8-8.8,5.7-18.4,5.7-28.4c0-10-1.9-19.7-5.8-28.6
c-3.8-9-9.1-16.9-15.7-23.4c-6.6-6.6-14.4-11.8-23.3-15.7C604.9,74,595.3,72,585.3,72z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M832.7,255.6c-14.7,0-29-2.9-42.4-8.5c-13.4-5.6-25.3-13.6-35.5-23.8c-10.4-10.4-18.5-22.5-24-35.9
c-5.5-13.4-8.3-27.5-8.3-41.9c0-14.7,2.8-28.9,8.3-42.3c5.5-13.4,13.6-25.5,24-35.9c10.2-10.2,22.1-18.2,35.5-23.8
c13.4-5.6,27.6-8.5,42.4-8.5c14.7,0,29,2.9,42.4,8.5c13.4,5.6,25.3,13.6,35.5,23.8c10.4,10.4,18.5,22.5,24,35.9
c5.5,13.4,8.3,27.6,8.3,42.3v101.2h-37v-20c-2.8,2.9-5.8,5.6-8.8,7.9c-6.5,5-13.4,9.1-20.5,12.2c-7.1,3.1-14.5,5.3-22.1,6.7
C846.9,254.9,839.7,255.6,832.7,255.6z M832.7,72c-10,0-19.6,1.9-28.4,5.7c-8.9,3.8-16.7,9.1-23.3,15.7
c-6.6,6.6-11.8,14.4-15.7,23.4c-3.8,9-5.8,18.6-5.8,28.6c0,10,1.9,19.6,5.7,28.4c3.8,8.9,9.1,16.7,15.7,23.3
c6.6,6.6,14.4,11.9,23.3,15.7c8.8,3.8,18.4,5.7,28.4,5.7c10,0,19.6-1.9,28.4-5.7c8.9-3.8,16.7-9.1,23.3-15.7
c6.6-6.6,11.9-14.4,15.7-23.3c3.8-8.8,5.7-18.4,5.7-28.4c0-10-1.9-19.7-5.8-28.6c-3.8-9-9.1-16.9-15.7-23.4
c-6.6-6.6-14.4-11.8-23.3-15.7C852.3,74,842.8,72,832.7,72z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M1321.4,255.7c-14.7,0-28.9-2.9-42.2-8.5c-13.2-5.6-25.2-13.6-35.6-23.7c-10.2-10.5-18.2-22.6-23.8-35.9
c-5.6-13.4-8.5-27.5-8.5-42c0-14.7,2.8-29,8.5-42.4c5.6-13.4,13.6-25.4,23.7-35.8c10.5-10.2,22.5-18.2,35.7-23.8
c13.3-5.6,27.5-8.5,42.2-8.5c14.7,0,29,2.9,42.4,8.5c13.3,5.6,25.4,13.6,35.8,23.7c10.2,10.5,18.2,22.6,23.8,35.9
c5.6,13.4,8.5,27.6,8.5,42.4c0,14.5-2.8,28.6-8.5,42c-5.6,13.4-13.6,25.4-23.7,35.8c-10.5,10.2-22.6,18.2-35.9,23.8
C1350.4,252.8,1336.1,255.7,1321.4,255.7z M1321.4,72.1c-10,0-19.6,1.9-28.4,5.7c-8.9,3.8-16.7,9.1-23.3,15.7
c-6.6,6.6-11.9,14.5-15.7,23.4c-3.8,8.9-5.8,18.6-5.8,28.6c0,10,1.9,19.6,5.7,28.4c3.8,8.9,9.1,16.7,15.7,23.3
c6.6,6.6,14.4,11.9,23.3,15.7c8.8,3.8,18.4,5.7,28.4,5.7c10,0,19.6-1.9,28.4-5.7c8.9-3.8,16.8-9.1,23.5-15.7
c6.7-6.6,12-14.4,15.8-23.2c3.8-8.8,5.8-18.4,5.8-28.4c0-10-1.9-19.7-5.8-28.6c-3.8-9-9.2-16.8-15.8-23.4
c-6.7-6.6-14.6-11.9-23.5-15.7C1341,74,1331.5,72.1,1321.4,72.1z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M37,290.9H0V0h37V290.9z"/>
</g>
</g>
<g>
<g>
<path class="st1" d="M192.4,291.2L70.7,169.4c-6.4-6.4-9.9-14.8-9.9-23.9c0-9,3.5-17.5,9.9-23.9L192.4,0l26.2,26.2L106.1,138.7
c-1.8,1.8-2.8,4.3-2.8,6.9c0,2.6,1,5,2.8,6.9L218.6,265L192.4,291.2z"/>
</g>
</g>
<path class="st2" d="M334,145.6c0-2.6-1-5-2.8-6.9l-3.5-3.5c0,0,0,0,0,0l-70-70l-2.3,2.4c-10.1,10.4-18,22.4-23.6,35.6
c-5.6,13.4-8.5,27.6-8.5,42.4c0,14.5,2.9,28.6,8.5,42c5.6,13.3,13.6,25.4,23.8,35.8l2.3,2.4l69.8-69.8l0,0l3.5-3.5
C333,150.6,334,148.2,334,145.6z"/>
<path class="st1" d="M435.4,103.2L435.4,103.2c-5.6-13.4-13.6-25.4-23.8-35.9c-10.4-10.2-22.5-18.1-35.8-23.7
c-13.4-5.6-27.6-8.5-42.4-8.5c-14.7,0-28.9,2.9-42.2,8.5c-0.7,0.3-1.3,0.6-2,0.9l29.2,29.2c4.9-1,9.9-1.6,15-1.6
c10,0,19.6,1.9,28.4,5.7c8.9,3.8,16.8,9.1,23.5,15.7c6.7,6.6,12,14.4,15.8,23.4c3.8,9,5.8,18.6,5.8,28.6c0,10-1.9,19.6-5.8,28.4
c-3.8,8.9-9.2,16.7-15.8,23.2c-6.7,6.6-14.6,11.9-23.5,15.7c-8.8,3.8-18.4,5.7-28.4,5.7c-5,0-9.9-0.5-14.7-1.5l-29.2,29.2
c0.6,0.3,1.1,0.5,1.7,0.8c13.3,5.6,27.5,8.5,42.2,8.5c14.7,0,29-2.9,42.4-8.5c13.4-5.6,25.4-13.6,35.9-23.8
c10.1-10.4,18.1-22.5,23.7-35.8c5.6-13.4,8.5-27.5,8.5-42C443.9,130.9,441,116.6,435.4,103.2z"/>
<path class="st1" d="M1082,35c-55.4,0-100.3,44.9-100.3,100.3h-0.1v44.2v68h37h0.1V135.3c0-35,28.3-63.3,63.3-63.3
c35,0,63.3,28.3,63.3,63.3h-0.1v112.2h37c0,0,0.1-111.6,0.1-112.2C1182.3,79.9,1137.4,35,1082,35z"/>
<rect id="_x3C_Slice_x3E_" x="-0.7" y="-0.3" class="st0" width="1433" height="335"/>
</g>
<g id="Layer_2">
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -0,0 +1,95 @@
<svg enable-background="new 0 0 7680 4320" version="1.1" viewBox="0 0 7680 4320" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<style type="text/css">
.st0{fill:#00B3F0;}
</style>
<path class="st0" d="m2294.4 2255.6c12.4-21.7 7.4-36.7-11.4-54.5-33.2-31.4-45-74.5-52.3-118.8-0.6-5-1.3-10-1.9-15 0-9.1-0.2-18.3-0.3-27.5l2.3-15c5-33.7 14.4-65.9 35.8-93.3 18.1-23.3 43.2-40.1 71.6-48.1 5.7-1.7 13.7 0 16-8.4h47.1c26 7.8 52.6 13.7 76 28.4 120.8 75.7 124.5 218.4 7.8 301-19.6 13.9-19.6 13.9-3.9 30.7 3.9 4.3 7.6 9 11.8 13 20.3 18.8 37.5 37.9 69.4 43.4 53.1 9.2 104.4 28.3 156.6 43.2 13.3 3.7 24.7 12.5 31.7 24.4 49.4 76.9 83.6 161.1 119.4 244.6 5.4 12.5-1 18.5-9.7 23.9-6.4 3.9-9.6 6.8-5.5 15.1 15 30.1 22.4 62.8 27.7 95.7 1.2 7.8 2.6 11.6 12.5 12.7 33.2 3.6 54.6 31.8 50.5 64.8-4.5 35.8-20.1 64.7-53.4 81.8-10.9 6.4-24.3 7.2-35.9 2.2-3.6-1.7-7.1-3.9-6.6-8.7s4.8-5.3 8.7-6c45.6-7.3 77.3-56.4 64.3-99.5-1.9-6.4-27.7-20.2-33-17.3-6.3 3.5-3.7 9.1-1.6 13.7 5.6 11.9 8.2 25 7.4 38.1-0.3 6.5-2 12.3-9.7 12.1-7.6-0.2-9.7-6.2-9.3-12.6 3.3-55.4-19.6-105.4-31.9-157.7-3.1-13.7-7.8-19.6-21.7-7.8-16.6 14.8-36.5 25.4-58 30.8 57.6 86.9 71.3 207 28.5 255-5.1-14.1-3.1-27.5-1.6-40.8 4.5-41.9 5.3-83.6-6-124.6-3.2-12-7.4-23.7-12.6-35-16.7-35.5-26.4-41.6-65.7-37.1-209.3 23.9-419.2 15.3-629 12.8-49.2-0.5-98.4-2-146.5 10.9-13.3 3.4-26.2 8-38.6 13.8-44.6 21.2-57.7 46.9-52.5 96 4.5 41 14.7 81.1 30.4 119.2 2.4 5.9 8.6 14.4-1.3 18.6-8.5 3.6-12.7-4.7-16.4-10.7-16.6-27.2-24.1-57.7-31-88.3-3.7-33.6-11.8-67.2 0-100.7 27.5-48.3 73.5-65.5 124.1-74.5 17.8-3.2 36.1-3.5 54.3-5.2 2.6 0.3 4.8 0 4.7-3.4-0.6-10.4-1.3-20.8-2-31.4l-0.8-8.6-2.1-46.2 0.9-51c3-18.1 4-36.6 3-54.9l0.5-7.8c9.2-13.6 10.9-29.9 15.7-45 2.5-7.8-0.4-6 3.5-13.8 3.3-5.7 7.2-10.9 11.8-15.7 55.9-30.6 90.7-52.8 146.7-83.1 23.5-12.7 47.1-24.8 73.1-31.9 3.9 2.4 10-1.1 13.9 3.9-6 5.1-12.4 9.8-19 14-63.8 34.3-125.2 73.2-190.5 104.9-4.8 2.3-9.7 4.3-11.8 9.8-10.2 28.2-22.1 56-25.2 86.3-5.3 50.8-3.7 101.8-4.8 152.7-0.5 24.1 0.7 25 25 24.5 39.9-0.9 79.7-2.1 119.5-2.2 157.4-0.5 314.9 3.9 472.1-7.5 64.1-4.6 125.2-18 180.5-52.3 32-19.9 32.1-20.8 16.8-55.2-32-72.2-59.8-146.4-102.4-213.5-6-10.1-15.8-17.5-27.2-20.5-43.2-12.4-86.3-25.5-129.5-38.6-15.5-4.8-32.2-4-47.1 2.4-72.5 27.5-145.7 35.8-218.1-0.9-8.1-3.9-21-0.5-23.8-13.7 9.4-12 4.8-27.3 10-40.1zm169.5-37.8c-44.9 19.6-90.2 35.3-139.3 14.4-6.5-2.7-9.3 0.4-9.7 7.3-1.2 18.3-7.8 35.3-14.4 50.5 71.4 32.8 142.9 28.9 218.3 4.2-19.6-14.7-35.6-28.6-48.1-46.1-5.3-7.3-12.1-14.3-6.9-24.6 2.1-0.6 4.9-0.9 3.9-3.9 0.1-0.9-2.3-1.2-3.8-1.8zm-212.6-167.5c-0.5 29.3 4.9 58.3 15.7 85.5 23.9 62.2 73.5 95.7 128.5 86.3 37-6.1 71.5-22.4 99.7-47.1 76.1-66.2 72.7-176.6-7-238.3-29-3-47.7-27.5-74.8-35.3-64.1-18.4-123.7 9.9-148.3 71.9-9.8 24.4-14.6 50.7-13.8 77z"/>
<path class="st0" d="m2005.1 2490.1-0.4 7.8"/>
<path class="st0" d="m5923.4 3168.7c0.5 2.6 1.1 5.3 1.6 7.8-2.1 20.9-2 41.9 0.4 62.8-3.9 39.7-1.6 79.6-2.7 119.4-0.4 16.9 12.4 10.2 19.6 9.2 42.6-5.9 85.3-12.6 127.8-19.4 194.7-31.4 388.9-65.5 581.2-109.4 148.4-33.9 296.2-70.2 439.8-121.6 39.2-14.1 78.2-29.7 114.4-51 12-6.8 23.1-14.9 33.2-24.2 25.4-24.3 26.2-45.4 1.8-71-34.3-35.9-78.5-56.4-123.2-74.5-110.6-45-226.4-71.9-342.6-97.5-33.1-7.3-66.3-13.9-99.4-21.2-6-1.3-13.2-0.7-18.4-7.5 10.9-5.7 21 0 30.4 2 130.6 26.7 261.4 52.9 387.8 96.3 58.9 20.2 116.4 43.2 164.3 85.1 41.2 36.1 41.6 71.4-1.1 106.2-31.8 25.9-68.9 42.7-106.5 57.8-153 60.9-312.2 100.1-472.1 136.7-237.6 54.3-477.7 95.4-718.8 130.2-14.5 2.1-19.6 7.8-19.2 22.7 0.7 24.2-0.9 48.4-1.5 72.5 0.3 12.4-2.4 24.8-7.8 36-3.9 7.8-6.6 17.2-1.2 26.1 2.7 4.4 7.8 9.3 2 13.6-4.8 3.7-9.9-1.3-14.3-3.6-31.4-16.3-62.6-32.8-93.7-49.4-40.9-21.9-82.1-43.4-122.4-66.3-13.5-8-29.4-10.9-44.9-8.2-26.4 4.1-52.9 8.2-79.5 11-11 1.1-14.6 5.2-14.4 15.7 0.5 22.9 0.3 45.8 0.2 68.7 0 16.3-0.3 32.2-7.3 47.9-3.9 9.4-6.7 21.3 2 31.4 2.7 3.2 5.6 8.4 0.6 12-3.7 2.7-7.5-0.5-10.7-2.6-24.7-16-49.4-32-73.9-48.3-41.9-27.8-83.9-55.6-125.6-83.8-7.9-5.7-17.8-8.1-27.5-6.5-134.1 17.1-268.2 34.4-402.4 50.4-121.3 14.5-242.7 27.8-364.1 41-88.3 9.6-176.6 18.3-265.1 26.9-10.6 1-13.5 3.4-10.1 14.1 10.4 33 20.4 66.2 29.7 99.5 5.7 20.7 25.5 16.6 38.8 23.1 18.2 9 40.5 6.7 60.5 20.5-31.9 0-60.4-9.5-90.9-11.5 5.2 18.8 11.8 35.3 13.6 54.4-18.5-11.3-20.7-29.9-26.4-46.2-2.3-8.9-10-15.4-19.1-16.3-150.3-27.9-299.4-61.2-449-92.4-13.4-3.1-27.3-2.7-40.5 1.1-20.4 5.7-41.2 10.3-62.1 13.9 32.8-13.7 64.3-30.3 98.1-42.4 59.6-21.5 117.7-46.5 176.8-70 64.9-25.9 128.5-55.4 194.8-77.7 8.6-3.2 17.4-5.7 26.4-7.4 9.1-1.4 20.2-2 8.5 12.2-4.9 5.9 0 11.2 1.6 16.5 8.3 25.5 17.6 50.7 25.1 76.4 3.2 11.1 8.3 14.6 19.3 13.4 70.2-7.3 140.4-13.9 210.6-21.3 101.3-10.8 202.6-22 303.9-33.5 114.8-13.2 229.6-27 344.4-40.8 48-5.8 95.9-11.8 143.9-18 6.3-0.8 13.2 0.4 20-6.4-27.5-19-54.5-38.3-82.4-56.1-10-6.4-14.3-12.8-14.6-24.8-3.5-163.4 1.2-326.9-5.3-490.5-1-24.3 0.6-25.3 23.8-17.8 63.4 20.6 126.1 43.2 189.2 64.9 21.9 7.5 32.8 20.4 42.8 37.7 33.4 57.8 62.5 117.7 90.6 178.2 9.3 20 7.4 40.8 7.8 61.3 2 66.7 2.9 133.4 3.5 200.1 0 13.2 1.9 18.7 17.3 15.4 21.6-4.5 43.9-6.1 67.8-13.7-17.1-9.5-33.8-20-51.6-28.1-11.5-5.2-14.4-11.8-14.6-24.1-3.1-159.5 1.1-319.1-6.1-478.5-0.7-15.3 3.6-20.3 19.1-15.7 68.1 21 135.4 44.7 203.5 65.3 30.6 9.3 44.6 28.3 58.1 51.9 32.4 56.7 63.4 114.3 88.4 174.7-13.1-0.6-16.2-12.2-20.9-20.7-28.8-52.4-56.7-105.3-85.4-157.7-3.9-6.8-4.4-16.8-14.8-18.5 0-2.8-0.9-3.2-3.1-1.6l2.9 1.7c6.8 46.9 2.9 93.7-2.7 140.2-1.3 11.1 0.5 16.3 11.4 20.2 25.2 8.9 50.1 18.6 74.5 29.1 13.4 5.6 28.2 8.8 36.1 22.5zm-496.2-198.2c-0.5-3.9-2.4-9.5-5.3-8.6-5.7 1.6-1.6 6.9-1.2 10.7-1.7 46.1 2.9 92.6-4.6 138.5-1.5 9.5 5.6 10.4 11.3 12.9 26.2 11.8 52.4 23.5 78.5 34.7 7.8 3.4 13.9 12.1 26.1 8.4-23-38.7-42.5-78.5-62.4-117.7-13.3-26.7-25.1-54.3-42.4-78.9zm89 601.4c0.8-2.1 1.4-4.4 1.8-6.6-2.4-120.1 6.6-240.2 4.4-360.3 0-11.1-4.3-15.7-14-20-30-12.9-59.4-27.1-89.1-40.6-14.7-6.7-22.9-18.8-22.6-33.9 0.9-49.6 2.6-99.2 5.8-148.7 0.6-9.4 0-11.5-8.6-14.4-56.8-19.6-113.4-39.8-169.9-60-20.8-7.5-20.5-7.8-20.4 14.4 0.7 150.2 3.9 300.5 0.7 450.7-0.3 13.1 3.9 19.6 14.6 26.4 60.2 37.9 120.1 76.2 179.7 115 39.4 25.3 78 51.5 117.6 78zm60.2-451.8h0.5c0 73.8 0.3 147.7-0.3 221.6 0 10.8 3.3 16.3 12.8 21.1 97.4 49.2 194.7 98.6 289.6 152.4 11.2 6.3 15.4 6.6 15.7-8.4 0.4-51.4 1.7-102.6 6.8-154 5.3-53.2 3.5-107 5.4-160.6 0.4-10.4-3.4-14.7-12.8-18.3-30-11.3-59.4-23.8-89.2-35.7-14.9-5.9-24.5-16.7-23.9-32.5 2-47.6 4.8-95.3 9-142.7 0.8-8.6 0.6-10.4-7.3-12.9-62.8-20.3-125.6-40.8-187.9-62.2-13.9-4.7-18.8-5.1-18.6 12.6 1 73.2 0.4 146.4 0.4 219.6h-0.2zm-1747.2 502c30.2 5.7 55.2 9.9 80.2 15.1 114.4 23.9 228.7 47.9 343.1 72.1 11.8 2.5 22.8 5.9 16.6-14.2-21.1-68.7-41.6-137.5-61.6-206.5-3.6-12.6-7.8-14.8-20-9.4-45.4 20.1-91.3 39.2-137.1 58.4-71.1 30-142.9 57.4-221.2 84.5zm1588-667c-1-0.3-2.2-1.1-3-0.9-1.8 0.6-1.6 1.7 0 2.5 0.5 0.2 1.5 0.8 1.6 0.7 0.6-0.8 1.1-1.6 1.5-2.5v0.2z"/>
<path class="st0" d="m6045.9 2501.3c8.9-7.5 12.8-15.9 10.2-27.8-1.5-7.7-1.3-15.7 0.6-23.3 1.9-8.7 9.7-12.8 15.9-5.7 16.9 19.2 15.7-3.5 17.6-8.5 2.8-8.2 0.5-18.1 1.6-27.2 0.8-6.2 5.6-16.8 11.4-8.4 11.5 16.8 13.3 1.3 17.7-3.5 7.4-7.8 4.4-18.6 5.5-28.2 0.7-6.5 2-15.3 11.1-10.7 6 3.1 9 6.4 13.1-1.2 5.3-10-3.6-13.9-7.8-19.6-3.9-5.1-8.8-5.1-13.2-0.2s-9.6 10.7-14 16.4c-17.5 22.8-34.6 45.9-52.5 68.5-4.8 6-9 18.9-18.1 13.4-11.3-6.9-1-16.2 3.9-23.2 19.3-28.7 39.2-56.9 61.2-84 3.9-4.7 0.8 0.9 4.7-6.9 2.1-4.2 4.8-8.2 7.8-11.8 2.4-2.8 5-5.5 7.8-7.8 3.5-3.2-0.8 0 3.9-3 33.7-21 49.6-59.9 40.6-100.8-8.6-39.2-45.7-51.7-76.6-25.9-52.3 43.5-106.4 84.5-162.4 123.2-4.8 3.4-9.8 6.6-14.9 9.5-3.9 2.1-8.4 6-12.3 1.5-4.6-5.3 0-9.8 3.5-13.5 4.3-4.9 9.2-9.3 14.5-13.1 54.3-36.4 102.6-81.2 158.9-114.7 7.8-4.7 10.9-8.9 3-16-0.9-0.9-1.7-2-2.6-2.9-20.7-21.7-28.5-60.5-54.1-69-29.5-9.7-51.5-29-78.5-41-6.8-3-20.4-7-15.7-15.7s15.1 0.5 22.2 3.9c23.9 11.8 46.3 26.3 67 43.2 6.9-5.6-3.7-16.9 6.4-18.6 7.8-1.3 11 7.8 14.9 13.8 14 20.7 27.7 41.6 44.1 66.3 7.8-26.8-2.8-46.1-6.9-65.6-1.2-6-14.5 0-21.1-7.8-11.8-14-26-25.8-38.6-39-14.9-15.7-12.6-32.8 6.1-44.1s39.2-12.9 62-13.2c-6.4-10.5-18.4-12.2-23.5-21.3-2.6-4.6-6.5-3.1-10-0.6-24.6 17.4-52.8 24.6-83.7 27.1 3.1 9.7 11.1 12.6 15.9 18.2 3.1 3.7 8.8 6.4 3.9 13-4.1 5.7-9 4.8-13.9 2.7-16.1-7.1-31.4-16.1-48.6-20.8-2.3-1.1-4.2-3-5.2-5.4-4.4-8.9 2.6-44.3 9.8-51.3 28.6-27.5 96.5-33.8 125.9-7.8 21 18.8 44.3 35 63.4 55.9 8.6 9.4 15.7 14 27.5 4.2 10.9-9.1 20.4-5.7 26.6 7.3 5.4 11.3 11.3 22.3 26 23.9 4.2 0.1 7.6 3.6 7.6 7.8 0 6.1-5.5 6.5-9.9 7.3-7.8 1.5-15.7 2.5-23.1 4.2-33.5 7.1-55.2 26.6-59.9 61.3-1.8 13.3-14.2 25.9-2.9 41 3.9 5.3-3.4 7.8-7.8 7-5.6-1.3-11-3.1-16.2-5.5 0 21.6 2.2 23.3 22.2 17.9 37-10 65.4 5.8 74.5 43.2s9.7 72.5-22.8 100.5c-4.9 4.2-8.3 10.2-13 14.6-14.4 13.4-7.6 21.7 5.9 29.3 4.7-4.9 2.4-10.4 2.9-15.2s0.7-10.9 6-13.7c6.2-3.3 8.5 2.2 12.5 5.6 15.7 13.5 16.4 13.4 3.5 32.8-5.3 8.1-6.6 14 0.4 22.4 86.1 103.8 159.6 216.9 237.8 326.4 15.2 22 32.3 42.8 51 62 11.8 11.8 21.1 10.6 29.8-3.6 18.7-30.8 31.8-64.4 48-96.5 10-19.9 20.6-39.4 29.9-59.6 5.1-10.9 12.4-13.3 23.5-12.1 7.8 0.9 11.3 2.1 6.5 10.3-30.9 53.2-54.9 109.9-83.9 164.1-8.4 15.7-19.9 28.5-43.2 31 12.2 7.5 21.1 5.7 29.8 3.6 18.4-4.3 36.8-9 55.2-13.7 11.8-3 24.1-3.9 26.8-20.5 1.2-7 11.3-11.8 17.5-9.3 9.1 3.5 15.9 11.4 17.9 21 1.2 7.8-5.6 11.1-12.1 13.3-35.8 12.3-71.4 25.3-109.2 31.1-9.9 1.5-21.5 3.3-28.8-2.2-16.7-12.6-31.7-5.5-47.6-0.6-19 5.8-38.3 9.7-57.6 1.9-16.2-6.5-20.9-19.6-14.4-37 6.7-18.1 20.7-25.9 36.6-20.5 4.4 1.5 9.5 3.1 8.9 8.7-0.4 4.6-5.1 5.7-9.1 5.8-11.3 0-18.1 5.9-16.4 16.9 1.6 11 12.2 7.8 19.3 7.8 17.3 0.4 33.4-5.2 49.5-10.8 8.4-2.9 12.3-6.7 4.9-15.3-87.1-102.3-153-220-234.7-326.1-15.2-19.6-30.4-39.2-44.7-59.6-7.6-10.8-12.1-10.5-19.6 0.3-31.4 45.9-63.1 91.5-95.3 136.8-6.9 9.8-13.9 26-27 21.2-9.5-3.5-12.9-19.8-13-32 0-10.3-7.5-26.6 5.5-29.7 15.7-3.7 5.5 17.6 16.3 23.5zm107.3-491.6c-16.9-8.1-31.7-20-43.2-34.8-3.9-5-7-8.5-14.4-5.6-15.7 6.2-31.9 11.3-47.8 17.1-11.4 4.2-13.3 10.9-5.1 20.6 12.2 14.4 25.7 27.7 35.3 44.1 1.6 1.9 3.5 3.5 5.5 4.8 13.2-17.4 15.7 4.6 25.2 7.8 6.1-24.2 21.6-40.3 44.3-54h0.2zm-173.2-62.7c24.2-0.9 47.8-8.2 68.3-21.1 3.1-2 7.8-3.7 6.8-8.4s-5.4-5.3-9.1-5.6c-24.1-2.3-48.3-4.2-71.4 4.8-11.2 4.3-29.5 7.8-27.2 20.4s20.7 8.1 32.5 9.8h0.1z"/>
<path class="st0" d="m6698.2 2409.1c22.4-31.4 42.9-61.6 65.3-90.2 9.7-12.3 12.9-28.9 27-38.1 2.9-1.4 4.1-4.8 2.7-7.6-0.8-1.6-2.2-2.7-3.9-3.1-12-4.9-23.9-14.2-36.5-12.4s-17.1-3.6-22.8-12.5c-17.2-27-24.1-58.6-40.3-86-6.6-11-9.6-23.9-20.8-32.2-7.2-5.4-10.4-15.7 0.6-18 25.3-5.8 30.6-28.2 41.9-45.6 8.9-13.8 10.8-30.5 17.8-45.4 8.7-19 22.8-35.1 40.5-46.1 12.2-7.8 26.2-14.5 26.8-32.6 0.1-5.6 4.8-10 10.4-9.9 5.8 0.3 6.8 5.3 7.3 10-0.1 5.5 4.2 10.1 9.7 10.4 36.4 5.2 71.8 17.7 109.9 7.8 15.1-3.9 31.9-1.9 47.8-5.6 6.1-1.4 16.3 0.9 20 5.5 16.3 19.8 36.1 11.5 55.2 8.9 25.4-3.5 32.5 3.9 27.8 28.9-3.2 15.4-8.6 30.2-16.2 43.9-13.6 25-16.6 54.3-8.4 81.6 4.2 15.1 7 30.5 8.4 46.1 2.2 22.6 7 43 22.6 61 12 13.9 6 31.1-11.1 40.6-8.8 4.3-18.5 6.8-28.3 7.3-29.2 3-54.3 15-77.5 32.8-11.8 9-27.5 2.7-41.2 3.3-34.6 2-69.3-3-102-14.6-12.3-4.6-20.6-1.6-28.2 9.5-19.9 29.1-41.9 56.8-60.9 86.3-10.7 16.3-22.2 22.8-43.6 16zm75.3-182c7-0.6 13.1-5.2 15.7-11.8 1.2-0.3 3.9 0.4 1.3-2.2-0.3 0.8-0.6 1.6-1 2.5-9.9-2.5-13.3 3.9-16 11.5l-3.2 0.7c0.5 0.7 0.9 1.4 1.4 2.1l1.8-2.8zm240.6 16.6c5.4-1.7 11.3-4.2 11.5-10.2 0.1-5.9-5.6-1.4-8.5-2.4 0.9-12.3 10.8-15.7 19.6-19.9 2.4 8.6-11.3 10.3-8.8 19.9 11 1 16.5-13.1 29.4-9.5-18.3 19.9-41.9 31.4-60.4 49.2 5.5 3.9 9.1 1.2 12.8 1.1 18.7-0.6 29.1-18.9 46.7-21.4 0 4.6-7.2 5.5-5.8 11.3 7.8 1.4 11.5-3.9 14.6-9.7l3.9-3.9c13.4-4.6 18-11.2 6.2-23.1-4.6-4.5-8.2-9.8-10.6-15.7-3.9-9.6-9.8-8.1-16.8-5.3-0.6-5.3-3.1-7.8-8.8-7.3-10.3 1.5-20.7 2.2-31.1 2.1-15.7-0.9-15.7 11.1-10.6 16.8 7.2 7.8 3.6 13.9 0.5 21.1 8.2-0.5 11.3-10 19-5.6l-6.1 10.2c-0.8 1.3-2.7 3.5-2.4 3.9 2.7 2.1 4.3 0.3 5.7-1.6zm3.9-244.4c1.2 9.9-18.7 11.8-8.7 26 7.8-8.4 18.2-13.6 22.5-26.5l-14.1 0.9c3.9-4.5 10.2-13.5 13.7-7.4 6.7 11.8 10.7 2.7 14.2 0 5.2-4.2 12.5-7.2 14-16.3l-38.8 4.6c-1.9 0.2-3.9 0.7-5.7 0.9-10.9 0.9-9.5 8.7-8.5 15.7 1.7 9.7 7.5 1.4 11.4 2.1zm-286 80.2c16.2-11.8 32.4-23.6 48.7-35.3 5.5-3.8 8.3-10.5 6.9-17.1-0.7-4.4-3.7-8.1-7.8-4.2-17.8 17.1-42.5 27.8-50.4 54.1l-1.5 4.4 4.1-1.9zm333.1-60.7c-20.6 7.4-31.7 27.5-50.3 37.6-7.8 4.2-14.2 10.6-11.8 21.7 1.2 6.1 4.4 7.8 9.2 6.9 11.3-2.4 28.1 4.3 32.5-9.9 5.9-19.2 15.3-36.9 20.8-56.1 1.8-0.2 3.1-1.8 2.9-3.6 0-0.2-0.1-0.5-0.2-0.7 0-0.4-1.1-0.6-1.6-0.9-0.5 1.7-1 3.4-1.5 5zm-215.1-41.3-2.4-2.2c-4.3-3.9-10-1.9-14.5-3.3-5.4-1.8-15.3 22.1-15.9-2.6-2.4 0.5-5.3 0.3-6.9 1.6-2.2 1.9-7.8 5-1.1 7.8 5.6 2.4 5.5 4.8 1.4 7.8-2.8 2.1-7.8 5.8-9.2 0-1.8-8.2-5-5.6-8.9-2.7-10.2 7.8-20.4 15.7-30.6 23.5l1.6 4.5c42.6-18 94.2-2.6 131.9-39.7-14.9 6.7-30.4 3.8-45.4 5.3zm89.7 125.5c-4.8-0.7-7.1-1.3-9.5-1.4-7-0.3-16 1.5-18-7.5-1.7-7.7 4.7-12.9 11.1-16.9 8.3-5.2 16.5-10.6 25-15.4 7.1-3.9 14.9-12.3 22.9-6.2 6.7 5.1 1.5 14.7 1.7 22.3 0.4 13-4.3 21-18.2 22.2-4.4 0.4-10 0.7-12.2 5.3-15.1 31.2-41.2 54.9-56.7 86-1.4 2.7-3.9 7.3 0.6 7.6 18.1 1.1 11.4 14.8 11.8 23.5 0.5 14.3-1.7 28.6-2.4 43-0.3 5.4-2.8 12.6 6.7 13.1 21.5 1.1 43.2 2.8 64.5 2.9 11.5 0 17.5-6.7 16.2-19.3-1.1-11-0.9-22.1-1.1-33.2-0.7-39.2-0.6-39.2 39.2-40.8 1.3-0.1 2.6-0.1 3.9 0 10.8 1 13.8-3.6 11.8-14-3.9-18-3.2-36.4-2.8-54.7 0.6-27.5 0.4-28.4-25.9-24.6-13.6 2-15.3-2.6-15-14.3 0.5-20.2-1.5-40.5-0.5-60.6 0.6-12.6-3.9-14.5-14.6-12.9-23.2 3.6-46.6 6.3-69.8 10-39.2 6.2-39.2 6.4-39.2 45.8-0.4 40.6-0.3 41.2-39.2 49.8-9.8 2.2-12.9 5.2-12.5 15.1 0.9 20.2 0.5 40.5 0.7 60.7 0 4.5-1.2 10.2 5.6 10.2 15.7 0 31.4 5.2 44.5-11.5 21.1-28.6 45.8-54.8 71.4-84.2zm-192.4 59.8c0.5 8.4 0.5 16.9 0 25.3-1.3 11.8 2.6 15.7 15 15.4 44.4-1.7 44.4-1.3 44.5-45.8 0-9.1-0.5-18.3 0.3-27.5 1.1-11.3-3.3-14.2-14.4-13.9-45.3 1.5-45.3 1.1-45.4 46.5zm113.8-64.7c-6.4-14.2-5.2-26-5.2-37.6 0-39.9 0-39.6-40.3-41.4-11.5-0.5-16.6 1.5-15.3 14.6 1.6 17.5 2.2 35.1 1.7 52.7 0 9.9 3.7 12.2 12.6 11.8 14.2-0.6 28.6-0.2 46.5-0.1zm23.5 122.5c1.2-4.2 5.9-9.5 0.4-12.5-4.2-2.2-9.4-0.6-11.8 3.6-13.4 18.4-27.2 36.7-39.6 55.8-3.9 6.4-6.9 15.7 8.4 12.8 9.7-1.6 19.5-2.1 29.2-1.4 10 0.4 14.1-3 13.7-13.3-0.7-15.1-0.3-30.1-0.3-45zm-111.6 20.6c12.8 5.8 25.3 16.8 35.3 14.8 16-3.4 6.8-22 10-33.7s-4.4-13-11.8-7.8c-11.7 7.7-22.1 17.3-33.5 26.7zm-60.1-133.1c29.2 0.5 73.9-36.1 71.7-56.6l-71.7 56.6zm361.8-130.6c-23.5 20.4-42.5 39.9-65 55.6-5.1 3.6-5.6 9.4-2.4 15.2 45.7-34.9 65.3-54.4 67.4-70.8zm-346.1 188.9c3.4-52.5-1.4-57.7-34.1-44.1 17.1 9.1 29.6 25.1 34.1 44.1zm151.9 129.5c29.6 1.7 59.9 13 91.9-4.7-33.1-3.7-62.4 2.8-92 4.6l0.1 0.1zm122.5-321.8c-26.6-16.6-39.9-14.5-51.6 5.7 16.5 1.6 31.8-3.6 51.5-5.7h0.1zm46.4 150.5v53.2c0 3.9-0.6 8.6 4.7 8.8 5.4 0.3 6.5-3.9 5.5-8-4-16.1 0.2-33.5-10.4-54h0.2zm-265.2-44.7-26.2 22.3c11.2-3.6 36.2 8.9 26.1-22.4l0.1 0.1zm60.5 129.8c-19.6 0-20.4 1.3-12.4 19.1 5.3-5.6 11.7-10.5 12.3-19.1h0.1zm-83.3 29.3 4.8-5.3c-1.3-0.8-3-2.6-3.9-2.2-2 1.2-3.9 2.7-5.6 4.4l4.7 3.1zm244.4 10.1c-0.9-0.5-2.1-1.5-2.4-1.3-0.8 0.7-1.4 1.6-1.6 2.7 0 0.4 1.4 1 2.1 1.5l1.9-2.9z"/>
<path class="st0" d="m3988.7 1677.5c-104.4 4.9-213.1 0.9-321.7-4.2-17.6-0.9-30.3 0.5-27.1 19.2 1.2-15.4-7.8-21.3-26.3-21.8-86.3-1.8-172.5-4.4-258.7-7.8-19.3-0.8-31.4 2.6-32.8 24.2-0.3 4.7-0.5 10.7-6.3 13.7-6.9-1.5-6.3-7.5-6.8-12.2-2-19.1-7.4-36.3-5.4-57.7 6-64.8 2-130.5 2.6-195.9 0.6-78.5 1.9-157.3 2.9-236 0-3.3 0.5-6.6 0.4-9.8-1.2-24.1-1.3-23.8 23.9-17.9 139.8 33.2 279.8 65.1 419.2 99.8 56.9 14.2 114.8 24.1 171.4 39.2 9.5 2.5 19 7.3 29.6-0.4 6.3-4.6 10.6 1.6 10.7 8.6 0.2 8.5-0.2 16.9 0 25.4 0.4 100.4 0.8 200.9 1.2 301.4-0.3 28.8-0.3 28.8 23.2 32.2zm-658-142.5h-1.9c0 31.4 0.8 62.8-0.4 94.2-0.5 15.1 3.2 19.6 19.1 20 91.4 1.8 182.8 2.8 274 9.1 11.8 0.8 14.9-3 14-14.1-4.6-56.7-5.7-113.5-4.9-170.3 0-9.5-2.7-13.9-12.8-15.2-88.7-11.8-177.3-23.5-265.9-36.1-18.4-2.7-22.3 3.5-21.7 20.5 1.2 30.5 0.5 61.2 0.5 91.9zm97.3-136.2c-1.5-15-0.5-18.5 15-29.3 6.5-4.5 6.9-6 2.6-12.9-14.9-23.8-9.7-63.7 9.3-83.8 4.3-4.5 8.4-8.6 15-6.3 17.9 6.2 33.6 15.7 41.1 33.7 7.1 17 0 32-10.4 45.4-3.8 4.5-8.1 8.4-12.8 11.8-5.3 3.9-6.7 6.5-1.1 11.8 14.1 13.9 22.7 32.5 24.3 52.2 0.8 8.1 3.6 11.4 11.5 12.4 30.4 3.9 60.9 7.6 91.2 12.2 12.9 2 17.5-1.8 16.7-15.2-2.7-52.2-2.5-104.5 0.5-156.7 0.7-12.9-3.6-17.9-16.4-20.9-84.5-19.6-168.7-40.3-253.2-60.9-35.5-8.7-34.8-9-33.9 27.5 1.3 56.2 2 112.4 2 168.7 0 14.9 2.5 22.1 19.6 22.9 26 1.3 51.8 6.4 77.6 9.7 24.7 3.2 49.4 6.1 75.5 9.3-21.7-63.4-29.6-66.5-74.4-31.6h0.3zm215.4 159.7h-1c0 26.1 1.1 52.3-0.4 78.5-1 16.6 4.5 20.4 20.5 21.1 91.4 3.7 182.7 8.3 274 13.9 13.1 0.8 13.9-4.2 13.7-14.2-0.6-47.7-1.2-95.4-0.9-143.1 0-12.2-3.5-17.6-16.1-18.7-91.7-8.3-182.9-20.7-274-33.2-15.1-2.1-16.1 3.9-15.7 15.7 0.2 26.6-0.2 53.4-0.2 80.2l0.1-0.2zm305.7-153h0.4c0-22.2-0.7-44.4 0.3-66.7 0.5-12.9-3.9-18.6-16.6-20.8-92.6-16-184.4-35.7-276.1-56.6-14.3-3.3-16.6 1.3-16.2 14.2 1.3 51.6 2.3 103.2 1.9 154.7 0 14.9 6 19.1 18.9 20.7 90.9 11.8 181.8 23.8 272.7 36 11 1.5 15.4-1.3 15-13.1-0.9-22.6-0.4-45.5-0.4-68.4h0.1zm-447-90.3c0.3-14.4-20.6-38.8-34.8-37.3-15.7 1.6-14.8 17.2-17.9 28.6-1.8 5.6-2.7 11.5-2.6 17.3 0.6 11.2-3 26.1 10.8 30.6s25.2-3.9 34.1-14.4c6.1-6.9 9.7-15.6 10.3-24.8h0.1z"/>
<path class="st0" d="m4899.7 2372.2c-12.1 15.7-3.3 25.2 8.9 35.7 29 25 56.9 51.3 87.9 76.4-18.4-37.5-32.9-74.5-3.6-113.8 8.4 8.2 2.9 14.4 1.7 20-6.1 25.2-0.4 51.8 15.7 72.2 38.7 51.6 125.1 90.2 194.3 29 10.7-9.5 15.5-18.2 13.3-33.4-5.8-42.2-12-84.1-30.6-123-10-20.9-23.1-39.2-43.5-51.6-10-6.4-22.2-8.7-33.9-6.3-18.4 3.6-20.6 10.1-8.6 24.4 16.4 19.6 16.2 40.7 5.3 62.2-10.6 20.7-26.6 33.5-51.4 32.3-13.9-0.6-26.8-7.6-35.1-18.8-14.7-18.5-13.7-47.8 1.8-71.8 12.3-19 29.2-25.4 54.3-19.6 7.1 1.6 8.8 0 13.9-6.5 12-16 26.3-31.7 48.3-35.3 52.2-8.6 103.9-19.6 155.3-32.4 2.5-0.6 5.1-1 7.8-1.6 47.4-12.4 62.8-6.8 87.9 35.5 7.8 12.9 14.9 18.6 31.4 17.9 70.2-3 70.2-2.1 124.3 43.6 4.8 3.6 8.1 8.7 9.5 14.4 4.7 26.3 9.1 52.7 13 79.1 0.9 6.2-3.1 11.4-7.5 15.4-7.8 7.1-15 15.3-24 20-38 20-43.2 51.3-33.6 89 1.3 4.8 2.6 8.2 7.5 10.1 22.8 9 39.9 27 61 38.5 15.4 8.5 13.1 20.8 13.2 33.5 0 4.9-1.6 9.5-7.3 9.9-4.1 0.4-7.8-2.6-8.2-6.8-0.1-0.7 0-1.5 0.1-2.2 2.1-17.9-10.4-23.5-23.1-29.3-18.1-8.4-30.8-25.6-51-30.7-4.9-1.2-5.8-8.6-6.5-13.6-2.6-20.7-6.3-41.4-5.6-62.4 0.2-5.8 2.1-11.4 5.7-16 6.9-9.5 15-18.1 24.2-25.5 12.5-10.4 34.7-16.4 36.3-30.6 2.7-23.3-4.6-47.7-7.8-71.6-1.2-4.5-4.2-8.3-8.3-10.5-5.3-3.9-11.8-6.8-15.7-11.8-26.5-33-63.3-27-98.7-27.2-9.8 0-8.8 5.2-6.6 11.3 10.4 27.4 17.8 55.8 21.8 84.8 9.8 76.5 18.3 153 24.7 229.8 1.1 13.3 3.9 27.5-5.4 41-11.8-11.8-10.7-27-12.2-40.3-10-89.5-17-179.5-29.4-268.7-6-43.5-31.8-80.1-61.8-112.3-5.1-6.4-13.6-9.1-21.5-6.7-60.1 22.2-122.8 33.2-185.8 42.7-1.6 0.2-2.9 1.9-6.6 4.5 74.5 36.1 88.8 105.2 99.3 175.8 7.1 50.5 9.9 101.4 8.4 152.4-0.3 14.2-1.3 28.3-14.5 45.3-1.7-18.9-3.4-32.6-3.9-46.4-1.3-26.8-1.8-53.6-2.9-80.3-0.4-11.3-4.6-12.2-12.6-4.7-66.7 62.5-147.7 34.7-195.8-10-3-2.9-9-26-18.3-2-1.6 4.2-10.8-1.2-15.7-3.9-28.8-14.8-53-35.9-76.9-57.2-72.1-64.5-140.2-133.2-209.9-200.1-4.3-4.2-12.7-9.2-7.8-15.7s11.8 0.4 16.7 3.9c12.8 9 25.1 18.8 36.6 29.5 13.7 13.4 27.3 23 46.5 11.2-4.4 36.6 19.6 60.7 51 51 4.5 3.9 5.6 10.5 2.7 15.7-1.2 2.8-3.4 7.5-2.3 8.7 11 12.4 22.8 24.1 35.3 35.1 7.7 6.4 10.9-6.6 17.7-7.3l9.5-1.1-0.4-0.3 1.5 7.5zm159.1-71.8c-18.9-0.7-31.8 16.1-32.8 42.5-0.8 21 12.5 36.6 31.8 37.2 19.9 0.5 39.2-20.6 39.8-43.4 0.4-19.2-17-35.4-38.8-36.3z"/>
<path class="st0" d="m6038.9 992.7c-79-12-152.3-23.9-225.8-34.1-89.4-12.4-179.5-17.6-269.5-22.2-162.7-8.3-325.7-8.2-488.3-3.6-228.7 6.4-457.1 18.5-682.7 58.9-202.2 36.1-399.1 89.6-588.3 169.9-19.6 8.3-39.7 14.9-57.5 26.8-5.1 3.4-12.1 10.5-16.4 4.5s4.4-10.5 9.7-14c31.1-20.5 65-35.6 99.3-49.5 167.7-68 341-116.6 518.8-149.7 168.7-31.4 338.5-49.6 509.6-59.5 201.8-11.7 403.6-17.5 605.5-10.7 139.2 4.7 278.3 12.3 415.2 39.2 55.7 10.7 112.5 19.8 170.4 44z"/>
<path class="st0" d="m2093.6 2167c-26.2-43.8-43.4-89-64.4-132.4-47.1-97.1-103.8-187.7-181.9-263.2-54.3-52.5-115.5-94.2-190.9-110.6-97.6-21.2-188.8 19.2-238.6 105.7-23.8 41.3-37.5 86.1-46.2 132.5-0.7 3.9-1 7.8-1.9 11.8-0.9 3.9-1.4 8.7-6.1 8.8-6.4 0-6.7-6.1-6.4-10.2 1-15.6 2.9-31.2 5.7-46.6 7.9-41.2 23.3-80.5 45.5-116.1 56-89.1 159.8-128.8 264.6-101.5 70.3 18.3 129.8 55.7 181.1 105.3 114.1 110.1 187.3 245.1 234.8 395.1 2 6 2.7 12.4 4.7 21.4z"/>
<path class="st0" d="m4504.1 1611.7c41.6 15.3 87.7-7.8 133.8 0.8 9.3 1.8 14.1 4.6 16.7 12.8 10.5 33.5 17.9 68.2 36.1 99 6 10.1-5.2 12.9-9.7 18.4-8.2 10.1-27.5 11.1-28.6 23.9-1.1 11.8 9.3 23.9 12.4 36.5 2 11 10.1 19.9 20.8 23 3.9 1.5 8.8 5 7.1 10.3s-7.3 5-11.8 4.4c-12.9-1.6-25.4-5.8-38.6-5.7-30.4 0.4-43.8 11.5-49 41.6-0.9 5.1 0 11.8-7.3 11.8s-7.4-6.5-8.1-11.8c-2.2-16 2.4-31 14.4-40.8 17.5-14.3 2-26.6-1.6-38-3.1-10-13.3-0.5-19.6 1.3-24.8 7.1-33.4 3.6-41.5-21-15.7-47.7-31-95.5-46.1-143.5-5.7-17.6-0.9-23.5 20.6-23zm171 123.5c-19.2-32.3-32.6-67.7-39.7-104.6-1.7-8.1-4.6-8.9-11.8-7-12.2 3.2-22 6.3-11.2 21.5 3.4 5.6 6 11.6 7.8 17.9 2 5.1 2.9 10.8-3.2 13.6s-9.9-2.1-12.3-6.7c-4.8-9.3-8.6-19-13.3-28.3-6.4-12.7-17.4-6.9-25.8-4.5-11.1 3.2-2.3 10.6-0.6 15.7 3.5 10.5 8.1 20.6 12.1 31 2.2 5.6 4.8 12.2-2.8 15-6.2 2.3-9.3-3.9-11.5-8.3-6.3-12.9-11.8-26.1-16.7-39.6-6.2-18.8-20.6-10.6-31.1-9-13.9 2-4.4 12.7-2.8 18.4 10.9 38.3 22.9 76.2 34.4 114.3 2.5 8.3 3.9 13.2 15.7 7.8 36.3-17 72.5-35.2 112.8-47.2zm-42.6 82.4c3.9-4.3 19 5.8 15-7.8-3.9-12.6-1.3-31.8-18.4-35.7-5-1.1-21.9 1.8-21.9 16.5-0.1 16 10.8 27.8 25.3 27z"/>
<path class="st0" d="m5636.5 2643.6c-13.8-41.7-13.1-81.2-15.9-120-5.6-77.5-10.5-154.9-20.2-232-1.2-9.6-5.6-9.9-12.7-9.8-15 0-30.1 0-45.1-0.4-5 0-11.8 0-12-7s5.7-7.8 11.1-8.2c3.9-0.6 7.8-0.9 11.8-0.8 30.7 2.9 57 0.2 73.6-32.7 8.9-17.5 27.8-18.8 46.1-7.1 38.6 24.5 78.5 46.4 118.8 68.3 36.3 19.8 50.4 54.7 54.9 93.7 6.5 57.8 8 116.1 4.4 174.1-0.6 10-2 20.3-12.7 30-3.9-15.8-5.8-32.1-5.8-48.3-0.9-47.1-0.9-94.2-3.1-141-1.5-31.4-14.6-58.4-24.6-86.8-1.9-5.4-8.8-4.5-13.7-5.7-47.3-11.2-90.6-35.2-125-69.4-9.1-9.1-15.7-6.4-23.5 0-20.8 16.9-32.7 57.3-25.6 83.5 10.9 39.9 13.3 81.1 16.6 122.1 4.3 54 6.7 108.2 9.6 162.3 0.5 10.5 0.9 21.7-7 35.2z"/>
<path class="st0" d="m6309.2 1252.1c0.4 27.5 1.6 54.9-5.7 81.8-1.4 5.3-1.6 13-8.8 13.8-6.1 0.7-5.4-6.3-7.1-10.2-2.4-5.5-7.3-4.9-11.8-5.3-15.2-1.2-29.6-7.1-41.2-16.8-14.7-12.8-29.4-13.2-46.8-9.1-41.9 9.6-85.4 10.5-126.6 24.6-22 7.5-35.1-3.6-36.1-26.7-0.9-20.9-1.8-41.8-2.4-62.8-0.7-22.2 19.1-41.8 45.4-45.7 67.2-9.9 132.8-28.7 200.1-37.7 3.2-0.5 6.3-1.7 8.9-3.5 14.9-10 21.9-2.1 25.2 11.8 6.8 28.2 6.4 57.1 6.9 85.8zm-21 71.4c-0.9-51 0.5-96.7-3.9-142.3-0.9-9.8-4.2-11.8-13.6-9.5-27.8 7.1-55.7 14-83.8 19.6-43.9 8.9-86.7 23.1-131.8 26-10.8 0.7-16.6 9.8-16 21.2 1.1 21.5 2.2 43.2 3.9 64.5 0.9 12.1 7.6 16.6 18.5 10 6.6-4.1 14.1-6.8 21.8-7.8 46.5-6.4 93.1-13.2 139.6-19.6 6.3-0.9 14.2-3.9 18.4 2.4 10.9 16.1 30 19.7 46.9 35.5z"/>
<path class="st0" d="m6708.1 2436.2c26.8 1.4 53.5 2.7 80.3 4.2 5.7 0.4 14.9 1.3 7 9.5-30.6 31.4-52.9 69.6-80.5 103.4-15.7 19.6-34.1 28.7-58.1 20.4-33.3-11.5-67.9-12.6-102.4-14.7-30.2-1.9-36.4-13.5-19-38.5 15.1-21.3 31.3-41.8 48.5-61.4 13.7-16.3 34.3-25.1 55.5-23.9 22.8 0.7 45.7 0 68.6 0v1zm41.4 41.5c-10.2 0.7-16.8 9.1-25.8 12.4-19.6 7.2-18.9 19.2-7.8 35.3 13.2-15.4 25.8-29.7 34-47.3 1.6-0.6 4.3-0.9 1.3-3.3l-1.7 2.9zm18.8-22.4c-45.4-5.7-87.8-2.4-130-5-3.9-0.2-8.9-0.8-9.7 3.9-2.4 14.9 2.8 28.8 9.9 41 6.2 10.8 17.5 6.7 26.5 3.1 33.6-13.5 67-27.7 103.3-43zm-208.5 80.6c41.3 2.3 77.4 3.9 113 10.8 8 1.5 18.1 9.2 23.5 3.1 6.6-7.1-6.6-13.6-7.1-21.9-1.3-17.3-9.2-17.8-23.9-11.8-17.2 6.9-36.6 14.1-50.3-7.8-2.1-3.3-5.5-2.7-8.6-0.9l-46.6 28.5zm57.8-87.5c-16 0.9-51.7 46.5-54.3 69.4 3.9-1.8 7.4-3.2 10.8-5.1 18.7-10.8 44.9-16 35.1-48-1.9-6.7 7.9-9.6 8.6-16.3h-0.2z"/>
<path class="st0" d="m2774 2211.3c45.5-58.1 97.6-110.1 149.4-162.4 96.1-96.9 192.9-193.2 293-286 6.8-6.3 16.7-19.6 23.5-12.6 8.9 9.3-5.9 17.6-12.2 24.4-125.2 133.4-256.5 260.7-386 389.7-18.3 18.3-41.2 31.4-58.3 51-4.1 0.7-7.8 0.8-9.4-4.1z"/>
<path class="st0" d="m6148.4 1387.9c-3.6 13.2-15.7 12.5-25.2 13.7-47.9 6.2-96 12.3-144.2 16-15.7 1.2-21.5 7.5-21.7 20.7-0.5 37 0 74 1.4 112.9 24.1-36.3 62.1-30.3 96-33.2 44.2-3.9 88.8-3.9 133.4-5.5 19.6-0.7 26.7-6.6 25.1-26.1-2-23.5-3.1-47.1-3.5-70.6-0.3-18.1-12-25.3-35.3-23.3-7.8 0.7-15.7 4.4-20.5-5.4 15.4-17 34.3-13.7 52.4-7.3s23.5 21.4 22.8 39.2c-0.9 26.1-1.8 52.1-2.9 78.2-0.7 18.1-11.5 29.5-30.9 31.4-58.5 5.7-117.2 9.8-176 9.8-15.7 0-28.3 3.1-37.1 16.4-8.1 12.2-24.8 16.5-28.3 33.5-1.5 7.3-11.8 5.4-16.7 3.3-5.5-2.3-1.1-8.7 1.3-11.8 8.7-10.9 7-23.1 6.9-35.3-0.4-37.9-0.7-75.8 0-113.8 0.4-24.8 6.8-28 31.7-29.5 31.4-2 62.2-7.8 93.3-11 26-2.3 51.8-7.3 78-2.3z"/>
<path class="st0" d="m5935.4 1225.3c-4.9-3.9-4.6-9.3-4.6-14.3 0.3-39.2 1.6-78.5 1.1-117.5-0.4-21.2 14.1-31.4 28.9-36.5 86.3-29.7 174.1-55.4 262.9-77.7 10.2-2.6 14.8 0.7 14.7 11.3 0 26.6 0.5 53.3 0.2 80 0 22.4-11.6 36.2-33.9 41.4-71.2 16.6-142.3 33.6-213.8 49.3-10.8 2.4-14.9 9-19.9 16.6-10.8 16.4-16.4 37-35.6 47.4zm280.9-230.1c-46.2 13.4-91.2 26.4-136.2 39.2-32 9.1-64.3 17.5-96 27.2-16.9 5.2-37 12-38.8 31.6-3.1 31.8-0.8 64.1-0.8 96.2l4.3 2.9c12.5-40.6 46.5-46 79.7-53.7 57.2-13.2 114.2-27.5 171.2-41.2 8.2-2 18.1-3.7 17-15.2-2.8-28.4 0.3-57-0.4-87z"/>
<path class="st0" d="m6337.6 1435.3c11.4 9.3 10.7 20.2 11.4 30.1 3.9 54.9-8.6 106.6-32.4 155.5-43.9 90.2-103.9 167.4-188.1 223.6-20.6 14.8-45 23.1-70.4 23.9 157.1-106.2 270.9-235.2 279.5-433.1z"/>
<path class="st0" d="m1787.9 1563.9c5.4-5.4 12.4-1.4 17.7-2.7 21.5-5.3 37.2-6.4 37.3 23.2 0 4.9 10.7 11.3 19.2 3 4.6-4.5 10.7-8.7 17.5-4.4s4.6 11.5 1.6 17.5c-5.4 10.9 3.9 13.4 9.7 17.9 20.7 16.2 21.2 20.9 4.4 40.7-3.9 4.5-7.8 8.9-11.4 13.5-33.9 41.3-46.4 42.9-86.8 6.9-14-12.8-28.8-24.6-44.3-35.3-11.8-7.8-15.3-16.9-6.4-29.7 10-14.4 19.3-29.5 28.7-44.3 2.8-4.5 7.9-7.1 13.2-6.6-8.9 22 3.2 33.4 20.3 44.5 19.1 12.4 36.6 27.5 54.6 41.5 5 3.9 9.6 8.3 14.5 1.3 3.9-5.5 17.1-9 8.6-17.9-5.8-6-12.4-17.8-26.1-8.1-11.8 8.3-18.1 3.1-17-11.4 1.2-15.7-5.4-20-20-12.9-11.8 5.8-19.6 1.4-17.7-10.4 2.4-15.7-7.7-20.3-17.6-26.3zm49.8 86.9c-6.6 4.4-11.8 11.4-11.5 17.1 0.5 10 10.9 15.1 19 16.5 7 1.2 13.7-8.6 13.4-14.1-0.6-10.6-13.8-11.5-20.9-19.5zm-18.5-8.6c-2-7.7-8.4-13.5-16.3-14.8-8.3-0.9-11 9.1-11.4 15-0.5 8.9 9 13.3 15.7 14.3 8.5 1.5 7.9-9.3 12-14.5zm-32-25.7c-1.6-6.4-6.6-12.6-10-11.8-8.8 2.3-11.8 11.8-13.6 19.6-1.1 5.5 5.9 9.9 10.5 9 8.4-1.9 9.6-11 13.1-16.8z"/>
<path class="st0" d="m5985.4 2425.3c-9.2 16.2-15.4 35.5-34.9 32.3-16.1-2.6-21.1-21.1-28-34.4-8.1-15.9-10.6-34.1-7.3-51.6 2.3-12.8-1.1-20.5-11.8-27.8-14.3-9.8-29-17.5-46.5-19-3.7-0.3-9.1 0.4-9.4-4.6-0.4-6 5.3-6.7 9.8-7.1 23.9-1.8 43.6 7.8 59.5 24.6 7.8 8.2 14.8 12.6 26.6 11.5 13.6-1.2 31.4 17.7 37.2 37.2 2.9 9.8 5.8 17.5 16 24.5 17.2 11.8 17.4 32.7 15.2 51.9-5.6 49.7-66.9 102.5-117.2 101.5-2.6 0.1-5.3 0-7.8-0.5-7.2-1.7-18.5-0.6-18-10.7 0.5-8.9 11.1-6.8 17.9-7.1 46.3-2.2 78-26.6 99-66.2 9.8-16.9 9.7-37.8-0.3-54.5zm-17.5-18.1c-2.6-18.5-5.3-36.8-22.8-47.6-8.2-5.1-15.7-5.1-14.2 7.8 1.6 15.7 2.3 31.4 9.1 45.9 3.9 8.4 7.1 22.2 18.2 19.4 9.7-2.3 7.8-16.3 9.7-25.5z"/>
<path class="st0" d="m6181.1 2085.7c-8.7-19.3 7.6-44.3 30.5-46.8 55.2-6 102.8 42.3 96 97-4.6 37.1-20 72-44.3 100.4-5.2 5.8-11.1 10.9-17.5 15.3-7.4 5.5-13.9-1.5-19.9-3.7-7.1-2.5-1.5-8.7 0.4-13.1 15.7-37.2 8.6-69.6-21.5-99.2-6.2-6.1-21.3-12-0.4-20.5 6.4-2.6 3.9-13.1 1.1-19.6-4.9-10.5-14-12.4-24.6-10.1l0.2 0.3zm74.5 129.5c15.4-15.3 21.3-35.3 26.6-55.4 15.1-56.3-8.4-91.3-66.3-100.5-4.6-0.7-9.5-2.2-11.8 3.3s2.4 6.6 5.5 8.7c13.9 9.6 15.7 22.6 12.2 38.1-1.8 7.8-5.4 16.7 2 24.1 22.5 22.7 28.8 51.8 32.1 82-2.6-0.6-2.9 1.1-2.9 3 0 0.5 0.7 0.9 1 1.4 0.2-1.7 0.7-3.1 1.3-4.8l0.3 0.1z"/>
<path class="st0" d="m4453.9 1706.8c-103.7-28.6-204.3-65.5-305.1-102-35.7-12.9-71.1-26.4-106.4-40.1-6.8-2.6-17.5-4.9-13.5-15.3 3.6-9.2 12.5-3.9 19-1.9 129 40.7 258.1 81.7 379.1 143.6 9.2 4.8 18 10.6 26.9 15.7z"/>
<path class="st0" d="m4210.7 1445c26.8 9.4 63.5 13 82.8 37 12.8 15.7 19.1 21.6 38 19.2 10.4-1.3 10.4 11 7.1 17.9-10 21.2-20.8 42.1-32.5 62.3-6.8 11.8-17.1 9.8-23.5-0.2-7.8-12.7-15.7-16.8-31.2-11.4-16.6 5.8-72.2-21.5-80.7-36.8-3.5-6.3-2.5-12.6-0.9-19 5.8-23 21.1-41.9 27.8-64.5 1.4-4.3 5.2-5.6 13.1-4.5zm103.5 80.9c-5.9-3.4-11-0.7-16.1-0.4-22.2 1.1-26.1-3.3-18-23.9 3.3-8.4 0.3-10.3-6.4-12.1-7.5-2-15-4.4-22.4-6.9-43.6-14.3-43.6-14.4-60.9 28.3l-0.9 1.8c-4.4 7.3-2.4 11.6 5.7 14.6 15.7 6.4 30.6 14.8 44.3 24.8 6.3 4.4 9.8 6.2 15.1-2.3 9-14.8 17.3-14.5 28-1.3 3.9 4.9 5.5 11.8 13.4 14.8 5.7-12.7 15.6-23.3 18.2-37.4z"/>
<path class="st0" d="m1590.3 1509c21.2 4.1 43 4.3 64.3 0.6 16.1-2.6 23.5 4.9 24.8 19.6 2 23.5-1.8 46.8-4.5 70-0.6 8.1-7 14.6-15.1 15.3-36.8 7-73.8 5.7-110.9 3.9-11 0.3-20.4-7.8-21.8-18.7-5-25.2-3.6-50.6-2.8-76 0.4-10.9 8.5-15.1 19.2-14.9 15.6 0.4 31.2 0.2 46.8 0.2zm-53.5 15.4c1.4 20.5 2.6 40.1 3.9 59.6 0.8 10.4 4.9 16.3 17.3 15.7 29.4-1.1 58.9-0.9 88.2-1.1 5.4 0 10.5 0.4 10.9-7.4 0.8-15.4 2-30.7 3.2-47.4-24.2 6.8-41.4 28.3-66.7 24.8-26.1-3.7-37.8-27.8-56.8-44.2zm22.1 2.7c32.4 35.9 38.1 35.7 92.2 0h-92.2z"/>
<path class="st0" d="m2965.8 1823.3c5.1-7.8 4.6-15.7 6.1-23.5 2.7-14.1 11.1-18.4 21.8-8.9 17.9 16.2 33.7 34.5 47.4 54.4 8.1 11.5 0.6 19.9-10.2 21.2-16.6 2-19.8 11-21.1 25.6-1.5 17.4-48.1 59.5-64.6 60.7-9.2 0.7-16.2-4.7-22.3-10.6-14.9-14.6-29.1-29.7-43.9-44.3-6-5.9-3-10.6 0.6-15.3 17.5-21.9 36.6-42.4 57.1-61.5 10.2-9.6 19.9-4.8 29.1 2.2zm24.9-11.5c-3 11.3-4.4 18.9-7.1 25.9-4.8 12.6-14.2 17.7-23.2 5.8-10.2-13.2-14.8-6.9-21 2.3-3.3 4.8-7.1 9.3-10.9 13.9-28.9 34.3-29 34.3 3 66 1 0.9 1.9 1.8 2.7 2.8 5.3 6.9 9.7 6.3 15.4 0 11-12.1 23.7-22.6 37.7-31.2 7.8-4.9 12-8.7 3.5-17.6-10.7-11.1-3.3-19 7.5-24.1 6.3-3 14.2-1.8 21.6-7.8l-29.2-36z"/>
<path class="st0" d="m4987.4 2233.2c-19.6 1.2-34.4-6.9-49.1-13.3-66.5-29.5-130-64-185.8-111.3-5-5.2-12.8-6.6-19.3-3.4-30.6 11.8-46.3 34.6-50 66.7-0.7 5.6 1.5 13.3-7.2 13.3-8.7 0.1-10.1-7.1-11.2-13.8-6.4-39.2 37.5-88.8 77.5-87.8 4.6-0.2 9 1.2 12.7 3.9 60.1 47.9 130.3 79.4 195.7 118.6 12.2 7.2 25.5 12.9 36.7 27.1z"/>
<path class="st0" d="m4705 1843.8c11.8 7.3 15.3 17.9 19 28 20.5 57 40.7 114.3 61.3 171.3 2.2 6.2 2.6 11.8-1.7 16.4-5.2 5.5-9.1-1.2-13.7-2.4-25.7-6.8-51.2-8.6-75.8 4.8-4.6 2.5-9.8 9.7-14.8 1.8-3.7-5.9 0.9-11.2 5.5-15.1 15.7-13.8 35.3-17.1 54.9-15.9s18.3-5.3 12.4-19.6c-18.8-45.8-34-93-45.3-141.2-1.9-8.2-5.1-16.5-1.8-28.1z"/>
<path class="st0" d="m4784.3 2262.5c7.1-10.8-4.4-13.7-8.5-19.6-6.4-9.2-22.5-19.9-13.7-28.4s17 9.3 24.5 16c54.9 49.1 109.6 98.6 163.9 148.5 7.8 7.1 23.5 16 16.8 24.6s-19.6-3.9-28.5-9.5c-10.4-6.6-20-14.6-30-21.9-2-4.5-6.2-7.5-11.1-8l0.4 0.3c-18.6-22.4-40.9-40.9-62.8-59.7-13-13.4-25.7-27-39.2-40-2.9-2.9-6.6-9-12.1-2.5l0.3 0.2z"/>
<path class="st0" d="m4713.2 2001c10.1 6.1 27.5 1.6 25.1 13.5-2.6 13-17.5 3.9-27 4.2-19.6 0.9-26.5-10.6-31.2-27.5-6.8-25-9.1-51-17.6-75.6-3.9-11.2 6.6-14.9 15.1-15.1 11 0 24.7-2.3 26.8 14.8 2.3 22.6 9.7 44.5 21.4 64 9.6 14.8-2.9 16.8-12.6 21.7zm-9.2 0.3c1.3-0.7 3.9-1.1 4.3-2.4 1.6-3.6-2.2-3.9-3.9-4.3-1.7-0.3-3.4 0.3-4.6 1.5-1.7 3.5 1.7 3.8 4.2 5.2z"/>
<path class="st0" d="m4646.3 2147.6c1.1 7.3 1.6 11-2.4 12.2s-6.2-1.9-7.6-4.7c-3.1-5.8-5.7-11.8-7.8-17.9-23.8-73.4-41.7-148.3-58-223.6-1.4-6.2-6.2-16.5 3.1-18.5 7.8-1.7 10.4 8.7 12 15.5 14.7 58.2 29 116.6 43.7 174.8 5.5 22.1 11.9 44.1 17 62.2z"/>
<path class="st0" d="m6180.8 2085.5c11.2 20.8 7.3 36-11.8 45.7-9.5 4.8-19.3 5.2-26.8-3.1-10.5-11.8-5.3-24.3 0.8-36 4.7-9 10.8-13.8 21.9-7.4 3.9 2.4 10.6 5.2 16.3 1.1l-0.4-0.3z"/>
<path class="st0" d="m5497 2387.1c-19.3-0.7-30-14.8-24.8-30.7 3.4-10.5 9.7-15.7 20.7-9.1 3.3 1.9 5.6 5.3 10 5.4 11.5 0 17.1 6.7 15.3 17.7-2 12.4-11.7 16-21.2 16.7zm-1.4-15.1c3.9-0.6 7.8-1.8 5.8-7.1-1.5-4.1-3.5-8.5-9.1-8-3.6 0.2-6.3 3.2-6.2 6.8 0 0.4 0.1 0.7 0.1 1.1 0.6 5.6 4.5 7.1 9.4 7.2z"/>
<path class="st0" d="m5804.4 2956.9-2.9-1.7c2.2-1.6 3.3-1.2 3.1 1.6l-0.2 0.1z"/>
<path class="st0" d="m6790.8 1997.1c2-1 4.2-2 6.1-3.2 0 0-0.4-2.5-1-2.7-3.6-1-5.7 0.9-7.1 3.9-1.8 0.5-3.5 1.3-2.1 3.5 1.4-0.3 2.8-0.8 4.1-1.5zm67.6-10 1.4-1.3c-0.8-0.5-1.7-0.9-2.6-1.1-0.3 0-0.9 0.7-1.3 1.1l2.5 1.3z"/>
<path class="st0" d="m6094.4 1442c12.5 1.3 28.7-2.6 29.3 10.7 0.5 10.1-15.7 7.5-25 8.4-30.4 2.9-60.8 5.1-91.3 7.2-6.7 0.5-16.7 3.4-17.9-6-1.3-10.2 9.6-8.7 15.7-9.6 30.6-4 60.9-7.3 89.2-10.7z"/>
<path class="st0" d="m5250.9 3085.2c2.1-11.2-1.9-28.5 11.8-32.1 14.5-3.9 26.3 8.3 34.7 20.7 3 3.5 5 7.7 6 12.2 2.7 36.8 30.2 59.4 49.4 86.7 6.4 9.1 13.3 17.8 19.6 26.9s12.6 17.7 26.5 19.6c17.4 2.6 39.2 34.1 39.2 52.2 0.5 13.5-7.6 25.9-20.2 30.8-12.2 5.3-21.3-1.1-29.4-9.6-1.5-1.2-2.8-2.8-3.6-4.6-11.3-38.8-41.8-24.1-66.9-24.1-9.1 0-12.2 4.5-11.1 13.9 0.6 6.5-0.3 13-2.4 19.2-4.2 12.3-12.7 16-24.6 9.8-20.7-10.5-36.5-44.7-31-67.2 3.9-16.1 12.4-20.9 24.5-10.3 28.8 25.4 61.1 5.3 91.5 8.5 8.7 0.9 11.8-11 5.1-19.6-19.9-25.9-40-51.6-60.1-77.4-2.6-3.3-4.4-8.8-10.3-3.5-14.9 13.5-25.1 3.1-34.3-7.8-11-12.3-14.3-27.5-14.4-44.3zm43.2 19.2c-0.6-3.1-1.1-6.2-2-9.4-3.2-11.8-11-21.9-23-20s-4.9 15-6.5 23c-0.5 3.9 0.1 7.9 1.8 11.5 3.7 8.1 6.6 19.3 18 17.5s9.3-13.9 11.7-22.6zm91.7 153.1c-0.4 12.9 9.3 26.4 18 25.7 8.9-0.2 16.1-7.4 16.3-16.3 1-9.3-17.1-30.3-25.5-28.4-10.6 2.5-3 14.8-8.8 19zm-126.2-0.9c0.4 14.4 14 34.1 22.9 33s8.7-8.6 8.9-14.8c0.4-12.2-15.4-31.4-25.3-31-8.9 0.4-5.4 8.2-6.5 12.8z"/>
<path class="st0" d="m5798.7 3338.1c-0.7 8.7 6.1 23.5-2.2 27.9-10.4 5.6-17.3-10.8-27.1-14.6-26.5-10.3-36.7-33.3-48.6-56.4-28.9-56.3-56.5-113.3-81.4-171.5-4.2-9.8-14.8-20.3 2.3-29.7 19.9-10.9 35.1-11.1 45.9 2.3 4 5.2 7.5 10.7 10.4 16.5 32.9 63 65.7 126.1 98.3 189.2 5.8 11.2 1.5 23.3 2.4 36.3zm-101.5-196.2c-9.9 4.4-21.6 7-29.5 13.9-5.2 4.6 3 12.8 6 19 19.4 39.9 39.2 79.5 58.9 119.4 13.9 28.8 13.4 28.6 42.9 16.3 8.6-3.6 11.1-5.9 6.2-15.1-25.5-47.7-50.3-95.9-75.5-143.8-2-4-2.7-9.2-8.8-9.9l-0.2 0.2z"/>
<path class="st0" d="m6788.8 1995.2c1.4-3.1 3.5-5 7.1-3.9 0.5 0 1.2 2.6 1 2.7-1.9 1.2-3.9 2.2-6.1 3.2l-2-2z"/>
<path class="st0" d="m6827.9 1987.2c1.3-2.8 4-4.7 7.1-4.8l3.4 3.9c-1.7 2.7-4.7 4.1-7.8 3.6-0.8-0.9-1.7-1.8-2.7-2.7z"/>
<path class="st0" d="m6835 1982.4 7.7-3.9 2.8 2.9-7.1 4.9-3.4-3.9z"/>
<path class="st0" d="m6826.3 1993.5-4.8 2.8-2.2-2.2 4.4-3.4 2.6 2.8z"/>
<path class="st0" d="m6823.6 1990.7 4.3-3.5c0.9 0.8 1.8 1.7 2.7 2.6l-4.4 3.7-2.6-2.8z"/>
<path class="st0" d="m6858.4 1987.1-2.5-1.3c0.4-0.4 1-1.2 1.3-1.1 0.9 0.3 1.8 0.7 2.6 1.1l-1.4 1.3z"/>
<path class="st0" d="m6842.7 1978.5 4.8-3.1 2.4 2.2-4.4 3.9-2.8-3z"/>
<path class="st0" d="m6821.4 1996.4c-1.2 1-3.2 3.1-3.5 2.8-3.2-2.4-0.3-3.6 1.3-5.1l2.2 2.3z"/>
<path class="st0" d="m6790.8 1997.1c-1.3 0.7-2.6 1.2-3.9 1.6-1.4-2.2 0.4-2.9 2.1-3.5l1.8 1.9z"/>
<path class="st0" d="m7067.3 2246.3-4.3 3.4-7.2 1.1c-1-6.5 3.7-9 8.5-10 3-0.7 2.6 3.2 3 5.5z"/>
<path class="st0" d="m7036.2 2211.5c0.8-3.2 4-5.3 7.3-4.5 0.3 0.1 0.7 0.2 1 0.3-1.6 3.8-4.1 5.6-8.3 4.2z"/>
<path class="st0" d="m7044.1 2207.6c-0.3-3.1 1.3-4.4 4.2-4.3 0 2.3-1.9 4.2-4.2 4.3z"/>
<path class="st0" d="m7011.1 2078.7c7.1-12.6 19.1-21.7 33.1-25.1-8.3 13.4-17.7 19.3-33.1 25.1z"/>
<path class="st0" d="m7016.9 2211.5c-1.1 2.2-2.6 3.9-5.4 3.3-0.3 0-0.7-1.3-0.5-1.6 1.3-2.1 4.1-2.7 6.2-1.5l-0.3-0.2z"/>
<path class="st0" d="m7017.3 2211.7c0.3-0.7 0.5-1.5 0.7-2.2v0.9c-0.3 0.4-0.7 0.7-1.1 1.1l0.4 0.2z"/>
<path class="st0" d="m3478.6 1593.8c23.8 7.3 42.3 20 49.4 47.1-12.1 0-16-7.8-21.3-12.9-22.2-21.6-39.2-24.1-66.7-8.6-5.1 2.9-9.8 6.5-15.1 9.1-2.2 1-4.8 1-7.1 0-3.7-2.4-1.4-5.7 0.4-8.4 6.7-10.1 18.5-14.1 27.5-21.5-25.5-25.1-30.5-57.4-13.2-83.8 13-19.9 31.4-21.1 46.5-3 21.9 26 21.8 44.9-0.4 82zm6-37.2c0.4-19.1-15.7-45.1-27.7-45.3-13-0.2-24 21-23 44.4 0 1.3 0 2.6 0.3 3.9 2.4 14.5 7.8 26.8 25 27.5 11.5 0.6 25.1-16.6 25.4-30.5z"/>
<path class="st0" d="m3772 1530.5c-12 10.2-18.4 25.5-17 41.2 0.1 10.8 7.2 20.3 17.5 23.5 8.8 3.6 18.9 1.3 25.2-5.7 8.2-8.7 7.5-18.9 3.9-29.3-4.6-12.5-17.6-18.6-24.4-30.4 19.5 1.9 35 17 37.5 36.4 1.8 17.5-1.6 33-22.5 37.2-10.5 2.2-7.8 6.9-2 11.4 8.7 6.5 18.3 12 21.7 31.7-31.4-31.4-56.8-27.5-78.8 5.5-1.5-22.4 8.6-33.2 36.8-42.1-9-8.2-20.8-13.1-25-25.5-3.9-11.2-3.5-23.5 1.2-34.5 4.2-10.1 7.6-23 25.9-19.4z"/>
<path class="st0" d="m3747 1376.9c-0.2-24 13.5-47.8 28-48.4 19.6-0.8 40.2 21.3 40.3 43.2s-15.9 39.2-35.3 39.2-32.8-14.1-33-34zm54.4-2.8c0-15.3-17.1-37.2-27.7-33.8-17 5.4-14.9 22.7-16.2 36.1-1.3 13.3 6.3 22.7 20.7 22.6 16.4-0.2 21.3-12 23.3-24.8h-0.1z"/>
<path class="st0" d="m3738.8 1454.6c4.9-20 18.6-30 36.2-30 24.8 0 40.4 16.4 52.1 38.1-28.4-15.8-54.7-46.8-88.3-8.1z"/>
<path class="st0" d="m6232.2 1214.9c-12.1 9.2-26.5 12.5-40.7 15.7-28.7 6.3-57.6 12-86.3 17.7-4.5 0.9-9.7 1.3-12.2-3.6-2.4-5 1.6-7.8 5.2-8.8 44.1-10.4 87.6-24.2 134-21z"/>
<path class="st0" d="m6122.1 1082.1-135.3 36.1c-3.1 0.8-7.5 1.7-8.2-2.3-1.3-6.8 4.9-8.6 9.5-10.2 28.9-10.4 58.5-18.6 88.6-24.8 14.7-2.8 29.6-4.7 45.4 1.2z"/>
<path class="st0" d="m882.9 2707c-11.3-30.4-1.1-63.4-10.6-93.5-92 37.3-188.3 44.3-286.2 39.9-9.1-0.4-24 0.9-23.8-10.8 0.2-11.6 15.5-9.8 24.2-10.3 52.2-2.9 104.5-4.6 156.2-13.1 38.1-5.9 75.8-14.6 112.6-26.1 12.8-4.2 16.7-10.6 15.9-24.2-14.1-250.4-44-498.6-103.3-742.7-5.2-22.9-12.1-45.5-20.6-67.4-3.5-8.6-6.9-10.8-15.4-4.4-48.1 36.3-112.8 4.5-136.7-39.7-2.7-5-7.4-11.8-1.2-15.7s10.3 3.4 14 7.4c12.5 13.6 25.9 25.9 42.9 33.6 28.4 12.9 54.5 10.1 78.5-10.7 4.3-3.9 7.6-9 14.4-10.4 46.3 71.3 59.9 153.7 78.1 234.2 31.9 141.2 50.7 284.3 63.5 428.3 0.9 9.5 2.3 18.9 3.9 31.4 35.7-32.5 68.8-62.8 102-93 47.8-43.6 98.9-83.6 143.7-130.5 6.1-6.4 12.9-14.2 21.1 0 3.9 6.7 13.3 2.2 20.1 1.2 49.9-7.5 88.6-33.3 117.9-73.9 1.4-2.2 3.1-4.2 4.9-6.1 6.4-6.1 10.4-21.7 21.4-13.4 11 8.4 2.7 20.5-4.4 29.3-43.6 54.1-96.2 90.2-169.7 83-4.6-0.6-9.1 1.4-11.8 5.1-63.1 71.2-137.6 130.3-207.3 194.4-28.8 26.4-38.3 51.9-34.2 89.7 6.3 58.6 6.5 117.6 0.9 176.2-1.2 11.8-10 20.5-11 32.2z"/>
<path class="st0" d="m372.7 2809c-36.7-76.6-58.4-153.6-71.3-232.9-29.3-179-48-358.8-39.1-540.6 3.6-73.8 9.1-147.4 27.5-219.4 11.1-44.1 27.9-85.9 60.7-119 28.2-28.5 61.7-47.5 102.5-46.6 66.7 1.5 105-35.1 130.5-91.1 2.2-4.7 3.4-9.9 5.6-14.6 3.9-8.7 2.7-25.9 16.5-21.4 11.4 3.6 4.3 18.3 2.3 27.9-16 77.4-70.3 123.6-147.8 125.6-54.9 1.3-91.8 30.3-117.6 75.8-26.6 47.1-35.3 99.4-42.1 152-21 164.6-13.1 328.6 5.1 492.8 12.1 109.2 26.4 217.8 53 324.6 3.9 16.4 6 33.2 12.7 49.1 5.3 11.9 5.8 25.5 1.5 37.8z"/>
<path class="st0" d="m1008.3 1400.2c-4.3 91.3-32.2 171.3-115 220.8-37.8 22.6-78.7 39.2-125.6 29.9-48.8-9.6-84.2-37.4-108.8-78.9-42.1-70.6-47.1-145.2-17.5-222.1 25.6-66.7 68.8-118.1 133-150.2 38.3-19.1 78.7-16.8 115.5 1.8 74.9 37.9 112.9 101.3 117.2 184.9 0.3 4.7 0.8 9.3 1.2 13.8zm-19.6 19.4c0.9-36.7-6.4-73.2-21.3-106.8-17.4-39.3-44.2-69.4-87.4-81.3-58.1-16.2-151.5 15.5-188 63.4-57.7 76-65.4 186.1-15.8 267.7 39.9 65.7 82.6 80.1 146.3 73.9 35.3-3.4 65.7-25.4 93.1-47.8 53-43.5 71.7-102.8 73.1-169.1z"/>
<path class="st0" d="m441.9 2465.3c-2.6-21.1 2.7-38.6 7.4-55.9 31.3-113.3 55.7-228.4 73.3-344.6 4.2-28.4 8.4-56.8 12.9-85.2 1-6.3 1.6-14.9 10-14.4 10.1 0.6 6.2 10 5.9 15.7-7.8 147.5-34.2 293.4-78.5 434.4-7.8 24.3-15.7 35.6-31 50z"/>
<path class="st0" d="m1298.7 2011.1c-14.8 22.4-37.4 31.6-60.3 36.8-27.2 6.3-47.1 20.5-69 37.7-69.8 54.9-145.8 100.9-230.4 130.8-13.6 4.8-27.5 8.4-42.1 6.7-5.3-0.6-10.9-1.8-10.8-8.7 0-5.7 5-6.7 9.6-7.8 103.1-29.2 190.6-88 274.1-151.5 40.1-30.5 85.8-30 128.9-44z"/>
<path class="st0" d="m544.3 3002.1c-13-1.9-28.2-2.5-41.9-9.7-6.8-3.6-11.8-9.3-9.3-17.5 2.4-8.2 9.4-5.8 15-5.5 9.8 0.4 19.5 1.3 29.2 2.8 16 2.6 21-2.6 17.3-19-8.2-35.8-20.3-70.3-31.9-105-5.4-16-6.3-39.2-17.5-46.3-11.8-7.6-31 7.8-47.1 12.3-6.4 1.7-15.4 7.4-18.3-2.8-2.3-7.8 7.1-9.8 12.8-12.1 18-7.6 36.3-14.7 54.5-21.9 9.8-3.9 17.1-0.5 20 9.3 17.4 57.5 42.6 112.6 54.9 171.7 5.9 30-6.5 44.7-37.7 43.7z"/>
<path class="st0" d="m853.8 3144.6c11.8-65.2 20.7-130.8 28.6-196.6 7.6-63.5 13.8-127.1 18.6-190.8 0.4-5.5-1.6-12 5.3-15.7 6.9 5.3 4.8 13.1 5.1 19.6 4.2 83.9-8.4 166.5-20.6 249.1-6.5 43.8-16.1 87.1-28.8 129.5-0.5 1.6 0.8 3.9 1.3 5.7l-9.5-0.8z"/>
<path class="st0" d="m1439.5 1985.4c-0.7 7.8-6.2 12.8-12.2 16.8-39.6 27.8-81.2 52.7-124.4 74.5-7.4 3.6-16.6 9.4-22.3-1.2-5.5-9.9 3.3-15.7 10.2-20.4 40.5-26.4 81.1-52.8 122-78.5 13.7-8.6 26.9-3.5 26.7 8.8z"/>
<path class="st0" d="m443.9 3004.4c17.1 36.8 77.1 294.5 76.5 321.1-36.7-104.4-65.8-210.8-76.5-321.1z"/>
<path class="st0" d="m1161.9 1139.1c16.7-13.9 38.1-15.3 57.7-19.9 122.5-28.4 247.2-41.6 372.4-50.5 150.7-10.8 301.6-15.6 452.7-14.4 236.2 1.5 471.7 15.7 706.5 40.5 110.5 11.8 221 23.5 329.6 47.9 12.8 2.9 25.4 6 37.9 10 5.3 1.7 15.9 0.4 13.1 10.1-1.8 6.5-10.4 3.5-15.7 2.7-24.5-3.9-48.8-8.7-73.2-12.6-177.7-28-356.5-45.8-535.8-59.2-227.8-17.1-455.8-22.8-684-17.4-160.9 3.9-321.3 11.8-480.8 34.4-56.1 8-111.8 18.1-167.1 30.3-4.6 1-8.7 2.8-12.6-1.3l-0.7-0.6z"/>
<path class="st0" d="m1241 1055.3c4.9-39.2 14.7-77.8 37.3-111.8 16.4-24.6 36-23 48 4.2 11.7 27.1 20 55.5 24.8 84.6 1.9 11.5 6.6 22.5 9.9 33.8 1.5 4.9 4.4 10.8-1.8 13.9-6.9 3.4-10.8-2.5-13.9-7.4-7.4-13.2-12.2-27.6-14.3-42.5-2.2-11.5-7.6-15.7-18.9-12.6-4.5 1.1-9 1.8-13.5 2.3-35.3 4.4-35.1 4.4-41.7 37.7-1.2 6.1-0.5 15.9-8.3 15.7-10.4-0.4-6-10.9-7.6-17.9zm39.5-50.3c40.9 1 48.1-10 30.7-47.1-0.5-1.2-1.1-2.4-1.7-3.5-5.3-10.5-10.8-9.7-16.8-0.5-8.1 12.6-14.6 26.2-19.4 40.4-2.1 6.6-2 12 7.2 10.7z"/>
<path class="st0" d="m2625.3 1018.6c-1.2 7.8-2.2 17.7-3.9 27.5-1 5.1-3 10.9-9.8 9.8s-7.2-7.2-6.9-12.4c0.8-10.4 2.8-20.7 3.3-31.2 0.4-6.7 2.3-16.7-7.2-17.6s-15.1 6.7-16.9 15.7c-1.8 8.9-2.9 19.3-4.7 28.9-0.3 4.7-4.3 8.2-9 7.9-0.2 0-0.4 0-0.6-0.1-6.1-0.9-6.6-6.2-6.1-10.8 1.1-12.4 2.9-24.6 3.9-37 0.4-5.1 0.4-11.8-5.2-13.7s-9.3 3.6-13.1 6.9c-7.8 6.7-8.2 15.7-8.6 25.1 0.1 3.9-0.2 7.9-0.9 11.8-1.8 6.9 0.4 18.8-10.7 17.3-10.4-1.4-7.3-12.3-6.4-19.6 1.7-15.7 3.9-31 6.7-46.5 1.1-6.4 2.7-14.7 11.8-5.7 5.3 5.2 7.8-0.9 11.5-2.7 10.3-5.1 18.8-3.9 25.5 5.9 2.3 3.4 2.6 7.8 9.8 5.8 25.6-7.3 38.7 4.6 37.5 34.7z"/>
<path class="st0" d="m2657 1014.5c1.7 9.4-5.9 27.2 6 29.7 10.5 2.2 10.5-16.6 14.4-26.4 2.3-5.9 2.5-14.9 10.5-14.4 9.5 0.6 8.4 10 9.1 17 0.2 2.6 0 5.3 0.2 7.8 0.9 8.8-1 21.9 10.2 22.3s15.3-12.2 16.9-22.8c0.9-5.8 0-11.8 0.5-17.6 0.3-4.8 2-9.3 7.8-8.9 4.1 0.1 7.5 3.3 7.8 7.5 0.7 18 4.3 36.7-13.1 50.1-12 9.3-23.3 15-34.6-0.7-4.5-6.2-8.2-7.1-15.3-1.1-14.6 12.2-29 7.2-33.7-11.2-3.5-16-3.3-32.6 0.6-48.6 1-4.9 2.4-12 8.9-11.1 7.1 1 4.2 8.3 4.4 13.1 0.2 4.7-0.3 9-0.6 15.3z"/>
<path class="st0" d="m1546.7 968.8c-21.2 4.5-45.9 4.3-50.5 33.4-1.5 7.3 2.4 14.7 9.3 17.6 14.4 6.9 28.9 9 47.9-1.8-12.7-1-20.4-1.3-28-2.4-4.7-0.7-8.9-3.3-8.6-8.9 0.3-4.7 4.3-6.2 8.3-6.7 11.6-1.7 23.5-0.6 34.6 3.3 9.5 3.2 9.6 11.5 6.2 19.6-7.6 18.6-39.2 25-64.4 13.1-22.4-10.7-27.5-30.3-14-53.8s36.9-31.4 57-18c1.1 0.5 1.2 2.3 2.2 4.6z"/>
<path class="st0" d="m2113.2 977.9c9.4-2.9 19.5-2.8 28.8 0.4 8.6 2.6 15.7 7.8 16.2 17.3 0.3 8.1-4.5 15.6-12 18.8-15.4 7.3-31.4 9.7-46.1-1.5-13.1-9.9-16.8-29.1-8.9-48.2 6.9-16.5 18.2-28.4 37.3-30.1 6-0.5 13.1 0.8 14 7.6 1.5 10.4-7.6 5.3-12.2 6.5-14.8 3.9-22.8 13.9-25 28.8-1.2 23 10.1 33.5 29.6 27.5 3.9-1.1 7.8-2.3 7.5-7.3-0.3-3.9-4.3-4.4-7.4-4.9-5.1-0.8-10.4-1.3-15.7-2-8.3-1.2-12-4.7-6.1-12.9z"/>
<path class="st0" d="m1610.4 954c8.7-7.4 18.5-5.8 24.4 1.6 8.9 11.4 13.1 5.6 20.4-1.3 15.7-14.6 30.6-10.8 37.7 9.2 5.3 15.5 7.5 31.9 6.5 48.3-0.2 5.1-0.8 11.8-7.4 12.2-7.2 0.6-7.5-6.2-8.1-11.1-1.3-9.1-1.4-18.2-2.6-27.3-1.3-9 1.6-23.9-11.1-22.4-11.8 1.4-20.5 13-19.1 27.7 0.8 8.4 1.7 16.9 2.2 25.3 0.3 4.6 0 10.3-5.3 11.3-6.7 1.2-8.8-4.5-9.7-9.8-2.4-14.1-4.2-28.4-6.9-42.4-2.5-12.4-9.2-16.9-20.8-8.8-0.1-4.3-0.2-8.4-0.2-12.5z"/>
<path class="st0" d="m1805.5 977.3c0-8.4-0.2-12.6 0-21.1 0-4.4-0.3-10 4.4-12.2 6.3-3.1 7.1 3 9.1 6.8 3 5.5 6.2 1.4 9.5 0 22.6-9.1 37.4-2.6 45.4 20.6 4 11.7 5.8 24.1 5.2 36.5-0.2 5.3-1.7 11.4-8 11.8s-8.2-5.6-9-10.9c-1.4-9.7-2.3-19.4-3.6-29.1s-3.2-19.9-15.3-18.7c-11.8 0.5-20.9 10.4-20.4 22.1v0.1c-0.2 9.1 1.1 18.2 1.1 27.5 0 5.8 0 13.3-7.8 13.3-7 0-9.1-6.8-9.3-12.9-0.4-9.7 0-19.6 0-29.3-0.6-0.2-1-4.5-1.3-4.5z"/>
<path class="st0" d="m2318.1 918.4c-18.8-6.4-38.6-4.4-57.8-7.4-5-0.8-12.4 0.4-12.8-6-0.6-7.8 7.4-7.8 12.9-8.6 17.7-2.3 35 2.1 52.5 3.2 31.2 2 62.3 4.8 93.5 7.3 5.7 0.5 13.6-0.5 13.9 7.2 0.4 9.5-8.4 8.4-14.6 8.2-26-1.1-52-2.5-78-3.9h-9.6z"/>
<path class="st0" d="m1998.5 978.2c0.8-7.3 1.5-17.8 3.2-28.1 1.4-8.8 3.9-16.8 13.2-4.6 5 6.4 7.3-1 10.2-3 20.3-14.3 33.2-10.1 41.1 13.7 4.7 14 3.9 28.4 3.1 42.8-0.4 5.5 0 13.3-8.2 12.8-6.1-0.5-6.9-7.2-7.1-12.4 0.1-13.1-1-26.1-3.2-39-2.7-12.8-8.6-12.9-17.7-6.2-11.9 8.5-18.8 22.4-18.4 37.1 0 7.5 3.3 20.3-9.3 19.6-10.3-0.6-6.1-12.4-6.8-19.6-0.1-3.5-0.1-6.8-0.1-13.1z"/>
<path class="st0" d="m2928.4 1043.4c1.6 0.1 3.3 0.1 4.9 0 8.6-2 18-14.8 23.7-8.2 7.8 8.9-8 11.3-12.1 17.7-5.5 8.6 3.6 11 6.3 16 4.3 7.8 19.6 16 12 22.9s-17.8-5.7-24.4-13.2c-10.1-11.8-17.5-16-20.9 4.2-0.7 4.3-3.1 9.3-9 8.2-4.7-0.9-7.8-5.4-6.9-10.1 0-0.2 0.1-0.4 0.1-0.5 2.9-21.2 6.4-42.4 9.9-63.5 0.7-3.9 2.7-7.8 7.8-6.9s6 4.9 6.5 8.7c0.9 8.1 1.3 16.4 2.1 24.7z"/>
<path class="st0" d="m2820.1 1040c0 22.2-19.6 43.2-40.1 42.7-16.1 0.4-29.4-12.4-29.8-28.5v-1.2c0-21.8 22.2-46.8 42-47.6 13.8-0.6 27.9 16.8 27.9 34.6zm-14.6-0.6c-2.6-7.8-3.3-19.1-16.2-19.6-9.5-0.4-24.8 20.2-24.6 32.1 0 10.2 5.8 15.5 15.7 16 12.8 0.6 25.3-13.2 25.1-28.5z"/>
<path class="st0" d="m2867.8 1053.7c3.9 9.9 21.7 16.7 11.8 26-8.4 7.8-16.6-7.2-24.2-13.1-2.5-1.9-4.7-4.2-6.8-6.2-5.1 2.4-4.9 6.6-5.7 10.2-1.1 4.8-3 9.1-8.8 8.2-6.7-1.1-7.8-6.7-6.8-12 2.4-13.4 3.9-27.2 8.7-39.8s15.7-17.8 29.2-18.8c11.8-0.9 15.3 7.8 18.9 15.7 7.5 16.3-5 22.5-16.3 29.8zm-3.3-32.9c-5.9 0.8-13.1 1.5-12.9 8.9 0 6.3 6.9 6.2 12.1 6.7 6.2 0.6 10.2-1.5 9.9-8.4-0.2-6.1-4.1-7.5-9.1-7.2z"/>
<path class="st0" d="m2375.1 1013.5c11.5 15.7 29.7 9.3 51 14.4-18.4 10.8-32.5 14.4-48.6 8.7-16.9-5.1-27.5-21.8-25-39.2 1.5-16.3 9-28.7 25.7-32.9 12.4-3.1 23.5 0 30.3 11.8 6.2 10.6-1.4 16.4-9.3 21.6-8.7 1.8-36.6 15-7.1-7.1 3-4.6 4.4-8.2-0.9-11.2-4.1-2.4-9.3-1.8-12.7 1.5-11.2 9.3-9.6 20.7-3.4 32.4z"/>
<path class="st0" d="m2496.3 1022c-1.2 7.3 1.1 17.1-8.1 18.2-9.1 1.1-7.8-8.6-8.5-14.5-0.7-7.5-4.1-10.6-11.3-9.6-8.2 1.1-19.2-4.6-22.2 9.3-0.9 3.9-0.7 10.6-7.1 9.2-5.6-1.2-4.7-7.4-4.2-11.8 2.1-18.4 6.9-36 20.8-49.4 11.8-11.5 24.1-9.5 31.7 5.2 7.2 13.8 7.1 29.1 8.9 43.4zm-19.1-29c-1.2-3.9-1.3-10.9-7.8-10.3-6.7 1.1-11.6 6.7-11.8 13.5-0.7 7.3 6.1 4.6 9.9 5.1 5.4 0.5 10.9 0.5 9.7-8.3z"/>
<path class="st0" d="m1745.3 997.1c6.8 8.5 18.3 11.5 28.3 7.4 3.9-1.4 9.1-4.8 11.8 1.6 2 5-2 8.5-5.3 11.8-17.2 16.2-52.2 2.3-59.2-23.5-5.7-18.6 4.7-38.4 23.4-44.1 4.8-1.5 9.8-1.9 14.8-1.3 8.2 0.9 15.5 3.3 18.7 11.8s-3.1 12.9-8.6 17.6c-3 2.5-5.6 5.4-8.4 8.2l-9.2-2.4c4.9-6.2 14.4-10.1 13-19.3-0.7-4.6-7.6-3.7-11.8-2.4-9.8 3.1-17 9-16.4 20.6 0 2.2 2.1 4.4 3.3 6.5 0.3 3.7 1 7 5.6 7.5z"/>
<path class="st0" d="m1375.4 992.4c5.7 6.8 2.9 14.1 3.7 20.6 1.6 14 7.2 26.3 22.7 26.7 19.6 0.5 34.5-12.7 35.8-27.8 0.8-9.3-7.3-24.8 8.2-25.3 13.1-0.5 10.7 15.2 11.3 25.1 0.7 8.5 4 16.6 9.5 23.1 3 3.9 8.5 7.8 3.2 13.3-3.4 3.8-9.3 4.1-13 0.6-0.4-0.3-0.7-0.7-1.1-1.1-11-14-20.2-9.1-32.5-1-12.6 9.2-29.9 8.5-41.7-1.7-12.4-10.1-14.7-29.6-6.1-52.5z"/>
<path class="st0" d="m1946.8 948.4c-26.1 5.4-24.2 20.7-23 35.7 0.4 4.6 0.4 9.2 0.1 13.8-0.5 6 1.9 14.9-7.8 14.9-7.8 0-7.3-7.8-7.8-13.5-0.5-5.6-0.6-10.4-0.9-15.7-0.3-4.6 1.2-10.8-1.2-13.4-17.1-17.9 0.8-33.9 1.8-50.7 0.2-3.6-0.6-8.7 4.6-9.5s6.9 3.9 6.9 7.5c0 15.2 6.4 25.4 27.3 30.9z"/>
<path class="st0" d="m2318.1 918.4h9.7c7 32.6 0.5 64.6-4.4 96.6-0.8 5.5-2.3 13.1-9.6 12.7-8.6-0.5-8.9-8.7-8.1-15.1 3.9-31.3 8.3-62.7 12.4-94.2z"/>
<path class="st0" d="m1610.4 954v12.4c-8.6 9.6-9.3 20.3-7 32.8 1.8 9.6 10.5 26-3.9 28.1-13.7 1.8-10.4-16.3-12.6-26.4-1.8-9-2.8-18.1-3.3-27.2-0.8-14.6-0.5-14.5 13.8-12.3 6.2 0.9 7.5-6.7 13-7.4z"/>
<path class="st0" d="m1972.1 980.9c-1 7.8-1.9 17.7-3.6 27.5-0.3 4-3.7 7-7.7 6.8h-0.4c-4.1-0.5-7.1-4.1-6.8-8.2 1-17.5 1.3-35.1 5.6-52.2 0.8-3.4 2.7-7 6.2-6 2.8 1.5 4.7 4.2 5.2 7.4 1 7.3 1 15.2 1.5 24.7z"/>
<path class="st0" d="m1966.3 906.9c7.5 0.4 13.1 3.2 13.1 11.4 0 6.5-4.4 8.9-10.4 8.9-7.2-0.2-13-3.1-13.1-11.3-0.1-6.6 4.7-8.8 10.4-9z"/>
<path class="st0" d="m1751.8 984.2 9.2 2.4-15.7 10.5c-4.6-0.5-5.2-3.9-5.5-7.5l12-5.4z"/>
<path class="st0" d="m1161.9 1139.1 0.7 0.7-3.7 2.9 3-3.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 46 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

Binary file not shown.

View File

@@ -0,0 +1,6 @@
Change: Dummy index.html is not required anymore by upstream
The workaround was required as identifier webapp was mandatory, but
we serve it from memory. This also introduces --disable-identifier-webapp flag.
https://github.com/owncloud/ocis-konnectd/issues/25

View File

@@ -0,0 +1,7 @@
Change: Initial release of basic version
Just prepare an initial basic version to serve konnectd embedded into our
microservice infrastructure in the scope of the ownCloud Infinite Scale
project.
https://github.com/owncloud/ocis-konnectd/issues/1

View File

@@ -0,0 +1,8 @@
Change: use glauth as ldap backend, default to running behind ocis-proxy
We changed the default configuration to integrate better with ocis.
The default ldap port changes to 9125, which is used by ocis-glauth and we use ocis-proxy to do the tls offloading.
Clients are supposed to use the ocis-proxy endpoint `https://localhost:9200`
https://github.com/owncloud/ocis-konnectd/pull/52

View File

@@ -0,0 +1,4 @@
Bugfix: Generate a random CSP-Nonce in the webapp
https://github.com/owncloud/ocis-konnectd/issues/17
https://github.com/owncloud/ocis-konnectd/pull/29

View File

@@ -0,0 +1,3 @@
Enhancement: Change default config for single-binary
https://github.com/owncloud/ocis-konnectd/pull/55

View File

@@ -0,0 +1,5 @@
Change: add a trailing slash to trusted redirect uris
Phoenix changed the redirect uri to `<baseUrl>#/login` that means it will contain a trailing slash after the base url.
https://github.com/owncloud/ocis-konnectd/issues/26

View File

@@ -0,0 +1,5 @@
Change: improve client identifiers for end users
Improved end user facing client names in default identifier-registration.yaml
https://github.com/owncloud/ocis-konnectd/pull/62

View File

@@ -0,0 +1,5 @@
Bugfix: redirect to the provided uri
The phoenix client was not set as trusted therefore when logging out the user was redirected to a default page instead of the provided url.
https://github.com/owncloud/ocis-konnectd/issues/26

View File

@@ -0,0 +1,4 @@
Enhancement: Use upstream version of konnect library
https://github.com/owncloud/product/issues/14

View File

@@ -0,0 +1,5 @@
Bugfix: Include the assets for #62
PR 62 introduced new client names. These assets needs to be generated in the embed.go file.
https://github.com/owncloud/ocis-konnectd/pull/64

View File

@@ -0,0 +1,6 @@
Bugfix: add silent redirect url
Adds the oidc-silent-redirect.html phoenix uses to silently refresh access tokens to the default identifier-registration.yml
https://github.com/owncloud/ocis-konnectd/issues/69
https://github.com/owncloud/ocis-konnectd/pull/70

View File

@@ -0,0 +1,5 @@
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-konnectd/pull/71

View File

@@ -0,0 +1,53 @@
{{ $allVersions := . }}
{{- range $index, $changes := . }}{{ with $changes -}}
{{ if gt (len $allVersions) 1 -}}
# Changelog for [{{ .Version }}] ({{ .Date }})
The following sections list the changes in ocis-konnectd {{ .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-konnectd/compare/v{{ $previousVersion }}...master
{{ else -}}
[{{ .Version }}]: https://github.com/owncloud/ocis-konnectd/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-konnectd/compare/66337bb4dad4a3202880323adf7a51a1a3bb4085...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 -}}

View File

@@ -0,0 +1,6 @@
# 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 <https://github.com/restic/restic/tree/master/changelog> would be the
best reference.

View File

@@ -0,0 +1,11 @@
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-konnectd/issues/1234
https://github.com/owncloud/ocis-konnectd/pull/55555

View File

View File

@@ -0,0 +1,13 @@
package main
import (
"os"
"github.com/owncloud/ocis-konnectd/pkg/command"
)
func main() {
if err := command.Execute(); err != nil {
os.Exit(1)
}
}

View File

@@ -0,0 +1,20 @@
{
"debug": {
"addr": "0.0.0.0:9134",
"token": "",
"pprof": false,
"zpages": false
},
"http": {
"addr": "0.0.0.0:9130",
"root": "/",
"tls": true
},
"tracing": {
"enabled": false,
"type": "jaeger",
"endpoint": "localhost:6831",
"collector": "http://localhost:14268/api/traces",
"service": "konnectd"
}
}

View File

@@ -0,0 +1,19 @@
---
debug:
addr: 0.0.0.0:9134
token:
pprof: false
zpages: false
http:
addr: 0.0.0.0:9130
root: /
tracing:
enabled: false
type: jaeger
endpoint: localhost:6831
collector: http://localhost:14268/api/traces
service: konnectd
...

View File

@@ -0,0 +1,19 @@
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 <devops@owncloud.com>" \
org.label-schema.name="oCIS Konnectd" \
org.label-schema.vendor="ownCloud GmbH" \
org.label-schema.schema-version="1.0"
EXPOSE 9130 9134
ENTRYPOINT ["/usr/bin/ocis-konnectd"]
CMD ["server"]
COPY bin/ocis-konnectd /usr/bin/ocis-konnectd

View File

@@ -0,0 +1,19 @@
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 <devops@owncloud.com>" \
org.label-schema.name="oCIS Konnectd" \
org.label-schema.vendor="ownCloud GmbH" \
org.label-schema.schema-version="1.0"
EXPOSE 9130 9134
ENTRYPOINT ["/usr/bin/ocis-konnectd"]
CMD ["server"]
COPY bin/ocis-konnectd /usr/bin/ocis-konnectd

View File

@@ -0,0 +1,19 @@
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 <devops@owncloud.com>" \
org.label-schema.name="oCIS Konnectd" \
org.label-schema.vendor="ownCloud GmbH" \
org.label-schema.schema-version="1.0"
EXPOSE 9130 9134
ENTRYPOINT ["/usr/bin/ocis-konnectd"]
CMD ["server"]
COPY bin/ocis-konnectd /usr/bin/ocis-konnectd

View File

@@ -0,0 +1,22 @@
image: owncloud/ocis-konnectd:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}
{{#if build.tags}}
tags:
{{#each build.tags}}
- {{this}}
{{/each}}
{{/if}}
manifests:
- image: owncloud/ocis-konnectd:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-amd64
platform:
architecture: amd64
os: linux
- image: owncloud/ocis-konnectd:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm64
platform:
architecture: arm64
variant: v8
os: linux
- image: owncloud/ocis-konnectd:{{#if build.tag}}{{trimPrefix "v" build.tag}}-{{/if}}linux-arm
platform:
architecture: arm
variant: v6
os: linux

8
konnectd/docs/_index.md Normal file
View File

@@ -0,0 +1,8 @@
---
title: Konnectd
geekdocRepo: https://github.com/owncloud/ocis-konnectd
geekdocEditPath: edit/master/docs
geekdocFilePath: _index.md
---
This service provides an OpenID Connect provider which is the default way to authenticate in OCIS.

28
konnectd/docs/building.md Normal file
View File

@@ -0,0 +1,28 @@
---
title: "Building"
date: 2020-02-21T00:00:00+00:00
weight: 30
geekdocRepo: https://github.com/owncloud/ocis-konnectd
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-konnectd.git
cd ocis-konnectd
{{< / 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-konnectd -h` to see all available options and subcommands.

View File

@@ -0,0 +1,176 @@
---
title: "Configuration"
date: "2020-04-20T13:18:32+0200"
weight: 20
geekdocRepo: https://github.com/owncloud/ocis-konnectd
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.
## Root Command
Serve Konnectd API for oCIS
Usage: `ocis-konnectd [global options] command [command options] [arguments...]`
--config-file | $KONNECTD_CONFIG_FILE
: Path to config file.
--log-level | $KONNECTD_LOG_LEVEL
: Set logging level. Default: `info`.
--log-pretty | $KONNECTD_LOG_PRETTY
: Enable pretty logging. Default: `true`.
--log-color | $KONNECTD_LOG_COLOR
: Enable colored logging. Default: `true`.
## Sub Commands
### ocis-konnectd server
Start integrated server
Usage: `ocis-konnectd server [command options] [arguments...]`
--tracing-enabled | $KONNECTD_TRACING_ENABLED
: Enable sending traces.
--tracing-type | $KONNECTD_TRACING_TYPE
: Tracing backend type. Default: `jaeger`.
--tracing-endpoint | $KONNECTD_TRACING_ENDPOINT
: Endpoint for the agent.
--tracing-collector | $KONNECTD_TRACING_COLLECTOR
: Endpoint for the collector.
--tracing-service | $KONNECTD_TRACING_SERVICE
: Service name for tracing. Default: `konnectd`.
--debug-addr | $KONNECTD_DEBUG_ADDR
: Address to bind debug server. Default: `0.0.0.0:9134`.
--debug-token | $KONNECTD_DEBUG_TOKEN
: Token to grant metrics access.
--debug-pprof | $KONNECTD_DEBUG_PPROF
: Enable pprof debugging.
--debug-zpages | $KONNECTD_DEBUG_ZPAGES
: Enable zpages debugging.
--http-addr | $KONNECTD_HTTP_ADDR
: Address to bind http server. Default: `0.0.0.0:9130`.
--http-root | $KONNECTD_HTTP_ROOT
: Root path of http server. Default: `/`.
--http-namespace | $KONNECTD_HTTP_NAMESPACE
: Set the base namespace for service discovery. Default: `com.owncloud.web`.
--identity-manager | $KONNECTD_IDENTITY_MANAGER
: Identity manager (one of ldap,kc,cookie,dummy). Default: `ldap`.
--transport-tls-cert | $KONNECTD_TRANSPORT_TLS_CERT
: Certificate file for transport encryption.
--transport-tls-key | $KONNECTD_TRANSPORT_TLS_KEY
: Secret file for transport encryption.
--iss | $KONNECTD_ISS
: OIDC issuer URL. Default: `https://localhost:9200`.
--signing-kid | $KONNECTD_SIGNING_KID
: Value of kid field to use in created tokens (uniquely identifying the signing-private-key).
--validation-keys-path | $KONNECTD_VALIDATION_KEYS_PATH
: Full path to a folder containg PEM encoded private or public key files used for token validaton (file name without extension is used as kid).
--encryption-secret | $KONNECTD_ENCRYPTION_SECRET
: Full path to a file containing a %d bytes secret key.
--signing-method | $KONNECTD_SIGNING_METHOD
: JWT default signing method. Default: `PS256`.
--uri-base-path | $KONNECTD_URI_BASE_PATH
: Custom base path for URI endpoints.
--sign-in-uri | $KONNECTD_SIGN_IN_URI
: Custom redirection URI to sign-in form.
--signed-out-uri | $KONNECTD_SIGN_OUT_URI
: Custom redirection URI to signed-out goodbye page.
--authorization-endpoint-uri | $KONNECTD_ENDPOINT_URI
: Custom authorization endpoint URI.
--endsession-endpoint-uri | $KONNECTD_ENDSESSION_ENDPOINT_URI
: Custom endsession endpoint URI.
--asset-path | $KONNECTD_ASSET_PATH
: Path to custom assets.
--identifier-client-path | $KONNECTD_IDENTIFIER_CLIENT_PATH
: Path to the identifier web client base folder. Default: `/var/tmp/konnectd`.
--identifier-registration-conf | $KONNECTD_IDENTIFIER_REGISTRATION_CONF
: Path to a identifier-registration.yaml configuration file. Default: `./config/identifier-registration.yaml`.
--identifier-scopes-conf | $KONNECTD_IDENTIFIER_SCOPES_CONF
: Path to a scopes.yaml configuration file.
--insecure | $KONNECTD_INSECURE
: Disable TLS certificate and hostname validation.
--tls | $KONNECTD_TLS
: Use TLS (disable only if konnectd is behind a TLS-terminating reverse-proxy).. Default: `false`.
--allow-client-guests | $KONNECTD_ALLOW_CLIENT_GUESTS
: Allow sign in of client controlled guest users.
--allow-dynamic-client-registration | $KONNECTD_ALLOW_DYNAMIC_CLIENT_REGISTRATION
: Allow dynamic OAuth2 client registration.
--disable-identifier-webapp | $KONNECTD_DISABLE_IDENTIFIER_WEBAPP
: Disable built-in identifier-webapp to use a frontend hosted elsewhere.. Default: `true`.
### ocis-konnectd health
Check health status
Usage: `ocis-konnectd health [command options] [arguments...]`
--debug-addr | $KONNECTD_DEBUG_ADDR
: Address to debug endpoint. Default: `0.0.0.0:9134`.

View File

@@ -0,0 +1,154 @@
---
title: "Getting Started"
date: 2018-05-02T00:00:00+00:00
weight: 10
geekdocRepo: https://github.com/owncloud/ocis-konnectd
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
Docker images for ocis-reva are hosted on https://hub.docker.com/r/owncloud/ocis-konnectd.
The `latest` tag always reflects the current master branch.
```console
docker pull owncloud/ocis-konnectd
```
### Binaries
The pre-built binaries for different platforms are downloadable at https://download.owncloud.com/ocis/ocis-konnectd/ . Specific releases are organized in separate folders. They are in sync which every release tag on GitHub. The binaries from the current master branch can be found in https://download.owncloud.com/ocis/ocis-konnectd/testing/
```console
curl https://download.owncloud.com/ocis/ocis-konnectd/1.0.0-beta1/ocis-konnectd-1.0.0-beta1-darwin-amd64 --output ocis-konnectd
chmod +x ocis-konnectd
./ocis-konnectd server
```
## 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-konnectd --help`.
### Server
The server command is used to start the http and debug server on two addresses within a single process. The http server is serving the general webservice while the debug server is used for health check, readiness check and to server the metrics mentioned below. For further help please execute:
{{< highlight txt >}}
ocis-konnectd server --help
{{< / highlight >}}
### Health
The health command is used to execute a health check, if the exit code equals zero the service should be up and running, if the exist code is greater than zero the service is not in a healthy state. Generally this command is used within our Docker containers, it could also be used within Kubernetes.
{{< highlight txt >}}
ocis-konnectd health --help
{{< / highlight >}}
## Metrics
This service provides some [Prometheus](https://prometheus.io/) metrics through the debug endpoint, you can optionally secure the metrics endpoint by some random token, which got to be configured through one of the flag `--debug-token` or the environment variable `KONNECTD_DEBUG_TOKEN` mentioned above. By default the metrics endpoint is bound to `http://0.0.0.0:9134/metrics`.
go_gc_duration_seconds
: A summary of the GC invocation durations
go_gc_duration_seconds_sum
: A summary of the GC invocation durations
go_gc_duration_seconds_count
: A summary of the GC invocation durations
go_goroutines
: Number of goroutines that currently exist
go_info
: Information about the Go environment
go_memstats_alloc_bytes
: Number of bytes allocated and still in use
go_memstats_alloc_bytes_total
: Total number of bytes allocated, even if freed
go_memstats_buck_hash_sys_bytes
: Number of bytes used by the profiling bucket hash table
go_memstats_frees_total
: Total number of frees
go_memstats_gc_cpu_fraction
: The fraction of this program's available CPU time used by the GC since the program started
go_memstats_gc_sys_bytes
: Number of bytes used for garbage collection system metadata
go_memstats_heap_alloc_bytes
: Number of heap bytes allocated and still in use
go_memstats_heap_idle_bytes
: Number of heap bytes waiting to be used
go_memstats_heap_inuse_bytes
: Number of heap bytes that are in use
go_memstats_heap_objects
: Number of allocated objects
go_memstats_heap_released_bytes
: Number of heap bytes released to OS
go_memstats_heap_sys_bytes
: Number of heap bytes obtained from system
go_memstats_last_gc_time_seconds
: Number of seconds since 1970 of last garbage collection
go_memstats_lookups_total
: Total number of pointer lookups
go_memstats_mallocs_total
: Total number of mallocs
go_memstats_mcache_inuse_bytes
: Number of bytes in use by mcache structures
go_memstats_mcache_sys_bytes
: Number of bytes used for mcache structures obtained from system
go_memstats_mspan_inuse_bytes
: Number of bytes in use by mspan structures
go_memstats_mspan_sys_bytes
: Number of bytes used for mspan structures obtained from system
go_memstats_next_gc_bytes
: Number of heap bytes when next garbage collection will take place
go_memstats_other_sys_bytes
: Number of bytes used for other system allocations
go_memstats_stack_inuse_bytes
: Number of bytes in use by the stack allocator
go_memstats_stack_sys_bytes
: Number of bytes obtained from system for stack allocator
go_memstats_sys_bytes
: Number of bytes obtained from system
go_threads
: Number of OS threads created
promhttp_metric_handler_requests_in_flight
: Current number of scrapes being served
promhttp_metric_handler_requests_total
: Total number of scrapes by HTTP status code

30
konnectd/go.mod Normal file
View File

@@ -0,0 +1,30 @@
module github.com/owncloud/ocis-konnectd
go 1.13
require (
contrib.go.opencensus.io/exporter/jaeger v0.2.0
contrib.go.opencensus.io/exporter/ocagent v0.6.0
contrib.go.opencensus.io/exporter/zipkin v0.1.1
github.com/UnnoTed/fileb0x v1.1.4
github.com/go-chi/chi v4.0.2+incompatible
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d // indirect
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e // indirect
github.com/gorilla/mux v1.7.4
github.com/haya14busa/goverage v0.0.0-20180129164344-eec3514a20b5
github.com/mattn/go-colorable v0.1.2 // indirect
github.com/micro/cli/v2 v2.1.1
github.com/oklog/run v1.0.0
github.com/openzipkin/zipkin-go v0.2.2
github.com/owncloud/flaex v0.2.0
github.com/owncloud/ocis-pkg/v2 v2.0.3-0.20200309150924-5c659fd4b0ad
github.com/restic/calens v0.2.0
github.com/rs/zerolog v1.17.2
github.com/sirupsen/logrus v1.4.2
github.com/spf13/afero v1.2.2 // indirect
github.com/spf13/viper v1.6.1
go.opencensus.io v0.22.2
golang.org/x/net v0.0.0-20200202094626-16171245cfb2
stash.kopano.io/kc/konnect v0.30.0
stash.kopano.io/kgol/rndm v1.1.0
)

961
konnectd/go.sum Normal file
View File

@@ -0,0 +1,961 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
contrib.go.opencensus.io/exporter/jaeger v0.2.0 h1:nhTv/Ry3lGmqbJ/JGvCjWxBl5ozRfqo86Ngz59UAlfk=
contrib.go.opencensus.io/exporter/jaeger v0.2.0/go.mod h1:ukdzwIYYHgZ7QYtwVFQUjiT28BJHiMhTERo32s6qVgM=
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
contrib.go.opencensus.io/exporter/ocagent v0.6.0 h1:Z1n6UAyr0QwM284yUuh5Zd8JlvxUGAhFZcgMJkMPrGM=
contrib.go.opencensus.io/exporter/ocagent v0.6.0/go.mod h1:zmKjrJcdo0aYcVS7bmEeSEBLPA9YJp5bjrofdU3pIXs=
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=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
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/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/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.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/semver/v3 v3.0.2 h1:tRi7ENs+AaOUCH+j6qwNQgPYfV26dX3JNonq+V4mhqc=
github.com/Masterminds/semver/v3 v3.0.2/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 h1:RuaOafp+8qOLUPX1lInLfUrLc1MEVbnz7a40RLoixKY=
github.com/Masterminds/sprig/v3 v3.0.1/go.mod h1:Cp7HwZjmqKrC+Y7XqSJOU2yRvAJRGLiohfgz5ZJj8+4=
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/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/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/UnnoTed/fileb0x v1.1.4 h1:IUgFzgBipF/ujNx9wZgkrKOF3oltUuXMSoaejrBws+A=
github.com/UnnoTed/fileb0x v1.1.4/go.mod h1:X59xXT18tdNk/D6j+KZySratBsuKJauMtVuJ9cgOiZs=
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.0/go.mod h1:zpDJeKyp9ScW4NNrbdr+Eyxvry3ilGPewKoXw3XGN1k=
github.com/alangpierce/go-forceexport v0.0.0-20160317203124-8f1d6941cd75 h1:3ILjVyslFbc4jl1w5TWuvvslFD/nDfR2H8tVaMVLrEY=
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/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/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/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/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
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/aws/aws-sdk-go v1.23.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
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/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/bmatcuk/doublestar v1.1.1 h1:YroD6BJCZBYx06yYFEWvUuKVWQn3vLLQAVmDmvTSaiQ=
github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
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/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs=
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/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 h1:yTUvW7Vhb89inJ+8irsUqiWjh8iT6sQPZiQzI6ReGkA=
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 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE=
github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY=
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.17+incompatible h1:f/Z3EoDSx1yjaIjLQGo1diYUlQYSBrrAQ5vP8NjwXwo=
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/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM=
github.com/coreos/go-oidc v2.1.0+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/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/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 h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
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/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/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.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
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/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
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/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
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/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/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 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/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
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-asn1-ber/asn1-ber v1.3.1 h1:gvPdv/Hr++TRFCl0UbPFHC54P9N9jgsRPnmnr419Uck=
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 h1:qP/QDxOtmMoJVgXHCXNzDpA0+wkgYB2x5QoLMVOciyw=
github.com/go-asn1-ber/asn1-ber v1.4.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0=
github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs=
github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
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-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
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 v3.1.7 h1:aHjuWTgZsnxjMgqzx0JHwNqz4jBYZTcNarbPFkW1Oww=
github.com/go-ldap/ldap/v3 v3.1.7/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q=
github.com/go-log/log v0.1.0 h1:wudGTNsiGzrD5ZjgIkVZ517ugi2XRe9Q/xRCzwEO4/U=
github.com/go-log/log v0.1.0/go.mod h1:4mBwpdRMFLiuXZDCwU2lKQFsoSCo72j3HqBK9d81N2M=
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-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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
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 h1:UQhStjbkDClarlmv0am7OXXO4/GaPdCGiUiMTvi28sg=
github.com/go-test/deep v1.0.1/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
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/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d h1:3PaI8p3seN09VjbTYC/QWlUZdZ1qS1zGjy7LH2Wt07I=
github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
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-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 h1:55rEp52jU6bkyslZ1+C/7NGfpQsEc6pxGLAGDOctqbw=
github.com/golang/groupcache v0.0.0-20191002201903-404acd9df4cc/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 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/protobuf v0.0.0-20170622202551-6a1fa9404c0a/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 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
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 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/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/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1ks85zJ1lfDGgIiMDuIptTOhJq+zKyg=
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
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.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw=
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/schema v1.1.0 h1:CamqUDOFUBqzrvxuz2vEwo8+SUdwsluFh7IlzJh30LY=
github.com/gorilla/schema v1.1.0/go.mod h1:kgLaKoK1FELgZqMAVxx/5cbj0kT+57qxUrAlIO2eleU=
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 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.1.0 h1:THDBEeQ9xZ8JEaCLyLQqXMMdRqNr0QAUJTIkQAUtFjg=
github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE=
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.4 h1:5xLhQjsk4zqPf9EHCrja2qFZMx+yBqkO3XgJ14bNnU0=
github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI=
github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
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/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/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.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0=
github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4=
github.com/huandu/xstrings v1.3.0 h1:gvV6jG9dTgFEncxo+AF7PH6MZXi/vZl25owA/8Dg8Wo=
github.com/huandu/xstrings v1.3.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
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/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
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 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 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.9 h1:9yzud/Ht36ygwatGx56VwCZtlI/2AD15T1X2sjSuGns=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
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/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.8 h1:VfG72pyIxgtC7+3X9CMHI0AOl4LwyRAg98WAgsvffi8=
github.com/karrick/godirwalk v1.7.8/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34=
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/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
github.com/kolo/xmlrpc v0.0.0-20190717152603-07c4ee3fd181/go.mod h1:o03bZfuBwAXHetKXuInt4S7omeXUu62/A845kiycsSQ=
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.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 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
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/gommon v0.2.7 h1:2qOPq/twXDrQ6ooBGrn3mrmVOC+biLlatwgIu8lbzRM=
github.com/labstack/gommon v0.2.7/go.mod h1:/tj9csK2iPSBvn+3NLM9e52usepMtrd5ilFYA+wQNJ4=
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.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 h1:CxtJTXQIh2aboCPk0M6vf530XOov6DZjVBiSE3nSj8s=
github.com/lucas-clemente/quic-go v0.13.1/go.mod h1:Vn3/Fb0/77b02SGhQk36KzOUmXgVpFfizUfW5WMaqyU=
github.com/lucas-clemente/quic-go v0.14.1 h1:c1aKoBZKOPA+49q96B1wGkibyPP0AxYh45WuAoq+87E=
github.com/lucas-clemente/quic-go v0.14.1/go.mod h1:Vn3/Fb0/77b02SGhQk36KzOUmXgVpFfizUfW5WMaqyU=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/marten-seemann/chacha20 v0.2.0 h1:f40vqzzx+3GdOmzQoItkLX5WLvHgPgyYqFFIO5Gh4hQ=
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 h1:YlT8QP3WCCvvok7MGEZkMldXbyqgr8oFg5/n8Gtbkks=
github.com/marten-seemann/qtls v0.4.1/go.mod h1:pxVXcHHw1pNIt8Qo0pwSYQEoZ8yYOOPXTCZLQQunvRc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
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.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
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 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
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/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/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 h1:uFw0SMIKmGuyHIm8lXns/NOn7V62bM5y7DnlxUM+BEQ=
github.com/micro/cli/v2 v2.1.1/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.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 h1:bMx549RwJ9Yuiui8cDVlfYhVNP8I8KBJTMyLthEXpRw=
github.com/micro/go-micro/v2 v2.0.0/go.mod h1:v7QP5UhKRt37ixjJe8DouWmg0/eE6dltr5h0idJ9BpE=
github.com/micro/go-plugins/wrapper/trace/opencensus/v2 v2.0.1/go.mod h1:QrkcwcDtIs2hIJpIEhozekyf6Rfz5C36kFI8+zzCpX0=
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/protoc-gen-micro v1.0.0/go.mod h1:C8ij4DJhapBmypcT00AXdb0cZ675/3PqUO02buWWqbE=
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 h1:Jm64b3bO9kP43ddLjL2EY3Io6bmy1qGb9Xxz6TqS6rc=
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/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.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
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/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y=
github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
github.com/mitchellh/reflectwalk v1.0.0/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-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/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8=
github.com/nats-io/jwt v0.3.0 h1:xdnzwFETV++jNc4W1mw//qFyJGb2ABOombmZJQS4+Qo=
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 h1:Yi0+ZhRPtPAGeIxFn5erIeJIV9wXA+JznfSxK621Fbk=
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 h1:i2Ly0B+1+rzNZHHWtD4ZwKi+OU5l+uQo1iDHZ2PmiIc=
github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
github.com/nats-io/nats.go v1.8.1/go.mod h1:BrFz9vVn0fU3AcH9Vn4Kd7W0NpJ651tD5omQ3M8LwxM=
github.com/nats-io/nats.go v1.9.1 h1:ik3HbLhZ0YABLto7iX80pZLPw/6dx3T+++MZJwLnMrQ=
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
github.com/nats-io/nkeys v0.0.2/go.mod h1:dab7URMsZm6Z/jp9Z5UGa87Uutgc2mVpXLC4B7TDb/4=
github.com/nats-io/nkeys v0.1.0 h1:qMd4+pRHgdr1nAClu+2h/2a5F2TmKcCzjCDazVgRoX4=
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.3 h1:6JrEfig+HzTH85yxzhSVbjHRJv9cn0p6n3IngIcM5/k=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
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/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
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/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/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/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.10.3 h1:OoxbjfXVZyod1fmWYhI7SEyaD8B00ynP3T+D5GiyHOY=
github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.1 h1:K0jcRCwNQM3vFGh1ppMtDh/+7ApJrjldlX8fA0jDTLQ=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
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.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
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/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ=
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-pkg/v2 v2.0.3-0.20200309150924-5c659fd4b0ad h1:R6JGg68GP8bzzl3L5xso8n9ifay5KUfz2XMQ1KS0pbI=
github.com/owncloud/ocis-pkg/v2 v2.0.3-0.20200309150924-5c659fd4b0ad/go.mod h1:TrBRa+D8mUTsl+qvQiIksJbUvxdE/Qq9jEHUcERPQ60=
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/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/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/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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/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.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 h1:JnMpQc6ppsNgw9QPAGF6Dod479itz7lvlsMzzNayLOI=
github.com/prometheus/client_golang v1.2.1/go.mod h1:XMU6Z2MjaRKVu/dC1qupJI9SiNkDYzz3xecMgSW/F+U=
github.com/prometheus/client_golang v1.4.1 h1:FFSuS004yOQEtDdTq+TAOLP5xUq63KqAFYyOi8zA+Y8=
github.com/prometheus/client_golang v1.4.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
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 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
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.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 h1:L+1lyG48J1zAQXA3RBX/nG/B3gjlHq0zTt2tlbJLyCY=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
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-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 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
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/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/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
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 h1:RMRHFw2+wF7LO0QqtELQwo8hqSmqISyCJeFeAAuWcRo=
github.com/rs/zerolog v1.17.2/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I=
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/sacloud/libsacloud v1.26.1/go.mod h1:79ZwATmHLIFZIMd7sxA3LwzVy/B77uj3LDoToVTxDoQ=
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
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.2.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/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/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.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.1/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
github.com/spf13/pflag v1.0.0/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.6.1 h1:VPZzIkznI1YhVMRi6vNFLHSwhnhReBfgTxIPccpfdZk=
github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/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 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 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
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/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
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/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
github.com/uber/jaeger-client-go v2.15.0+incompatible h1:NP3qsSqNxh8VYr956ur1N/1C1PjvOJnJykCzcD5QHbk=
github.com/uber/jaeger-client-go v2.15.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
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/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/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/vultr/govultr v0.1.4/go.mod h1:9H008Uxr/C4vFNGLqKx232C206GL0PBHzOP0809bGNA=
github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4=
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/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
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=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
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.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs=
go.opencensus.io v0.22.2/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/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/ratelimit v0.0.0-20180316092928-c15da0234277/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 h1:dySoUQPFBGj6xwjmBzageVL8jGi8uxc6bEmJQjA06bw=
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=
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-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-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/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-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 h1:R/qVym5WAxsZWQqZCwDY/8sdVKV1m1WgU4/S5IRQAzc=
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 h1:Jh8cai0fqIK+f6nG0UgPW5wFk8wmiMhM3AyciDBdtQg=
golang.org/x/crypto v0.0.0-20200117160349-530e935923ad/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200210222208-86ce3cb69678 h1:wCWoJcFExDgyYx2m2hpHgwz8W3+FPdfldvIgzqDIhyg=
golang.org/x/crypto v0.0.0-20200210222208-86ce3cb69678/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200320181102-891825fb96df h1:lDWgvUvNnaTnNBc/dwOty86cFeKoKWbwy2wQj0gIxbU=
golang.org/x/crypto v0.0.0-20200320181102-891825fb96df/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-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
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/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-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-20181114220301-adae6a3d119a/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-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-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-20191011234655-491137f69257/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-20191109021931-daa7c04131f5 h1:bHNaocaoJxYBo5cw41UyTMLjYlb8wPY7+WFrnklbHOM=
golang.org/x/net v0.0.0-20191109021931-daa7c04131f5/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
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 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/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 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180622082034-63fc586f45fe/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181019160139-8e24a49d80f8/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-20190129075346-302c3dd5f1cc/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-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-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-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-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191110163157-d32e6e3b99c4 h1:Hynbrlo6LbYI3H1IqXpkVDOcX/3HiPdhVEuyj5a59RM=
golang.org/x/sys v0.0.0-20191110163157-d32e6e3b99c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/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-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-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-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
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 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/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 h1:RIIXAeV6GvDBuADKumTODatUqANFZ+5BPMnzsy4hulY=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
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 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/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.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.14.0 h1:uMf5uLi4eQMRrMKhCplNik4U4H8Z6C1br3zOtAa/aDE=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-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-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-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-20191108220845-16a3f7862a1a h1:Ob5/580gVHBJZgXnff1cZDbG+xLtMVE5mDRTe+nIsX4=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba h1:pRj9OXZbwNtbtZtOB4dLwfK4u+EVRMvP+e9zKkg2grM=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA=
google.golang.org/grpc v1.25.1 h1:wdKvqQk7IttEw92GoRyKG2IDrUIpgpj6H6m81yfeMW0=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
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/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/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE=
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/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc/go.mod h1:VV+3haRsgDiVLxyifmMBrBIuCWFBPYKbRssXB9z67Hw=
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.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/square/go-jose.v2 v2.4.0 h1:0kXPskUMGAXXWJlP05ktEMOV0vmzFQUWw6d+aZJQU8A=
gopkg.in/square/go-jose.v2 v2.4.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/square/go-jose.v2 v2.4.1 h1:H0TmLt7/KmzlrDOpa1F+zr0Tk90PbJYBfsVUmRLrf9Y=
gopkg.in/square/go-jose.v2 v2.4.1/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/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.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
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 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
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=

View File

@@ -0,0 +1,61 @@
package assets
import (
"net/http"
"os"
"path"
"github.com/owncloud/ocis-konnectd/pkg/config"
"github.com/owncloud/ocis-pkg/v2/log"
)
//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{
logger: options.Logger,
config: options.Config,
}
}

View File

@@ -0,0 +1,9 @@
package assets
import (
// 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"
)

1503
konnectd/pkg/assets/embed.go Normal file
View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,20 @@
---
pkg: "assets"
dest: "."
output: "embed.go"
fmt: true
noprefix: true
compression:
compress: true
custom:
- files:
- "../../assets/"
base: "../../assets/"
prefix: ""
exclude:
- "asset-manifest.json"
- "precache-manifest.*.js"
...

View File

@@ -0,0 +1,40 @@
package assets
import (
"github.com/owncloud/ocis-konnectd/pkg/config"
"github.com/owncloud/ocis-pkg/v2/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
}
}

View File

@@ -0,0 +1,49 @@
package command
import (
"fmt"
"net/http"
"github.com/micro/cli/v2"
"github.com/owncloud/ocis-konnectd/pkg/config"
"github.com/owncloud/ocis-konnectd/pkg/flagset"
)
// Health is the entrypoint for the health command.
func Health(cfg *config.Config) *cli.Command {
return &cli.Command{
Name: "health",
Usage: "Check health status",
Flags: flagset.HealthWithConfig(cfg),
Action: func(c *cli.Context) error {
logger := NewLogger(cfg)
resp, err := http.Get(
fmt.Sprintf(
"http://%s/healthz",
cfg.Debug.Addr,
),
)
if err != nil {
logger.Fatal().
Err(err).
Msg("Failed to request health check")
}
defer resp.Body.Close()
if resp.StatusCode != 200 {
logger.Fatal().
Int("code", resp.StatusCode).
Msg("Health seems to be in bad state")
}
logger.Debug().
Int("code", resp.StatusCode).
Msg("Health got a good state")
return nil
},
}
}

View File

@@ -0,0 +1,108 @@
package command
import (
"os"
"strings"
"github.com/micro/cli/v2"
"github.com/owncloud/ocis-konnectd/pkg/config"
"github.com/owncloud/ocis-konnectd/pkg/flagset"
"github.com/owncloud/ocis-konnectd/pkg/version"
"github.com/owncloud/ocis-pkg/v2/log"
"github.com/spf13/viper"
)
// Execute is the entry point for the ocis-konnectd command.
func Execute() error {
cfg := config.New()
app := &cli.App{
Name: "ocis-konnectd",
Version: version.String,
Usage: "Serve Konnectd API 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),
Health(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("konnectd"),
log.Level(cfg.Log.Level),
log.Pretty(cfg.Log.Pretty),
log.Color(cfg.Log.Color),
)
}
// ParseConfig load configuration for every extension
func ParseConfig(c *cli.Context, cfg *config.Config) error {
logger := NewLogger(cfg)
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
viper.SetEnvPrefix("KONNECTD")
viper.AutomaticEnv()
if c.IsSet("config-file") {
viper.SetConfigFile(c.String("config-file"))
} else {
viper.SetConfigName("konnectd")
viper.AddConfigPath("/etc/ocis")
viper.AddConfigPath("$HOME/.ocis")
viper.AddConfigPath("./config")
}
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
}

View File

@@ -0,0 +1,238 @@
package command
import (
"context"
"os"
"os/signal"
"strings"
"time"
"contrib.go.opencensus.io/exporter/jaeger"
"contrib.go.opencensus.io/exporter/ocagent"
"contrib.go.opencensus.io/exporter/zipkin"
"github.com/micro/cli/v2"
"github.com/oklog/run"
openzipkin "github.com/openzipkin/zipkin-go"
zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http"
"github.com/owncloud/ocis-konnectd/pkg/config"
"github.com/owncloud/ocis-konnectd/pkg/flagset"
"github.com/owncloud/ocis-konnectd/pkg/metrics"
"github.com/owncloud/ocis-konnectd/pkg/server/debug"
"github.com/owncloud/ocis-konnectd/pkg/server/http"
"go.opencensus.io/stats/view"
"go.opencensus.io/trace"
)
// Server is the entrypoint for the server command.
func Server(cfg *config.Config) *cli.Command {
return &cli.Command{
Name: "server",
Usage: "Start integrated server",
Flags: flagset.ServerWithConfig(cfg),
Before: func(c *cli.Context) error {
if cfg.HTTP.Root != "/" {
cfg.HTTP.Root = strings.TrimSuffix(cfg.HTTP.Root, "/")
}
// StringSliceFlag doesn't support Destination
// UPDATE Destination on string flags supported. Wait for https://github.com/urfave/cli/pull/1078 to get to micro/cli
if len(c.StringSlice("trusted-proxy")) > 0 {
cfg.Konnectd.TrustedProxy = c.StringSlice("trusted-proxy")
}
if len(c.StringSlice("allow-scope")) > 0 {
cfg.Konnectd.AllowScope = c.StringSlice("allow-scope")
}
if len(c.StringSlice("signing-private-key")) > 0 {
cfg.Konnectd.SigningPrivateKeyFiles = c.StringSlice("signing-private-key")
}
return ParseConfig(c, cfg)
},
Action: func(c *cli.Context) error {
logger := NewLogger(cfg)
if cfg.Tracing.Enabled {
switch t := cfg.Tracing.Type; t {
case "agent":
exporter, err := ocagent.NewExporter(
ocagent.WithReconnectionPeriod(5*time.Second),
ocagent.WithAddress(cfg.Tracing.Endpoint),
ocagent.WithServiceName(cfg.Tracing.Service),
)
if err != nil {
logger.Error().
Err(err).
Str("endpoint", cfg.Tracing.Endpoint).
Str("collector", cfg.Tracing.Collector).
Msg("Failed to create agent tracing")
return err
}
trace.RegisterExporter(exporter)
view.RegisterExporter(exporter)
case "jaeger":
exporter, err := jaeger.NewExporter(
jaeger.Options{
AgentEndpoint: cfg.Tracing.Endpoint,
CollectorEndpoint: cfg.Tracing.Collector,
ServiceName: cfg.Tracing.Service,
},
)
logger.Info().
Str("collector", cfg.Tracing.Collector).
Msg("Trace collector added")
if err != nil {
logger.Error().
Err(err).
Str("endpoint", cfg.Tracing.Endpoint).
Str("collector", cfg.Tracing.Collector).
Msg("Failed to create jaeger tracing")
return err
}
trace.RegisterExporter(exporter)
case "zipkin":
endpoint, err := openzipkin.NewEndpoint(
cfg.Tracing.Service,
cfg.Tracing.Endpoint,
)
if err != nil {
logger.Error().
Err(err).
Str("endpoint", cfg.Tracing.Endpoint).
Str("collector", cfg.Tracing.Collector).
Msg("Failed to create zipkin tracing")
return err
}
exporter := zipkin.NewExporter(
zipkinhttp.NewReporter(
cfg.Tracing.Collector,
),
endpoint,
)
trace.RegisterExporter(exporter)
default:
logger.Warn().
Str("type", t).
Msg("Unknown tracing backend")
}
trace.ApplyConfig(
trace.Config{
DefaultSampler: trace.AlwaysSample(),
},
)
} else {
logger.Debug().
Msg("Tracing is not enabled")
}
var (
gr = run.Group{}
ctx, cancel = context.WithCancel(context.Background())
metrics = metrics.New()
)
defer cancel()
{
server, err := http.Server(
http.Logger(logger),
http.Context(ctx),
http.Config(cfg),
http.Metrics(metrics),
http.Flags(flagset.RootWithConfig(config.New())),
http.Flags(flagset.ServerWithConfig(config.New())),
)
if err != nil {
logger.Info().
Err(err).
Str("transport", "http").
Msg("Failed to initialize server")
return err
}
gr.Add(func() error {
return server.Run()
}, func(_ error) {
logger.Info().
Str("transport", "http").
Msg("Shutting down server")
cancel()
})
}
{
server, err := debug.Server(
debug.Logger(logger),
debug.Context(ctx),
debug.Config(cfg),
)
if err != nil {
logger.Info().
Err(err).
Str("transport", "debug").
Msg("Failed to initialize server")
return err
}
gr.Add(func() error {
return server.ListenAndServe()
}, func(_ error) {
ctx, timeout := context.WithTimeout(ctx, 5*time.Second)
defer timeout()
defer cancel()
if err := server.Shutdown(ctx); err != nil {
logger.Info().
Err(err).
Str("transport", "debug").
Msg("Failed to shutdown server")
} else {
logger.Info().
Str("transport", "debug").
Msg("Shutting down server")
}
})
}
{
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()
},
}
}

View File

@@ -0,0 +1,60 @@
package config
import (
"stash.kopano.io/kc/konnect/bootstrap"
)
// Log defines the available logging configuration.
type Log struct {
Level string
Pretty bool
Color bool
}
// Debug defines the available debug configuration.
type Debug struct {
Addr string
Token string
Pprof bool
Zpages bool
}
// HTTP defines the available http configuration.
type HTTP struct {
Addr string
Namespace string
Root string
TLSCert string
TLSKey string
TLS bool
}
// Tracing defines the available tracing configuration.
type Tracing struct {
Enabled bool
Type string
Endpoint string
Collector string
Service string
}
// Asset defines the available asset configuration.
type Asset struct {
Path string
}
// Config combines all available configuration parts.
type Config struct {
File string
Log Log
Debug Debug
HTTP HTTP
Tracing Tracing
Asset Asset
Konnectd bootstrap.Config
}
// New initializes a new configuration with or without defaults.
func New() *Config {
return &Config{}
}

View File

@@ -0,0 +1,123 @@
package crypto
import (
"crypto/ecdsa"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"crypto/x509/pkix"
"encoding/pem"
"math/big"
"net"
"os"
"time"
"github.com/owncloud/ocis-pkg/v2/log"
)
func publicKey(priv interface{}) interface{} {
switch k := priv.(type) {
case *rsa.PrivateKey:
return &k.PublicKey
case *ecdsa.PrivateKey:
return &k.PublicKey
default:
return nil
}
}
func pemBlockForKey(priv interface{}, l log.Logger) *pem.Block {
switch k := priv.(type) {
case *rsa.PrivateKey:
return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)}
case *ecdsa.PrivateKey:
b, err := x509.MarshalECPrivateKey(k)
if err != nil {
l.Fatal().Err(err).Msg("Unable to marshal ECDSA private key")
}
return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}
default:
return nil
}
}
// GenCert generates TLS-Certificates
func GenCert(l log.Logger) error {
var priv interface{}
var err error
priv, err = rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
l.Fatal().Err(err).Msg("Failed to generate private key")
}
notBefore := time.Now()
notAfter := notBefore.Add(24 * time.Hour * 365)
serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128)
serialNumber, err := rand.Int(rand.Reader, serialNumberLimit)
if err != nil {
l.Fatal().Err(err).Msg("Failed to generate serial number")
}
template := x509.Certificate{
SerialNumber: serialNumber,
Subject: pkix.Name{
Organization: []string{"Acme Corp"},
CommonName: "OCIS",
},
NotBefore: notBefore,
NotAfter: notAfter,
KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth},
BasicConstraintsValid: true,
}
hosts := []string{"127.0.0.1", "localhost"}
for _, h := range hosts {
if ip := net.ParseIP(h); ip != nil {
template.IPAddresses = append(template.IPAddresses, ip)
} else {
template.DNSNames = append(template.DNSNames, h)
}
}
//template.IsCA = true
//template.KeyUsage |= x509.KeyUsageCertSign
derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv)
if err != nil {
l.Fatal().Err(err).Msg("Failed to create certificate")
}
certOut, err := os.Create("server.crt")
if err != nil {
l.Fatal().Err(err).Msg("Failed to open server.crt for writing")
}
err = pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
if err != nil {
l.Fatal().Err(err).Msg("Failed to encode certificate")
}
err = certOut.Close()
if err != nil {
l.Fatal().Err(err).Msg("Failed to write cert")
}
l.Info().Msg("Written server.crt")
keyOut, err := os.OpenFile("server.key", os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
l.Fatal().Err(err).Msg("Failed to open server.key for writing")
}
err = pem.Encode(keyOut, pemBlockForKey(priv, l))
if err != nil {
l.Fatal().Err(err).Msg("Failed to encode key")
}
err = keyOut.Close()
if err != nil {
l.Fatal().Err(err).Msg("Failed to write key")
}
l.Info().Msg("Written server.key")
return nil
}

View File

@@ -0,0 +1,309 @@
package flagset
import (
"github.com/micro/cli/v2"
"github.com/owncloud/ocis-konnectd/pkg/config"
)
// RootWithConfig applies cfg to the root flagset
func RootWithConfig(cfg *config.Config) []cli.Flag {
return []cli.Flag{
&cli.StringFlag{
Name: "config-file",
Value: "",
Usage: "Path to config file",
EnvVars: []string{"KONNECTD_CONFIG_FILE"},
Destination: &cfg.File,
},
&cli.StringFlag{
Name: "log-level",
Value: "info",
Usage: "Set logging level",
EnvVars: []string{"KONNECTD_LOG_LEVEL"},
Destination: &cfg.Log.Level,
},
&cli.BoolFlag{
Value: true,
Name: "log-pretty",
Usage: "Enable pretty logging",
EnvVars: []string{"KONNECTD_LOG_PRETTY"},
Destination: &cfg.Log.Pretty,
},
&cli.BoolFlag{
Value: true,
Name: "log-color",
Usage: "Enable colored logging",
EnvVars: []string{"KONNECTD_LOG_COLOR"},
Destination: &cfg.Log.Color,
},
}
}
// HealthWithConfig applies cfg to the root flagset
func HealthWithConfig(cfg *config.Config) []cli.Flag {
return []cli.Flag{
&cli.StringFlag{
Name: "debug-addr",
Value: "0.0.0.0:9134",
Usage: "Address to debug endpoint",
EnvVars: []string{"KONNECTD_DEBUG_ADDR"},
Destination: &cfg.Debug.Addr,
},
}
}
// ServerWithConfig applies cfg to the root flagset
func ServerWithConfig(cfg *config.Config) []cli.Flag {
return []cli.Flag{
&cli.BoolFlag{
Name: "tracing-enabled",
Usage: "Enable sending traces",
EnvVars: []string{"KONNECTD_TRACING_ENABLED"},
Destination: &cfg.Tracing.Enabled,
},
&cli.StringFlag{
Name: "tracing-type",
Value: "jaeger",
Usage: "Tracing backend type",
EnvVars: []string{"KONNECTD_TRACING_TYPE"},
Destination: &cfg.Tracing.Type,
},
&cli.StringFlag{
Name: "tracing-endpoint",
Value: "",
Usage: "Endpoint for the agent",
EnvVars: []string{"KONNECTD_TRACING_ENDPOINT"},
Destination: &cfg.Tracing.Endpoint,
},
&cli.StringFlag{
Name: "tracing-collector",
Value: "",
Usage: "Endpoint for the collector",
EnvVars: []string{"KONNECTD_TRACING_COLLECTOR"},
Destination: &cfg.Tracing.Collector,
},
&cli.StringFlag{
Name: "tracing-service",
Value: "konnectd",
Usage: "Service name for tracing",
EnvVars: []string{"KONNECTD_TRACING_SERVICE"},
Destination: &cfg.Tracing.Service,
},
&cli.StringFlag{
Name: "debug-addr",
Value: "0.0.0.0:9134",
Usage: "Address to bind debug server",
EnvVars: []string{"KONNECTD_DEBUG_ADDR"},
Destination: &cfg.Debug.Addr,
},
&cli.StringFlag{
Name: "debug-token",
Value: "",
Usage: "Token to grant metrics access",
EnvVars: []string{"KONNECTD_DEBUG_TOKEN"},
Destination: &cfg.Debug.Token,
},
&cli.BoolFlag{
Name: "debug-pprof",
Usage: "Enable pprof debugging",
EnvVars: []string{"KONNECTD_DEBUG_PPROF"},
Destination: &cfg.Debug.Pprof,
},
&cli.BoolFlag{
Name: "debug-zpages",
Usage: "Enable zpages debugging",
EnvVars: []string{"KONNECTD_DEBUG_ZPAGES"},
Destination: &cfg.Debug.Zpages,
},
&cli.StringFlag{
Name: "http-addr",
Value: "0.0.0.0:9130",
Usage: "Address to bind http server",
EnvVars: []string{"KONNECTD_HTTP_ADDR"},
Destination: &cfg.HTTP.Addr,
},
&cli.StringFlag{
Name: "http-root",
Value: "/",
Usage: "Root path of http server",
EnvVars: []string{"KONNECTD_HTTP_ROOT"},
Destination: &cfg.HTTP.Root,
},
&cli.StringFlag{
Name: "http-namespace",
Value: "com.owncloud.web",
Usage: "Set the base namespace for service discovery",
EnvVars: []string{"KONNECTD_HTTP_NAMESPACE"},
Destination: &cfg.HTTP.Namespace,
},
&cli.StringFlag{
Name: "identity-manager",
Value: "ldap",
Usage: "Identity manager (one of ldap,kc,cookie,dummy)",
EnvVars: []string{"KONNECTD_IDENTITY_MANAGER"},
Destination: &cfg.Konnectd.IdentityManager,
},
&cli.StringFlag{
Name: "transport-tls-cert",
Value: "",
Usage: "Certificate file for transport encryption",
EnvVars: []string{"KONNECTD_TRANSPORT_TLS_CERT"},
Destination: &cfg.HTTP.TLSCert,
},
&cli.StringFlag{
Name: "transport-tls-key",
Value: "",
Usage: "Secret file for transport encryption",
EnvVars: []string{"KONNECTD_TRANSPORT_TLS_KEY"},
Destination: &cfg.HTTP.TLSKey,
},
&cli.StringFlag{
Name: "iss",
Usage: "OIDC issuer URL",
EnvVars: []string{"KONNECTD_ISS"},
Value: "https://localhost:9200",
Destination: &cfg.Konnectd.Iss,
},
&cli.StringSliceFlag{
Name: "signing-private-key",
Usage: "Full path to PEM encoded private key file (must match the --signing-method algorithm)",
EnvVars: []string{"KONNECTD_SIGNING_PRIVATE_KEY"},
Value: nil,
},
&cli.StringFlag{
Name: "signing-kid",
Usage: "Value of kid field to use in created tokens (uniquely identifying the signing-private-key)",
EnvVars: []string{"KONNECTD_SIGNING_KID"},
Value: "",
Destination: &cfg.Konnectd.SigningKid,
},
&cli.StringFlag{
Name: "validation-keys-path",
Usage: "Full path to a folder containg PEM encoded private or public key files used for token validaton (file name without extension is used as kid)",
EnvVars: []string{"KONNECTD_VALIDATION_KEYS_PATH"},
Value: "",
Destination: &cfg.Konnectd.ValidationKeysPath,
},
&cli.StringFlag{
Name: "encryption-secret",
Usage: "Full path to a file containing a %d bytes secret key",
EnvVars: []string{"KONNECTD_ENCRYPTION_SECRET"},
Value: "",
Destination: &cfg.Konnectd.EncryptionSecretFile,
},
&cli.StringFlag{
Name: "signing-method",
Usage: "JWT default signing method",
EnvVars: []string{"KONNECTD_SIGNING_METHOD"},
Value: "PS256",
Destination: &cfg.Konnectd.SigningMethod,
},
&cli.StringFlag{
Name: "uri-base-path",
Usage: "Custom base path for URI endpoints",
EnvVars: []string{"KONNECTD_URI_BASE_PATH"},
Value: "",
Destination: &cfg.Konnectd.URIBasePath,
},
&cli.StringFlag{
Name: "sign-in-uri",
Usage: "Custom redirection URI to sign-in form",
EnvVars: []string{"KONNECTD_SIGN_IN_URI"},
Value: "",
Destination: &cfg.Konnectd.SignInURI,
},
&cli.StringFlag{
Name: "signed-out-uri",
Usage: "Custom redirection URI to signed-out goodbye page",
EnvVars: []string{"KONNECTD_SIGN_OUT_URI"},
Value: "",
Destination: &cfg.Konnectd.SignedOutURI,
},
&cli.StringFlag{
Name: "authorization-endpoint-uri",
Usage: "Custom authorization endpoint URI",
EnvVars: []string{"KONNECTD_ENDPOINT_URI"},
Value: "",
Destination: &cfg.Konnectd.AuthorizationEndpointURI,
},
&cli.StringFlag{
Name: "endsession-endpoint-uri",
Usage: "Custom endsession endpoint URI",
EnvVars: []string{"KONNECTD_ENDSESSION_ENDPOINT_URI"},
Value: "",
Destination: &cfg.Konnectd.EndsessionEndpointURI,
},
&cli.StringFlag{
Name: "asset-path",
Value: "",
Usage: "Path to custom assets",
EnvVars: []string{"KONNECTD_ASSET_PATH"},
Destination: &cfg.Asset.Path,
},
&cli.StringFlag{
Name: "identifier-client-path",
Usage: "Path to the identifier web client base folder",
EnvVars: []string{"KONNECTD_IDENTIFIER_CLIENT_PATH"},
Value: "/var/tmp/konnectd",
Destination: &cfg.Konnectd.IdentifierClientPath,
},
&cli.StringFlag{
Name: "identifier-registration-conf",
Usage: "Path to a identifier-registration.yaml configuration file",
EnvVars: []string{"KONNECTD_IDENTIFIER_REGISTRATION_CONF"},
Value: "./config/identifier-registration.yaml",
Destination: &cfg.Konnectd.IdentifierRegistrationConf,
},
&cli.StringFlag{
Name: "identifier-scopes-conf",
Usage: "Path to a scopes.yaml configuration file",
EnvVars: []string{"KONNECTD_IDENTIFIER_SCOPES_CONF"},
Value: "",
Destination: &cfg.Konnectd.IdentifierScopesConf,
},
&cli.BoolFlag{
Name: "insecure",
Usage: "Disable TLS certificate and hostname validation",
EnvVars: []string{"KONNECTD_INSECURE"},
Destination: &cfg.Konnectd.Insecure,
},
&cli.BoolFlag{
Name: "tls",
Usage: "Use TLS (disable only if konnectd is behind a TLS-terminating reverse-proxy).",
EnvVars: []string{"KONNECTD_TLS"},
Value: false,
Destination: &cfg.HTTP.TLS,
},
&cli.StringSliceFlag{
Name: "trusted-proxy",
Usage: "Trusted proxy IP or IP network (can be used multiple times)",
EnvVars: []string{"KONNECTD_TRUSTED_PROXY"},
Value: nil,
},
&cli.StringSliceFlag{
Name: "allow-scope",
Usage: "Allow OAuth 2 scope (can be used multiple times, if not set default scopes are allowed)",
EnvVars: []string{"KONNECTD_ALLOW_SCOPE"},
Value: nil,
},
&cli.BoolFlag{
Name: "allow-client-guests",
Usage: "Allow sign in of client controlled guest users",
EnvVars: []string{"KONNECTD_ALLOW_CLIENT_GUESTS"},
Destination: &cfg.Konnectd.AllowClientGuests,
},
&cli.BoolFlag{
Name: "allow-dynamic-client-registration",
Usage: "Allow dynamic OAuth2 client registration",
EnvVars: []string{"KONNECTD_ALLOW_DYNAMIC_CLIENT_REGISTRATION"},
Destination: &cfg.Konnectd.AllowDynamicClientRegistration,
},
&cli.BoolFlag{
Name: "disable-identifier-webapp",
Usage: "Disable built-in identifier-webapp to use a frontend hosted elsewhere.",
EnvVars: []string{"KONNECTD_DISABLE_IDENTIFIER_WEBAPP"},
Value: true,
Destination: &cfg.Konnectd.IdentifierClientDisabled,
},
}
}

View File

@@ -0,0 +1,73 @@
package log
import (
"github.com/rs/zerolog"
"github.com/sirupsen/logrus"
"io/ioutil"
)
type levelMap map[logrus.Level]zerolog.Level
var levelMapping = levelMap{
logrus.PanicLevel: zerolog.PanicLevel,
logrus.ErrorLevel: zerolog.ErrorLevel,
logrus.TraceLevel: zerolog.TraceLevel,
logrus.DebugLevel: zerolog.DebugLevel,
logrus.WarnLevel: zerolog.WarnLevel,
logrus.InfoLevel: zerolog.InfoLevel,
}
// LogrusWrapper around zerolog. Required because konnectd uses logrus internally.
type LogrusWrapper struct {
zeroLog *zerolog.Logger
levelMap levelMap
}
// Wrap return a logrus logger which internally logs to /dev/null. Messages are passed to the
// underlying zerolog via hooks.
func Wrap(zr zerolog.Logger) *logrus.Logger {
lr := logrus.New()
lr.SetOutput(ioutil.Discard)
lr.SetLevel(logrusLevel(zr.GetLevel()))
lr.AddHook(&LogrusWrapper{
zeroLog: &zr,
levelMap: levelMapping,
})
return lr
}
// Levels on which logrus hooks should be triggered
func (h *LogrusWrapper) Levels() []logrus.Level {
return logrus.AllLevels
}
// Fire called by logrus on new message
func (h *LogrusWrapper) Fire(entry *logrus.Entry) error {
h.zeroLog.WithLevel(h.levelMap[entry.Level]).
Fields(zeroLogFields(entry.Data)).
Msg(entry.Message)
return nil
}
//Convert logrus fields to zerolog
func zeroLogFields(fields logrus.Fields) map[string]interface{} {
fm := make(map[string]interface{})
for k, v := range fields {
fm[k] = v
}
return fm
}
// Convert logrus level to zerolog
func logrusLevel(level zerolog.Level) logrus.Level {
for lrLvl, zrLvl := range levelMapping {
if zrLvl == level {
return lrLvl
}
}
panic("Unexpected loglevel")
}

Some files were not shown because too many files have changed in this diff Show More