├── .github
├── ISSUE_TEMPLATE.md
├── PULL_REQUEST_TEMPLATE.md
└── workflows
│ ├── release.yaml
│ └── test.yaml
├── .gitignore
├── .golangci.yml
├── .goreleaser.yml
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── Makefile
├── README-zh.md
├── README.md
├── assets
├── demo.cast
├── demo.jpg
└── demo.svg
├── cmd
└── mdfmt
│ ├── main.go
│ ├── options.go
│ └── options_test.go
├── go.mk
├── go.mod
├── go.sum
└── pkg
├── md
├── md.go
├── md_test.go
└── testdata
│ ├── .hello.md
│ ├── hello-correct.md
│ ├── hello-more.md
│ ├── hello.markdown
│ ├── hello.md
│ └── hello.txt
├── merrors
└── merrors.go
└── version
├── .gitignore
├── api.go
├── scripts
└── gen.go
└── types.go
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | - With issues:
2 | - Use the search tool before opening a new issue.
3 | - Please provide source code and commit sha if you found a bug.
4 | - Review existing issues and provide feedback or react to them.
5 |
6 | ## Description
7 |
8 |
9 |
10 | ## How to reproduce
11 |
12 |
13 |
14 | TODO
15 |
16 | ## Expectations
17 |
18 |
19 |
20 | TODO
21 |
22 | ## Actual result
23 |
24 |
25 |
26 | TODO
27 |
28 | ## Environment
29 |
30 | - go version:
31 | - operating system:
32 | - version (or commit ref):
33 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | - With pull requests:
2 | - Open your pull request against `master`
3 | - Your pull request should have no more than two commits, if not you should squash them.
4 | - It should pass all tests in the available continuous integration systems such as GitHub Actions.
5 | - You should add/modify tests to cover your proposed code changes.
6 | - If your pull request contains a new feature, please document it on the README.
7 |
8 |
--------------------------------------------------------------------------------
/.github/workflows/release.yaml:
--------------------------------------------------------------------------------
1 | # Reference from:
2 | # https://goreleaser.com/ci/actions/
3 | name: Release
4 | on:
5 | push:
6 | tags:
7 | - "v*"
8 | permissions:
9 | contents: write
10 | jobs:
11 | goreleaser:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Checkout
15 | uses: actions/checkout@v2
16 | with:
17 | fetch-depth: 0
18 | - name: Set up Go
19 | uses: actions/setup-go@v2
20 | with:
21 | go-version: 1.17
22 | - name: Login to Docker Hub
23 | if: startsWith(github.ref, 'refs/tags/v')
24 | uses: docker/login-action@v1
25 | with:
26 | username: ${{ secrets.DOCKER_USERNAME }}
27 | password: ${{ secrets.DOCKER_PASSWORD }}
28 | # - name: Login to GitHub Container Registry
29 | # if: startsWith(github.ref, 'refs/tags/v')
30 | # uses: docker/login-action@v1
31 | # with:
32 | # registry: ghcr.io
33 | # username: ${{ github.actor }}
34 | # password: ${{ secrets.GITHUB_TOKEN }}
35 | # TODO: default GITHUB_TOKEN insufficient permissions
36 | - name: Run GoReleaser
37 | uses: goreleaser/goreleaser-action@v2
38 | with:
39 | # either 'goreleaser' (default) or 'goreleaser-pro'
40 | distribution: goreleaser
41 | version: latest
42 | args: release --rm-dist
43 | env:
44 | GITHUB_TOKEN: ${{ secrets.GH_PAT }}
45 | # Your GoReleaser Pro key, if you are using the 'goreleaser-pro' distribution
46 | # GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }}
--------------------------------------------------------------------------------
/.github/workflows/test.yaml:
--------------------------------------------------------------------------------
1 | # Reference from:
2 | # https://github.com/c-bata/go-prompt/blob/master/.github/workflows/test.yml
3 | name: Test
4 | on:
5 | pull_request:
6 | branches:
7 | - master
8 | push:
9 | branches:
10 | - master
11 |
12 | jobs:
13 | test:
14 | name: Unit tests with coverage
15 | runs-on: ${{ matrix.os }}
16 | strategy:
17 | matrix:
18 | os: [ubuntu-latest]
19 | steps:
20 | - name: Set up Go 1.17
21 | uses: actions/setup-go@v2
22 | with:
23 | go-version: 1.17
24 | id: go
25 | - name: Check out code into the Go module directory
26 | uses: actions/checkout@master
27 | - name: Running go tests with coverage
28 | env:
29 | GO111MODULE: on
30 | run: make cover
31 | - name: Send coverage
32 | uses: shogo82148/actions-goveralls@v1
33 | with:
34 | path-to-profile: coverage.out
35 | lint:
36 | name: Lint checks
37 | runs-on: ubuntu-latest
38 | steps:
39 | - name: Set up Go 1.17
40 | uses: actions/setup-go@v2
41 | with:
42 | go-version: 1.17
43 | id: go
44 | - name: Check out code into the Go module directory
45 | uses: actions/checkout@master
46 | - name: Download golangci-lint
47 | run: |
48 | wget https://github.com/golangci/golangci-lint/releases/download/v1.41.0/golangci-lint-1.41.0-linux-amd64.tar.gz
49 | tar -xvf ./golangci-lint-1.41.0-linux-amd64.tar.gz
50 | - name: Running golangci-lint
51 | env:
52 | GO111MODULE: on
53 | GOPATH: /home/runner/work/
54 | run: GOLINTER=./golangci-lint-1.41.0-linux-amd64/golangci-lint make lint
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | build/
3 | coverage.out
4 | tmp/
5 | __debug_bin
6 | .vscode/
--------------------------------------------------------------------------------
/.golangci.yml:
--------------------------------------------------------------------------------
1 | # This file contains all available configuration options
2 | # with their default values.
3 | # For complete .golangci.yml configuration, reference: https://golangci-lint.run/usage/configuration/#config-file
4 |
5 | # options for analysis running
6 | run:
7 | timeout: 10m
8 |
9 | linters:
10 | disable-all: true
11 | enable: # please keep this alphabetized
12 | # Don't use soon to deprecated[1] linters that lead to false
13 | # https://github.com/golangci/golangci-lint/issues/1841
14 | # - deadcode
15 | # - structcheck
16 | # - varcheck
17 | - ineffassign
18 | - staticcheck
19 | - unused
20 | - gosimple
21 | - errcheck
22 | - govet
23 | - gofumpt
24 | - bodyclose
25 | - depguard
26 | - dogsled
27 | - dupl
28 | - exportloopref
29 | - exhaustive
30 | - goconst
31 | - gocritic
32 | # - gomnd
33 | # - gosec
34 | - misspell
35 | - nolintlint
36 | - prealloc
37 | - predeclared
38 | - revive
39 | - stylecheck
40 | - thelper
41 | - tparallel
42 | - typecheck
43 | - unconvert
44 | - unparam
45 | - whitespace
46 | - wsl
47 |
48 | linters-settings:
49 | gofumpt:
50 | # Select the Go version to target. The default is `1.15`.
51 | lang-version: "1.17"
52 | # Choose whether or not to use the extra rules that are disabled
53 | # by default
54 | extra-rules: false
--------------------------------------------------------------------------------
/.goreleaser.yml:
--------------------------------------------------------------------------------
1 | # This is an example .goreleaser.yml file with some sane defaults.
2 | # Make sure to check the documentation at http://goreleaser.com
3 | before:
4 | hooks:
5 | # You may remove this if you don't use go modules.
6 | - go mod tidy
7 | - make gen-version
8 | builds:
9 | - env:
10 | - CGO_ENABLED=0
11 | goos:
12 | - linux
13 | - windows
14 | - darwin
15 | # 使用 ldflags="-s -w" 去掉符号表和调试信息,以减少发布包的大小
16 | ldflags:
17 | - -s -w
18 | # upx 在部分 Mac 系统中会出现 killed 的报错,二进制无法正常工作,暂时不使用
19 | # hooks:
20 | # post:
21 | # - upx -9 "{{ .Path }}"
22 | # upx 在 windows amd64 上会报错,暂时不用
23 | # ignore:
24 | # - goos: windows
25 | # goarch: arm64
26 | main: ./cmd/mdfmt
27 | archives:
28 | - id: foo
29 | name_template: >-
30 | {{ .ProjectName }}_
31 | {{- title .Os }}_
32 | {{- if eq .Arch "amd64" }}x86_64
33 | {{- else if eq .Arch "386" }}i386
34 | {{- else }}{{ .Arch }}{{ end }}
35 | checksum:
36 | name_template: 'checksums.txt'
37 | snapshot:
38 | name_template: "{{ .Tag }}-next"
39 | changelog:
40 | sort: desc
41 | filters:
42 | exclude:
43 | - '^docs:'
44 | - '^test:'
45 |
46 | release:
47 | github:
48 | owner: elliotxx
49 | name: mdfmt
50 | draft: false
51 | footer: |
52 | ## Docker Images
53 | * `elliotxx/mdfmt:{{ .Tag }}`
54 | * `elliotxx/mdfmt:{{ .Tag }}-arm64`
55 |
56 | ## Thanks!
57 |
58 | dockers:
59 | - image_templates:
60 | - 'elliotxx/{{ .ProjectName }}:{{ .Tag }}'
61 | - 'elliotxx/{{ .ProjectName }}:latest'
62 | # - 'ghcr.io/elliotxx/{{ .ProjectName }}:{{ .Tag }}'
63 | # - 'ghcr.io/elliotxx/{{ .ProjectName }}:latest'
64 | dockerfile: Dockerfile
65 | use: docker
66 | build_flag_templates:
67 | - "--pull"
68 | - "--label=org.opencontainers.image.created={{.Date}}"
69 | - "--label=org.opencontainers.image.name={{.ProjectName}}"
70 | - "--label=org.opencontainers.image.revision={{.FullCommit}}"
71 | - "--label=org.opencontainers.image.version={{.Version}}"
72 | - "--label=org.opencontainers.image.source={{.GitURL}}"
73 | - "--platform=linux/amd64"
74 | - image_templates:
75 | - 'elliotxx/{{ .ProjectName }}:{{ .Tag }}-arm64'
76 | # - 'ghcr.io/elliotxx/{{ .ProjectName }}:{{ .Tag }}-arm64'
77 | dockerfile: Dockerfile
78 | use: docker
79 | build_flag_templates:
80 | - "--pull"
81 | - "--label=org.opencontainers.image.created={{.Date}}"
82 | - "--label=org.opencontainers.image.name={{.ProjectName}}"
83 | - "--label=org.opencontainers.image.revision={{.FullCommit}}"
84 | - "--label=org.opencontainers.image.version={{.Version}}"
85 | - "--label=org.opencontainers.image.source={{.GitURL}}"
86 | - "--platform=linux/arm64"
87 | goarch: arm64
88 |
89 | brews:
90 | - tap:
91 | owner: elliotxx
92 | name: homebrew-tap
93 | # token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}"
94 |
95 | url_template: "https://github.com/elliotxx/mdfmt/releases/download/{{ .Tag }}/{{ .ArtifactName }}"
96 | download_strategy: CurlDownloadStrategy
97 |
98 | # Git author used to commit to the repository.
99 | # Defaults are shown.
100 | commit_author:
101 | name: GoReleaser Bot
102 | email: goreleaser@carlosbecker.com
103 |
104 | folder: HomebrewFormula
105 | homepage: "https://github.com/elliotxx/mdfmt"
106 | description: "A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown."
107 | license: "MIT"
108 | skip_upload: false
109 | test: |
110 | system "#{bin}/mdfmt -V"
111 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
6 |
7 | ## Our Standards
8 |
9 | Examples of behavior that contributes to creating a positive environment include:
10 |
11 | * Using welcoming and inclusive language
12 | * Being respectful of differing viewpoints and experiences
13 | * Gracefully accepting constructive criticism
14 | * Focusing on what is best for the community
15 | * Showing empathy towards other community members
16 |
17 | Examples of unacceptable behavior by participants include:
18 |
19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances
20 | * Trolling, insulting/derogatory comments, and personal or political attacks
21 | * Public or private harassment
22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission
23 | * Other conduct which could reasonably be considered inappropriate in a professional setting
24 |
25 | ## Our Responsibilities
26 |
27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
28 |
29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
30 |
31 | ## Scope
32 |
33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
34 |
35 | ## Enforcement
36 |
37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [yiyu2017@qq.com](mailto:yiyu2017@qq.com). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
38 |
39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
40 |
41 | ## Attribution
42 |
43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
44 |
45 | [homepage]: http://contributor-covenant.org
46 | [version]: http://contributor-covenant.org/version/1/4/
47 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | ## Contributing
2 |
3 | - With issues:
4 |
5 | - Use the search tool before opening a new issue.
6 | - Please provide source code and commit sha if you found a bug.
7 | - Review existing issues and provide feedback or react to them.
8 | - With pull requests:
9 |
10 | - Open your pull request against `master`
11 | - Your pull request should have no more than two commits, if not you should squash them.
12 | - It should pass all tests in the available continuous integration systems such as GitHub Actions.
13 | - You should add/modify tests to cover your proposed code changes.
14 | - If your pull request contains a new feature, please document it on the README.
15 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:18.04 AS runtime
2 | WORKDIR /app
3 | # GoReleaser will automatically generate the binary in the root directory
4 | COPY /mdfmt .
5 | ENTRYPOINT ["./mdfmt"]
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 杨英明
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | GOSOURCE_PATHS ?= ./pkg/md/...
2 |
3 | include go.mk
4 |
5 |
6 | .PHONY: gen-version
7 | gen-version: ## Update version
8 | cd pkg/version/scripts && go run gen.go
9 |
10 | .PHONY: clean
11 | clean: ## Clean build bundles
12 | -rm -rf ./build
13 |
14 | .PHONY: build-all
15 | build-all: build-darwin build-linux build-windows ## Build all platforms
16 |
17 | .PHONY: build-darwin
18 | build-darwin: gen-version ## Build for MacOS
19 | -rm -rf ./build/darwin
20 | GOOS=darwin GOARCH=amd64 CGO_ENABLED=0 \
21 | go build -o ./build/darwin/$(APPROOT) \
22 | ./cmd/mdfmt
23 |
24 | .PHONY: build-linux
25 | build-linux: gen-version ## Build for Linux
26 | -rm -rf ./build/linux
27 | GOOS=linux GOARCH=amd64 CGO_ENABLED=0 \
28 | go build -o ./build/linux/$(APPROOT) \
29 | ./cmd/mdfmt
30 |
31 | .PHONY: build-windows
32 | build-windows: gen-version ## Build for Windows
33 | -rm -rf ./build/windows
34 | GOOS=windows GOARCH=amd64 CGO_ENABLED=0 \
35 | go build -o ./build/windows/$(APPROOT).exe \
36 | ./cmd/mdfmt
37 |
--------------------------------------------------------------------------------
/README-zh.md:
--------------------------------------------------------------------------------
1 | ## 简介
2 |
3 | [](https://github.com/elliotxx/mdfmt/releases)
4 | [](https://github.com/elliotxx/mdfmt/releases)
5 | [](https://hub.docker.com/r/elliotxx/mdfmt)
6 | [](https://github.com/elliotxx/mdfmt/blob/master/LICENSE)
7 | [](https://pkg.go.dev/github.com/elliotxx/mdfmt)
8 | [](https://coveralls.io/github/elliotxx/mdfmt)
9 | [](https://gitmoji.dev)
10 |
11 | > 💡 一款 Markdown 格式化工具,和 gofmt 比较类似,不过格式化的对象是 Markdown 文本
12 |
13 |
14 |
15 |
16 |
17 | 最近在频繁用 Markdown 写文档,内容一多就不好管理格式,经常看到一坨坨的 Markdown 内容挤在一起,导致有强迫症的我的眉头也经常挤在一起。
18 |
19 | 好在发现了强大的结构化的 Markdown 引擎 [lute](https://github.com/88250/lute),它对中文语境的支持也很好,于是借助 lute 引擎开发了这款 Markdown 格式化命令行工具 [mdfmt](https://github.com/elliotxx/mdfmt),欢迎大家试用 👏🏻
20 |
21 | ## 📜 语言
22 |
23 | [English](https://github.com/elliotxx/mdfmt/blob/master/README.md) | [简体中文](https://github.com/elliotxx/mdfmt/blob/master/README-zh.md)
24 |
25 | ## ✨ 特性
26 |
27 | * 支持多种输入:标准输入、文件、目录、通配符,其中指定目录会递归格式化目录下所有 Markdown 文件
28 | * 支持重写:将结果写入(源)文件而不是标准输出
29 | * 支持显示差异:显示 Markdown 格式化前后的差异(diff),而不是重写文件
30 | * 支持列出格式化的文件
31 | * 跨平台:Linux, Windows, Mac
32 | * 一键安装:支持通过 `Homebrew`、`go install` 等方式一键安装 `mdfmt`
33 |
34 | ## 🛠️ 安装
35 |
36 | ### 二进制安装(跨平台: windows, linux, mac ...)
37 |
38 | 从二进制安装,只需从 `mdfmt` 的 [发布页面](https://github.com/elliotxx/mdfmt/releases) 下载对应平台的二进制文件,然后将二进制文件放在命令行能访问到的目录中即可。
39 |
40 | ### Homebrew
41 |
42 | `elliotxx/tap` 有 MacOS 和 GNU/Linux 的预编译二进制版本可用:
43 |
44 | ```
45 | brew install elliotxx/tap/mdfmt
46 | ```
47 |
48 | ### 从源码构建
49 |
50 | 使用 Go 1.17+ 版本,你可以通过 `go install` 直接从源码安装 `mdfmt`:
51 |
52 | ```
53 | go install github.com/elliotxx/mdfmt/cmd/mdfmt@latest
54 | ```
55 |
56 | *注意*: 你将基于代码仓库最新的可用版本安装 `mdfmt`,尽管主分支的最新提交应该始终是一个稳定和可用的版本,但这不是安装和使用 `mdfmt` 的推荐方式。通过 `go install` 安装的 `mdfmt` 版本输出将显示默认版本号(default-version)。
57 |
58 | ### Docker
59 |
60 | Docker 用户可以用以下命令拉取 `mdfmt` 的镜像:
61 |
62 | ```
63 | docker pull elliotxx/mdfmt
64 | ```
65 |
66 | 验证:
67 |
68 | ```bash
69 | $ docker run --rm elliotxx/mdfmt:latest mdfmt -h
70 | ...
71 | $ docker run --rm elliotxx/mdfmt:latest mdfmt -V
72 | ...
73 | $ docker run -v $PWD:$PWD --rm elliotxx/mdfmt:latest mdfmt -d /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
74 | diff -u /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md.orig /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
75 | --- /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md.orig
76 | +++ /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
77 | @@ -1,6 +1,7 @@
78 | # hello
79 | +
80 | > hello
81 |
82 | -|name|age|
83 | -|--|--|
84 | -|Mike|18|
85 | +| name | age |
86 | +| ---- | --- |
87 | +| Mike | 18 |
88 | ```
89 |
90 | ## ⚡ 使用
91 |
92 | ```
93 | $ mdfmt -h
94 | A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown.
95 |
96 | Usage:
97 | mdfmt [flags] [path ...]
98 |
99 | Examples:
100 | # Format specified Markdown file, and write to stdout
101 | mdfmt README.md
102 |
103 | # Format and rewrite for specified Markdown file
104 | mdfmt -w README.md
105 |
106 | # Display diffs instead of rewriting Markdown files
107 | mdfmt -d README.md
108 |
109 | # List files whose formatting differs from mdfmt's
110 | mdfmt -l .
111 |
112 | # Format, rewrite, and display diffs for specified Markdown file
113 | mdfmt -d -w README.md
114 |
115 | # Format and rewrite all Markdown file in current directory
116 | mdfmt -w *.md
117 |
118 | # Recursive format and rewrite all Markdown file in current directory
119 | mdfmt -w .
120 |
121 | # Format and rewrite the specified Markdown file and directory
122 | mdfmt -w README.md testdir/
123 |
124 | # Format stdin to stdout
125 | cat README.md | mdfmt
126 |
127 | # Show version info
128 | mdfmt -V
129 |
130 | Flags:
131 | -d, --diff display diffs instead of rewriting files
132 | -h, --help help for mdfmt
133 | -l, --list list files whose formatting differs from mdfmt's
134 | -V, --version show version info
135 | -w, --write write result to (source) file instead of stdout
136 | ```
137 |
138 | ## 🙏 感谢
139 |
140 | * Markdown 引擎使用 [88250/lute](https://github.com/88250/lute), 很酷!
141 | * 命令行工具模板来自 [elliotxx/go-cli-prototype](https://github.com/elliotxx/go-cli-prototype)
142 | * Markdown 规范遵循 [GFM](https://github.github.com/gfm/)/[CommonMark](https://commonmark.org/)
143 | * 使用 [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli) 提交漂亮的 git commit message
144 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Introduction
2 |
3 | [](https://github.com/elliotxx/mdfmt/releases)
4 | [](https://github.com/elliotxx/mdfmt/releases)
5 | [](https://hub.docker.com/r/elliotxx/mdfmt)
6 | [](https://github.com/elliotxx/mdfmt/blob/master/LICENSE)
7 | [](https://pkg.go.dev/github.com/elliotxx/mdfmt)
8 | [](https://coveralls.io/github/elliotxx/mdfmt)
9 | [](https://gitmoji.dev)
10 |
11 | > 💡 A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown.
12 |
13 |
14 |
15 |
16 |
17 | Recently, I have frequently used Markdown to write documents, and it is difficult to manage the format when there are too many contents. I often see lumps of markdown contents crowded together, it caused my eyebrows to be crowded together.
18 |
19 | Fortunately, the powerful structured Markdown engine [lute](https://github.com/88250/lute), its support for Chinese context is also very good, so I developed this Markdown formatting command line tool [mdfmt](https://github.com/elliotXX/mdfmt) with the lute engine, welcome everyone to try 👏🏻
20 |
21 | ## 📜️ Language
22 |
23 | [English](https://github.com/elliotxx/mdfmt/blob/master/README.md) | [简体中文](https://github.com/elliotxx/mdfmt/blob/master/README-zh.md)
24 |
25 | ## ✨ Features
26 |
27 | * **Support multiple inputs**: standard input, file, directory and wildcard. The specified directory will recursively format all markdown files under the directory
28 | * **Support Rewriting**: write the results to (source) files instead of standard output
29 | * **Support display difference**: display the difference before and after markdown formatting, Instead of rewriting files
30 | * **Support listing formatted files**
31 | * **Cross platform**: Linux, windows, Mac
32 | * **One-click installation**: support one-click installation `mdfmt` through `Homebrew`, `go install`, etc.
33 |
34 | ## 🛠️ Installation
35 |
36 | ### Binary (Cross-platform: windows, linux, mac ...)
37 |
38 | To get the binary just download the latest release for your OS/Arch from the [release page](https://github.com/elliotxx/mdfmt/releases) and put the binary somewhere convenient.
39 |
40 | ### Homebrew
41 |
42 | The `elliotxx/tap` has macOS and GNU/Linux pre-built binaries available:
43 |
44 | ```
45 | brew install elliotxx/tap/mdfmt
46 | ```
47 |
48 | ### Build from Source
49 |
50 | Starting with Go 1.17, you can install `mdfmt` from source using go install:
51 |
52 | ```
53 | go install github.com/elliotxx/mdfmt/cmd/mdfmt@latest
54 | ```
55 |
56 | *NOTE*: This will install `mdfmt` based on the latest available code base. Even though the goal is that the latest commit on the main branch should always be a stable and usable version, this is not the recommended way to install and use `mdfmt`. The version output will show `mdfmt` version (default-version) for go install based builds.
57 |
58 | ### Docker
59 |
60 | Docker users can use the following commands to pull the latest image of the `mdfmt`:
61 |
62 | ```
63 | docker pull elliotxx/mdfmt
64 | ```
65 |
66 | Verification:
67 |
68 | ```bash
69 | $ docker run --rm elliotxx/mdfmt:latest mdfmt -h
70 | ...
71 | $ docker run --rm elliotxx/mdfmt:latest mdfmt -V
72 | ...
73 | $ docker run -v $PWD:$PWD --rm elliotxx/mdfmt:latest mdfmt -d /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
74 | diff -u /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md.orig /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
75 | --- /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md.orig
76 | +++ /Users/yym/workspace/mdfmt/pkg/md/testdata/hello-more.md
77 | @@ -1,6 +1,7 @@
78 | # hello
79 | +
80 | > hello
81 |
82 | -|name|age|
83 | -|--|--|
84 | -|Mike|18|
85 | +| name | age |
86 | +| ---- | --- |
87 | +| Mike | 18 |
88 | ```
89 |
90 | ## ⚡ Usage
91 |
92 | ```
93 | $ mdfmt -h
94 | A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown.
95 |
96 | Usage:
97 | mdfmt [flags] [path ...]
98 |
99 | Examples:
100 | # Format specified Markdown file, and write to stdout
101 | mdfmt README.md
102 |
103 | # Format and rewrite for specified Markdown file
104 | mdfmt -w README.md
105 |
106 | # Display diffs instead of rewriting Markdown files
107 | mdfmt -d README.md
108 |
109 | # List files whose formatting differs from mdfmt's
110 | mdfmt -l .
111 |
112 | # Format, rewrite, and display diffs for specified Markdown file
113 | mdfmt -d -w README.md
114 |
115 | # Format and rewrite all Markdown file in current directory
116 | mdfmt -w *.md
117 |
118 | # Recursive format and rewrite all Markdown file in current directory
119 | mdfmt -w .
120 |
121 | # Format and rewrite the specified Markdown file and directory
122 | mdfmt -w README.md testdir/
123 |
124 | # Format stdin to stdout
125 | cat README.md | mdfmt
126 |
127 | # Show version info
128 | mdfmt -V
129 |
130 | Flags:
131 | -d, --diff display diffs instead of rewriting files
132 | -h, --help help for mdfmt
133 | -l, --list list files whose formatting differs from mdfmt's
134 | -V, --version show version info
135 | -w, --write write result to (source) file instead of stdout
136 | ```
137 |
138 | ## 🙏 Thanks
139 |
140 | * The Markdown engine uses [lute](https://github.com/88250/lute), cool!
141 | * The CLI Template uses [elliotxx/go-cli-prototype](https://github.com/elliotxx/go-cli-prototype)
142 | * The specification follows [GFM](https://github.github.com/gfm/)/[CommonMark](https://commonmark.org/)
143 | * Pretty git commit message using [gitmoji-cli](https://github.com/carloscuesta/gitmoji-cli)
--------------------------------------------------------------------------------
/assets/demo.cast:
--------------------------------------------------------------------------------
1 | {"version": 2, "width": 88, "height": 24, "timestamp": 1645759874, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
2 | [0.410217, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
3 | [0.445401, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[39m\u001b[0m\u001b[K"]
4 | [0.445575, "o", "\u001b[?1h\u001b="]
5 | [0.445681, "o", "\u001b[?2004h"]
6 | [0.471426, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
7 | [1.044688, "o", "m"]
8 | [1.045393, "o", "\bm\u001b[90mdfmt *.md\u001b[39m\u001b[9D"]
9 | [1.169938, "o", "\bm\u001b[39md"]
10 | [1.367507, "o", "\u001b[39mf"]
11 | [1.471261, "o", "\u001b[39mm"]
12 | [1.569847, "o", "\u001b[39mt"]
13 | [1.720851, "o", "\u001b[39m "]
14 | [2.235258, "o", "\u001b[39m-\u001b[39m \u001b[39m \u001b[39m \b\b\b"]
15 | [2.237562, "o", "\u001b[90mh\u001b[39m\b"]
16 | [2.405855, "o", "\u001b[39mh"]
17 | [2.661203, "o", "\u001b[?1l\u001b>"]
18 | [2.661329, "o", "\u001b[?2004l\r\r\n"]
19 | [2.662689, "o", "\u001b]2;mdfmt -h\u0007\u001b]1;mdfmt\u0007"]
20 | [2.676523, "o", "A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown.\r\n\r\n"]
21 | [2.677035, "o", "Usage:\r\n mdfmt [flags] [path ...]\r\n\r\nExamples:\r\n # Format specified Markdown file, and write to stdout\r\n mdfmt README.md\r\n \r\n # Format and rewrite for specified Markdown file\r\n mdfmt -w README.md\r\n \r\n # Display diffs instead of rewriting Markdown files\r\n mdfmt -d README.md\r\n \r\n # List files whose formatting differs from mdfmt's\r\n mdfmt -l .\r\n \r\n # Format, rewrite, and display diffs for specified Markdown file\r\n mdfmt -d -w README.md\r\n \r\n # Format and rewrite all Markdown file in current directory\r\n mdfmt -w *.md\r\n \r\n # Recursive format and rewrite all Markdown file in current directory\r\n mdfmt -w .\r\n \r\n # Format and rewrite the specified Markdown file and directory\r\n mdfmt -w README.md testdir/\r\n \r\n # Format stdin to stdout\r\n cat README.md | mdfmt\r\n \r\n # Show version info\r\n mdfmt -V\r\n\r\nFlags:\r\n -d, --diff display diffs instead of rewriting files\r\n -h, --help help for mdfmt\r\n -l, --list list files whose formatting differs from mdfmt's\r\n -v, --verbose verbose l"]
22 | [2.677151, "o", "ogging\r\n -V, --version show version info\r\n -w, --write write result to (source) file instead of stdout\r\n"]
23 | [2.67795, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
24 | [2.678076, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007"]
25 | [2.678225, "o", "\u001b]1;..markdown-test\u0007"]
26 | [2.707555, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
27 | [2.707682, "o", "\u001b[?1h\u001b="]
28 | [2.707815, "o", "\u001b[?2004h"]
29 | [2.739623, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
30 | [3.699275, "o", "c"]
31 | [3.701336, "o", "\bc\u001b[90mlear\u001b[39m\b\b\b\b"]
32 | [3.820993, "o", "\bc\u001b[39ml"]
33 | [3.924909, "o", "\u001b[39me"]
34 | [4.045598, "o", "\u001b[39ma"]
35 | [4.068852, "o", "\u001b[39mr"]
36 | [4.610349, "o", "\u001b[?1l\u001b>"]
37 | [4.61052, "o", "\u001b[?2004l\r\r\n"]
38 | [4.611374, "o", "\u001b]2;clear\u0007\u001b]1;clear\u0007"]
39 | [4.614062, "o", "\u001b[H\u001b[2J"]
40 | [4.614428, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
41 | [4.614523, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007"]
42 | [4.614621, "o", "\u001b]1;..markdown-test\u0007"]
43 | [4.644083, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
44 | [4.64422, "o", "\u001b[?1h\u001b="]
45 | [4.644307, "o", "\u001b[?2004h"]
46 | [4.671785, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
47 | [5.073986, "o", "#"]
48 | [5.075798, "o", "\b#\u001b[90m File or directory as input\u001b[39m\u001b[27D"]
49 | [5.478664, "o", "\b#\u001b[39m "]
50 | [7.01083, "o", "\u001b[39mS\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[25D"]
51 | [7.012598, "o", "\u001b[90mtdin as input\u001b[39m\u001b[13D"]
52 | [7.214177, "o", "\u001b[39mt"]
53 | [7.461559, "o", "\u001b[39md"]
54 | [8.046507, "o", "\u001b[39mi\u001b[39mn\u001b[39m \u001b[39ma\u001b[39ms\u001b[39m \u001b[39mi\u001b[39mn\u001b[39mp\u001b[39mu\u001b[39mt"]
55 | [8.449235, "o", "\u001b[?1l\u001b>"]
56 | [8.449521, "o", "\u001b[?2004l\r\r\n"]
57 | [8.450677, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
58 | [8.450857, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
59 | [8.483623, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
60 | [8.48378, "o", "\u001b[?1h\u001b="]
61 | [8.483868, "o", "\u001b[?2004h"]
62 | [8.510702, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
63 | [9.864111, "o", "c"]
64 | [9.865651, "o", "\bc\u001b[90mlear\u001b[39m\b\b\b\b"]
65 | [10.007074, "o", "\bc\u001b[39ma\u001b[39m \u001b[39m \u001b[39m \b\b\b"]
66 | [10.008928, "o", "\u001b[90mt README.md | mdfmt\u001b[39m\u001b[19D"]
67 | [10.135243, "o", "\u001b[39mt"]
68 | [10.26511, "o", "\u001b[39m "]
69 | [10.481825, "o", "\u001b[39mR"]
70 | [10.590115, "o", "\u001b[39mE"]
71 | [11.156449, "o", "\u001b[39mA\u001b[39mD\u001b[39mM\u001b[39mE\u001b[39m.\u001b[39mm\u001b[39md\u001b[39m \u001b[39m|\u001b[39m \u001b[39mm\u001b[39md\u001b[39mf\u001b[39mm\u001b[39mt"]
72 | [11.420835, "o", "\u001b[?1l\u001b>"]
73 | [11.420963, "o", "\u001b[?2004l\r\r\n"]
74 | [11.421728, "o", "\u001b]2;ccat --bg=dark README.md | mdfmt\u0007\u001b]1;cat\u0007"]
75 | [11.436363, "o", "# Introduction\r\n\r\n> Hello\r\n\r\n| Name | Age |\r\n| ---- | --- |\r\n| Mike | 18 |\r\n"]
76 | [11.437368, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
77 | [11.43749, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
78 | [11.466668, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
79 | [11.466814, "o", "\u001b[?1h\u001b="]
80 | [11.466894, "o", "\u001b[?2004h"]
81 | [11.497589, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
82 | [13.349973, "o", "#"]
83 | [13.352423, "o", "\b#\u001b[90m Stdin as input\u001b[39m\u001b[15D"]
84 | [14.105066, "o", "\b#\u001b[39m "]
85 | [14.463587, "o", "\u001b[39mF\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[13D"]
86 | [14.465662, "o", "\u001b[90mile or directory as input\u001b[39m\u001b[25D"]
87 | [14.66449, "o", "\u001b[39mi"]
88 | [14.809609, "o", "\u001b[39ml"]
89 | [14.969474, "o", "\u001b[39me"]
90 | [15.33215, "o", "\u001b[39m \u001b[39mo\u001b[39mr\u001b[39m \u001b[39md\u001b[39mi\u001b[39mr\u001b[39me\u001b[39mc\u001b[39mt\u001b[39mo\u001b[39mr\u001b[39my\u001b[39m \u001b[39ma\u001b[39ms\u001b[39m \u001b[39mi\u001b[39mn\u001b[39mp\u001b[39mu\u001b[39mt"]
91 | [15.876924, "o", "\u001b[?1l\u001b>"]
92 | [15.87707, "o", "\u001b[?2004l\r\r\n"]
93 | [15.877875, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
94 | [15.878037, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
95 | [15.914643, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
96 | [15.914818, "o", "\u001b[?1h\u001b="]
97 | [15.914919, "o", "\u001b[?2004h"]
98 | [15.950593, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
99 | [17.380982, "o", "m"]
100 | [17.383207, "o", "\bm\u001b[90mdfmt -h\u001b[39m\b\b\b\b\b\b\b"]
101 | [17.514007, "o", "\bm\u001b[39md"]
102 | [17.80198, "o", "\u001b[39mf"]
103 | [17.880583, "o", "\u001b[39mm"]
104 | [18.027222, "o", "\u001b[39mt"]
105 | [18.153236, "o", "\u001b[39m "]
106 | [18.414965, "o", "\u001b[39mR\u001b[39m \b"]
107 | [18.417171, "o", "\u001b[90mEADME.md\u001b[39m\u001b[8D"]
108 | [18.506037, "o", "\u001b[39mE"]
109 | [18.745917, "o", "\u001b[39mA\u001b[39mD\u001b[39mM\u001b[39mE\u001b[39m.\u001b[39mm\u001b[39md\u001b[1m \u001b[0m"]
110 | [19.509175, "o", "\b\u001b[0m \b"]
111 | [19.509441, "o", "\u001b[?1l\u001b>"]
112 | [19.509576, "o", "\u001b[?2004l\r\r\n"]
113 | [19.510685, "o", "\u001b]2;mdfmt README.md\u0007\u001b]1;mdfmt\u0007"]
114 | [19.526195, "o", "# Introduction\r\n\r\n> Hello\r\n\r\n| Name | Age |\r\n| ---- | --- |\r\n| Mike | 18 |\r\n"]
115 | [19.527059, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
116 | [19.527182, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
117 | [19.557452, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
118 | [19.557636, "o", "\u001b[?1h\u001b=\u001b[?2004h"]
119 | [19.58649, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
120 | [20.21706, "o", "m"]
121 | [20.218852, "o", "\bm\u001b[90mdfmt README.md\u001b[39m\u001b[14D"]
122 | [20.417006, "o", "\bm\u001b[39md"]
123 | [20.633932, "o", "\u001b[39mf"]
124 | [20.745853, "o", "\u001b[39mm"]
125 | [20.849617, "o", "\u001b[39mt"]
126 | [20.993222, "o", "\u001b[39m "]
127 | [21.604905, "o", "\u001b[39m.\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[8D"]
128 | [21.829391, "o", "\u001b[?1l\u001b>"]
129 | [21.829558, "o", "\u001b[?2004l\r\r\n"]
130 | [21.830602, "o", "\u001b]2;mdfmt .\u0007\u001b]1;mdfmt\u0007"]
131 | [21.848123, "o", "# Introduction\r\n\r\n> Hello\r\n\r\n| Name | Age |\r\n| ---- | --- |\r\n| Mike | 18 |\r\n"]
132 | [21.849162, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
133 | [21.849275, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
134 | [21.882715, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
135 | [21.882866, "o", "\u001b[?1h\u001b="]
136 | [21.882974, "o", "\u001b[?2004h"]
137 | [21.909648, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
138 | [22.398821, "o", "m"]
139 | [22.400994, "o", "\bm\u001b[90mdfmt .\u001b[39m\b\b\b\b\b\b"]
140 | [22.8472, "o", "\bm\u001b[39md"]
141 | [23.112106, "o", "\u001b[39mf"]
142 | [23.225876, "o", "\u001b[39mm"]
143 | [23.313836, "o", "\u001b[39mt"]
144 | [23.468922, "o", "\u001b[39m "]
145 | [24.42486, "o", "\u001b[39m*"]
146 | [24.426909, "o", "\u001b[90m.md\u001b[39m\b\b\b"]
147 | [24.709089, "o", "\u001b[39m."]
148 | [24.968196, "o", "\u001b[39mm"]
149 | [25.0819, "o", "\u001b[39md"]
150 | [25.389876, "o", "\u001b[?1l\u001b>"]
151 | [25.390061, "o", "\u001b[?2004l\r\r\n"]
152 | [25.391013, "o", "\u001b]2;mdfmt *.md\u0007\u001b]1;mdfmt\u0007"]
153 | [25.407013, "o", "# Introduction\r\n\r\n> Hello\r\n\r\n| Name | Age |\r\n| ---- | --- |\r\n| Mike | 18 |\r\n"]
154 | [25.408127, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
155 | [25.408243, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
156 | [25.437058, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
157 | [25.437243, "o", "\u001b[?1h\u001b="]
158 | [25.437355, "o", "\u001b[?2004h"]
159 | [25.463805, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
160 | [28.09758, "o", "c"]
161 | [28.099495, "o", "\bc\u001b[90mat README.md | mdfmt\u001b[39m\u001b[20D"]
162 | [28.23303, "o", "\bc\u001b[39ml\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[19D"]
163 | [28.235153, "o", "\u001b[90mear\u001b[39m\b\b\b"]
164 | [28.324971, "o", "\u001b[39me"]
165 | [28.437063, "o", "\u001b[39ma"]
166 | [28.500936, "o", "\u001b[39mr"]
167 | [28.701287, "o", "\u001b[?1l\u001b>"]
168 | [28.701434, "o", "\u001b[?2004l\r\r\n"]
169 | [28.702303, "o", "\u001b]2;clear\u0007\u001b]1;clear\u0007"]
170 | [28.704638, "o", "\u001b[H\u001b[2J"]
171 | [28.704971, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
172 | [28.705061, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007"]
173 | [28.705124, "o", "\u001b]1;..markdown-test\u0007"]
174 | [28.73409, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
175 | [28.734267, "o", "\u001b[?1h\u001b="]
176 | [28.734364, "o", "\u001b[?2004h"]
177 | [28.763103, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
178 | [29.999678, "o", "#"]
179 | [30.001722, "o", "\b#\u001b[90m File or directory as input\u001b[39m\u001b[27D"]
180 | [30.319595, "o", "\b#\u001b[39m "]
181 | [30.686254, "o", "\u001b[39mD\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[25D"]
182 | [30.972652, "o", "i"]
183 | [31.095554, "o", "s"]
184 | [31.21397, "o", "p"]
185 | [31.38924, "o", "l"]
186 | [31.559917, "o", "a"]
187 | [31.653445, "o", "y"]
188 | [31.883171, "o", " "]
189 | [32.068154, "o", "d"]
190 | [32.170213, "o", "i"]
191 | [32.273049, "o", "f"]
192 | [32.43671, "o", "f"]
193 | [33.04168, "o", "\u001b[?1l\u001b>"]
194 | [33.0421, "o", "\u001b[?2004l\r\r\n"]
195 | [33.043743, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
196 | [33.043905, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
197 | [33.075379, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
198 | [33.075513, "o", "\u001b[?1h\u001b="]
199 | [33.075622, "o", "\u001b[?2004h"]
200 | [33.100372, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
201 | [34.375925, "o", "m"]
202 | [34.378024, "o", "\bm\u001b[90mdfmt *.md\u001b[39m\u001b[9D"]
203 | [34.51388, "o", "\bm\u001b[39md"]
204 | [34.70192, "o", "\u001b[39mf"]
205 | [34.808885, "o", "\u001b[39mm"]
206 | [34.933284, "o", "\u001b[39mt"]
207 | [35.044786, "o", "\u001b[39m "]
208 | [35.379455, "o", "\u001b[39m-\u001b[39m \u001b[39m \u001b[39m \b\b\b"]
209 | [35.381341, "o", "\u001b[90mh\u001b[39m\b"]
210 | [35.53502, "o", "\u001b[39md"]
211 | [35.537922, "o", "\u001b[90m README.md\u001b[39m\u001b[10D"]
212 | [35.673226, "o", "\u001b[39m "]
213 | [35.902513, "o", "\u001b[39m.\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[8D"]
214 | [36.167484, "o", "\u001b[?1l\u001b>"]
215 | [36.167644, "o", "\u001b[?2004l\r\r\n"]
216 | [36.168619, "o", "\u001b]2;mdfmt -d .\u0007\u001b]1;mdfmt\u0007"]
217 | [36.189676, "o", "diff -u README.md.orig README.md\r\n--- README.md.orig\r\n+++ README.md\r\n\u001b[0m\u001b[36m@@ -1,6 +1,7 @@\r\n\u001b[0m # Introduction\r\n\u001b[32m+\r\n\u001b[0m > Hello\r\n \r\n\u001b[31m-|Name|Age|\r\n-|--|--|\r\n-|Mike|18|\r\n\u001b[32m+| Name | Age |\r\n+| ---- | --- |\r\n+| Mike | 18 |\r\n\u001b[0m"]
218 | [36.191113, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
219 | [36.191255, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
220 | [36.222544, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
221 | [36.222696, "o", "\u001b[?1h\u001b="]
222 | [36.222808, "o", "\u001b[?2004h"]
223 | [36.248368, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
224 | [38.298614, "o", "#"]
225 | [38.300375, "o", "\b#\u001b[90m Display diff\u001b[39m\u001b[13D"]
226 | [38.935732, "o", "\b#\u001b[39m "]
227 | [39.26333, "o", "\u001b[39mL\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[11D"]
228 | [39.436685, "o", "i"]
229 | [39.526408, "o", "s"]
230 | [39.663636, "o", "t"]
231 | [39.769224, "o", " "]
232 | [40.689646, "o", "f"]
233 | [40.793125, "o", "o"]
234 | [40.865671, "o", "r"]
235 | [40.961419, "o", "m"]
236 | [41.21731, "o", "a"]
237 | [41.346056, "o", "t"]
238 | [41.602224, "o", " "]
239 | [41.815581, "o", "f"]
240 | [41.894321, "o", "i"]
241 | [42.063009, "o", "l"]
242 | [42.210414, "o", "e"]
243 | [42.411304, "o", "s"]
244 | [42.694981, "o", "\u001b[?1l\u001b>"]
245 | [42.695159, "o", "\u001b[?2004l\r\r\n"]
246 | [42.696103, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
247 | [42.696247, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
248 | [42.729325, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
249 | [42.729469, "o", "\u001b[?1h\u001b="]
250 | [42.72957, "o", "\u001b[?2004h"]
251 | [42.756097, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
252 | [43.513068, "o", "m"]
253 | [43.515288, "o", "\bm\u001b[90mdfmt -d .\u001b[39m\u001b[9D"]
254 | [43.857031, "o", "\bm\u001b[39md"]
255 | [44.141545, "o", "\u001b[39mf"]
256 | [44.259076, "o", "\u001b[39mm"]
257 | [44.375808, "o", "\u001b[39mt"]
258 | [44.521141, "o", "\u001b[39m "]
259 | [44.804414, "o", "\u001b[39m-"]
260 | [45.017017, "o", "\u001b[39ml\u001b[39m \u001b[39m \b\b"]
261 | [45.018347, "o", "\u001b[90m README.md\u001b[39m\u001b[10D"]
262 | [45.188699, "o", "\u001b[39m "]
263 | [45.311699, "o", "\u001b[39m.\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[8D"]
264 | [45.945435, "o", "\u001b[?1l\u001b>"]
265 | [45.945665, "o", "\u001b[?2004l\r\r\n"]
266 | [45.947101, "o", "\u001b]2;mdfmt -l .\u0007\u001b]1;mdfmt\u0007"]
267 | [45.964821, "o", "README.md\r\n"]
268 | [45.965944, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
269 | [45.966089, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007"]
270 | [45.966207, "o", "\u001b]1;..markdown-test\u0007"]
271 | [45.997159, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
272 | [45.997317, "o", "\u001b[?1h\u001b="]
273 | [45.997408, "o", "\u001b[?2004h"]
274 | [46.023133, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
275 | [47.639847, "o", "#"]
276 | [47.641903, "o", "\b#\u001b[90m List format files\u001b[39m\u001b[18D"]
277 | [48.180973, "o", "\b#\u001b[39m "]
278 | [49.193276, "o", "\u001b[39mF\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[16D"]
279 | [49.195172, "o", "\u001b[90mile or directory as input\u001b[39m\u001b[25D"]
280 | [49.417069, "o", "\u001b[39mo\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[24D"]
281 | [49.54523, "o", "r"]
282 | [49.67352, "o", "m"]
283 | [49.843927, "o", "a"]
284 | [49.956151, "o", "t"]
285 | [50.527125, "o", " "]
286 | [51.263172, "o", "&"]
287 | [51.469537, "o", " "]
288 | [51.695754, "o", "w"]
289 | [51.84694, "o", "r"]
290 | [52.011485, "o", "i"]
291 | [52.106239, "o", "t"]
292 | [52.19622, "o", "e"]
293 | [52.327113, "o", " "]
294 | [52.470572, "o", "f"]
295 | [52.547099, "o", "i"]
296 | [52.695049, "o", "l"]
297 | [52.778815, "o", "e"]
298 | [52.931518, "o", "s"]
299 | [53.11667, "o", "\u001b[?1l\u001b>"]
300 | [53.116819, "o", "\u001b[?2004l\r\r\n"]
301 | [53.117617, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
302 | [53.117726, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
303 | [53.145074, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
304 | [53.145203, "o", "\u001b[?1h\u001b="]
305 | [53.145232, "o", "\u001b[?2004h"]
306 | [53.173755, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
307 | [54.374273, "o", "m"]
308 | [54.376125, "o", "\bm\u001b[90mdfmt -l .\u001b[39m\u001b[9D"]
309 | [54.64959, "o", "\bm\u001b[39md"]
310 | [54.901649, "o", "\u001b[39mf"]
311 | [54.989825, "o", "\u001b[39mm"]
312 | [55.15392, "o", "\u001b[39mt"]
313 | [55.815571, "o", "\u001b[39m "]
314 | [56.225022, "o", "\u001b[39m-"]
315 | [56.392, "o", "\u001b[39mw\u001b[39m \u001b[39m \b\b"]
316 | [56.393967, "o", "\u001b[90m README.md\u001b[39m\u001b[10D"]
317 | [56.561152, "o", "\u001b[39m "]
318 | [56.755547, "o", "\u001b[39m.\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[8D"]
319 | [57.09285, "o", "\u001b[?1l\u001b>"]
320 | [57.093021, "o", "\u001b[?2004l\r\r\n"]
321 | [57.094025, "o", "\u001b]2;mdfmt -w .\u0007\u001b]1;mdfmt\u0007"]
322 | [57.109316, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
323 | [57.109467, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007\u001b]1;..markdown-test\u0007"]
324 | [57.13801, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[32m\u001b[1m\u001b[32m✔ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
325 | [57.138234, "o", "\u001b[?1h\u001b="]
326 | [57.138342, "o", "\u001b[?2004h"]
327 | [57.168231, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[33m\u001b[1m\u001b[33m✗ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
328 | [58.669959, "o", "g"]
329 | [58.672437, "o", "\bg\u001b[90mst\u001b[39m\b\b"]
330 | [58.751055, "o", "\bg\u001b[39mi\u001b[39m \b"]
331 | [58.75285, "o", "\u001b[90mt reset --hard HEAD\u001b[39m\u001b[19D"]
332 | [58.857892, "o", "\u001b[39mt"]
333 | [58.9972, "o", "\u001b[39m "]
334 | [59.222077, "o", "\u001b[39md\u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[39m \u001b[16D"]
335 | [59.224241, "o", "\u001b[90miff\u001b[39m\b\b\b"]
336 | [59.327178, "o", "\u001b[39mi"]
337 | [59.415703, "o", "\u001b[39mf"]
338 | [59.565236, "o", "\u001b[39mf"]
339 | [60.016693, "o", "\u001b[?1l\u001b>"]
340 | [60.016956, "o", "\u001b[?2004l\r\r\n"]
341 | [60.018068, "o", "\u001b]2;git diff\u0007\u001b]1;git\u0007"]
342 | [60.044351, "o", "\u001b[?1049h\u001b[?1h\u001b=\r"]
343 | [60.044554, "o", "\u001b[1mdiff --git a/README.md b/README.md\u001b[m\u001b[m\r\n\u001b[1mindex 8271e96..fc8c3ab 100644\u001b[m\u001b[m\r\n\u001b[1m--- a/README.md\u001b[m\u001b[m\r\n\u001b[1m+++ b/README.md\u001b[m\u001b[m\r\n\u001b[36m@@ -1,6 +1,7 @@\u001b[m\u001b[m\r\n # Introduction\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m\u001b[m\r\n > Hello\u001b[m\u001b[m\r\n \u001b[m\u001b[m\r\n\u001b[31m-|Name|Age|\u001b[m\u001b[m\r\n\u001b[31m-|--|--|\u001b[m\u001b[m\r\n\u001b[31m-|Mike|18|\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m\u001b[32m| Name | Age |\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m\u001b[32m| ---- | --- |\u001b[m\u001b[m\r\n\u001b[32m+\u001b[m\u001b[32m| Mike | 18 |\u001b[m\u001b[m\r\n\u001b[7m(END)\u001b[27m\u001b[K"]
344 | [61.284777, "o", "\r\u001b[K\u001b[?1l\u001b>\u001b[?1049l"]
345 | [61.285729, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
346 | [61.285902, "o", "\u001b]2;yym@B-K3YJLVDL-1650: ~/workspace/tmp/markdown-test\u0007"]
347 | [61.286023, "o", "\u001b]1;..markdown-test\u0007"]
348 | [61.326785, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[33m\u001b[1m\u001b[33m✗ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
349 | [61.326962, "o", "\u001b[?1h\u001b=\u001b[?2004h"]
350 | [61.360414, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[32m➜\u001b[32m\u001b[1m\u001b[32m \u001b[35m\u001b[1m\u001b[35m\u001b[34m\u001b[1m\u001b[34mmarkdown-test \u001b[36m\u001b[1m\u001b[36m(master) \u001b[33m\u001b[1m\u001b[33m✗ \u001b[39m\u001b[0m\u001b[39m\u001b[0m\u001b[K"]
351 | [63.270139, "o", "\u001b[?2004l\r\r\n"]
352 |
--------------------------------------------------------------------------------
/assets/demo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/elliotxx/mdfmt/60cee97ffa176f6a98796d0ba3ce2ad1751b4853/assets/demo.jpg
--------------------------------------------------------------------------------
/cmd/mdfmt/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "io/fs"
6 | "os"
7 | "path/filepath"
8 |
9 | "github.com/elliotxx/mdfmt/pkg/md"
10 | "github.com/elliotxx/mdfmt/pkg/merrors"
11 | "github.com/elliotxx/mdfmt/pkg/version"
12 | "github.com/sirupsen/logrus"
13 | "github.com/spf13/cobra"
14 | "k8s.io/kubectl/pkg/util/i18n"
15 | "k8s.io/kubectl/pkg/util/templates"
16 | )
17 |
18 | var (
19 | cmdShort = i18n.T(`A Markdown formatter that follow the CommonMark`)
20 | cmdLong = templates.LongDesc(i18n.T(`A Markdown formatter that follow the CommonMark. Like gofmt, but for Markdown.`))
21 | cmdExample = templates.Examples(i18n.T(`
22 | # Format specified Markdown file, and write to stdout
23 | mdfmt README.md
24 |
25 | # Format and rewrite for specified Markdown file
26 | mdfmt -w README.md
27 |
28 | # Display diffs instead of rewriting Markdown files
29 | mdfmt -d README.md
30 |
31 | # List files whose formatting differs from mdfmt's
32 | mdfmt -l .
33 |
34 | # Format, rewrite, and display diffs for specified Markdown file
35 | mdfmt -d -w README.md
36 |
37 | # Format and rewrite all Markdown file in current directory
38 | mdfmt -w *.md
39 |
40 | # Recursive format and rewrite all Markdown file in current directory
41 | mdfmt -w .
42 |
43 | # Format and rewrite the specified Markdown file and directory
44 | mdfmt -w README.md testdir/
45 |
46 | # Format stdin to stdout
47 | cat README.md | mdfmt
48 |
49 | # Show version info
50 | mdfmt -V
51 | `))
52 | )
53 |
54 | func configureCLI() *cobra.Command {
55 | o := NewOptions()
56 | rootCmd := &cobra.Command{
57 | Use: "mdfmt [flags] [path ...]",
58 | Short: cmdShort,
59 | Long: cmdLong,
60 | Example: cmdExample,
61 | SilenceUsage: true,
62 | SilenceErrors: true,
63 | RunE: func(_ *cobra.Command, args []string) (err error) {
64 | // Show version info
65 | if o.ShowVersion {
66 | fmt.Println(version.YAML())
67 | return nil
68 | }
69 |
70 | // Verbose logging
71 | if o.Verbose {
72 | // init logger
73 | logrus.SetLevel(logrus.TraceLevel)
74 | }
75 |
76 | // Process input
77 | if len(args) == 0 {
78 | // Stdin
79 | err = md.FormatMarkdown(os.Stdin, os.Stdout)
80 | return err
81 | }
82 | for _, p := range args {
83 | // File or directory
84 | err = filepath.WalkDir(p, func(path string, d fs.DirEntry, _ error) (err2 error) {
85 | defer func() {
86 | if err2 != nil {
87 | // Ignore error in WalkDir, as debug information
88 | if cerr, ok := err2.(merrors.CrashError); ok {
89 | logrus.Debug(cerr.ErrorWithStack())
90 | } else {
91 | logrus.Debug(err2.Error())
92 | }
93 | err2 = nil
94 | }
95 | }()
96 |
97 | if d != nil && !d.IsDir() && md.IsMarkdownFile(path) {
98 | err2 = ProcessMDFile(path, o.Write, o.Diff, o.List)
99 | }
100 | return
101 | })
102 | if err != nil {
103 | return err
104 | }
105 | }
106 |
107 | return nil
108 | },
109 | }
110 |
111 | rootCmd.Flags().BoolVarP(&o.ShowVersion, "version", "V", false, "show version info")
112 | rootCmd.Flags().BoolVarP(&o.Write, "write", "w", false, "write result to (source) file instead of stdout")
113 | rootCmd.Flags().BoolVarP(&o.Diff, "diff", "d", false, "display diffs instead of rewriting files")
114 | rootCmd.Flags().BoolVarP(&o.List, "list", "l", false, "list files whose formatting differs from mdfmt's")
115 | rootCmd.Flags().BoolVarP(&o.Verbose, "verbose", "v", false, "verbose logging")
116 |
117 | return rootCmd
118 | }
119 |
120 | func main() {
121 | // init rootCmd
122 | rootCmd := configureCLI()
123 | if err := rootCmd.Execute(); err != nil {
124 | logrus.Error(err)
125 | os.Exit(1)
126 | }
127 |
128 | os.Exit(0)
129 | }
130 |
--------------------------------------------------------------------------------
/cmd/mdfmt/options.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "bytes"
5 | "fmt"
6 | "os"
7 | "path/filepath"
8 |
9 | "github.com/elliotxx/mdfmt/pkg/md"
10 | "github.com/pkg/diff"
11 | "github.com/pkg/diff/write"
12 | )
13 |
14 | // fdSem guards the number of concurrently-open file descriptors.
15 | //
16 | // For now, this is arbitrarily set to 200, based on the observation that many
17 | // platforms default to a kernel limit of 256. Ideally, perhaps we should derive
18 | // it from rlimit on platforms that support that system call.
19 | //
20 | // File descriptors opened from outside of this package are not tracked,
21 | // so this limit may be approximate.
22 | var fdSem = make(chan bool, 200)
23 |
24 | type Options struct {
25 | ShowVersion bool
26 | Write bool
27 | Diff bool
28 | List bool
29 | Verbose bool
30 | }
31 |
32 | // NewOptions returns a new Options instance
33 | func NewOptions() *Options {
34 | return &Options{}
35 | }
36 |
37 | // ProcessMDFile formats markdown file.
38 | func ProcessMDFile(filePath string, write, diff, list bool) error {
39 | // Get Reader and Source
40 | source, err := os.ReadFile(filePath)
41 | if err != nil {
42 | return err
43 | }
44 |
45 | in := bytes.NewReader(source)
46 |
47 | // Get Writer and Target
48 | out := bytes.NewBuffer([]byte{})
49 |
50 | err = md.FormatMarkdown(in, out)
51 | if err != nil {
52 | return err
53 | }
54 |
55 | target := out.Bytes()
56 |
57 | if !bytes.Equal(source, target) {
58 | // List
59 | if list {
60 | os.Stdout.WriteString(filePath + "\n")
61 | }
62 | // Write
63 | if write {
64 | info, err := os.Stat(filePath)
65 | if err != nil {
66 | return err
67 | }
68 |
69 | fdSem <- true
70 |
71 | err = os.WriteFile(filePath, target, info.Mode().Perm())
72 |
73 | <-fdSem
74 |
75 | if err != nil {
76 | return err
77 | }
78 | }
79 |
80 | // Diff
81 | if diff {
82 | data, err := diffWithReplaceTempFile(source, target, filePath)
83 | if err != nil {
84 | return fmt.Errorf("computing diff: %s", err)
85 | }
86 |
87 | fmt.Fprintf(os.Stdout, "diff -u %s %s\n", filepath.ToSlash(filePath+".orig"), filepath.ToSlash(filePath))
88 | os.Stdout.Write(data)
89 | }
90 | }
91 |
92 | if !write && !diff && !list {
93 | _, err = os.Stdout.Write(target)
94 | }
95 |
96 | return err
97 | }
98 |
99 | func diffWithReplaceTempFile(b1, b2 []byte, filename string) ([]byte, error) {
100 | data := bytes.NewBufferString("")
101 | err := diff.Text("origin", "target", b1, b2, data, write.TerminalColor())
102 |
103 | if len(data.Bytes()) > 0 {
104 | return replaceTempFilename(data.Bytes(), filename)
105 | }
106 |
107 | return data.Bytes(), err
108 | }
109 |
110 | // replaceTempFilename replaces temporary filenames in diff with actual one.
111 | //
112 | // --- /tmp/gofmt316145376 2017-02-03 19:13:00.280468375 -0500
113 | // +++ /tmp/gofmt617882815 2017-02-03 19:13:00.280468375 -0500
114 | // ...
115 | // ->
116 | // --- path/to/file.md.orig 2017-02-03 19:13:00.280468375 -0500
117 | // +++ path/to/file.md 2017-02-03 19:13:00.280468375 -0500
118 | // ...
119 | func replaceTempFilename(diff []byte, filename string) ([]byte, error) {
120 | bs := bytes.SplitN(diff, []byte{'\n'}, 3)
121 | if len(bs) < 3 {
122 | return nil, fmt.Errorf("got unexpected diff for %s", filename)
123 | }
124 | // Preserve timestamps.
125 | var t0, t1 []byte
126 | if i := bytes.LastIndexByte(bs[0], '\t'); i != -1 {
127 | t0 = bs[0][i:]
128 | }
129 |
130 | if i := bytes.LastIndexByte(bs[1], '\t'); i != -1 {
131 | t1 = bs[1][i:]
132 | }
133 |
134 | // Always print filepath with slash separator.
135 | f := filepath.ToSlash(filename)
136 | bs[0] = []byte(fmt.Sprintf("--- %s%s", f+".orig", t0))
137 | bs[1] = []byte(fmt.Sprintf("+++ %s%s", f, t1))
138 |
139 | return bytes.Join(bs, []byte{'\n'}), nil
140 | }
141 |
--------------------------------------------------------------------------------
/cmd/mdfmt/options_test.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "os"
5 | "testing"
6 | )
7 |
8 | func TestProcessMDFile(t *testing.T) {
9 | mockMDFile := "./testdata/hello-temp.md"
10 | _ = os.WriteFile(mockMDFile, []byte("# Hello World"), 0644)
11 |
12 | defer os.Remove(mockMDFile)
13 |
14 | type args struct {
15 | filePath string
16 | write bool
17 | diff bool
18 | list bool
19 | }
20 |
21 | tests := []struct {
22 | name string
23 | args args
24 | wantErr bool
25 | }{
26 | {
27 | name: "happy-path",
28 | args: args{
29 | filePath: "./testdata/hello.md",
30 | write: false,
31 | diff: false,
32 | list: false,
33 | },
34 | wantErr: false,
35 | },
36 | {
37 | name: "md-file-not-exist",
38 | args: args{
39 | filePath: "./testdata/hello-not-exist.md",
40 | write: true,
41 | diff: false,
42 | list: false,
43 | },
44 | wantErr: true,
45 | },
46 | {
47 | name: "diff",
48 | args: args{
49 | filePath: "./testdata/hello.md",
50 | write: false,
51 | diff: true,
52 | list: false,
53 | },
54 | wantErr: false,
55 | },
56 | {
57 | name: "write",
58 | args: args{
59 | filePath: mockMDFile,
60 | write: true,
61 | diff: false,
62 | list: false,
63 | },
64 | wantErr: false,
65 | },
66 | {
67 | name: "list",
68 | args: args{
69 | filePath: "./testdata/hello.md",
70 | write: false,
71 | diff: false,
72 | list: true,
73 | },
74 | wantErr: false,
75 | },
76 | }
77 | for _, tt := range tests {
78 | t.Run(tt.name, func(t *testing.T) {
79 | if err := ProcessMDFile(tt.args.filePath, tt.args.write, tt.args.diff, tt.args.list); (err != nil) != tt.wantErr {
80 | t.Errorf("ProcessMDFile() error = %v, wantErr %v", err, tt.wantErr)
81 | }
82 | })
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/go.mk:
--------------------------------------------------------------------------------
1 | # go.mk is a Go project general Makefile, encapsulated some common Target.
2 | # Project repository: https://github.com/elliotxx/go-makefile
3 |
4 | APPROOT ?= $(shell basename $(PWD))
5 | GOPKG ?= $(shell go list 2>/dev/null)
6 | GOPKGS ?= $(shell go list ./... 2>/dev/null)
7 | GOSOURCES ?= $(shell find . -type f -name '*.go' ! -path '*Godeps/_workspace*')
8 | # You can also customize GOSOURCE_PATHS, e.g. ./pkg/... ./cmd/...
9 | GOSOURCE_PATHS ?= ././...
10 | COVERAGEOUT ?= coverage.out
11 | COVERAGETMP ?= coverage.tmp
12 |
13 |
14 | # Go tools
15 | GOFORMATER ?= gofumpt
16 | GOFORMATER_VERSION ?= v0.2.0
17 | GOLINTER ?= golangci-lint
18 | GOLINTER_VERSION ?= v1.41.0
19 |
20 |
21 | # To generate help information
22 | .DEFAULT_GOAL := help
23 | .PHONY: help
24 | help: ## This help message :)
25 | @grep -E '^[a-zA-Z_-]+:.*?## .*$$' go.mk | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
26 | @grep -E '^[a-zA-Z_-]+:.*?## .*$$' Makefile | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
27 |
28 |
29 | # If you encounter an error like "panic: permission denied" on MacOS,
30 | # please visit https://github.com/eisenxp/macos-golink-wrapper to find the solution.
31 | .PHONY: test
32 | test: ## Run the tests
33 | go test -gcflags=all=-l -timeout=10m `go list $(GOSOURCE_PATHS)` ${TEST_FLAGS}
34 |
35 | .PHONY: cover
36 | cover: ## Generates coverage report
37 | go test -gcflags=all=-l -timeout=10m `go list $(GOSOURCE_PATHS)` -coverprofile $(COVERAGEOUT) ${TEST_FLAGS}
38 |
39 | .PHONY: cover-html
40 | cover-html: ## Generates coverage report and displays it in the browser
41 | go tool cover -html=$(COVERAGEOUT)
42 |
43 | .PHONY: format
44 | format: ## Format source code
45 | @which $(GOFORMATER) > /dev/null || (echo "Installing $(GOFORMATER)@$(GOFORMATER_VERSION) ..."; go install mvdan.cc/gofumpt@$(GOFORMATER_VERSION) && echo -e "Installation complete!\n")
46 | @for path in $(GOSOURCE_PATHS); do ${GOFORMATER} -l -w -e `echo $${path} | cut -b 3- | rev | cut -b 5- | rev`; done;
47 |
48 | .PHONY: lint
49 | lint: ## Lint, will not fix but sets exit code on error
50 | @which $(GOLINTER) > /dev/null || (echo "Installing $(GOLINTER)@$(GOLINTER_VERSION) ..."; go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLINTER_VERSION) && echo -e "Installation complete!\n")
51 | $(GOLINTER) run --deadline=10m $(GOSOURCE_PATHS)
52 |
53 | .PHONY: lint-fix
54 | lint-fix: ## Lint, will try to fix errors and modify code
55 | @which $(GOLINTER) > /dev/null || (echo "Installing $(GOLINTER)@$(GOLINTER_VERSION) ..."; go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLINTER_VERSION) && echo -e "Installation complete!\n")
56 | $(GOLINTER) run --deadline=10m $(GOSOURCE_PATHS) --fix
57 |
58 | .PHONY: doc
59 | doc: ## Start the documentation server with godoc
60 | @which godoc > /dev/null || (echo "Installing godoc@latest ..."; go install golang.org/x/tools/cmd/godoc@latest && echo -e "Installation complete!\n")
61 | godoc -http=:6060
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/elliotxx/mdfmt
2 |
3 | go 1.17
4 |
5 | require (
6 | github.com/88250/lute v1.7.3
7 | github.com/elliotxx/gulu v0.3.0
8 | github.com/hashicorp/go-version v1.3.0
9 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e
10 | github.com/sirupsen/logrus v1.8.1
11 | github.com/spf13/cobra v1.2.1
12 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
13 | k8s.io/kubectl v0.22.4
14 | )
15 |
16 | require (
17 | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
18 | github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect
19 | github.com/alecthomas/chroma v0.10.0 // indirect
20 | github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect
21 | github.com/davecgh/go-spew v1.1.1 // indirect
22 | github.com/dlclark/regexp2 v1.4.0 // indirect
23 | github.com/go-logr/logr v1.2.2 // indirect
24 | github.com/gogo/protobuf v1.3.2 // indirect
25 | github.com/golang/protobuf v1.5.2 // indirect
26 | github.com/google/go-cmp v0.5.6 // indirect
27 | github.com/google/gofuzz v1.1.0 // indirect
28 | github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd // indirect
29 | github.com/inconshreveable/mousetrap v1.0.0 // indirect
30 | github.com/json-iterator/go v1.1.11 // indirect
31 | github.com/mitchellh/go-wordwrap v1.0.0 // indirect
32 | github.com/moby/spdystream v0.2.0 // indirect
33 | github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 // indirect
34 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
35 | github.com/modern-go/reflect2 v1.0.1 // indirect
36 | github.com/russross/blackfriday v1.5.2 // indirect
37 | github.com/spf13/pflag v1.0.5 // indirect
38 | golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 // indirect
39 | golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 // indirect
40 | golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7 // indirect
41 | golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d // indirect
42 | golang.org/x/text v0.3.7 // indirect
43 | golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
44 | google.golang.org/appengine v1.6.7 // indirect
45 | google.golang.org/protobuf v1.26.0 // indirect
46 | gopkg.in/inf.v0 v0.9.1 // indirect
47 | gopkg.in/yaml.v2 v2.4.0 // indirect
48 | k8s.io/api v0.22.4 // indirect
49 | k8s.io/apimachinery v0.22.4 // indirect
50 | k8s.io/client-go v0.22.4 // indirect
51 | k8s.io/klog/v2 v2.30.0 // indirect
52 | k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a // indirect
53 | sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
54 | sigs.k8s.io/yaml v1.2.0 // indirect
55 | )
56 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | bou.ke/monkey v1.0.2 h1:kWcnsrCNUatbxncxR/ThdYqbytgOIArtYWqcQLQzKLI=
2 | bou.ke/monkey v1.0.2/go.mod h1:OqickVX3tNx6t33n1xvtTtu85YN5s6cKwVug+oHMaIA=
3 | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
4 | cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
5 | cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
6 | cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
7 | cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
8 | cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
9 | cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
10 | cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
11 | cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
12 | cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
13 | cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
14 | cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
15 | cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
16 | cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
17 | cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
18 | cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
19 | cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
20 | cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
21 | cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
22 | cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
23 | cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
24 | cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
25 | cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
26 | cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
27 | cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
28 | cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
29 | cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
30 | cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
31 | cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
32 | cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
33 | cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
34 | cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
35 | cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
36 | cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
37 | cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
38 | cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
39 | cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
40 | cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
41 | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
42 | github.com/88250/lute v1.7.3 h1:Yuve6dTAZNjWktXpHK14PND4KaBwqVxVi3L+GZa3+HQ=
43 | github.com/88250/lute v1.7.3/go.mod h1:3CPco034YZBxszJEqBPNgp3a1K+uddq4IegStqBiyTM=
44 | github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
45 | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
46 | github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
47 | github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
48 | github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA=
49 | github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M=
50 | github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
51 | github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
52 | github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
53 | github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
54 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
55 | github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
56 | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
57 | github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
58 | github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
59 | github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
60 | github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
61 | github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
62 | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
63 | github.com/alecthomas/assert v0.0.0-20170929043011-405dbfeb8e38/go.mod h1:r7bzyVFMNntcxPZXK3/+KdruV1H5KSlyVY0gc+NgInI=
64 | github.com/alecthomas/chroma v0.9.2/go.mod h1:eMuEnpA18XbG/WhOWtCzJHS7WqEtDAI+HxdwoW0nVSk=
65 | github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek=
66 | github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s=
67 | github.com/alecthomas/colour v0.0.0-20160524082231-60882d9e2721/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0=
68 | github.com/alecthomas/colour v0.1.0/go.mod h1:QO9JBoKquHd+jz9nshCh40fOfO+JzsoXy8qTHF68zU0=
69 | github.com/alecthomas/kong v0.2.4/go.mod h1:kQOmtJgV+Lb4aj+I2LEn40cbtawdWJ9Y8QLq+lElKxE=
70 | github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
71 | github.com/alecthomas/repr v0.0.0-20200325044227-4184120f674c/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ=
72 | github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
73 | github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
74 | github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
75 | github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
76 | github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
77 | github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
78 | github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
79 | github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
80 | github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
81 | github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
82 | github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
83 | github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
84 | github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
85 | github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
86 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
87 | github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
88 | github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
89 | github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
90 | github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
91 | github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
92 | github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
93 | github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
94 | github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8=
95 | github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw=
96 | github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
97 | github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
98 | github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
99 | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
100 | github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
101 | github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
102 | github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
103 | github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
104 | github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
105 | github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
106 | github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
107 | github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
108 | github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
109 | github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
110 | github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
111 | github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
112 | github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
113 | github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
114 | github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
115 | github.com/danwakefield/fnmatch v0.0.0-20160403171240-cbb64ac3d964/go.mod h1:Xd9hchkHSWYkEqJwUGisez3G1QY8Ryz0sdWrLPMGjLk=
116 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
117 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
118 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
119 | github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE=
120 | github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
121 | github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
122 | github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E=
123 | github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc=
124 | github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
125 | github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
126 | github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc=
127 | github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
128 | github.com/elliotxx/gulu v0.3.0 h1:MJY41YzXrN3R0xTGU9tQyqPNjzxvCekG01N2skCJw3I=
129 | github.com/elliotxx/gulu v0.3.0/go.mod h1:agpFfRh6SalxnrmXo+WqVotkpSHwU++EHfDHZf2y/P8=
130 | github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
131 | github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
132 | github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
133 | github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
134 | github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
135 | github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
136 | github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
137 | github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
138 | github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
139 | github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
140 | github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
141 | github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
142 | github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
143 | github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
144 | github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
145 | github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
146 | github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
147 | github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
148 | github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
149 | github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
150 | github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
151 | github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
152 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
153 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
154 | github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
155 | github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
156 | github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
157 | github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
158 | github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
159 | github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
160 | github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
161 | github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
162 | github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
163 | github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
164 | github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs=
165 | github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
166 | github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
167 | github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
168 | github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
169 | github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg=
170 | github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
171 | github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
172 | github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
173 | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
174 | github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
175 | github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
176 | github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
177 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
178 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
179 | github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
180 | github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
181 | github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
182 | github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
183 | github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
184 | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
185 | github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
186 | github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
187 | github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
188 | github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
189 | github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
190 | github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
191 | github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
192 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
193 | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
194 | github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
195 | github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
196 | github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
197 | github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
198 | github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
199 | github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
200 | github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
201 | github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
202 | github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
203 | github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
204 | github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
205 | github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
206 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
207 | github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
208 | github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
209 | github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
210 | github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk=
211 | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
212 | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
213 | github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
214 | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
215 | github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
216 | github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
217 | github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
218 | github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
219 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
220 | github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
221 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
222 | github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
223 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
224 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
225 | github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
226 | github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
227 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
228 | github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
229 | github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
230 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
231 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
232 | github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
233 | github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
234 | github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
235 | github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
236 | github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
237 | github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
238 | github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
239 | github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
240 | github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
241 | github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
242 | github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
243 | github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
244 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
245 | github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
246 | github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
247 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
248 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
249 | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
250 | github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
251 | github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA=
252 | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
253 | github.com/gopherjs/gopherjs v0.0.0-20210619142842-05447a1fa367/go.mod h1:MtKwTfDNYAP5EtbQSMYjTSqvj1aXJKQRASWq3bwaP+g=
254 | github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd h1:D/H64OK+VY7O0guGbCQaFKwAZlU5t764R++kgIdAGog=
255 | github.com/gopherjs/gopherjs v0.0.0-20220104163920-15ed2e8cf2bd/go.mod h1:cz9oNYuRUWGdHmLF2IodMLkAhcPtXeULvcBNagUrxTI=
256 | github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
257 | github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
258 | github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
259 | github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
260 | github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
261 | github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
262 | github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
263 | github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
264 | github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
265 | github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
266 | github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
267 | github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
268 | github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
269 | github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
270 | github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
271 | github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
272 | github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
273 | github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
274 | github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
275 | github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw=
276 | github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
277 | github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
278 | github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
279 | github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
280 | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
281 | github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
282 | github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
283 | github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
284 | github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
285 | github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
286 | github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
287 | github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
288 | github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
289 | github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
290 | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
291 | github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
292 | github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
293 | github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
294 | github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
295 | github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
296 | github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
297 | github.com/json-iterator/go v1.1.11 h1:uVUAXhF2To8cbw/3xN3pxj6kk7TYKs98NIrTqPlMWAQ=
298 | github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
299 | github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
300 | github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
301 | github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
302 | github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
303 | github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
304 | github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
305 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
306 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
307 | github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
308 | github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
309 | github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
310 | github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
311 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
312 | github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
313 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
314 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
315 | github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
316 | github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
317 | github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
318 | github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
319 | github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
320 | github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
321 | github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
322 | github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
323 | github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
324 | github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
325 | github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
326 | github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
327 | github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
328 | github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
329 | github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
330 | github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
331 | github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
332 | github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
333 | github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
334 | github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
335 | github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
336 | github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
337 | github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
338 | github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4=
339 | github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo=
340 | github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
341 | github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
342 | github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
343 | github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
344 | github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
345 | github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
346 | github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
347 | github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0=
348 | github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A=
349 | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
350 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
351 | github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
352 | github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
353 | github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
354 | github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
355 | github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
356 | github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
357 | github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
358 | github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
359 | github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
360 | github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
361 | github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
362 | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
363 | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
364 | github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
365 | github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
366 | github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
367 | github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
368 | github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
369 | github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
370 | github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
371 | github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
372 | github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
373 | github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
374 | github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
375 | github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
376 | github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
377 | github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
378 | github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
379 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
380 | github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
381 | github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
382 | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
383 | github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
384 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
385 | github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
386 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
387 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
388 | github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
389 | github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
390 | github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
391 | github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
392 | github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
393 | github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
394 | github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
395 | github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
396 | github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
397 | github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
398 | github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
399 | github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
400 | github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
401 | github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
402 | github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
403 | github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
404 | github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
405 | github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
406 | github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
407 | github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
408 | github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
409 | github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
410 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
411 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
412 | github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
413 | github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
414 | github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
415 | github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
416 | github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
417 | github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
418 | github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
419 | github.com/shurcooL/go v0.0.0-20200502201357-93f07166e636/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk=
420 | github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
421 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
422 | github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw=
423 | github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
424 | github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
425 | github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
426 | github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
427 | github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
428 | github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
429 | github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
430 | github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
431 | github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
432 | github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
433 | github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
434 | github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
435 | github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
436 | github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
437 | github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
438 | github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
439 | github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw=
440 | github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
441 | github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
442 | github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
443 | github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
444 | github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
445 | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
446 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
447 | github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
448 | github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
449 | github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
450 | github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
451 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
452 | github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
453 | github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
454 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
455 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
456 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
457 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
458 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
459 | github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
460 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
461 | github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
462 | github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
463 | github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
464 | github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
465 | github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
466 | github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
467 | github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
468 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
469 | github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
470 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
471 | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
472 | go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
473 | go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
474 | go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
475 | go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
476 | go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
477 | go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
478 | go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
479 | go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
480 | go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
481 | go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
482 | go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
483 | go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
484 | go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
485 | go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
486 | go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
487 | go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
488 | go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
489 | go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
490 | go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
491 | go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
492 | go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
493 | go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
494 | go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
495 | go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
496 | go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
497 | go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
498 | go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
499 | go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
500 | go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
501 | golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
502 | golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
503 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
504 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
505 | golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
506 | golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
507 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
508 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
509 | golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
510 | golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
511 | golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
512 | golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
513 | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
514 | golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
515 | golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
516 | golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
517 | golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
518 | golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
519 | golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
520 | golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
521 | golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
522 | golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
523 | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
524 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
525 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
526 | golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
527 | golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
528 | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
529 | golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
530 | golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
531 | golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
532 | golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
533 | golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
534 | golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
535 | golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
536 | golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
537 | golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
538 | golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
539 | golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
540 | golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
541 | golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
542 | golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
543 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
544 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
545 | golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
546 | golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
547 | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
548 | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
549 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
550 | golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
551 | golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
552 | golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
553 | golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
554 | golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
555 | golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
556 | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
557 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
558 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
559 | golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
560 | golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
561 | golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
562 | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
563 | golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
564 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
565 | golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
566 | golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
567 | golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
568 | golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
569 | golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
570 | golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
571 | golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
572 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
573 | golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
574 | golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
575 | golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
576 | golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
577 | golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
578 | golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
579 | golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
580 | golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
581 | golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
582 | golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
583 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
584 | golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
585 | golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
586 | golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
587 | golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
588 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
589 | golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
590 | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
591 | golang.org/x/net v0.0.0-20210520170846-37e1c6afe023 h1:ADo5wSpq2gqaCGQWzk7S5vd//0iyyLeAratkEoG5dLE=
592 | golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
593 | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
594 | golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
595 | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
596 | golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
597 | golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
598 | golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
599 | golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
600 | golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
601 | golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
602 | golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
603 | golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
604 | golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=
605 | golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
606 | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
607 | golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
608 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
609 | golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
610 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
611 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
612 | golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
613 | golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
614 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
615 | golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
616 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
617 | golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
618 | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
619 | golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
620 | golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
621 | golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
622 | golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
623 | golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
624 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
625 | golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
626 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
627 | golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
628 | golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
629 | golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
630 | golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
631 | golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
632 | golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
633 | golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
634 | golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
635 | golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
636 | golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
637 | golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
638 | golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
639 | golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
640 | golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
641 | golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
642 | golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
643 | golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
644 | golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
645 | golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
646 | golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
647 | golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
648 | golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
649 | golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
650 | golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
651 | golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
652 | golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
653 | golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
654 | golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
655 | golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
656 | golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
657 | golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
658 | golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
659 | golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
660 | golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
661 | golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
662 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
663 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
664 | golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
665 | golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
666 | golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
667 | golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
668 | golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
669 | golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
670 | golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
671 | golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
672 | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
673 | golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
674 | golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
675 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
676 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
677 | golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
678 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
679 | golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
680 | golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
681 | golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7 h1:BXxu8t6QN0G1uff4bzZzSkpsax8+ALqTGUtz08QrV00=
682 | golang.org/x/sys v0.0.0-20220224120231-95c6836cb0e7/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
683 | golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
684 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
685 | golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE=
686 | golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
687 | golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
688 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
689 | golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
690 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
691 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
692 | golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
693 | golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
694 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
695 | golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk=
696 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
697 | golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
698 | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
699 | golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
700 | golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs=
701 | golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
702 | golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
703 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
704 | golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
705 | golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
706 | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
707 | golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
708 | golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
709 | golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
710 | golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
711 | golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
712 | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
713 | golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
714 | golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
715 | golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
716 | golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
717 | golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
718 | golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
719 | golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
720 | golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
721 | golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
722 | golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
723 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
724 | golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
725 | golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
726 | golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
727 | golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
728 | golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
729 | golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
730 | golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
731 | golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
732 | golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
733 | golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
734 | golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
735 | golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
736 | golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
737 | golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
738 | golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
739 | golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
740 | golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
741 | golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
742 | golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
743 | golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
744 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
745 | golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
746 | golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
747 | golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
748 | golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
749 | golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
750 | golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
751 | golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
752 | golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
753 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
754 | golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
755 | golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
756 | golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
757 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
758 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
759 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
760 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
761 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
762 | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
763 | google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
764 | google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
765 | google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
766 | google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
767 | google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
768 | google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
769 | google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
770 | google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
771 | google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
772 | google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
773 | google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
774 | google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
775 | google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
776 | google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
777 | google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
778 | google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
779 | google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
780 | google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
781 | google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
782 | google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
783 | google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
784 | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
785 | google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
786 | google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
787 | google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
788 | google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
789 | google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
790 | google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
791 | google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
792 | google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
793 | google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
794 | google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
795 | google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
796 | google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
797 | google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
798 | google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
799 | google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
800 | google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
801 | google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
802 | google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
803 | google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
804 | google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
805 | google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
806 | google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
807 | google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
808 | google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
809 | google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
810 | google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
811 | google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
812 | google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
813 | google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
814 | google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
815 | google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
816 | google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
817 | google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
818 | google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
819 | google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
820 | google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
821 | google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
822 | google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
823 | google.golang.org/genproto v0.0.0-20201019141844-1ed22bb0c154/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
824 | google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
825 | google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
826 | google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
827 | google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
828 | google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
829 | google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
830 | google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
831 | google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
832 | google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
833 | google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
834 | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
835 | google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
836 | google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
837 | google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
838 | google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
839 | google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
840 | google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
841 | google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
842 | google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
843 | google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
844 | google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
845 | google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
846 | google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
847 | google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
848 | google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
849 | google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
850 | google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
851 | google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
852 | google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
853 | google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
854 | google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
855 | google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
856 | google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
857 | google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
858 | google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
859 | google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
860 | google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
861 | google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
862 | google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
863 | google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
864 | google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
865 | google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
866 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
867 | google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
868 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
869 | gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
870 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
871 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
872 | gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
873 | gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
874 | gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
875 | gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
876 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
877 | gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
878 | gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
879 | gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
880 | gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
881 | gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
882 | gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
883 | gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
884 | gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
885 | gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
886 | gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
887 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
888 | gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
889 | gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
890 | gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
891 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
892 | gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
893 | gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
894 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
895 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
896 | gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
897 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
898 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
899 | gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
900 | gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
901 | gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
902 | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
903 | honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
904 | honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
905 | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
906 | honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
907 | honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
908 | honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
909 | k8s.io/api v0.22.4 h1:UvyHW0ezB2oIgHAxlYoo6UJQObYXU7awuNarwoHEOjw=
910 | k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
911 | k8s.io/apimachinery v0.22.4 h1:9uwcvPpukBw/Ri0EUmWz+49cnFtaoiyEhQTK+xOe7Ck=
912 | k8s.io/apimachinery v0.22.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0=
913 | k8s.io/cli-runtime v0.22.4/go.mod h1:x35r0ERHXr/MrbR1C6MPJxQ3xKG6+hXi9m2xLzlMPZA=
914 | k8s.io/client-go v0.22.4 h1:aAQ1Wk+I3bjCNk35YWUqbaueqrIonkfDPJSPDDe8Kfg=
915 | k8s.io/client-go v0.22.4/go.mod h1:Yzw4e5e7h1LNHA4uqnMVrpEpUs1hJOiuBsJKIlRCHDA=
916 | k8s.io/code-generator v0.22.4/go.mod h1:qjYl54pQ/emhkT0UxbufbREYJMWsHNNV/jSVwhYZQGw=
917 | k8s.io/component-base v0.22.4/go.mod h1:MrSaQy4a3tFVViff8TZL6JHYSewNCLshZCwHYM58v5A=
918 | k8s.io/component-helpers v0.22.4/go.mod h1:A50qTyczDFbhZDifIfS2zFrHuPk9UNOWPpvNZ+3RSIs=
919 | k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
920 | k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
921 | k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
922 | k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
923 | k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
924 | k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw=
925 | k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
926 | k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
927 | k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
928 | k8s.io/kubectl v0.22.4 h1:ECUO1QWyZ70DiIKEfgBx+8i9D98uspVOwgc1APs/07w=
929 | k8s.io/kubectl v0.22.4/go.mod h1:ok2qRT6y2Gy4+y+mniJVyUMKeBHP4OWS9Rdtf/QTM5I=
930 | k8s.io/metrics v0.22.4/go.mod h1:6F/iwuYb1w2QDCoHkeMFLf4pwHBcYKLm4mPtVHKYrIw=
931 | k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a h1:8dYfu/Fc9Gz2rNJKB9IQRGgQOh2clmRzNIPPY1xLY5g=
932 | k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
933 | rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
934 | rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
935 | rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
936 | sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g=
937 | sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs=
938 | sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go=
939 | sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM=
940 | sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
941 | sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
942 | sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
943 | sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
944 | sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
945 |
--------------------------------------------------------------------------------
/pkg/md/md.go:
--------------------------------------------------------------------------------
1 | package md
2 |
3 | import (
4 | "fmt"
5 | "io"
6 | "io/ioutil"
7 | "os"
8 | "path/filepath"
9 | "runtime/debug"
10 | "strings"
11 |
12 | "github.com/88250/lute"
13 | "github.com/elliotxx/mdfmt/pkg/merrors"
14 | )
15 |
16 | // IsMarkdownFile returns true if the file is a markdown file.
17 | func IsMarkdownFile(p string) bool {
18 | fi, err := os.Stat(p)
19 | if err != nil {
20 | return false
21 | }
22 |
23 | if fi.IsDir() {
24 | return false
25 | }
26 |
27 | filename := fi.Name()
28 | ext := filepath.Ext(filename)
29 |
30 | if strings.HasPrefix(filename, ".") {
31 | return false
32 | }
33 |
34 | if ext != ".md" && ext != ".markdown" {
35 | return false
36 | }
37 |
38 | return true
39 | }
40 |
41 | // FormatMarkdown formats markdown from reader to writer.
42 | func FormatMarkdown(in io.Reader, out io.Writer) (err error) {
43 | defer func() {
44 | if r := recover(); r != nil {
45 | err = merrors.NewCrash(fmt.Errorf("%v", r), string(debug.Stack()))
46 | }
47 | }()
48 |
49 | // Read
50 | markdownContent, err := ioutil.ReadAll(in)
51 | if err != nil {
52 | return err
53 | }
54 |
55 | // Format
56 | luteEngine := lute.New(func(l *lute.Lute) {
57 | l.RenderOptions.AutoSpace = true
58 | })
59 | formatContent := luteEngine.Format("md", markdownContent)
60 |
61 | // Output
62 | _, err = out.Write(formatContent)
63 | if err != nil {
64 | return err
65 | }
66 |
67 | return nil
68 | }
69 |
--------------------------------------------------------------------------------
/pkg/md/md_test.go:
--------------------------------------------------------------------------------
1 | package md
2 |
3 | import (
4 | "bytes"
5 | "io"
6 | "strings"
7 | "testing"
8 | )
9 |
10 | func TestIsMarkdownFile(t *testing.T) {
11 | type args struct {
12 | filename string
13 | }
14 |
15 | tests := []struct {
16 | name string
17 | args args
18 | want bool
19 | }{
20 | {
21 | name: "is-markdown-file-1",
22 | args: args{
23 | filename: "./testdata/hello.md",
24 | },
25 | want: true,
26 | },
27 | {
28 | name: "is-markdown-file-2",
29 | args: args{
30 | filename: "./testdata/hello.markdown",
31 | },
32 | want: true,
33 | },
34 | {
35 | name: "is-not-markdown-file-1",
36 | args: args{
37 | filename: "./testdata/.hello.md",
38 | },
39 | want: false,
40 | },
41 | {
42 | name: "is-not-markdown-file-2",
43 | args: args{
44 | filename: "./testdata/hello.txt",
45 | },
46 | want: false,
47 | },
48 | {
49 | name: "fail-as-not-exist",
50 | args: args{
51 | filename: "./testdata/hello-fail.txt",
52 | },
53 | want: false,
54 | },
55 | {
56 | name: "fail-as-dir",
57 | args: args{
58 | filename: "./testdata/",
59 | },
60 | want: false,
61 | },
62 | }
63 |
64 | for _, tt := range tests {
65 | t.Run(tt.name, func(t *testing.T) {
66 | if got := IsMarkdownFile(tt.args.filename); got != tt.want {
67 | t.Errorf("IsMarkdownFile() = %v, want %v", got, tt.want)
68 | }
69 | })
70 | }
71 | }
72 |
73 | func TestFormatMarkdown(t *testing.T) {
74 | type args struct {
75 | in io.Reader
76 | }
77 |
78 | tests := []struct {
79 | name string
80 | args args
81 | wantOut string
82 | wantErr bool
83 | }{
84 | {
85 | name: "success",
86 | args: args{
87 | in: strings.NewReader("# Hello World"),
88 | },
89 | wantOut: "# Hello World\n",
90 | wantErr: false,
91 | },
92 | }
93 | for _, tt := range tests {
94 | t.Run(tt.name, func(t *testing.T) {
95 | out := &bytes.Buffer{}
96 | if err := FormatMarkdown(tt.args.in, out); (err != nil) != tt.wantErr {
97 | t.Errorf("FormatMarkdown() error = %v, wantErr %v", err, tt.wantErr)
98 | return
99 | }
100 | if gotOut := out.String(); gotOut != tt.wantOut {
101 | t.Errorf("FormatMarkdown() = %v, want %v", gotOut, tt.wantOut)
102 | }
103 | })
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/pkg/md/testdata/.hello.md:
--------------------------------------------------------------------------------
1 | # hello
--------------------------------------------------------------------------------
/pkg/md/testdata/hello-correct.md:
--------------------------------------------------------------------------------
1 | # hello
2 |
--------------------------------------------------------------------------------
/pkg/md/testdata/hello-more.md:
--------------------------------------------------------------------------------
1 | # hello
2 | > hello
3 |
4 | |name|age|
5 | |--|--|
6 | |Mike|18|
--------------------------------------------------------------------------------
/pkg/md/testdata/hello.markdown:
--------------------------------------------------------------------------------
1 | # hello
--------------------------------------------------------------------------------
/pkg/md/testdata/hello.md:
--------------------------------------------------------------------------------
1 | # hello
--------------------------------------------------------------------------------
/pkg/md/testdata/hello.txt:
--------------------------------------------------------------------------------
1 | # hello
--------------------------------------------------------------------------------
/pkg/merrors/merrors.go:
--------------------------------------------------------------------------------
1 | package merrors
2 |
3 | type CrashError interface {
4 | error
5 | Stack() string
6 | ErrorWithStack() string
7 | }
8 |
9 | type crash struct {
10 | err error
11 | stack string
12 | }
13 |
14 | func (p *crash) Error() string {
15 | return p.err.Error()
16 | }
17 |
18 | func (p *crash) Stack() string {
19 | return p.stack
20 | }
21 |
22 | func (p *crash) ErrorWithStack() string {
23 | return p.Error() + "\n" + p.Stack()
24 | }
25 |
26 | func NewCrash(err error, stack string) CrashError {
27 | return &crash{
28 | err: err,
29 | stack: stack,
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/pkg/version/.gitignore:
--------------------------------------------------------------------------------
1 | z_update_version.go
2 |
--------------------------------------------------------------------------------
/pkg/version/api.go:
--------------------------------------------------------------------------------
1 | package version
2 |
3 | func ReleaseVersion() string {
4 | return info.ReleaseVersion
5 | }
6 |
7 | func String() string {
8 | return info.String()
9 | }
10 |
11 | func ShortString() string {
12 | return info.ShortString()
13 | }
14 |
15 | func JSON() string {
16 | return info.JSON()
17 | }
18 |
19 | func YAML() string {
20 | return info.YAML()
21 | }
22 |
--------------------------------------------------------------------------------
/pkg/version/scripts/gen.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "io/ioutil"
6 | "log"
7 |
8 | "github.com/elliotxx/mdfmt/pkg/version"
9 | )
10 |
11 | func main() {
12 | versionInfo, err := version.NewInfo()
13 | if err != nil {
14 | log.Fatal(err)
15 | }
16 |
17 | data := makeUpdateVersionGoFile(versionInfo)
18 |
19 | err = ioutil.WriteFile("../z_update_version.go", []byte(data), 0o666)
20 | if err != nil {
21 | log.Fatalf("ioutil.WriteFile: err = %v", err)
22 | }
23 |
24 | fmt.Println(versionInfo.String())
25 | }
26 |
27 | func makeUpdateVersionGoFile(v *version.Info) string {
28 | return fmt.Sprintf(`// Auto generated by 'go run gen.go', DO NOT EDIT.
29 |
30 | package version
31 |
32 | func init() {
33 | info = &Info{
34 | ReleaseVersion: %q,
35 | GitInfo: &GitInfo{
36 | LatestTag: %q,
37 | Commit: %q,
38 | TreeState: %q,
39 | },
40 | BuildInfo: &BuildInfo{
41 | GoVersion: %q,
42 | GOOS: %q,
43 | GOARCH: %q,
44 | NumCPU: %d,
45 | Compiler: %q,
46 | BuildTime: %q,
47 | },
48 | }
49 | }
50 | `,
51 | v.ReleaseVersion,
52 | v.GitInfo.LatestTag,
53 | v.GitInfo.Commit,
54 | v.GitInfo.TreeState,
55 | v.BuildInfo.GoVersion,
56 | v.BuildInfo.GOOS,
57 | v.BuildInfo.GOARCH,
58 | v.BuildInfo.NumCPU,
59 | v.BuildInfo.Compiler,
60 | v.BuildInfo.BuildTime,
61 | )
62 | }
63 |
--------------------------------------------------------------------------------
/pkg/version/types.go:
--------------------------------------------------------------------------------
1 | //go:generate go run gen.go
2 | //go:generate go fmt
3 |
4 | package version
5 |
6 | import (
7 | "encoding/json"
8 | "fmt"
9 | "runtime"
10 | "runtime/debug"
11 | "time"
12 |
13 | "gopkg.in/yaml.v3"
14 |
15 | goversion "github.com/hashicorp/go-version"
16 |
17 | git "github.com/elliotxx/gulu/gitutil"
18 | )
19 |
20 | var info = NewMainOrDefaultVersionInfo()
21 |
22 | func NewMainOrDefaultVersionInfo() *Info {
23 | v := NewDefaultVersionInfo()
24 |
25 | if i, ok := debug.ReadBuildInfo(); ok {
26 | mod := &i.Main
27 | if mod.Replace != nil {
28 | mod = mod.Replace
29 | }
30 |
31 | if mod.Version != "(devel)" {
32 | v.ReleaseVersion = mod.Version
33 | }
34 | }
35 |
36 | return v
37 | }
38 |
39 | func NewDefaultVersionInfo() *Info {
40 | return &Info{
41 | ReleaseVersion: "default-version",
42 | BuildInfo: &BuildInfo{
43 | GoVersion: runtime.Version(),
44 | GOOS: runtime.GOOS,
45 | GOARCH: runtime.GOARCH,
46 | NumCPU: runtime.NumCPU(),
47 | Compiler: runtime.Compiler,
48 | BuildTime: time.Now().Format("2006-01-02 15:04:05"),
49 | },
50 | }
51 | }
52 |
53 | // Info contains versioning information.
54 | // following attributes:
55 | //
56 | // ReleaseVersion - "vX.Y.Z-00000000" used to indicate the last release version,
57 | // containing GitVersion and GitCommitShort.
58 | type Info struct {
59 | ReleaseVersion string `json:"releaseVersion" yaml:"releaseVersion"` // Such as "v1.2.3-3836f877"
60 | GitInfo *GitInfo `json:"gitInfo,omitempty" yaml:"gitInfo,omitempty"`
61 | BuildInfo *BuildInfo `json:"buildInfo,omitempty" yaml:"buildInfo,omitempty"`
62 | }
63 |
64 | // GitInfo contains git information.
65 | // following attributes:
66 | //
67 | // GitLatestTag - "vX.Y.Z" used to indicate the last git tag.
68 | // GitCommit - The git commit id corresponding to this source code.
69 | // GitTreeState - "clean" indicates no changes since the git commit id
70 | // "dirty" indicates source code changes after the git commit id
71 | type GitInfo struct {
72 | LatestTag string `json:"latestTag,omitempty" yaml:"latestTag,omitempty"` // Such as "v1.2.3"
73 | Commit string `json:"commit,omitempty" yaml:"commit,omitempty"` // Such as "3836f8770ab8f488356b2129f42f2ae5c1134bb0"
74 | TreeState string `json:"treeState,omitempty" yaml:"treeState,omitempty"` // Such as "clean", "dirty"
75 | }
76 |
77 | type BuildInfo struct {
78 | GoVersion string `json:"goVersion,omitempty" yaml:"goVersion,omitempty"`
79 | GOOS string `json:"GOOS,omitempty" yaml:"GOOS,omitempty"`
80 | GOARCH string `json:"GOARCH,omitempty" yaml:"GOARCH,omitempty"`
81 | NumCPU int `json:"numCPU,omitempty" yaml:"numCPU,omitempty"`
82 | Compiler string `json:"compiler,omitempty" yaml:"compiler,omitempty"`
83 | BuildTime string `json:"buildTime,omitempty" yaml:"buildTime,omitempty"` // Such as "2021-10-20 18:24:03"
84 | }
85 |
86 | func NewInfo() (*Info, error) {
87 | var (
88 | isHeadAtTag bool
89 | headHash string
90 | headHashShort string
91 | latestTag string
92 | gitVersion *goversion.Version
93 | releaseVersion string
94 | isDirty bool
95 | gitTreeState string
96 | err error
97 | )
98 |
99 | // Get git info
100 | if headHash, err = git.GetHeadHash(); err != nil {
101 | return nil, err
102 | }
103 |
104 | if headHashShort, err = git.GetHeadHashShort(); err != nil {
105 | return nil, err
106 | }
107 |
108 | if latestTag, err = git.GetLatestTag(); err != nil {
109 | return nil, err
110 | }
111 |
112 | if gitVersion, err = goversion.NewVersion(latestTag); err != nil {
113 | return nil, err
114 | }
115 |
116 | if isHeadAtTag, err = git.IsHeadAtTag(latestTag); err != nil {
117 | return nil, err
118 | }
119 |
120 | if isDirty, err = git.IsDirty(); err != nil {
121 | return nil, err
122 | }
123 |
124 | // Get git tree state
125 | if isDirty {
126 | gitTreeState = "dirty"
127 | } else {
128 | gitTreeState = "clean"
129 | }
130 |
131 | // Get release version
132 | if isHeadAtTag {
133 | releaseVersion = gitVersion.Original()
134 | } else {
135 | releaseVersion = fmt.Sprintf("%s-%s", gitVersion.Original(), headHashShort)
136 | }
137 |
138 | return &Info{
139 | ReleaseVersion: releaseVersion,
140 | GitInfo: &GitInfo{
141 | LatestTag: gitVersion.Original(),
142 | Commit: headHash,
143 | TreeState: gitTreeState,
144 | },
145 | BuildInfo: &BuildInfo{
146 | GoVersion: runtime.Version(),
147 | GOOS: runtime.GOOS,
148 | GOARCH: runtime.GOARCH,
149 | NumCPU: runtime.NumCPU(),
150 | Compiler: runtime.Compiler,
151 | BuildTime: time.Now().Format("2006-01-02 15:04:05"),
152 | },
153 | }, nil
154 | }
155 |
156 | func (v *Info) String() string {
157 | return v.YAML()
158 | }
159 |
160 | func (v *Info) ShortString() string {
161 | return fmt.Sprintf("%s; git: %s; build time: %s", v.ReleaseVersion, v.GitInfo.Commit, v.BuildInfo.BuildTime)
162 | }
163 |
164 | func (v *Info) JSON() string {
165 | data, err := json.MarshalIndent(v, "", " ")
166 | if err != nil {
167 | return ""
168 | }
169 |
170 | return string(data)
171 | }
172 |
173 | func (v *Info) YAML() string {
174 | data, err := yaml.Marshal(v)
175 | if err != nil {
176 | return ""
177 | }
178 |
179 | return string(data)
180 | }
181 |
--------------------------------------------------------------------------------